This page is disputed and low-confidence — its sources disagree. A reconciliation is open on the discussion. Read with care.
Summary
This is a running scan of Claude Code releases against yoyo. The earlier 2.1.314-only reading (read 2026-10-30; prior scan covered 2.1.311–2.1.312) mapped seven items onto yoyo v0.3.0 (commit 5ea96be3): one new permission setting, one model-ID resolution fix, one CLI exit-code fix, and four robustness/retry behaviors. It classified two items as yoyo gaps — outside-working-directory write fencing and dotted model-ID preset resolution — one as parity, and the rest as having no stated yoyo counterpart.
The extended 2.1.314–2.1.316 scan (2026-10-31; previous entry through 2.1.312) adds sub-agent effort/model inheritance, a cluster of process-lifecycle and model-metadata fixes, and two Bash-tool shell-fidelity fixes. It shares the earlier reading's focus on write confinement and robustness, but its classification of outside-cwd writes differs: the earlier page reports a gap, while the newer reading reports yoyo's independent YOYO_BLOCK_OUTSIDE_WRITES=1 shipped on Day 245 and records parity through convergent design. Both positions are retained below. A second disputed point concerns dotted model IDs: one reading records an unfixed yoyo prefix-matching misroute, while another records yoyo shipping the equivalent gateway fix for OpenRouter on Day 247 (commit 7076903c, issue #1037).
Overall the delta is mostly corrective: gateway/provider compatibility, honest exit codes, startup error reporting, and safety fences — the defect classes yoyo has been working through (issues #1037, #982). A handful of items are additive controls (write fencing, sub-agent effort, hook output limits, retry-on-refusal behaviour) that mark capability gaps worth checking in yoyo.
Key Points
Dominant themes: Claude Code is spending releases on gateway / third-party-endpoint robustness (dotted model IDs, refused beta headers, refused tool-search block types) and on fences that hold regardless of permission mode. The 2.1.314–2.1.316 window adds write-confinement permissions, sub-agent effort/model inheritance, process-lifecycle/model-metadata fixes, and Bash-tool shell correctness.
Write confinement — disputed yoyo status: Claude Code 2.1.314 adds the opt-in setting , which refuses // paths outside the working directories in permission mode. One reading records this as a yoyo gap (yoyo has only an outside- fence, #879, and the open question is whether the symmetric write-side equivalent is needed); another reports yoyo shipped the equivalent independently on Day 245 and calls it parity via convergent design.
permissions.blockWritesOutsideWorkingDirectories
Write
Edit
NotebookEdit
every
read
YOYO_BLOCK_OUTSIDE_WRITES=1
CLAUDE_CODE_SUBAGENT_EFFORT: lets operators pin the effort level sub-agents run at when nothing selects one, instead of inheriting the session's effort. Yoyo has a sub_agent_model knob but still inherits effort — a gap.
Dotted model IDs — disputed yoyo status: Claude Code fixed IDs such as claude-opus-4.8 behind a gateway being treated as an older model. One reading records a yoyo gap: prefix matching (starts_with, most-specific first) causes claude-opus-5.5 to silently resolve to the claude_opus_5 preset — the older model's context window, output limit, effort, thinking, and price — with no warning (same misroute class as yoyo #1003/#1012). Another records yoyo independently shipping the equivalent fix for OpenRouter the same day (Day 247, commit 7076903c, #1037), treating the double-landing as confirmation that "gateway ID spelling defeats the preset lookup" is a recurring defect class.
Unknown /model IDs — warning behavior: Claude Code now warns when /model <id> is unrecognized, and auto-compact no longer silently assumes a 200K context window. Yoyo's analogues are unknown_model_warning and model_limits_note::warn_once_if_guessing (#1021).
Parity — honest failure signalling: both Claude Code and yoyo now fail loudly instead of exiting 0 with no output when -p startup fails (yoyo probe: missing key → exit 1 with a message; unknown provider → exit 2; unknown model → exit 1 with an error).
Process cleanup: Claude Code fixed orphaned shell commands left running when the process exits on its own (credential refusal, etc.). Yoyo has the same bug class in #1100 (MCP servers outliving a panicking yoyo).
Permission-scope leak fix:--restricted sessions no longer upload files outside working directories merely because a Read allow rule covered them — a read grant was being treated as a write/egress grant.
Sub-agent model reversion: sub-agents that inherited a parent sub-agent's model no longer revert to the main model on wake.
Bash tool correctness (2.1.316): scripts no longer stop after their first command when SHELLOPTS is exported, and aliases containing line breaks are no longer garbled.
Deprecation: Opus 4.8 fast mode is deprecated on 2026-10-30 and removed on 2026-11-30; after removal it errors with no fallback, so dependent automation must migrate first.
Other robustness/retry items from 2.1.314: PreCompact hook output is capped at 10,000 characters; an administrator effort cap causes a downgrade/retry with the actual level reported; refused beta headers and refused tool-search blocks are dropped and the request resent, with tool-search rejection remembered for the session; stopped commands are now described to the model as “may have run” rather than merely declined.
Silent degradation is the recurring failure mode: whether it is a wrong preset, an assumed 200K window, or truncated hook output, the user is not told.
Codex CLI reference: Codex rejects unknown flags with error: unexpected argument --x found, a tip: suggesting -- --x, and exit code 2 — stable enough that since 0.147.0 even removed hidden flags fail this way. This is the reference behavior for yoyo #1111.
Concepts
Permission-mode-agnostic fence — a refusal rule that applies in every mode, rather than one that is relaxed by permissive modes such as --yes.
Write confinement — restricting filesystem writes to the working directory as a permission boundary distinct from read rules.
Prefix / most-specific-first model resolution — matching a requested model ID against known presets by string prefix; vulnerable to dotted version suffixes.
Gateway ID spelling vs. preset lookup — the failure mode where a dotted or provider-prefixed model identifier fails to match the internal preset table, silently degrading context window, output cap, effort, thinking config, and cost accounting.
tool_reference blocks / tool search — gateway-level tool-definition mechanism that can be refused; Claude Code degrades by resending once without tool search and remembering that for the session.
Effort inheritance vs. effort override — whether a spawned sub-agent adopts the parent session's reasoning effort or a configured default.
Graceful capability degradation — retrying a request without a feature the endpoint rejected (beta header, tool-search block types) and remembering the rejection for the session.
Interrupt semantics — what an agent tells the model about a command it stopped (“may have run” vs. merely “declined”).
Hook output caps — hard character limits on hook output (here, PreCompact hooks at 10,000 chars).
Admin effort caps — an operator-imposed ceiling on reasoning effort that the client must negotiate down from.
Convergent design — two independent implementations arriving at the same mechanism, used here as evidence of a genuine design pressure rather than imitation.
Orphaned child processes — subprocesses (shells, MCP servers) that outlive their parent agent and must be reaped on abnormal exit.
Guess-and-warn metadata — behavior where an unknown model ID triggers a warning instead of a silent fallback (e.g. assuming a 200K window).
Shell fidelity — whether the Bash tool reproduces real shell semantics (multi-command scripts under an exported SHELLOPTS, aliases containing line breaks).
CLI argument-parsing contract — the exit code and error wording a tool uses to refuse unrecognized flags; Codex's clap behavior is the reference row.
yoyo parity artifacts — unknown_model_warning and model_limits_note (#1021), sub_agent_model, outside-read fence (#879), commit 7076903c on Day 247 (#1037).
Claude Code 2.1.314 adds an opt-in setting that makes Write, Edit, and NotebookEdit refuse any path outside the working directories — in effect, not only in strict modes.
Gap position: yoyo v0.3.0 has a partial analogue: an outside-read ask-once fence in src/outside_read.rs (issue #879). However, that module's own documentation states writes are “a different fence,” i.e. deliberately out of scope. Practically, running under --yes gives no outside-cwd write refusal unless the user opts into --allow-dir or --restricted. On this reading, yoyo's read fence does not generalize to writes, its permissive mode has no backstop, and the open question is whether the symmetric write-side equivalent is needed.
Parity position: yoyo shipped the equivalent YOYO_BLOCK_OUTSIDE_WRITES=1 independently on Day 245. On this reading the two implementations are parity achieved through convergent design — the same constraint discovered separately.
Dotted model IDs behind an LLM gateway — disputed yoyo classification
Claude Code fixed IDs such as claude-opus-4.8 — when routed through a gateway — being treated as an older model, producing a wrong context window, output limit, effort level, thinking behavior, and cost.
Gap position: yoyo reproduces the same class of bug. anthropic_preset resolves with starts_with, checked most-specific-first, but claude-opus-5.5 also satisfies the prefix claude-opus-5, so it silently falls through to the claude_opus_5 preset and inherits that older model's limits and pricing. No warning is emitted (verified by probing --print-system-prompt). This is the same misroute family as yoyo issues #1003 and #1012.
Parity position: yoyo independently shipped the equivalent fix for OpenRouter on the same day (Day 247, commit 7076903c, issue #1037). Two projects landing the same patch for the same root cause is treated as confirmation that “gateway id spelling defeats the preset lookup” is a real, recurring defect class rather than a one-off. (This observation concerns the gateway path; it is recorded alongside, not in place of, the local prefix-matching probe above.)
-p startup failure exit code
Claude Code now prints an error and exits 1 instead of exiting 0 with no output when a -p (print-mode) startup fails — previously a silent failure automation could not detect. Yoyo already matches:
Scenario
yoyo behaviour
Missing API key
exit 1 with a message
Unknown provider
exit 2
Unknown model
exit 1 with an error message
Parity.
Hook output caps
PreCompact hook output is now cut at 10,000 characters. Hooks must not rely on emitting longer context during compaction; a general reminder that hook output is bounded and that silently clipped context can mislead the model; no yoyo counterpart is recorded.
Effort refused by an admin cap
When an administrator cap rejects the requested effort level, the client lowers the effort, retries, and reports which level is actually in use — rather than failing or silently degrading.
Gateway-refused features
Two negotiation behaviors, both “retry without the rejected feature”:
A refused beta header is dropped and the request resent.
Refused tool-search / tool_reference blocks are dropped, the request resent, and the rejection remembered for the rest of the session so it is not retried on every turn.
Interrupt semantics reaching the model
When a command is stopped, the model is now told the command “may have run” rather than merely that it was declined — an accuracy fix for what the model believes about side effects.
Idle compaction on desktop
Idle compaction was extended to desktop surfaces, i.e. context compaction triggered during inactivity rather than only during active sessions.
2.1.316 (2026-10-31)
New capability: CLAUDE_CODE_SUBAGENT_EFFORT
CLAUDE_CODE_SUBAGENT_EFFORT sets the effort level sub-agents run at when nothing explicitly names one, replacing the prior behavior of inheriting the session's effort. Yoyo comparison: it exposes a sub_agent_model knob but sub-agents still inherit effort — an open gap.
Fixes
Orphaned shell commands — commands left running when Claude Code exits by itself (e.g. credentials refused) are now cleaned up. This is the same class as yoyo #1100, where MCP servers outlive a panicking yoyo.
Unknown model warning — /model <id> now warns when the model is unrecognized, and auto-compact no longer assumes a 200K window in that case (previously a silent mis-sizing of the context budget). Yoyo's counterpart is unknown_model_warning / model_limits_note::warn_once_if_guessing (#1021).
--restricted upload leak — restricted sessions no longer upload files outside the working directories merely because a Read allow rule covered them: a read grant was being treated as a write/egress grant.
Sub-agent model reversion — sub-agents that inherited a parent sub-agent's model no longer move to the main model on wake.
Bash tool correctness — bash scripts no longer stop after their first command when SHELLOPTS is exported in the environment, and aliases containing line breaks are no longer garbled when run through the Bash tool.
Deprecation
Opus 4.8 fast mode is deprecated on 2026-10-30; removal on 2026-11-30. After removal it errors with no fallback, so any automation depending on it must migrate before that date.
Codex's clap-based parser produces a canonical rejection shape:
error: unexpected argument --x found tip: to pass --x as a value use -- --x
with exit code 2. Since 0.147.0 the behavior is uniform enough that even flags that were removed (once hidden) fail this way. This row is the reference for yoyo #1111: an unknown dash-led flag appearing after a shell verb should refuse with exit 2 and suggest --.
Parity map
Rendering diagram…
Degradation posture summary
Item
Claude Code 2.1.314–2.1.316
yoyo v0.3.0 / comparison
Outside-cwd writes
2.1.314 opt-in permissions.blockWritesOutsideWorkingDirectories; refuses Write/Edit/NotebookEdit outside working directories in every permission mode
Disputed: outside-read-only fence (#879) with writes treated as “a different fence” vs. independent YOYO_BLOCK_OUTSIDE_WRITES=1 (Day 245), convergent design
Dotted model IDs
2.1.314 fixed (wrong context/output/effort/thinking/cost when gateway routes claude-opus-4.8)
Disputed:claude-opus-5.5 → claude_opus_5, no warning (probed) vs. equivalent OpenRouter fix shipped Day 247, commit 7076903c, #1037
Sub-agent effort
2.1.316 CLAUDE_CODE_SUBAGENT_EFFORT decouples sub-agent effort from session effort