AGENTS.md · git:20261001.5aa7b24 · 2026-10-01 · sha256 171a8e5f88828ce9
AGENTS.md git:20261001.5aa7b24A
Immutable. This exact content never changes and is served at /api/v1/blob/171a8e5f88828ce9.
# iterion — agent instructions
iterion: build, run and orchestrate agentic AI workflows, written in a DSL —
`.bot` files ([`pkg/dsl/workflowfile`](pkg/dsl/workflowfile/workflowfile.go)
owns the accepted extension) and `.botz` bundles. Go module
`github.com/SocialGouv/iterion`, MIT. This is the one instruction file every
session loads — Codex and pi natively, Claude Code through `CLAUDE.md`.
Everything else is read on demand from [the tree](docs/agents/README.md): open
the page your task names before you start. Automated bot runs follow their
`.bot` mission and never claim or open board tickets (**Work tracking** is for
interactive sessions).
## Find before you read
- **Exact** — where is X, who implements Y, what breaks if Z changes, A→B,
which bot or skill: `iterion map find|neighbours|impact|path`, or the
`local_map_*` tools of the iterion MCP server (`engine` in this repo's
`.mcp.json`); committed indexes in [`docs/references/`](docs/references/map-packages.md).
- **Semantic** — how does X work, which docs explain this code: graphify when
`graphify-out/` exists (MCP `query_graph`, CLI `graphify query "<q>"`) —
operator-local, so check its commit against HEAD ([graph](docs/agents/graphify.md)).
- Then read the few files they name.
## Setup and the gate you owe
- Tooling comes from devbox, never the host: `devbox run -- task <name>` (or
direnv); `task` lists every command ([development](docs/development.md)).
CLI map: [cli-reference](docs/cli-reference.md), [cloud-cli](docs/cloud-cli.md).
- `task check` — lint and the free deterministic layer (tests, goldens, studio,
pi extension, brand, DSL and map checks) — is owed by every session; CI also
runs `race`, `vendor-check` and `mongo-conformance`. The `live` layer costs
real LLM money and no CI job runs it: use it only when a real model alone can
prove the change, and say which target and what it cost ([proof discipline](docs/agents/testing.md#the-proof-discipline)).
## Non-negotiables
- **Review loop.** Every change lands through a PR whose `revi/review` gate is
green. Run a local adversarial round on the diff before every push: the
findings decide the next round, the diff size caps the budget, you fix the
findings (by hand or through another round), and commits that ship reviewed
work carry `Adversarial-Rounds:` / `Adversarial-Model:` trailers ([the loop](docs/agents/adversarial-review-loop.md),
[merge and gate](docs/agents/review-and-merge.md)).
- **Do not comment `/billy`** — the fixer is paused on this repo
([why, and the re-arm](docs/agents/review-and-merge.md#billy-is-paused)).
- **Never hand-edit `CHANGELOG.md`.** Bump `claw-code-go` only with
`scripts/bump-claw.sh`; it is first-party — improve it in its `.works/`
worktree when a seam crosses it, then bump.
- **`.bot` traps.** A tool node's `command:` runs under `bash -c`; a `script:`
with `language: sh` runs `sh`, so keep it POSIX ([pitfalls](docs/workflow_authoring_pitfalls.md#shell-portability-for-tool-nodes)).
A literal `{{` in a template is `{{"{{"}}` ([delimiters](docs/dsl.md#literal-template-delimiters)).
- **Conventions.** Tests: the standard `testing` package. CLI: Cobra, one file
per command in `cmd/iterion/`, output through `Printer` (`pkg/cli/output.go`).
Logs: `pkg/log`. Error tracking and tracing: extend `pkg/errtrack`, never a
second tracker. Run state lives in `.iterion/`.
- **Pay discoveries back.** Time spent finding out how something works lands in
the tree: the content in its page, one line in that page's index. A paragraph
that would grow this file belongs in the tree.
## Philosophy — [long form](docs/philosophy.md), read it before arguing with a rule
1. **Maximum power, no artificial limit.** A bound with no override is a
defect; a load-bearing limit keeps a greppable escape hatch; warn (C1xx)
rather than reject; never silently replace an operator's explicit choice.
2. **Modularity — the Nth-variant test.** A new capability implements an
existing seam (`NodeExecutor`, `delegate.Backend`, `tracker.Tracker`,
`pkg/forge`, `eventbus.Bus`, …); if the next variant would need an engine
`if`, build the seam.
3. **Cloud-native.** The same code runs single-process and multi-replica:
elected ownership, restart is normal, idempotent reconciliation; new
durable state ships its cloud twin in the same change.
4. **Git-native first** — the `.bot` as text, `worktree: auto`, the review
scope, the forge gate: never degraded; where git cannot serve, add a
parallel mechanism.
5. **Views are additive** — read models over execution and git, never a
second source of truth.
**Backend parity:** `claw` ↔ `claude_code` are interchangeable on a node; a
capability wired for one is wired, or typed-refused, for the other.
## Work tracking — interactive sessions
The [project board](https://github.com/orgs/SocialGouv/projects/203) is the
truth for ongoing work: every non-trivial task is an issue under an `epic:`,
as a sub-issue **and** through the `Epic` field ([mechanics](docs/board-epics.md)).
- **A — plan.** Start from the 🎯 Epics view, triage the Inbox, make statuses
true, pick the session's ticket and **claim** it (In progress + a timestamped
"claimed" comment naming the session). Never touch a ticket another session
claimed without the operator's arbitration. Work found mid-session becomes an
issue under an epic.
- **B — dev.** First ask whether a catalog bot can do it and propose that
([dogfood](docs/agents/dogfood.md)), never impose it; otherwise code directly.
- **C — close.** Link the evidence (PR, commit, bilan), update the status and
release the claim: Done, or Planned with a state-of-work comment. An In
progress ticket nobody holds is a board bug — fix it.
## The tree
[docs/agents/](docs/agents/README.md) — one line per page, with when to read it.