---
description: "Turn the top model rung on or off and keep the cost ledger's pricing in step with it. Use when asked to enable or disable Fable, or which model the pipeline dispatches."
description-tr: "Üst model basamağını açıp kapatır ve maliyet defterinin fiyatlamasını onunla birlikte taşır. Fable'ı aç/kapat sorulduğunda ya da pipeline hangi modeli çağırıyor sorulduğunda kullanılır."
argument-hint: "[on | off]  -  no argument reports the current state"
parameters: [{"name":"state","kind":"enum","enum":["on","off"]}]
gui: form
destructive: false
confirm: none
---

# multi-agent model  -  which rung the pipeline dispatches on

The ladder is `fable -> opus -> sonnet -> haiku` and it does not change here.
What changes is whether the top rung is in play at all, which is
`prefs.global.modelFallback.fableEnabled` and ships `false`.

```bash
bash "$HOME/.claude/lib/model-rung.sh" ${ARGUMENTS}
```

## Why this command exists

The switch existed before the command did. It could only be flipped by editing
preferences by hand, and `model-fallback.md` said so in a line most people never
reached. That is a knob with no handle.

It also never travelled alone. `prefs.global.costBudget.pricingModel` defaults to
`fable` so the estimate stays an upper bound; with the rung off, that default
prices every call above what it can cost, trips the budget ceiling early, and
triggers a downgrade nobody needed. The documentation asked the user to set both.
This command sets both, together:

| `fableEnabled` | `costBudget.pricingModel` |
|---|---|
| `true` | `fable` |
| `false` | `opus` |

Flipping one without the other is the defect this closes, so the pair moves as
one write or not at all.

The same step re-applies the installed agents (`lib/agent-model-sync.mjs`): every
agent under `~/.claude/agents` whose `preferredModel` is `fable` gets
`model: fable` while the switch is on and `model: opus` while it is off. An agent
spawned without an explicit model runs on that line, so without this the switch
would cover routed dispatches only. The installer applies the same rule on every
install and update, so a sync never puts the agents back on a rung that is off.

## What it reports with no argument

The current rung, the pricing model, and **what the switch means on this host** -
because it does not mean the same thing on all three:

| Host | What `off` does | Why |
|---|---|---|
| Claude Code | every `preferredModel: fable` persona (architects, reviewer 1, triage) starts on `opus` | the only host where the rung is Fable 5 |
| Copilot CLI | nothing | Fable 5 is not offered there; its personas never sat on this rung |
| Codex CLI | nothing, deliberately | the `fable` rung there means `gpt-5.6 @ xhigh`, a different model on a different account - switching it from a knob named after an Anthropic model would surprise a Codex user |

So on two of the three hosts this command is a **status report**, not a switch,
and it says which one it is rather than claiming a change it did not make.

## The consequence it prints when turning the rung off

Phase 3's reviewer panel collapses from three models to two. Reviewer 1 lands on
`opus`, which Reviewer 2 already holds, and dispatching one model twice is not
cross-model review. `consensus.reviewerCount` records `2`, and the `unverified`
verdict rule matters more rather than less - two Anthropic models agreeing on a
judgment call was already weak evidence and there is now one fewer of them.
Triage also runs on `opus`, making it the same model as Reviewer 1; the Phase 3
Step 3 anonymisation requirement covers that case and is not optional here.

This is printed at the moment of the change, not left in a doc.

## Related

- `/multi-agent:route-on` - policy-driven rung selection per persona or phase, a
  separate feature that also ships off. This command decides whether a rung
  EXISTS; that one decides which rung a given call picks.
- Full fallback contract, including the three failure triggers this switch is
  deliberately not one of: `$HOME/.claude/multi-agent-refs/features/model-fallback.md`
