The 15 Skill(effort-*) citers now call mcp__model-router__route per phase (orchestrate at a dispatch span, reflect/plan for the skill's own level, apply at the bookkeeping tail, escalate at the verify-secure caps); built-in judgment dispatches carry an explicit effort= param. lib/effort-shift.md is the route doctrine, lib/model-gate.md the mod rule (route answer = witness, /route on as remedy). Deleted: skills/effort-*, lib/effort-pins.txt/.sh, lib/model-check.sh, their tests, the installers' re-apply blocks. The mod drops its Skill(effort-*) bridge. The tracked model:/effort: frontmatter stays as the off-state floor, census-locked equal to the rows (lib/tests/effort-routing.test.sh rewritten, 140 checks; analyzer → xhigh). Contract .claude/tasks/contracts/2026-10-10-model-router-w2b-1045.md, plan r4 § W2-B: GATE 0 MET, verifier ECARTS(7) then CONFORME 10/10, security PASS, full make test green (design-tool-gate env red only).
1.4 KiB
Model gate — reflection requires a big model (BLOCKING)
Shared include, runs FIRST in an orchestrator whose reflection executes inline (BDR-066). The witness is the model-router mod's own route tool.
Entry call
ALWAYS call mcp__model-router__route with phase = the skill's row phase
(reflect or plan), no self-check shortcut. Tool not loaded (deferred) →
ToolSearch("select:mcp__model-router__route") once per session, then
call. The answer names the id main runs on next.
| answer | action |
|---|---|
| names a fable or opus id | proceed, SILENT |
| names sonnet, haiku, anything else; "is off"; tool absent | STOP |
STOP means: print exactly ⛔ MODEL GATE — session on <model>. Reflection steps of this skill require Fable or Opus. Switch with /model, then relaunch the skill. (mod off: say so, /route on resumes it), then
end
the turn. No later step runs, no agent is dispatched, nothing is edited.
Dispatch tiers (BDR-077 — no inherit)
The gate guards the MAIN loop only. Typed agents are routed by their
model-router row (model: frontmatter = off-state floor). Built-ins
(general-purpose / Explore / Plan) carry an explicit model= at every call
site: model: "fable" when the child reflects/orchestrates for the main
loop (skill-runners), else its tier (opus = dispatched judgment, sonnet =
execution, haiku = mechanical probes). A built-in judgment dispatch also
carries an explicit effort= (lib/effort-shift.md).