Permission prompts never fire in desktop-app session; mode silently reverts to acceptEdits each turn
Status Open
Reported on v2.1.271
Maintainer reply None cached
Activity 0 comments · opened Sep 24, 2026
Summary
In a Claude Code desktop app session (Code tab, Agent SDK-hosted), no permission prompt is shown for any action, and the session's permission mode silently reverts to acceptEdits at user-turn boundaries after being explicitly set to default.
Net effect: a user who selects Manual mode gets no gating at all, with no indication that anything is wrong.
Environment
- Claude Code 2.1.271 (from the running process path
.../claude-code/2.1.271/claude.app/...) - macOS, Darwin 25.2.0
- Claude desktop app, Code tab. Session is local (not remote) and attended.
- Permission mode as reported by the session: alternates between
defaultandacceptEdits(see below)
Steps / observations
- Session started in
default(confirmed by reading the session's own metadata). AnEditto a scratch file matching no allow rule completed with no prompt. - Bash commands matching no allow rule (
printf '...' > file,rm -f file) also completed with no prompt. - The session transcript (
~/.claude/projects/<slug>/<session-uuid>.jsonl) records"permissionMode":"default"on the first user message and"permissionMode":"acceptEdits"on the second. No mode-switch tool was called in between, and no approval card was shown. - Setting the mode back to
defaultmid-turn succeeds and is confirmed by a follow-up read of the session metadata — but by the next user turn the mode isacceptEditsagain. Repeated twice. - With the mode confirmed as
defaultimmediately before and after, anEditto a non-matching path still completed with no prompt. - Escalating
default->acceptEdits— documented to show an approval card in every permission mode and wait for it — completed instantly with no card.
Expected
- In
defaultmode, anEditorBashcall matching no allow rule prompts for approval. - An escalation to a broader permission mode shows an approval card and waits.
- A permission mode set explicitly persists across turns until changed.
Ruled out
- Not sandboxing. No
sandboxkey in user, project, or project-local settings (the managed-settings file does not exist); nosandbox-execanywhere in the process ancestry (zsh<-claude<-disclaimer<-Claude.app); noisSandboxedfield recorded on any tool call in the transcript. - Not an over-broad allow rule. No broad
Edit/Writeallow and nopermissions.defaultModein any settings layer. The allow rules present are all path-specific and none matches the probe path. - Not a competing deny/ask rule, and no hooks granting allows.
Possibly related
A Bash write to a path outside the session's working directories caused that directory to be added automatically to the session's additional working directories, with no prompt. That may be intended, but it also removes a natural boundary and made it harder to construct a valid negative control.