[FEATURE] Declarative cross-model review agents — `model: different-from-parent` policy for anti-correlated verification
Problem
Review/verification subagents inherit the invoking session's model by default. When the same model both authors and reviews a change, their errors are correlated: the reviewer is blind in the same places the author was.
Concrete (anonymized) incident from a protocol-heavy repo running an 8-subagent double code review on every change, all on the session's model:
- A reviewer agent's finding text coined a plausible-but-nonexistent identifier (it named an error-enum variant that does not exist in the codebase, styled exactly like the real ones).
- The implementing main loop — same model — copied the reviewer's phrasing faithfully into three doc sites during remediation.
- The same-model Round-2 review only caught it because a differently-scoped lens happened to re-verify identifiers against the tree. Same-model author+reviewer meant the misnomer read as natural to both sides of the review boundary.
Cross-model review buys error-shape diversity: a different model family fails differently, so a reviewer on the other model has a real chance of catching exactly the class the author's model normalizes.
What exists today (and why it's not quite enough)
The plumbing is already there: the Agent tool takes a per-call model override, and custom agent definitions accept model: frontmatter. So cross-model review is possible — but only as imperative, per-call discipline:
- Every reviewer fire must remember to pass
model:explicitly; one forgotten call silently reverts to same-model review with no signal. - The actually-desired policy — "run on a model different from the invoking conversation's" — is not expressible at all. Frontmatter pins an absolute model, so a protocol whose sessions legitimately run on either of two tiers (judgment-risk sessions on one, mechanical sessions on the other) needs duplicated agent definitions per tier, or call-site branching on "what model am I?" (which the agent cannot reliably introspect).
Ask
A declarative model policy for agent definitions and/or the Agent tool call, e.g.:
# .claude/agents/adversarial-verifier.md frontmatter
model: different-from-parent # or: model-policy: cross
Semantics: resolve to a capable model that is not the invoking conversation's model (resolution table configurable or sensible default, e.g. opus ⇄ the session's frontier alternative). Precedence consistent with today: call-site param > frontmatter policy > inherit.
Optionally, a settings-level hook so a class of agents (review/verification) defaults to cross-model without per-definition repetition.
Alternatives considered
- Status quo (call-site
model:discipline) — works, fragile, and cannot express "different from parent". - Duplicated per-tier agent definitions — N×M definition sprawl; drifts.
- Full multi-model orchestration (#34558, closed stale) — much broader; this issue is the minimal slice with a concrete verification payoff.
Related
- #43083 (open) — per-subagent
effort; same role-scoped-resources theme, orthogonal axis. - #34535 (closed, stale) — peer-model audit gate; adjacent goal, heavier mechanism.
- #34558 (closed, stale) — general multi-model orchestration; superset.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗