claude-code - 💡(How to fix) Fix [BUG] Regression: Bypass Permissions mode blocks MCP tools with requiresUserInteraction flag [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#58757Fetched 2026-05-14 03:40:16
View on GitHub
Comments
0
Participants
1
Timeline
6
Reactions
0
Author
Participants
Timeline (top)
labeled ×5subscribed ×1

Error Message

Error message returned by the harness when calling the tool in Bypass Permissions mode:

This tool requires user interaction and is unavailable in unsupervised mode.

Tool calls that triggered it (all in the same TTY session, Bypass Permissions active):

mcp__scheduled-tasks__update_scheduled_task taskId: sage-ziele-session cronExpression: 0 */7 * * * → Error: This tool requires user interaction and is unavailable in unsupervised mode.

mcp__scheduled-tasks__update_scheduled_task taskId: sage-dreaming cronExpression: 13 */7 * * * → Error: This tool requires user interaction and is unavailable in unsupervised mode.

Same calls succeeded earlier in the same session without any settings or mode change in between — suggests state-dependent gating, not a static rule. After app restart the block persisted.

Resolution: Switching to Ask Permissions mode and accepting the prompt with "Always allow" let the same tool calls go through. Switching back was not retested.

Settings at time of failure (~/.claude/settings.json and project .claude/settings.local.json):

{ "autoMemoryEnabled": false }

No permissions, no autoMode, no hooks — i.e. nothing user-configured that would explain the block. The block originates from harness defaults.

Root Cause

Expected at step 4: the call succeeds, because Bypass Permissions is the user's blanket "yes" to all tool calls. Actual at step 4: the call is hard-blocked with the message above.

Fix Action

Fix / Workaround

Workaround (found by trial-and-error): Switch to Ask Permissions mode, accept the prompt once with "Always allow". After that, the tool runs even though the underlying state hasn't changed.

Code Example

**Error message returned by the harness when calling the tool in Bypass Permissions mode:**


This tool requires user interaction and is unavailable in unsupervised mode.


**Tool calls that triggered it (all in the same TTY session, Bypass Permissions active):**


mcp__scheduled-tasks__update_scheduled_task
  taskId: sage-ziele-session
  cronExpression: 0 */7 * * *
Error: This tool requires user interaction and is unavailable in unsupervised mode.

mcp__scheduled-tasks__update_scheduled_task
  taskId: sage-dreaming
  cronExpression: 13 */7 * * *
Error: This tool requires user interaction and is unavailable in unsupervised mode.


**Same calls succeeded earlier in the same session** without any settings or mode change in between — suggests state-dependent gating, not a static rule. After app restart the block persisted.

**Resolution:** Switching to Ask Permissions mode and accepting the prompt with "Always allow" let the same tool calls go through. Switching back was not retested.

**Settings at time of failure (`~/.claude/settings.json` and project `.claude/settings.local.json`):**


{ "autoMemoryEnabled": false }


No `permissions`, no `autoMode`, no hooks — i.e. nothing user-configured that would explain the block. The block originates from harness defaults.

---

1. Open Claude Code in an interactive terminal session.
2. Enable Bypass Permissions (press Shift+Tab until the footer shows "bypass permissions").
3. Invoke an MCP tool annotated `requiresUserInteraction`. Reliable example:

   mcp__scheduled-tasks__update_scheduled_task
     taskId:         <any existing scheduled task ID from mcp__scheduled-tasks__list_scheduled_tasks>
     cronExpression: 0 */7 * * *

4. Observe the response:

   "This tool requires user interaction and is unavailable in unsupervised mode."

5. Without changing any settings, switch the permission mode to Ask Permissions (Shift+Tab).
6. Invoke the exact same tool call again. A confirmation prompt appears; click "Always allow".
7. The call now succeeds. Subsequent calls of the same tool also succeed — even after switching back to Bypass Permissions, in some cases.

Expected at step 4: the call succeeds, because Bypass Permissions is the user's blanket "yes" to all tool calls.
Actual at step 4: the call is hard-blocked with the message above.

---

Context that may help triage:

- The block is not static. Within the same TTY session, the same tool (`mcp__scheduled-tasks__update_scheduled_task`) succeeded several times in a row, then began failing for the rest of the session with the "unsupervised mode" error — without any settings change, mode switch, or restart in between. This suggests the gate is driven by accumulated session state (turn count, parallel tool calls, prior error reminders, or similar), not by a static rule.

- App restart did not clear the block. A fresh session in the same install reproduced the failure on the first attempt.

- Bypass Permissions did not skip the block. The documented purpose of Bypass Permissions is to suppress all permission prompts, yet `requiresUserInteraction` MCP tools are blocked rather than passed through.

- Switching to Ask Permissions + clicking "Always allow" once was the only working remedy. After that, calls succeed.

- The wording "unavailable in unsupervised mode" is misleading. A human is at the keyboard, in an interactive TTY, actively choosing the mode — the session is supervised by any normal definition. Whatever flag the harness is checking, it is not "is this session supervised."

- Affected MCP server is the built-in `scheduled-tasks` server. Likely affects any MCP tool carrying the `requiresUserInteraction` annotation, but only `scheduled-tasks` was tested.

- No user-side configuration that could explain the block. Both `~/.claude/settings.json` and project `.claude/settings.local.json` contained only `{ "autoMemoryEnabled": false }` at the time of failure. No `permissions`, no `autoMode`, no hooks.

- Same workflow worked in the version installed the previous day. The behavior change is therefore a regression introduced by an update between then and the day the report was filed.

Suggested investigation paths:
  1. Identify which harness gate emits "This tool requires user interaction and is unavailable in unsupervised mode" — it does not appear in the public auto-mode classifier documentation.
  2. Check why Bypass Permissions mode does not short-circuit that gate the way it short-circuits the regular permission prompt.
  3. Reproduce the session-state-dependent flip from "allowed" to "blocked" mid-session.
RAW_BUFFERClick to expand / collapse

Preflight Checklist

  • I have searched existing issues and this hasn't been reported yet
  • This is a single bug report (please file separate reports for different bugs)
  • I am using the latest version of Claude Code

What's Wrong?

In Bypass Permissions mode, MCP tools that carry the requiresUserInteraction annotation are silently rejected with:

This tool requires user interaction and is unavailable in unsupervised mode.

This contradicts the semantics of Bypass Permissions, which the user explicitly enables to grant blanket approval for all tool calls. The user has already given permission — by choosing Bypass mode. The error treats Bypass as if it were a non-interactive/headless context, which it isn't: it's a deliberate, interactive choice by the user.

Steps to reproduce:

  1. Start Claude Code in an interactive TTY session.
  2. Enable Bypass Permissions (Shift+Tab until footer shows bypass permissions).
  3. Invoke any MCP tool annotated requiresUserInteraction — e.g. mcp__scheduled-tasks__update_scheduled_task.

Expected: Tool executes. The user opted into Bypass mode precisely to skip prompts.

Actual: Tool is hard-blocked with the "unsupervised mode" error. No way to override from within Bypass.

Workaround (found by trial-and-error): Switch to Ask Permissions mode, accept the prompt once with "Always allow". After that, the tool runs even though the underlying state hasn't changed.

Why this is a regression: Same workflow worked in earlier versions of Claude Code. The MCP tool, the settings, and the user intent are unchanged — only the harness behavior changed.

Why the error message is misleading: "Unsupervised mode" suggests Claude Code has classified the session as non-interactive. It hasn't — the user is actively typing in a TTY. The actual condition is "Bypass mode is incompatible with requiresUserInteraction tools." If this behavior is intentional, the message should say so and point to Ask mode as the fix.

Environment:

  • claude --version: (fill in)
  • OS: Windows
  • Affected MCP server: scheduled-tasks (built-in), reproducible on any tool with requiresUserInteraction

Suggested fix (either or both):

  1. In Bypass mode, treat requiresUserInteraction tools as implicitly approved (consistent with mode semantics).
  2. If keeping the current behavior, rewrite the error: "This tool requires interactive confirmation. Switch to Ask Permissions mode to use it."

What Should Happen?

When the user has explicitly enabled Bypass Permissions, that choice should be respected for all tool calls — including MCP tools annotated requiresUserInteraction. Bypass mode is the user's standing, blanket "yes" to every tool the session encounters; there is no need to gate individual tools behind a separate interaction layer once that mode is active.

Concretely, the workable environment looks like this:

  1. Bypass Permissions = unconditional pass-through. Any MCP tool, regardless of its requiresUserInteraction annotation, executes without further gating. The user has already supplied the interaction by selecting Bypass.
  2. Persistent allow decisions survive mode switches. If a tool was once granted "Always allow" in Ask mode, it stays allowed when the user later switches to Bypass — not silently re-blocked.
  3. If a tool truly cannot be auto-approved for safety reasons, the error should name that reason explicitly ("this tool performs X which Bypass cannot auto-approve") and point to the exact fix ("switch to Ask Permissions mode"). The current "unsupervised mode" wording is wrong: the session is supervised — a human is at the keyboard and has actively chosen the mode.
  4. No silent regressions across versions. Behavior of permission modes for a given MCP tool should not change between releases without a changelog entry and a migration note.

The least-friction outcome for users managing recurring workflows (scheduled tasks, routine MCP operations) is option 1: Bypass means bypass.

Error Messages/Logs

**Error message returned by the harness when calling the tool in Bypass Permissions mode:**


This tool requires user interaction and is unavailable in unsupervised mode.


**Tool calls that triggered it (all in the same TTY session, Bypass Permissions active):**


mcp__scheduled-tasks__update_scheduled_task
  taskId: sage-ziele-session
  cronExpression: 0 */7 * * *
→ Error: This tool requires user interaction and is unavailable in unsupervised mode.

mcp__scheduled-tasks__update_scheduled_task
  taskId: sage-dreaming
  cronExpression: 13 */7 * * *
→ Error: This tool requires user interaction and is unavailable in unsupervised mode.


**Same calls succeeded earlier in the same session** without any settings or mode change in between — suggests state-dependent gating, not a static rule. After app restart the block persisted.

**Resolution:** Switching to Ask Permissions mode and accepting the prompt with "Always allow" let the same tool calls go through. Switching back was not retested.

**Settings at time of failure (`~/.claude/settings.json` and project `.claude/settings.local.json`):**


{ "autoMemoryEnabled": false }


No `permissions`, no `autoMode`, no hooks — i.e. nothing user-configured that would explain the block. The block originates from harness defaults.

Steps to Reproduce

1. Open Claude Code in an interactive terminal session.
2. Enable Bypass Permissions (press Shift+Tab until the footer shows "bypass permissions").
3. Invoke an MCP tool annotated `requiresUserInteraction`. Reliable example:

   mcp__scheduled-tasks__update_scheduled_task
     taskId:         <any existing scheduled task ID from mcp__scheduled-tasks__list_scheduled_tasks>
     cronExpression: 0 */7 * * *

4. Observe the response:

   "This tool requires user interaction and is unavailable in unsupervised mode."

5. Without changing any settings, switch the permission mode to Ask Permissions (Shift+Tab).
6. Invoke the exact same tool call again. A confirmation prompt appears; click "Always allow".
7. The call now succeeds. Subsequent calls of the same tool also succeed — even after switching back to Bypass Permissions, in some cases.

Expected at step 4: the call succeeds, because Bypass Permissions is the user's blanket "yes" to all tool calls.
Actual at step 4: the call is hard-blocked with the message above.

Claude Model

Opus

Is this a regression?

Yes, this worked in a previous version

Last Working Version

from 12.5.26 - for sure at the 11.5.26

Claude Code Version

Claude 1.7196.0 (2dbd78) 2026-05-12T05:34:40.000Z

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

Other

Additional Information

Context that may help triage:

- The block is not static. Within the same TTY session, the same tool (`mcp__scheduled-tasks__update_scheduled_task`) succeeded several times in a row, then began failing for the rest of the session with the "unsupervised mode" error — without any settings change, mode switch, or restart in between. This suggests the gate is driven by accumulated session state (turn count, parallel tool calls, prior error reminders, or similar), not by a static rule.

- App restart did not clear the block. A fresh session in the same install reproduced the failure on the first attempt.

- Bypass Permissions did not skip the block. The documented purpose of Bypass Permissions is to suppress all permission prompts, yet `requiresUserInteraction` MCP tools are blocked rather than passed through.

- Switching to Ask Permissions + clicking "Always allow" once was the only working remedy. After that, calls succeed.

- The wording "unavailable in unsupervised mode" is misleading. A human is at the keyboard, in an interactive TTY, actively choosing the mode — the session is supervised by any normal definition. Whatever flag the harness is checking, it is not "is this session supervised."

- Affected MCP server is the built-in `scheduled-tasks` server. Likely affects any MCP tool carrying the `requiresUserInteraction` annotation, but only `scheduled-tasks` was tested.

- No user-side configuration that could explain the block. Both `~/.claude/settings.json` and project `.claude/settings.local.json` contained only `{ "autoMemoryEnabled": false }` at the time of failure. No `permissions`, no `autoMode`, no hooks.

- Same workflow worked in the version installed the previous day. The behavior change is therefore a regression introduced by an update between then and the day the report was filed.

Suggested investigation paths:
  1. Identify which harness gate emits "This tool requires user interaction and is unavailable in unsupervised mode" — it does not appear in the public auto-mode classifier documentation.
  2. Check why Bypass Permissions mode does not short-circuit that gate the way it short-circuits the regular permission prompt.
  3. Reproduce the session-state-dependent flip from "allowed" to "blocked" mid-session.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

claude-code - 💡(How to fix) Fix [BUG] Regression: Bypass Permissions mode blocks MCP tools with requiresUserInteraction flag [1 participants]