Models and effort
/emet picks a model and a reasoning effort per role automatically; there is nothing to switch by hand mid-run. Every key is in the configuration reference.
| Role | Model | Effort | Set by |
|---|---|---|---|
| Planning (Phases 1–4) | Opus, via opusplan |
your session’s | you, once |
| Coordinator, Phase 5 on | Sonnet, via opusplan |
your session’s | you, once |
| Workers (Phase 7) | Sonnet | medium |
agents/emet-worker.md, or models.worker |
Review, passive tier (docs-only diff) |
none | — | emet assess |
Review, medium tier (ordinary source change) |
Opus | medium |
models.reviewer.medium |
Review, high tier (risky paths or sinks) |
Opus | medium by default |
models.reviewer.high |
| CI-log triage (Phase 8) | Haiku | — | models.triage |
The two agent definitions (installed by install.sh to ~/.claude/agents/) pin their own model/effort in frontmatter, so the coordinator’s own model/effort choice never leaks into a worker or the reviewer. emet doctor reports (never blocks on) either file going missing. emet preflight does block dispatch when emet-worker or emet-reviewer is missing, because Phase 6 and Phase 8 dispatch by subagent_type.
Risk-tier routing
Phase 8 runs emet assess --base <trunk> --head <integration branch>, which classifies the diff deterministically and prints JSON with the tier, the reasons and the recommended reviewer model/effort:
passive: docs-only diff; no reviewer is dispatched.medium: the reviewer runs onmodels.reviewer.medium.high: the diff touches auth, security, payments, webhooks, CI, the installer, lockfiles, migrations, a dangerous sink (raw SQL, pipe-to-shell and the like) or a path matchingreview.highRiskPaths. The reviewer runs onmodels.reviewer.high, and auto-merge lands the PR only with green checks and no open review finding.
A ticket that touches high-risk paths can carry a Model: line (for example Model: opus or Model: opus/high), which overrides models.worker for that worker only.
Haiku triage
The coordinator never reads a CI log whole. A failing check is handed to an agent on models.triage (default haiku), which returns at most about 2k tokens with file:line pointers for the fix.
Config
Every key is optional, and the defaults reproduce the table above:
{ "models": { "worker": { "model": "sonnet", "effort": "medium" }, "reviewer": { "medium": { "model": "opus", "effort": "medium" }, "high": { "model": "opus", "effort": "medium" } }, "triage": "haiku" }, "review": { "highRiskPaths": [] }}review.highRiskPaths is a list of extra case-insensitive path substrings that force the high tier. To get more scrutiny on risky waves, raise models.reviewer.high.effort (for example to high).
Why a single reviewer
Why a single fresh-context reviewer instead of a multi-angle fan-out: no public benchmark compares the two directly, but a fan-out re-reads the whole diff once per angle and has hung for over an hour in this repo, while Anthropic and third-party reports on Opus-tier models suggest the model upgrade buys as much as the extra angles would. For a high-stakes wave, run /code-review ultra by hand afterward; /emet never dispatches that on its own.
What you set once, yourself
/emet can’t switch these mid-run:
model: "opusplan"in~/.claude/settings.json: this is what makes Phases 1–4 run on Opus and Phase 5 onward run on Sonnet, with no/modelneeded.emet doctorwarns (never edits your settings) if it’s unset.- A session effort of
mediumorhighrather thanxhigh: the workers and reviewer already carry their own effort regardless of yours, and a high global default mostly adds cost to the coordinator’s own turns (dispatch bookkeeping, merges, reports) that don’t need it. permissions.defaultModeable to run unattended (auto,acceptEdits, orbypassPermissions), pluspermissions.denyrules blockinggit push * main|masterandgit push --force *.emet doctorwarns on both, since a wave that stalls on a permission prompt or that can force its way past the trunk branch defeats the point of running unattended.
These are starting points, not settled numbers. Opus 5.5 launched 2026-09-22, and effort/model choice for coding agents is still an active area; re-tune after a few real waves rather than treating this table as final.