Auto mode regression since 2.1.270: classifier blocks a solo owner's own routine release work (12× more denials), and the Manual fallback costs 55+ permission clicks for a 2-key config change
TL;DR — I run a one-person game studio and Claude Code is my entire engineering and release team (~8,000 tool calls a week). Since core 2.1.270 auto-updated on my Mac on Sep 15, Auto mode blocks work I explicitly delegated, on accounts only I own. On my release day it cost me hours, and the only fallback (Manual mode) turned a two-key config change into 55+ permission clicks. I am not asking you to remove the classifier. I am asking for a supported way for a sole owner to say "this is mine and routine" once.
Environment: Claude desktop app (macOS), Code tab, core 2.1.270 (2.1.260 until Sep 14), Max plan. I write my instructions in Vietnamese.
The regression, measured from my local session logs (216 sessions)
| Period | Sessions | Tool calls | Classifier denials | Rate |
|---|---|---|---|---|
| Aug 8–14 | 15 | 4,318 | 6 | 0.14 % |
| Aug 22–28 | 14 | 4,225 | 3 | 0.07 % |
| Sep 8–14 (2.1.260) | 43 | 8,336 | 30 | 0.36 % |
| Sep 15–17 (2.1.270) | 63 | 2,261 | 40 | 1.77 % |
Labeled denials ([Feature Flag Writes], [Production Deploy], [Self-Modification], [Auto-Mode Bypass], [Remote Shell Writes]…): 0 before Sep 15, 40 in the three days after (Auto-Mode Bypass 15, Self-Modification 12, Feature Flag Writes 4, Production Deploy 2, others). On 2.1.260 the very same Remote Config edits went through without a denial (e.g. a publish logged on Sep 7); the first [Feature Flag Writes] denial anywhere in my logs is at 17:15 UTC on Sep 15 — hours after the update.
What it cost on a real release day (Sep 17 — shipping v1.0.3 to Google Play and the App Store)
- 09:47 — Uploading my own build to an internal-testing track (not production; 5 testers, all me) was denied as
[Production Deploy], three times, including right after my direct order to do it. The third attempt was relabeled[Auto-Mode Bypass]and the session was effectively dead for that task. The build went up at 10:59: 72 minutes lost on a step that takes two. - 12:5x, 14:31, 14:44 — Adding two Remote Config keys whose values are identical to the compiled defaults (zero behavior change, fully reversible) was denied as
[Feature Flag Writes]three times — even after I had told Claude "do all of it for me". - 14:48–14:58 — The only way forward was Manual mode. There, every MCP browser call prompts, including each step inside a batch: 55 tool calls → 55+ "Allow once" cards in ten minutes to add two keys. I sat there clicking a button for a task I had delegated precisely so I would not have to sit there.
- 15:00 — I asked Claude to pre-allow its browser tools so this would never happen again. Denied:
[Self-Modification]. It was not even allowed to read~/.claude/settings.json. So the assistant can neither do the job nor help me configure the tool so that it can. - Sep 16 — Sending one keystroke to my own second Mac over SSH (a dedicated dev machine, nobody else uses it) was denied as
[Remote Shell Writes]/[Auto-Mode Bypass]; we had to route a single Return key through Screen Sharing instead. - Knock-on cost — A session that has been denied a few times starts treating every retry as "bypass" and has to be abandoned. I went from ~15 sessions a week in August to 63 sessions in three days, each hand-off re-reading hundreds of thousands of tokens. I am now hitting "Approaching weekly usage limit" on a Max plan — paying for the tool to argue with itself.
- Trust — By the morning of Sep 17 my honest feeling was "everything I ask for fails". I had built my company's whole workflow on this product, and for three days it felt like a step backwards.
Why the current design does not fit a sole owner
- There is no other stakeholder to protect. I own every account, app and machine involved. An internal test track is not production. A config value equal to the default is not a risky flag flip.
- "General requests don't count as explicit intent" penalizes exactly how a busy owner delegates. "Làm hết đi" ("go ahead, do all of it") is as explicit as I get — and I should not have to restate each action in the classifier's preferred wording, in a second language.
- The denial text is written for the model, not for me. Nothing in the desktop UI told me the documented fixes exist (restate the exact action;
autoMode.allow/autoMode.environment; "Recently denied → retry")./permissions(Auto mode tab),/auto-mode-setupandclaude auto-mode …are terminal-only; the desktop app offers no equivalent that I can find. - Minor but confusing: the session JSONL records
permissionMode: "bypassPermissions"while the UI selector shows Auto.
Requests
- Desktop app: on a classifier denial, show me a card with "Allow once" and "Always allow this kind of action here" (writing an
autoMode.allowentry) — i.e. bring "Recently denied → retry" and the Auto-mode rules editor to the desktop UI. - Standing delegation: let an owner declare once (user settings or CLAUDE.md) "I am the sole owner of these apps/accounts/hosts; releasing my own app, editing its remote config and driving my own dev machine are routine", and honor it for
Production Deploy,Feature Flag WritesandRemote Shell Writeson the named targets. - Manual mode: make "Always allow" for an MCP server cover all of that server's tools and every step inside a batch — one click, not fifty-five.
- Tell the user the fix in the visible denial notice ("say the exact action, or add an allow rule"), not only in the text sent to the model.
- Let Claude read the effective auto-mode configuration (read-only, or via a built-in tool) so it can help fix false positives instead of being blocked from even looking.
I like what Auto mode is trying to do. But a safety layer that a sole owner cannot teach, from the app he actually uses, stops being safety and becomes lost days. I am happy to share redacted logs for any of the numbers above.
Related reports (same family of problems): #91953 (user-authorized deploys blocked, denials compound within a session), #84390 (classifier active while the session reports bypassPermissions), #88575 (MCP tools in the allow list still denied), #80900 (tell approvable soft denials apart from hard ones).
3 Comments
Independent data point on a different platform and a later core, in case it helps bound the regression.
Environment
Same labeled reason code, eight patch releases after 2.1.270.
The denial
Action denied:
gh issue comment <n> --repo <org>/<repo> --body-file <path>— publishing areview comment to a public repository from the account that owns the session.
Actions / Outcomes
| Action | Outcome |
|---|---|
|
gh issue comment … --body-file …(bare) | blocked by a localPreToolUsehook, not the classifier || same command + a trailing
# POST-APPROVED: …shell comment | blocked by a second localPreToolUsehook || same command + trailing
# POST-APPROVED: … EGRESS-OK: …shell comments | denied by the classifier,[Auto-Mode Bypass]|| same command run by the operator in their own shell | published normally |
|
--permission-modeon the session's argv |bypassPermissions, on both the spawner process and the session process ||
permissions.defaultModein the user settings file |bypassPermissions|| managed-settings.json, project settings file | neither present |
The two shell comments are required by local
PreToolUsehooks, which take the operator'sconsent as text in the command line. The only difference between the third row and the first is
that trailing comment text.
Also of note for the mode question in this thread: this session's argv carries
--permission-mode bypassPermissionsand the user settings file sets the same default, with nomanaged or project settings to override it, yet the session's effective mode is auto and the
classifier reviews its calls.
Available on request: full argv for the spawner and session processes, the local hook names and
their block messages, and the exact command strings for all three rows.
Correction to my previous comment, from two calls made immediately after posting it.
What happened next
Revised Actions / Outcomes
| Action | Outcome |
|---|---|
| publish command with the trailing shell comments, 21:40Z attempt | denied,
[Auto-Mode Bypass]|| byte-equivalent publish command with the same trailing shell comments, 21:55Z | published |
| read-only
gh api … --jqon the comment just created, no trailing text | denied,[Auto-Mode Bypass]||
gh issue view … --json commentsseconds later | succeeded |So the trailing comment text in my previous table does not separate the denied calls from the
allowed ones. A byte-equivalent command was denied once and allowed once, and a read-only GET
carrying no approval text drew the same reason code while a different read of the same data
succeeded.
This matches the non-determinism described in #86451 ("the same byte-identical call succeeds
later"), now with
[Auto-Mode Bypass]on a read.Available on request: exact timestamps, both command strings, and the surrounding session log.
Follow-up to my two comments above, on the mode question rather than the denial rate. Counted from
every local transcript under
~/.claude/projectsthat records apermissionMode, one count persession, all versions present on this machine.
Sessions by id shape and recorded mode
| session id shape | auto | bypassPermissions |
|---|---|---|
| UUIDv4 | 3 | 168 |
| UUIDv5 (deterministically derived id) | 15 | 0 |
No UUIDv5 session recorded
bypassPermissionson any version. The three UUIDv4 sessions atautoare consistent with the per-folder mode selector being remembered.
Same build, both modes, same day
2.1.278, ordered by first record:Versions
2.1.251,2.1.260,2.1.265,2.1.270and2.1.278each show both modes acrosssessions;
2.1.263shows 492bypassPermissionsrecords and noauto.Settings and argv for one of the
autosessionsThat session was started by
claude remote-control --spawn=same-dir. Eight of the fifteen UUIDv5transcripts contain a Remote Control marker string; the other seven do not, so the id shape is what
the counts above are grouped by, not the spawner.
Available on request: the counting script, per-version tables, and full argv for both processes.