Files
clawmates/docs/TEMPLATE-MATURITY.md
T
Omar SobhandClaude Opus 5.5 a260499060
deploy / build (push) Canceled after 0s
deploy / test (push) Canceled after 4m16s
docs: continuous_improvement runs honestly and cannot reach its subject
Its first run separated running from working. All three roles handed off
with attributed commits; it filed zero level-up proposals, committed "no
proposals warranted, evidence base too thin", and opened its audit by
naming the problem exactly: no .brain is accessible from the mission
filesystem because brains are held in the platform.

That is structural. The template's subject is every agent's .brain,
which lives in the server's /data/brains volume, and nothing delivers
brains into a mission — the same defect class as research and skills
having had no delivery channel. It audited the only agent-shaped thing in
reach, a ROSTER.md in the scratch repo, and read a guest kernel version
as an agent version. Not counted as evidenced.

A channel alone would not fix it: per-mission crews carry ~2 KB seed
brains with no history, because missions write memory to the repo brain.
The template assumes long-lived agents; the platform makes disposable
ones. Recorded as a design decision, not patched.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01WZb5A2kfVfjpdwSochkuHz
2026-09-22 15:22:56 -05:00

179 lines
10 KiB
Markdown

# Template maturity — what our agents can actually be asked to do
A review of the 6 workflow recipes and 12 team templates, on 2026-09-22.
Graded by evidence, not by what the TOML declares: a recipe is mature when a
mission built from it has completed and something checked the result.
## Workflow recipes
| recipe | phases | standing check | staffing | grade |
|---|---|---|---|---|
| `research_and_code` | 2 (research → coding) | **13 harness scenarios** | research→`topic_research`, coding→`rust_sdlc` | **Proven** |
| `research_only` | 1 (research, repo-less) | 2 scenarios | `topic_research` | **Proven** |
| `security_hardening` | 3 (scan → research → coding) | 1 scenario | +`rust_sdlc` | Exercised |
| `benchmark` | 1 | 1 scenario | `rust_sdlc` | Exercised |
| `refactor` | 1 | 1 scenario | `rust_sdlc` | Exercised |
| `continuous_research` | 2 (analysis → script) | **none** | `continuous_research` | Runs live, unguarded |
`research_and_code` is the workhorse: every delivery, gate, judge, memory and
triage scenario is built on it, so it is re-proven on every harness run.
`research_only` earned its grade differently — its staffing was **measured and
corrected**: under the old `rust_sdlc` default it delivered 5 roles, 14 skill
deliveries and ~50 KB of prompt with **1 of 9** skills applicable; on
`topic_research` it is 3 roles, 4 deliveries, 24 KB, **4 of 4**.
`continuous_research` is the outlier and the one to fix first. It has the most
moving parts of any recipe — harvest → triage → manifest → analysis → ranking
→ script → `episode.json` → vault commit — it ran twice today and produced
real output both times, and **nothing in the harness would notice if it broke
tomorrow.** Every other recipe has a standing check; this one has operator
attention, which is not the same thing.
## What the recipes declare that does not fire
`phase_config::DECLARED_BUT_UNREAD` is the honest list, and recipes lean on it:
| key | used by | status |
|---|---|---|
| `loop` | `research_and_code` (`until_no_more_int_items`), `refactor` (`single_pass`) | **inert** — iteration is `max_iterations` + `done_when` |
| `produces` | almost every recipe (`["md"]`) | **inert** — artifact rendering is not driven by it |
| `input_from_phase` | `security_hardening` | **inert** — phases share a checkout |
| `mcp_bundles` (phase level) | `security_hardening` | **inert** — bundles come from the TEAM template |
None of this is hidden: `security_hardening.toml` carries a "what is real here
and what is decoration" section and annotates its own dead keys inline. That is
the right pattern and the other five should copy it. The risk is not the dead
keys themselves — it is that a reader takes `loop = "until_no_more_int_items"`
for a loop.
## Team templates
All 12 are structurally sound and **every declared skill resolves to a real
file — 0 unbound across all of them**, which is the `skill-binding-repair` work
holding (it was 55 of 85 dangling once).
| team | slots | risk profile | skills | evidenced? |
|---|---|---|---|---|
| `rust_sdlc` | planner coder tester reviewer committer | coding_readwrite | 19 | **yes** — harness default |
| `topic_research` | lead_researcher evidence_checker report_writer | research_web_readonly | 4 | **yes** — measured |
| `continuous_research` | paper_reader signal_ranker script_writer | research_readonly | 11 | **yes** — live runs |
| `backend` | api_designer db_engineer coder tester committer | coding_readwrite | 20 | **yes** — first run 2026-09-22 |
| `frontend` | designer coder tester committer | coding_readwrite | 12 | no |
| `mobile` | designer coder tester committer | coding_readwrite | 11 | no |
| `gpu` | arch_analyst kernel_author bench_engineer coder committer | coding_readwrite | 13 | no |
| `threejs` | scene_designer coder shader_author perf_engineer committer | coding_readwrite | 13 | no |
| `codebase_research` | code_archeologist architecture_mapper flow_tracer vault_scribe | research_readonly | 11 | **yes** — first run 2026-09-22 |
| `papers_research` | domain_scout paper_reader library_curator | research_web_readonly | 8 | **yes** — first run 2026-09-22 |
| `insight_research` | implementation_tracker novelty_hunter publication_drafter | research_readonly | 8 | no |
| `continuous_improvement` | brain_inspector improvement_proposer improvement_evaluator | research_readonly | 7 | **runs, cannot reach its subject** |
**Six of twelve are evidenced.** `backend` was exercised on 2026-09-22,
the first time anything had been staffed from it: all five roles
provisioned with real agents (api_designer, db_engineer, coder, tester,
committer), and the mission delivered cursor pagination — `Paged<T>`,
`paginate<T: Clone>`, module declared, `cargo test` 3 passed — judged
**met on the first pass**, 2 files pushed. It also gave the task-permission
shadow its first confirmed `Edit` call.
`codebase_research` was exercised the same day, against the real
`clawmates` repository rather than the toy scratch crate, with a task that
cannot be faked from filenames: trace every hop of a mission agent's tool
call from the guest hook to the recorded event, naming file, function and
whether each hop runs in the guest or on the host. It produced a 189-line
`research/GATE-MAP.md` describing code committed **the same day** — the
four-field `NODE_EXTRACT` including `agent_type`, the shadow-mode
`would-deny.jsonl` semantics, `install_with` — and **all six of its line
citations verify exactly** (`hook_script_with` 562, `NODE_EXTRACT` 789,
`TaskPolicy` 297, `ROLE_POLICIES` 261, `settings_hook` 809,
`install_command_with` 819). Nothing hallucinated. **Five of twelve.**
`papers_research` followed: asked for a bounded library on microVM and
sandbox isolation for agents, it delivered a README index and four notes
with complete frontmatter, judged met. The judge could only check the
frontmatter was *present*; a paper team whose container has no
pdf-to-text tool is exactly where invented citations live, so every
arXiv id was checked against arXiv itself — **all four exist, with exact
title matches**. One of them, `2603.02277` (SandboxEscapeBench), is a paper
the operator's own research pass had already cited, which is independent
evidence it found on-topic work rather than plausible filler. **Six of
twelve.**
`continuous_improvement` ran too, and gets a different grade, because
running and working came apart. All three roles handed off with
attributed commits, and it was scrupulously honest: it filed **zero**
level-up proposals, its proposer committed *"no proposals warranted,
evidence base too thin"*, and its audit opens by stating the problem
exactly — *"No `.brain` files are accessible within the repo or mission
filesystem — brains are held in the platform, not checked in."*
That is the defect, and it is structural rather than a matter of data.
The template's subject is "every project agent's `.brain`"; those live in
the server's `/data/brains` volume, and **nothing delivers them into a
mission** — the same shape as `research-has-no-delivery-channel` and
`skills-had-no-delivery-channel`. So it audited the only agent-shaped
thing in reach, a `ROSTER.md` in the scratch repo, and read that file's
`6.1.128` (a guest kernel version) as an agent version, having no way to
know better. It is not counted as evidenced.
A channel alone would not rescue it. Mission crews are minted per mission
(reuse is off by decision), and missions write memory to the *repo* brain,
so every agent brain is a ~2 KB seed with no history to audit. The
template assumes long-lived agents that accumulate a record; the platform
makes disposable ones. That is a design decision to resolve, not a bug to
patch.
**Two of the remaining six are still unevidenced**, and the other four
are blocked on a target stack. The other nine are well-formed scaffolding:
roles, prompts, brain seeds and resolving skills, and no run behind any of
them. They will probably work — they are structurally identical to the three
that do — but "probably" is the word, and this codebase has a name for the gap
between a thing being wired and a thing being proven.
Five of the nine need something we do not have: `frontend`, `mobile`,
`threejs` and `gpu` target stacks with no repository in the harness to point
them at, and `insight_research` needs a vault plus commit history. Those are
blocked on a target, not on the template. The remaining four —
`codebase_research`, `papers_research`, `continuous_improvement`, `backend`
could be exercised against repositories we already have.
## One thing both runs showed: agents reach for Bash
Cumulative tool calls across every mission since the policy shipped:
**Bash 74, Read 34, Write 15, Glob 3, Edit 1, Agent 1**. A read-only
mapping mission that could have used `Grep` and `Glob` used `Bash` 33
times and `Read` 5. That matters for task permission: the allowlist's
dedicated-tool entries (`Grep`, `ToolSearch`, `WebFetch`, `TodoWrite`)
may simply never be exercised, so "unconfirmed by a real run" will not
converge for them — and it means the surface that actually needs
governing is `Bash`, which the floor rules already cover.
## What this means we can ask for today
**With confidence:** a repo-backed research→code loop on a Rust project, with
a judge, a commit gate, a verifier subagent and delivery to a branch. A
repo-less research report with sourced claims. Both are re-proven on every
harness run.
**With supervision:** a security scan and plan, a benchmark, a refactor. Each
has completed once under a standing check; none has the depth of evidence the
first two have.
**With attention:** continuous research. It works, it produced two good
digests today, and it has no guard.
**Not yet:** anything staffed from the other nine teams. Nothing is known to
be wrong with them; nothing is known to be right either.
## The two things worth doing next
1. **A `continuous-research` harness scenario.** The recipe with the most
moving parts is the only one with no standing check, and it now also
carries the paper triage (`kind` + `evidence`). A scenario that launches
it, waits, and asserts the manifest has tags and a spread, `analysis.md`
covers every paper, and `episode.json` parses would turn operator
attention into a guard.
2. **Exercise the four unblocked teams once each**, against repositories we
already have, and record what came out. Not to prove them mature — one run
is not maturity — but to find out whether they run at all, which nobody
currently knows.