2.4 KiB
Model gate — reflection requires a big model (BLOCKING)
Shared include. Runs FIRST in any orchestrator whose reflection — brainstorming, planning, contract, audit judgment, loop decisions — executes inline or in inherit-model subagents. Sonnet-pinned executors are not what this gate protects; it protects the thinking around them (BDR-066).
1. Self-check
Your system prompt names the model powering this session. Fable or Opus → big. Sonnet, Haiku, anything else → small.
2. Witness — deterministic check
bash "$HOME/.claude/lib/model-check.sh"
Output <class>:<raw>; exit 0 = big, 2 = small, 3 = unknown. The witness
reads the PERSISTED model (settings.json — the file /model rewrites,
LRN-098). It can lag reality (session launched with --model, settings not
yet rewritten) — that is why the self-check exists alongside it.
3. Verdict
| self-check | witness | action |
|---|---|---|
| big | big (0) | proceed, SILENT — the nominal path prints nothing |
| small | any | STOP |
| big | small (2) | disagreement — STOP, surface BOTH values; the user confirms or relaunches |
| big | unknown (3) | fail-visible: print model gate: witness unknown (<raw>) — self-check says <model> and ask the user to confirm before continuing (BDR-025: unknown never silently passes) |
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.
then end the turn. No later step runs, no agent is dispatched, nothing is edited.
4. Dispatch tiers (BDR-077 — no inherit)
The gate guards the MAIN loop only. Dispatched work NEVER inherits the
session model: typed agents run on their frontmatter pin; built-ins
(general-purpose / Explore / Plan) carry an explicit model= at every call
site — model: "fable" when the child performs reflection/orchestration on
the main loop's behalf (skill-runners), otherwise its complexity tier
(opus = dispatched judgment, sonnet = execution/collection, haiku = short
mechanical probes).
Effort is the second axis of the same table (BDR-107): every typed agent
carries an effort: pin next to model:, and the main loop shifts per phase
through lib/effort-shift.md. No typed agent inherits either axis;
built-ins inherit the effort in force at dispatch, so an orchestrator shifts
before dispatching them (lib/effort-shift.md, wiring point 5).