Auto mode's Bash-first steering reverses 2.1.21 and 2.1.31, which shipped the opposite as a fix

Status Open
Reported on v2.1.21
Maintainer reply None cached
Activity 3 comments · opened Aug 26, 2026

Auto mode injects a standing instruction to do file work through cat/sed/heredocs rather than the Read/Edit/Write tools. The behaviour, its scale, and the undocumented opt-out are already covered in #88041, #87575, #87971 and #89716. This issue is for one fact none of those raise, because it changes what the fix should be.

This is a reversal of two shipped fixes, not a new default. From the CHANGELOG:

2.1.21 — Improved Claude to prefer file operation tools (Read, Edit, Write) over bash equivalents (cat, sed, awk)
2.1.31 — Improved system prompts to more clearly guide the model toward using dedicated tools (Read, Edit, Glob, Grep) instead of bash equivalents (cat, sed, grep, find), reducing unnecessary bash command usage

Both were announced as improvements. The reversal was announced nowhere: no CHANGELOG entry, and no docs page mentions it — I checked auto-mode-config, permission-modes, env-vars and settings-reference. It arrives through an experiment gate instead, so users receive it by cohort assignment and cannot distinguish it from the model changing its mind.

Why this is more than a preference. 2.1.31's own rationale — that dedicated tools "make it easier to review tool calls and give permission" — names exactly the property being removed, and the same flag deletes the Bash tool description bullet that argued for it (#88041). Reliability is the other half: Edit anchors on exact text and refuses on mismatch, while a scripted substitution fails silently or in the wrong place. In one session here, two scripted edits cut into the middle of declarations — one deleted a live import, one left an orphaned export. Both were caught only because the language is compiled.

Ask. Revert to the 2.1.31 behaviour, or make this a documented setting. CLAUDE_CODE_THRIFTY_SONIC is not one: undocumented, named after the experiment rather than the behaviour, and its triBool parse maps any value outside 0/false/no/off and 1/true/yes/on back to undefined — which falls through to cohort assignment. An opt-out that silently re-enrols you on a typo is not a user-facing control.

Side observation, lower confidence. On models taking the lean-prompt path (steerOnly), the auto-mode reminder consists solely of this Bash-first paragraph — the rest of the auto-mode guidance (the git-safety and consent-batching text) is not emitted on that branch at all. Is that intended? If not, those models get the experiment without the mode's actual instructions.

Version: 2.1.246, Linux (WSL2).

View original on GitHub ↗

3 Comments

playforge-coding · 4 days ago

Yeah this is annoying. Even when it says to use the Edit tool in CLAUDE.md it still goes ham on heredocs.

alexisLefebvre · 3 days ago

Yes this is annoying, instead of diffs I only see this:

● Bash(python3 - <<'EOF'
      import pathlib…)

Thanks for the workaround, I will try it.

5z1punch · 1 day ago

the bash-first UX is very very terrible, it can be regarded as a T0 accident