writeonce/.claude/agents/README.md
shoney.arickathil 79352bd95c docs(agents): the persona roster — codd/fielding/ada families, lintor, README
- database-developer becomes `codd`: scope is the whole embedded DB (engine,
  runtime seams, the compiler's @table/query surface); doctrine rewritten
  from what landed (fatal commit, group commit per drain, checkpoint by
  rename, delta fold, schema head, v8 table bit, no-WO_DATA refusal); file
  map with anchors; state as of 2026-09-11; architect only — no gates, no
  tests, names the checks for cyril and the tasks for zack
- one four-role pattern shared by three tracks: `<architect>` brainstorms
  and owns contracts, `-zack` implements ONE ready iteration with a
  resume-safe ledger under .dev/zack/, `-cyril` owns every test above unit
  level and the gate ladder, `-pm` keeps stories, board and graph truthful
  (`model: sonnet`); families codd (database), fielding (porch), ada (jarvis)
- `codd-shoney` is the developer's proxy: brainstorms `refine` stories to
  `ready`, reviews `review_pending` forks; `lintor` the kernel consultant
  over .dev/reference/linux
- README: roster (reads, gates), the families rule, proposed agents not yet
  written and the order to add them
- docs/guides/codd-subagent.md, 00-doc-audit.md, 08-project-structure.md
  follow the rename

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 830bbb16d5dd990478149678c642857bb65466f4)
2026-09-15 01:16:24 +02:00

62 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# `.claude/agents` — project agents for Claude Code
Committed, shared with the team (unlike `.dev/`, which is developer-local).
One file per agent: YAML frontmatter (`name`, `description` = when the main
thread should delegate, `tools`), then the system prompt. Keep each prompt
to doctrine + file map + gates + report format — the agent reads code for
the rest.
## Roster
| Agent | Role | Reads | Gates |
| --- | --- | --- | --- |
| `codd` | the embedded DB end to end: engine under `database/src` (WAL, group commit, checkpoint, keys-resident, migrations), DB seams in `runtime/src` (`.wob` v8 table bit, no-`WO_DATA`/`WO_EPHEMERAL` refusals), `@table`/query surface in `compiler/src` | `database/src/CODE-LOGIC.md`, `docs/plan/oop-vm/04-db-binding.md`, query spec `2026-08-15-table-relations-query-design.md`, `.dev/reference/{postgresql,dotnet-runtime}` | none run directly — brainstorms, owns contracts, reviews, names the checks; `codd-cyril` runs the ladder |
| `codd-shoney` | the developer's proxy for database design: brainstorms a `refine` databasev2 iteration to `ready` (forks enumerated, options grounded in code + references, KISS pick with reason, recorded in Info) and reviews `review_pending` forks — approve / amend / reject with evidence, clears or reopens the flag; docs-only, story decision sections | `codd.md`, the story + spec/plan, `.dev/reference/*`, `.dev/zack/*.md`, `.dev/skills/superpowers/brainstorming.md` | none (asks cyril for counts) |
| `codd-zack` | implementer for ONE `ready` database iteration: task list → failing test → code → unit + corpus gates, with a resume-safe ledger in `.dev/zack/<track>-<n>.md`, one local commit per green task (`type(db2-n): …`, bullets, ≤25 lines, on `dev`, never push); no example gates, no story/board/README edits — codd closes from the ledger | `.claude/agents/codd.md`, the story + its plan/spec, the ledger | `make -C runtime test`, `just woc-test` when compiler touched (unit level only) |
| `codd-pm` | project manager for the database tracks: reconciles story frontmatter, Progress tables, acceptance criteria, dependency graph §8, status board (standup entry, In-progress, Active slice, NEXT PLAN), discarded.md and story FORMAT against code, git log and zack's ledgers; surfaces forks, proposes cherry-picks; docs-only commits | `.claude/agents/codd.md`, code + `git log`, `.dev/zack/*.md`, the stories/board/graph | `just linkcheck` (read-only verification otherwise) |
| `codd-cyril` | test + benchmark engineer for the database tracks: corpus fixtures, `scripts/*-accept.sh` for database programs, `db-bench.py` legs + `bench/baseline.json`, crash/oracle batteries, sanitizer campaigns, example README run instructions; runs the gate ladder, classifies every red, hands failing checks to zack and bugs to pm; test/perf commits | `.claude/agents/codd.md`, zack's ledger, `docs/plan/perf-targets.md` | the whole ladder: `make -C runtime test` → `just woc-test` → `just oop-e2e` → `just residency` → `employee-accept.sh` → `just db-actor` → `just db-bench-quick` → consumers (`chat`, `wmux`, `web-app`, `site`) |
| `fielding` | architect + reviewer for porch (the .wo web framework): locks forks for porch 2–9, owns the README status ledger and specs, reviews .wo diffs against the language limits, names checks/tasks | `docs/examples/porch`, `docs/stories/porch`, `.dev/reference/{fiber,mcp-python-sdk,go}` | none run directly |
| `fielding-zack` | implementer for ONE ready porch iteration, phase by phase, ledger `.dev/zack/porch-<n>.md`, one commit per green task (`feat(porch<n>-slug)`) | `fielding.md`, the story + spec/plan | framework + consumer build, `just oop-e2e` when a fixture is added |
| `fielding-cyril` | test engineer for porch: `web-app`/`site`/`chat`/`deps` gate matrices, corpus fixtures, consumer README commands; failing-first rows, red classification | `fielding.md`, zack's ledger | `just woc-test` → `just oop-e2e` → `just deps-accept` → `just web-app` → `just chat` → `just site` |
| `fielding-pm` | PM for porch: story axes, phase tables, README status ledger, graph §7 P-nodes, board; format pass; docs-only commits | `fielding.md`, code + `git log`, ledgers | `just linkcheck` |
| `ada` | architect + reviewer for jarvis (the AI assistant, a porch app): story 1–3 forks, the LLM adapter boundary, stub-server spec; design-only until porch completes | `docs/stories/jarvis`, `.dev/reference/{mcp-python-sdk,llama-cpp}` | none run directly |
| `ada-zack` | implementer for ONE ready jarvis iteration against ada-cyril's stub LLM; refuses phases whose porch dependency is unbuilt; ledger `.dev/zack/jarvis-<n>.md`; commits `feat(jarvis<n>-slug)` | `ada.md`, the story | app build + scripted request vs stub, `just oop-e2e` |
| `ada-cyril` | test engineer for jarvis: the local stub LLM server, `scripts/jarvis-accept.sh` + `just jarvis` (prompt → stream → durable history → restart; disconnect, slow tokens, missing key), no network ever | `ada.md`, zack's ledger | `just woc-test` → `just oop-e2e` → `just web-app` → `just jarvis` |
| `ada-pm` | PM for jarvis: story axes, phase tables, Dependencies re-verified against porch frontmatter, graph §7 J-nodes, board; docs-only commits | `ada.md`, porch stories, ledgers | `just linkcheck` |
| `lintor` | Linux kernel expert; syscall semantics, uapi layouts, kernel floors; audits `park.c`/`sysio.c`/`main.c`; writes primitive cards | `.dev/reference/linux` (v7.0), `docs/plan/exploration/linux/` | `just fibers` (both `WO_IO` backends), `just subprocess`, `just wmux` |
## Families
Three tracks share one four-role pattern, so a prompt learned once works everywhere:
`<architect>` brainstorms, locks forks, owns contracts, reviews, names checks and tasks;
`<architect>-zack` implements ONE ready iteration with a resume-safe ledger under
`.dev/zack/` and one commit per green task; `<architect>-cyril` owns every test above
the unit level and runs the gate ladder; `<architect>-pm` keeps stories, board, graph
and story format truthful (`model: sonnet` by default — reconciliation work, not
design). Role files read their architect file first, so doctrine
lives in one place per track: `codd` (database), `fielding` (porch), `ada` (jarvis).
A fifth, optional role `<architect>-shoney` is the developer's proxy: brainstorms `refine`
stories to `ready` and reviews `review_pending` forks (only it and the developer clear that
key). Exists for databasev2 today. `lintor` is a cross-track consultant.
## Proposed — not yet written
Each line is one agent; the cut follows the repo's own seams (tracks in
`docs/stories/`, source folders, `.dev/reference/` study trees). Add one
only when a task keeps landing in that seam; a prompt nobody delegates to
is dead weight.
| Agent | Seam | Reads | Gates | Why a separate agent |
| --- | --- | --- | --- | --- |
| `runtime-developer` | VM core: `vm.c`, `gc.c`, `borrow.c`, `cont.c`, `obj.c`, `loader.c`; fibers, shard actors, mailboxes, park plane | `runtime/src/CODE-LOGIC.md`, `docs/plan/exploration/fibers/`, `.dev/reference/go/src/runtime/` (netpoll, proc) | `make -C runtime test` (ASan + TSan), `just fibers`, `just chat`, `just wovm-test` | Largest C surface; doctrine (ownership moves, no locks, drain guarantee) differs from the DB engine's |
| `compiler-developer` | OCaml `woc`: `compiler/src/{lexer,parser,types,owner,gcinfer,emit,diag}.ml`, golden fixtures | `compiler/src/CODE-LOGIC.md`, `docs/plan/oop-vm/`, `.dev/reference/llvm-project/clang/lib/{Lex,Parse,Sema}` for layering + diagnostics | `just woc-build`, `just woc-test` (golden + `test_diag`) | Different language, different test shape (golden files, `WO-E` diagnostics), open bugs like self-field concat-assign |
| `porch-developer` | (realised as the `fielding` family) the web framework in `.wo`: `use porch`, iterations porch 1–9 (cookies, sessions, CSRF, routing, streaming, SSE, static, replay) | `docs/stories/porch/`, `docs/examples/{porch,web-app,site}`, `.dev/reference/mcp-python-sdk` for streamable HTTP | `just web-app`, `just site`, `just deps-accept` | Writes writeonce, not C; must know builtin ids and language limits (no function values, no reflection) |
| `wmux-developer` | the terminal multiplexer: `docs/examples/wmux`, wmux iterations 1–23, WAL-persisted Window/Sess/Vte actors | `docs/stories/wmux/`, `.dev/reference/{tmux,alacritty,zen-browser}` parity studies | `just wmux` (real PTY harness) | Parity-driven against tmux; PTY/termios questions go to `lintor`, escape-sequence semantics to alacritty's `vte` |
| `crypto-reviewer` | adversarial review only of `tls.c`, `crypto.c`: constant-time paths, RFC 8448 vectors, X.509 chain/hostname, RSA-PSS / ECDSA nonce | `runtime/test/*_vectors.h`, RFCs 8446/8448/6979/6125, `.dev/reference/cryptography-06-00030.pdf` | `make -C runtime test` (`test_tls`, `test_crypto`), `just tls`, `just tls-server` | Hand-rolled crypto needs a reviewer that never implements; read-only tools |
| `story-steward` | (database tracks now covered by `codd-pm`; this row is the whole-project version) docs discipline: story frontmatter (`iteration`/`status`/`readiness`/`track`), `docs/stories/00-status.md` standup entry, dependency graph, commit-history table, `CODE-LOGIC.md` beside code, `discarded.md` | `docs/stories/`, `docs/00-*.md`, `.dev/reference/README.md` | `just linkcheck` | Every landed change must update the board the same commit; a dedicated agent keeps iteration numbers unique and status out of folder names |
| `postgres-expert` | sibling of `lintor` for `databasev2`: WAL, smgr/md, bufmgr, checkpointer, fsync policy | `.dev/reference/postgresql/src/backend/{access/transam,storage}`, `docs/plan/exploration/postgresql/` | none — consultant | Same shape as `lintor`: cite source, never port code (zero-dep doctrine) |
| `gopher` | sibling of `lintor` for the scheduler: Go's netpoll, `proc.go`, work stealing, `sysmon` | `.dev/reference/go/src/runtime/`, `.dev/reference/Scalable_work_stealing.pdf`, `docs/plan/exploration/assembly/` | none — consultant | writeonce mirrors Go's file-per-flavour runtime layout; asm policy already cites this tree |
Order to add, if all are wanted: `runtime-developer` and `compiler-developer`
first (most code lands there), then `porch-developer` (current track), then
the rest as their tracks reopen.