2.1.220 silently added a system-prompt directive suppressing Agent-tool dispatch (absent in 2.1.218)
Summary
Starting in 2.1.220, the system prompt contains a directive instructing the model not to call the Agent tool unless the user requested it. This was not present in 2.1.218.
The effect is that Claude declines to dispatch subagents for workflows whose entire design is parallel dispatch — custom skills for code review, auditing, and plan review — even though invoking the skill is itself the request. The workflows do not error; they silently run degraded, or the model reports that it needs permission to fan out.
This arrived in a patch release with no signal, and it is not present in any configuration file on disk, which made it extremely difficult to diagnose.
Evidence it arrived in an upgrade
Measured across every version retained on this machine:
$ grep -ac "unless the user requested it" ~/.local/share/claude/versions/2.1.210 # Jul 14
0
$ grep -ac "unless the user requested it" ~/.local/share/claude/versions/2.1.218 # Jul 23
0
$ grep -ac "unless the user requested it" ~/.local/share/claude/versions/2.1.220 # Jul 24
2
$ grep -ac "unless the user requested it" ~/.local/share/claude/versions/2.1.221
2
$ grep -ac "unless the user requested it" ~/.local/share/claude/versions/2.1.222
2
Absent in 2.1.218, present from 2.1.220 onward.
The string appears in no config file on disk — not in ~/.claude/settings.json, not in project settings, not in any memory or rules file. We attempted several configuration-side fixes before locating it inside the binary, and initially mis-diagnosed it as a long-standing compiled constant because we compared only 2.1.220, 2.1.221 and 2.1.222 to each other and never checked 2.1.218.
Environment
| | |
|---|---|
| Claude Code | 2.1.220 and later (2.1.218 unaffected) |
| Platform | macOS 26.5.2 (25F84), arm64 |
| Node | v22.23.2 |
| Shell | zsh |
| Install method | native, autoUpdates: false |
Impact
Our review workflow depends on fanning out parallel reviewers. With the directive in place it silently stopped doing so. As a direct consequence our code-review gate was skipped on four commits that reached production; running the review retroactively surfaced three critical defects, including one in a drift-detection gate that caused it to falsely pass the exact condition it had been built to catch.
The failure mode is the dangerous kind: nothing errors, and the absence of review looks identical to a clean review.
What I'd like to see
- Release-note system-prompt changes that alter agent behavior. A directive that suppresses tool dispatch is a behavioral breaking change, not an internal detail.
- Make such directives inspectable — some supported way to see the effective system prompt, so this is diagnosable without byte-level comparison of binaries.
- Provide a supported override for projects whose workflows legitimately depend on programmatic subagent dispatch.
- Reconsider the directive's phrasing. Invoking a skill whose documented purpose is multi-agent fan-out should count as the user requesting it.
Related: I have filed a separate issue about the 2.1.222 worktree-isolation guard. Both are behavioral regressions that arrived silently via patch releases on a setup that had been stable for months.
3 Comments
The separate issue referenced above is #84182 — the 2.1.222 worktree-isolation guard regression.
You may want to add your voice here: https://github.com/anthropics/claude-code/issues/80988
Still present a month later, and now reaching users through a second delivery path: the VS Code extension, which bundles its own binary independently of the CLI on
PATH.On this machine (macOS 26.5.2 (25F84), arm64):
| Binary | Version |
heron_brookplumbing | Fallback text present ||---|---|---|---|
|
/opt/homebrew/bin/claude| 2.1.218 (Jul 23) | yes | no — the function endsreturn null||
~/.vscode/extensions/anthropic.claude-code-2.1.245-darwin-arm64/.../claude| 2.1.245 (Aug 25) | yes | yes ||
~/.vscode/extensions/anthropic.claude-code-2.1.246-darwin-arm64/.../claude| 2.1.246 (Aug 25) | yes | yes |Independently reproduces your 2.1.218 boundary. In 2.1.218 the selector ends at the two flag reads and returns
null; from 2.1.220 on it gains the third branch (if (rzt(e)) return zLr) carrying the client-side default.The IDE/terminal split is worth calling out on its own. The extension bundles its own binary, so a user pinned to a pre-2.1.220 CLI is unaffected in the terminal and affected in the IDE — on the same machine, same project, same
CLAUDE.md. Delegation appears to work or not work depending on which window you are in, which reads as model nondeterminism rather than a version difference. Nothing surfaces the extension's bundled version in-session.Local gate state, confirming the mechanism in #80988:
Neither flag is set, so the kill-switch is off and the client-side default applies unconditionally on Opus 5.
Impact here. This repo uses single-writer agent lanes —
CLAUDE.mdrequires that work insrc/chemistry/,src/integrations/,src/store/, andsrc/app/be delegated to its owning agent, and a cross-lane edit is a review-blocking violation by convention. Sessions began stating outright that they would not invoke agents. That is a better failure than silent degradation, but it inverts the repo's routing rules, and diagnosis cost a full session of byte-level binary comparison because the string is in no config file on disk.Adding to your request list, in priority order for this use case:
tengu_fennel_godwitalready exists as the kill-switch — exposing it as a setting or env var would resolve this without new machinery.CLAUDE.mdthat mandates routing is an explicit standing request; the directive's own wording ought to accommodate it.Two workarounds, for anyone finding this issue:
opus_5_prompt_bundlecapability, so non-Opus-5 models are unaffected. This is the only reliable fix available locally.CLAUDE.mdas an explicit standing user request rather than project policy helps, but it is persuasion against a system-prompt line, not a real override.