Repository navigation
[Bug]: Claude Auto mode on orchestrator v2 runs ask-rule commands without prompting #15353
Description
Activity
Note
Grok responding on behalf of Julius.
Triage
Thanks for the precise report, @TonybynMp4! This reproduces on current
main. A Claude thread in Auto auto-approves the tool calls Claude has already decided to ask about, including apermissions.askmatch. It's the same gap that merged #13786 closed for Auto-accept edits, still open for Auto.What happens
claudeRuntimeQueryPolicyForRuntimePolicyinapps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.tsmapsruntimeMode: "auto"to Claude'spermissionMode: "auto"withinstallPermissionCallback: false. The query always getscanUseToolanyway, andrequiresClaudeApprovalis that same flag. So after theAskUserQuestionandExitPlanModespecial cases, the callback returnsallowright away. The testmaps Auto runtime mode to Claude's AI-reviewed permission modepins the flag atfalse.Claude checks content-scoped ask rules before its auto-mode classifier, and it sends a match to
canUseToolinstead of letting the classifier approve it.Bash(git push:*)is the trailing-wildcard form ofBash(git push *), so your repro rule is a real ask. The query leavessettingSourcesunset, which means user settings load and a rule in~/.claude/settings.jsonapplies. The permission modes guide says Auto approves routine actions and asks about others, but today those asks never reach the thread.Routine classifier approvals never call
canUseTool, so routing asks to the user wouldn't turn Auto into Supervised. A one-off classifier block isn't a prompt either and stays inside Claude. The callback does see the later fallback, when repeated blocks make Claude start prompting again. It also sees anything else Claude routes as an ask, such as org connector tools set to ask or MCP tools markedrequiresUserInteraction.Likely fix area
- One option is to treat
autolikeauto-accept-editswhenapprovalPolicyis unset, so the callback raises a normal approval request instead of allowing. An explicitapprovalPolicy: "never"could stay non-prompting. - A test like the Auto-accept edits one, repeated for
runtimeMode: "auto", would cover it. It would callcanUseToolfor aBashcommand and require acommandruntime request before any decision. The policy-mapping assertion would change along with it. - Full access (
bypassPermissions) has the same auto-allow, and Claude would still send ask rules to the callback there. The guide says that mode doesn't prompt, so whether it should honor ask rules is a separate question.
Until then, Supervised or a
PreToolUsehook that denies the command are good workarounds. A maintainer will decide on the fix direction.- One option is to treat
- addedbugSomething is broken or behaving incorrectly.Something is broken or behaving incorrectly.via-triageFiled through npx t3 triageFiled through npx t3 triage
on Oct 3, 2026
Before submitting
Area
apps/server
Steps to reproduce
"permissions": { "ask": ["Bash(git push:*)"] }.git push(or any command matching the ask rule).Expected behavior
T3 Code shows an approval request, the same way Claude Code does in its own
automode. The permission modes guide says Auto "uses the provider's automatic review to approve routine actions and ask about others".Actual behavior
The command runs with no prompt, the same as Full access.
Claude's
automode sends anything it wants a human to decide (an ask rule match, a protected path, a classifier escalation) to the SDKcanUseToolcallback. InClaudeAdapterV2, that callback answersallowwheneverrequiresClaudeApprovalis false, andinstallPermissionCallbackis false forauto. So every request Claude escalates gets approved without the user seeing it.The V1 adapter skipped the prompt only for
full-accessand asked in Auto. #13786 fixed the same problem for Auto-accept edits and left Auto unchanged.Impact
Major degradation or frequent failure
Version or commit
main @ 65731f9
Environment
Linux, Claude Code provider, orchestrator v2
Workaround
Use Supervised, or add a PreToolUse hook that blocks the command.