feat(dx): model-routed custom agents (planner/developer/task-runner)

Pin the model to the step, not the whole session, via .claude/agents/*.md frontmatter
instead of relying on a human to run /model at the right moment: planner (Opus, no
Edit/Write) for design work, developer (Sonnet) for implementation, task-runner (Haiku,
no Edit/Write) for mechanical read-only checks. CLAUDE.md documents the routing rule;
the backlog session protocol now names these agents instead of a manual /model instruction.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
eho
2026-07-27 14:35:40 +02:00
co-authored by Claude Sonnet 5
parent 7b6cabfc4a
commit 67170fbc84
5 changed files with 66 additions and 6 deletions
+16
View File
@@ -45,6 +45,22 @@ catches a miss before CI does.
Do not run `npm audit fix --force` — it downgrades Angular 22→21. Dev-only
advisories are pinned via `package.json` `overrides`; the shipped bundle audits clean.
## Model routing for agent delegation
Three custom agents in `.claude/agents/` pin the model to the step, not the whole session —
so this doesn't depend on a human remembering to run `/model` at the right moment:
- **`planner`** (Opus) — design/approach work: a WP's Decisions block, an ambiguous bug's
root cause, sequencing a multi-file change. No Edit/Write access; hands back a plan.
- **`developer`** (Sonnet) — implementation once the approach is settled: routine code
against a pre-made plan, ending green (`npm run ci`).
- **`task-runner`** (Haiku) — simple, read-only, mechanical checks: running a test suite,
`git status`/`grep`, verifying a file exists. No Edit/Write access.
Delegate to the matching agent only when the _current_ session isn't already on that
model — don't add indirection for its own sake. `docs/project/backlog/README.md`'s
session protocol is the worked example of this in practice.
## The decisions (non-negotiable working agreements)
### 1. DDD: contexts then layers, dependencies point inward