CLEO is the work, evidence, memory and docs layer for AI coding agents. Agents
(and you) drive it through one CLI, cleo <command>, and every call returns a
single JSON envelope on stdout, so any agent harness can read it. CLEO keeps
each change traceable from task to pull request to release, demands evidence
before a task counts as done, remembers what was learned across sessions, and
keeps documentation from rotting. CLEO is not an agent harness: any agent can
call it and any project can integrate it.
| Area | What you get | Start with |
|---|---|---|
| Tasks | Sagas, epics and tasks with acceptance criteria, dependencies and ready waves; sessions that survive interruptions | cleo add, cleo next, cleo focus <id> |
| Evidence | A task is done only when its gates are proven: commits and files, CI or test runs, lint and typecheck, linked to each acceptance criterion | cleo done <id> --plan |
| Pull requests | A PR names its tasks (Closes: T#### AC1,AC2); an independent reviewer records a verdict per criterion; merging on green CI closes the task |
cleo done --from-merge <pr> --dry-run, cleo review packet |
| Docs | One canonical home per doc, stable names, published mirrors and drift checks (see below) | cleo docs query, cleo docs update |
| Memory (BRAIN) | Observations, decisions and lessons kept across sessions and searchable | cleo memory observe, cleo memory find, cleo briefing |
| Code intelligence (Nexus) | A symbol graph of your repo: callers, blast radius, impact before you edit | cleo nexus analyze, cleo nexus impact <symbol> |
| Release | One command tags the newest commit on main with green CI and publishes from changesets | cleo release cut <version> --dry-run |
| Multi-agent work | A lead splits an epic into waves and spawns workers in any harness; each worker gets its own worktree and session binding. AgentMBX is the messaging layer between agents: --lead-mbx names the lead's mailbox, which tier 1 and 2 prompts carry in their coordination block and a tier 0 prompt carries only when orchestrate.leadWorker.v1 is on |
cleo orchestrate start <epic>, cleo orchestrate spawn <task> |
Run cleo <command> --help for the full flags of any command.
npm install -g @cleocode/cleo
cd your-project
cleo init
cleo session start --scope global --name "first session"
# Work is a tree: a saga at the root, epics under it, tasks under those.
cleo saga create --title "Ship the auth hardening" --acceptance "login is rate limited|sessions expire"
cleo add "Auth hardening" --type epic --parent T001 --acceptance "rate limit shipped|session expiry shipped"
cleo add "Rate-limit the login endpoint" --parent T002 \
--acceptance "returns 429 after 5 failed attempts|a test covers the limit"
cleo next # what to work on
cleo focus T003 # identity, blockers, docs and memory for one taskThen do the work and close it.
- With a pull request (the normal path): work on a branch, open a PR whose
body says
Closes: T003 AC1,AC2, check it withcleo done --from-merge <pr> --dry-run, get a per-criterion review (cleo review packet <pr> --task T003, thencleo review verdict), and merge on green CI. The merge sweep records the evidence and closes the task. - Without a pull request:
cleo done T003 --plannames the evidence each gate needs; record it withcleo verify, thencleo complete T003.
Finish with cleo memory observe "<what you learned>" --title "<short title>"
and cleo session end --note "<handoff>". The next session starts with
cleo briefing.
AI agents write a lot of documentation, and most of it rots. An agent that cannot find the existing doc writes a new one; names carry task ids and dates; two copies drift apart; nobody can tell which one is current. After a few months the docs folder is a pile of near-duplicates that agents keep extending.
CLEO Docs fixes this at the source:
- One canonical home per doc. The store is the source of truth; files in
docs/are published mirrors. Find before you write (cleo docs query "<topic>"), and update the existing doc (cleo docs update <slug>) instead of adding a second one.cleo docs addis for genuinely new docs. - Stable names. Every doc name and slug is lowercase kebab-case with no
task id, session id or date; task and decision links live in metadata. A CI
gate (
cleo check canon docs) refuses new violators. - One kind per folder.
docs/adr,docs/spec,docs/plan,docs/research,docs/guide,docs/concept,docs/reference,docs/migration,docs/releaseanddocs/note. - Drift is visible.
cleo docs statuscompares each published mirror with the store,cleo docs rotflags docs whose covered code changed after them, andcleo docs doctorrepairs the store. - Messy folders can be migrated.
cleo docs modernize <folder>plans a kind, a stable name and keep/rename/merge/delete for every file, and applies it with a receipt you can roll back.
The how-to is docs/guide/cleo-documentation-sop.md.
The CLI is @cleocode/cleo; it depends on the rest. The main packages:
| Package | Purpose |
|---|---|
@cleocode/cleo |
The cleo command-line interface |
@cleocode/core |
The SDK: tasks, sessions, evidence, docs, memory, orchestration, release |
@cleocode/contracts |
Shared types and operation contracts |
@cleocode/lafs |
The JSON envelope format every call returns |
@cleocode/nexus |
Code intelligence and the cross-project registry |
@cleocode/caamp |
Provider registry and agent package management |
@cleocode/adapters |
Provider adapters (Claude Code, Codex, Cursor, Gemini, Kimi, OpenCode and more) |
@cleocode/skills |
The ct-* skills that teach agents how to use CLEO |
@cleocode/cant |
The CANT agent-definition language |
Requires Node.js >= 24.16.0 and pnpm.
git clone https://github.com/kryptobaseddev/cleo.git
cd cleo
pnpm install
pnpm run buildRepository rules (package boundaries, architecture gates, evidence) are in
AGENTS.md; see CONTRIBUTING.md to contribute.
Every change lands through a pull request that names its tasks; releases are
cut from main with cleo release cut.
If CLEO helps your workflow, consider supporting development:
MIT License - see LICENSE for details.
