Opt-in routing of ARS agents to different model tiers, exploiting intelligence asymmetry across pipeline tokens (Lance Martin, "Cost effective harnesses with Fable", 2026-07-10: an advisor-checkpoint configuration reached ~90% of frontier-solo quality at ~34% of token cost; delegation pays only when workers absorb enough tokens to offset the per-handoff coordination cost).
This is entirely optional. When ARS_MODEL_TIERING is absent, every agent runs on the session model (model: inherit) — byte-equivalent to pre-#517 behavior. Same opt-in philosophy as terminal_policies: absence of the switch means nothing changes.
# Pick ONE direction, or leave unset (default: session model everywhere).
export ARS_MODEL_TIERING="economy" # frontier session: execution agents step down one tier (floor: Opus-class)
export ARS_MODEL_TIERING="quality-boost" # below-frontier session: judgment agents step UP to the frontier tier at the gates
Any other value is warned once (one line) and treated as absent — misconfiguration must never silently change models.
Tier positions are expressed relative to the session: "session model", "frontier tier of the session's model family", "one tier below the session model", "the Opus-class floor". Concrete model ids are NEVER pinned in this mechanism's FILES — a hard-pinned floor becomes a downgrade ceiling on the next model generation (the v3.7.0 opus command floor, retired in the 2026-06 Fable 5 harness pass, is the precedent).
The no-hard-pinning rule is about what lives in the repo, not about the dispatch call — a subagent invocation ultimately needs a model value the runtime accepts (an alias such as opus/sonnet, or a concrete current-generation id). The dispatching session resolves the relative target at the moment of dispatch:
economy → the tier exactly one below the session model, bounded below at the Opus-class tier; quality-boost → the family's frontier tier.[MODEL-TIERING: could not resolve target tier — ran on the session model] once per run. Fail-open, never a guessed id.quality-boost (for sessions below the frontier tier)integrity_verification, compliance_agent); the Stage 4→5 claim–ref alignment audit (claim_ref_alignment_audit — dispatched only when ARS_CLAIM_AUDIT=1, so this surface exists only on opted-in runs); and the final-review surfaces (Stage 3 full panel: eic, the three reviewers, devils_advocate_reviewer, editorial_synthesizer; Stage 3' re-review dispatches the narrow team — among its judgment-type roles that means eic + editorial_synthesizer; field_analyst is execution-type and unaffected here).[MODEL-TIERING: quality-boost is a no-op at the frontier tier] once and proceed. quality-boost NEVER downgrades anything.economy (for frontier-tier sessions)[MODEL-TIERING: economy is a no-op at or below the floor] once and proceed. economy NEVER touches judgment-type agents.draft_writer is the suite's highest-token and therefore highest-savings agent, and also its most quality-sensitive downgrade point (it writes the prose the whole pipeline exists to produce). The one-tier floor bounds the risk; if measured quality degrades, the remedy is reclassifying it to judgment-type in scripts/model_tiering_manifest.json + this table — one place, no agent-file edit.A different tier is physically selectable only where a role runs as a separate subagent (the built-in Agent tool's model parameter, or a plugin-exposed agent). Today many ARS roles execute inline in the main session as prompt templates (see docs/PERFORMANCE.md § "v3.7.0 Plugin agents and model routing") — inline execution has no per-role model choice. The mechanism therefore works like this:
[MODEL-TIERING: <role> ran inline on the session model — tiering not applicable] once per run. Fail-open, never a silently wrong model claim.Agent files are untouched — frontmatter stays model: inherit, and this mechanism never edits an agent file (the sha256-locked bibliography_agent.md included). The machine-readable classification lives in scripts/model_tiering_manifest.json; scripts/check_model_tiering.py fails CI when an agent file exists without a classification (drift guard), when a tier value is invalid, or when this table and the manifest disagree.
When a tiering direction is active, route repeated same-stage calls to the SAME worker so its cache accumulates — e.g. across the Stage 3 → 3' review loop, the re-dispatched roles (the narrow re-review team: field_analyst, eic, editorial_synthesizer — not the full panel) should reuse their Stage 3 workers rather than spawning fresh ones per round. The reuse rule is tier-independent: it covers field_analyst (execution-type, the affected role under economy) exactly as it covers the two judgment-type roles. A fresh worker per call re-pays the full context write and can erase the tiering savings entirely. With the flag unset this guidance imposes nothing: default behavior stays byte-equivalent, dispatch shapes included.
One tier per agent; membership changes require editing BOTH this table and scripts/model_tiering_manifest.json (the lint pins them together).
| Skill | Agents |
|---|---|
| deep-research (10) | socratic_mentor, research_question, research_architect, synthesis, devils_advocate, editor_in_chief, ethics_review, risk_of_bias, meta_analysis, source_verification |
| academic-paper (6) | socratic_mentor, argument_builder, structure_architect, peer_reviewer, revision_coach, literature_strategist |
| academic-paper-reviewer (6) | eic, methodology_reviewer, domain_reviewer, perspective_reviewer, devils_advocate_reviewer, editorial_synthesizer (mechanical by v3.6.2 design but emits the final decision letter — judgment-type conservatively until data says otherwise) |
| academic-pipeline (3) | pipeline_orchestrator, claim_ref_alignment_audit, integrity_verification |
| shared (1) | compliance (holds tier-based block authority) |
| Skill | Agents |
|---|---|
| deep-research (4) | bibliography (citation existence is handled by the deterministic verification gate, so the lookup layer does not depend on this agent's tier), timeline_extraction, report_compiler, monitoring |
| academic-paper (6) | intake, draft_writer (highest-savings / most quality-sensitive — see Direction 2), abstract_bilingual, citation_compliance, visualization, formatter (STAMP-ONLY by design) |
| academic-paper-reviewer (1) | field_analyst |
| academic-pipeline (2) | collaboration_depth (advisory-only, never blocks), state_tracker |
Orthogonal layers: ARS_CROSS_MODEL chooses an EXTERNAL verifier for specific checks (see shared/cross_model_verification.md); ARS_MODEL_TIERING chooses which Anthropic tier runs each ARS agent. They compose without coordination — e.g. an economy session still sends cross-model integrity samples if ARS_CROSS_MODEL is set, and the #518 blind disagreement checkpoints compare against the primary decision whatever tier produced it.