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).
31 lines
1.4 KiB
Markdown
31 lines
1.4 KiB
Markdown
# 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`).
|