<p align="center"><img src="docs/assets/hero.png" width="100%" alt="codeality turns chaotic AI-generated code into small, clean files"></p>
<h1 align="center">codeality</h1>
<p align="center"><b>A++ clean code from your AI agents. Zero effort for you. Fewer tokens for them.</b></p>
<p align="center">
Your agent writes fast. codeality makes it write <i>clean</i>: one unit per file,
no hidden helpers, no inline types, duplication under 1%, no dead exports, no
import cycles - enforced by gates whose messages tell the agent what to fix.
You decide the rules once; the agent does the fixing.
</p>
<p align="center">
<a href="https://www.npmjs.com/package/eslint-plugin-code-policy"><img src="https://img.shields.io/npm/v/eslint-plugin-code-policy?label=code-policy" alt="eslint-plugin-code-policy on npm"></a>
<a href="https://pypi.org/project/syntopica-codeality-py/"><img src="https://img.shields.io/pypi/v/syntopica-codeality-py?label=python" alt="syntopica-codeality-py on PyPI"></a>
<a href="./LICENSE"><img src="https://img.shields.io/github/license/syntopica/codeality" alt="MIT license"></a>
</p>
pnpm dlx @syntopica/create-baseline --write # add the missing gate config and scripts
pnpm dlx @syntopica/create-baseline --soft # print the install line for what is missing
pnpm check:ci && pnpm check:quality # then hand these two to your agent
Existing config files and script values are kept: --write adds the files that
are missing and adds missing scripts to package.json.
The problem
AI agents ship code that works and drifts. Session after session they:
- pile a component, its hook, its types and three helpers into one 900-line
file;
- copy a block that already exists two folders away;
- leave exports nobody imports;
- reach for
any when a type gets in the way.
Each change is small and each one passes review, so the structure you agreed on
erodes without anyone deciding to give it up. In a measured chain of twenty
changes, an