Auto mode classifier denies tool calls in bypassPermissions sessions (v2.1.231)
Environment
- Claude Code: 2.1.231
- OS: macOS (Darwin 25.5.0)
- Launched with:
claude --dangerously-skip-permissions - Settings:
~/.claude/settings.json→permissions.defaultMode: "bypassPermissions"(set explicitly, so the CLI flag and the settings file agree — no ambiguity about the intended mode) - Status bar:
bypass permissions on - No managed settings present (
/Library/Application Support/ClaudeCode/managed-settings.jsonand/etc/claude-code/managed-settings.jsonboth absent)
Summary
In a session whose effective permission mode is bypassPermissions, tool calls are intermittently denied with:
Permission for this action was denied by the Claude Code auto mode classifier.
Reason: Blocked by classifier.
Per the permission-modes docs, bypassPermissions "disables permission prompts and safety checks so tool calls execute immediately". The documented exceptions are explicit ask rules, connector tools an org set to ask, MCP tools marked _meta["anthropic/requiresUserInteraction"], the rm -rf / / rm -rf ~ circuit breaker, and two cross-session messaging safeguards. The auto mode classifier is not among them.
Two further mismatches with the documented exceptions:
- Every documented exception produces a prompt. What we see is a hard denial with no prompt — there is no in-CLI path to approve the action.
- The denial text tells the user to "add a Bash permission rule to their settings", which does not apply to MCP tool calls.
Evidence
From the session transcript (~/.claude/projects/<project>/<session-id>.jsonl):
"permissionMode":"bypassPermissions"appears in 57 entries. No other value appears anywhere in the file — the session was never inautounder any resolution.- The full denial string appears inside
tool_resultentries in that same transcript. - Denials are non-deterministic:
tabs_create_mcpwas denied once, and the byte-identical call succeeded a few turns later.
Denied calls observed
All were claude-in-chrome MCP tools:
tabs_create_mcp— no arguments at allnavigate→https://github.com/enterprisesbrowser_batch→navigatetohttps://github.com/organizations/EXAMPLE_ORG/settings/billingbrowser_batch→ a single read-onlyleft_clickon a row ofhttps://github.com/enterprises/EXAMPLE/billing/budgets, to open a detail view
Case 4 is the clearest: the same page had just loaded successfully via navigate in the same session. Navigation to that URL was allowed; a click on the rendered page was denied.
In the same session and mode, these all succeeded: navigation to example.com, google.com, github.com, and the billing URL in case 4; computer screenshots; typing into a search box; tabs_close_mcp; and every Bash call.
Minimal reproduction
- Put
"defaultMode": "bypassPermissions"underpermissionsin~/.claude/settings.json - Launch
claude --dangerously-skip-permissions - Confirm the status bar reads
bypass permissions on - With the
claude-in-chromeMCP, navigate to a billing or account-settings page of a site you are logged into - Attempt a
computerleft_clickon that page - Observe the denial
Because the behavior is non-deterministic, step 5 may need a few attempts.
Expected behavior
Either:
bypassPermissionssuppresses the auto mode classifier, matching the documented "disables permission prompts and safety checks"; or- the docs list the classifier as an exception in
bypassPermissions, and the denial offers an in-CLI approval path rather than a dead end.
Actual behavior
Hard denial, no prompt, no approval path, non-deterministic, in a session that never left bypassPermissions.
Possibly related
- #36168 — bypass / dangerously-skip-permissions reported broken after v2.1.77
- #33617 — session lands in
autoinstead ofbypassPermissionswhen launched with--dangerously-skip-permissions - #43406 — Edit tool prompts despite bypass
Note on #33617: we initially suspected a flag-vs-settings mismatch was the cause, since the settings file had defaultMode: "auto" while the session was launched with the flag. Setting defaultMode: "bypassPermissions" explicitly and relaunching did not fix it — case 4 above was observed after that change, with both layers in agreement.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗