Skip to content

[Bug]: Claude Auto mode on orchestrator v2 runs ask-rule commands without prompting #15353

Description

@TonybynMp4

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/server

Steps to reproduce

  1. Add an ask rule to Claude Code's user settings, for example "permissions": { "ask": ["Bash(git push:*)"] }.
  2. Start a Claude thread on orchestrator v2 with the permission mode set to Auto.
  3. Ask the agent to run 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 auto mode. 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 auto mode sends anything it wants a human to decide (an ask rule match, a protected path, a classifier escalation) to the SDK canUseTool callback. In ClaudeAdapterV2, that callback answers allow whenever requiresClaudeApproval is false, and installPermissionCallback is false for auto. So every request Claude escalates gets approved without the user seeing it.

The V1 adapter skipped the prompt only for full-access and 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.

Activity

  1. juliusmarminge commented on Oct 3, 2026

    @juliusmarminge
    Member

    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 a permissions.ask match. It's the same gap that merged #13786 closed for Auto-accept edits, still open for Auto.

    What happens

    claudeRuntimeQueryPolicyForRuntimePolicy in apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts maps runtimeMode: "auto" to Claude's permissionMode: "auto" with installPermissionCallback: false. The query always gets canUseTool anyway, and requiresClaudeApproval is that same flag. So after the AskUserQuestion and ExitPlanMode special cases, the callback returns allow right away. The test maps Auto runtime mode to Claude's AI-reviewed permission mode pins the flag at false.

    Claude checks content-scoped ask rules before its auto-mode classifier, and it sends a match to canUseTool instead of letting the classifier approve it. Bash(git push:*) is the trailing-wildcard form of Bash(git push *), so your repro rule is a real ask. The query leaves settingSources unset, which means user settings load and a rule in ~/.claude/settings.json applies. 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 marked requiresUserInteraction.

    Likely fix area

    • One option is to treat auto like auto-accept-edits when approvalPolicy is unset, so the callback raises a normal approval request instead of allowing. An explicit approvalPolicy: "never" could stay non-prompting.
    • A test like the Auto-accept edits one, repeated for runtimeMode: "auto", would cover it. It would call canUseTool for a Bash command and require a command runtime 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 PreToolUse hook that denies the command are good workarounds. A maintainer will decide on the fix direction.

  2. added
    bugSomething is broken or behaving incorrectly.
    via-triageFiled through npx t3 triage
    on Oct 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaving incorrectly.via-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions