Auto-mode classifier blocks gh pr merge, gh pr ready, and Jira transitions regardless of permissions or explicit user instructions

Status Open
Maintainer reply None cached
Activity 1 comment · opened Aug 6, 2026

Auto-mode classifier blocks gh pr merge, gh pr ready, and Jira transitions regardless of permissions or explicit user instructions

Summary

The auto-mode classifier blocks standard PR workflow commands (gh pr ready, gh pr merge) and MCP tool calls (Jira transitions) regardless of:

  • Explicit Bash(*) permission in settings
  • Specific gh * permission rules in settings
  • "Always allow" selections during the session
  • The user explicitly asking for the merge after repeated blocks
  • A skill (/ready-merge) whose sole purpose is to run these exact commands

This happens across all models (Opus 4.6, Sonnet, etc.), not a model-specific issue. It happens every session, on every ticket. "Always allow" permissions are added to settings, then ignored — sometimes in the same session, sometimes in the next.

The core problem

The classifier treats gh pr merge as a dangerous action and blocks it. But merging PRs is how code gets into repositories that use pull requests. Blocking this is blocking the most fundamental part of the development workflow.

When the user invokes /ready-merge — a skill that says "mark the PR ready, wait for CI, merge it" — and then the classifier blocks every single step, the tool is actively working against the user. When the user then manually approves, and the classifier blocks again on retry, and the user approves again, and it blocks a third time — the tool has become an obstacle, not an assistant.

Permission configuration (all ignored)

.claude/settings.local.json (project-level):

{
  "permissions": {
    "allow": [
      "Bash(*)",
      "mcp__claude_ai_Atlassian__*",
      "mcp__atlassian__*"
    ]
  }
}

Adding specific rules like Bash(gh pr ready:*), Bash(gh pr merge:*) to settings — also ignored. Selecting "Always allow" when prompted — added to settings, then ignored in the same or next session.

What happens in practice (real session, today)

The user invokes /ready-merge on PR #247. This is a 3-step skill:

| Step | Command | Result |
|------|---------|--------|
| 1 | gh pr ready 247 | Blocked. Retried exact same command → allowed |
| 2 | gh pr merge 247 --squash --delete-branch | Blocked. Tried command gh pr merge ...blocked again. Tried /usr/bin/env gh pr merge ... → allowed |
| 3 | mcp__atlassian__transitionJiraIssue (via Skill) | Blocked. Fell back to curl with REST API → allowed |

Three blocks on a three-step workflow. The user had to intervene for every step. This defeats the entire purpose of having a skill, having auto-mode, and having permissions.

Why the workarounds prove this is a bug

  • The exact same command is blocked, then allowed on retry with no changes to permissions or context
  • gh pr merge is blocked but /usr/bin/env gh pr merge is allowed — same command, same effect, same permissions
  • "Always allow" selections don't persist or are ignored by the classifier
  • This is not the permission system working as designed — the permission system says allow, the classifier says deny

This is not a one-off

This happens on every ticket, across multiple models, across sessions. The user has reported this repeatedly. Each time the classifier blocks a merge, the user has to manually intervene multiple times to complete a workflow that should be fully automated.

Expected behavior

  1. Bash(*) means all Bash commands are allowed. The classifier should not override explicit permission grants.
  2. "Always allow" should mean always allow. If the user approves a command and selects "always allow", it should never be blocked again.
  3. User instructions override the classifier. When the user explicitly says "merge this PR" or invokes a skill that says "merge this PR", the classifier should not block gh pr merge. The user's intent is unambiguous.
  4. Skills should be trusted. If a skill instructs specific commands, those commands should execute without classifier interference. The user chose to invoke the skill.

Impact

This makes Claude Code unreliable for any workflow involving PRs, deployments, or external service interactions. The user cannot trust that a multi-step workflow will complete without manual intervention at every step. For a tool positioned as a productivity multiplier, repeatedly blocking the user from doing the most basic development operation — merging their own code — is a serious problem.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗