Permission mode reverts from bypassPermissions to acceptEdits on first prompt (Claude Desktop 2.1.149 / Cowork, macOS)
Description
In Claude Desktop (FleetView) on macOS with Cowork enabled, the permission mode silently reverts from bypassPermissions to acceptEdits on the very first user prompt of a session — despite all three opt-ins being present:
~/.claude/settings.json:permissions.defaultMode = "bypassPermissions"+skipDangerousModePermissionPrompt: trueclaude_desktop_config.jsonepitaxy prefs: folder/Users/<me>/work/<project>set tobypassPermissions, with the ack token presentbypassPermissionsOptInByAccountandbypassPermissionsGateByAccountbothtrue
The UI briefly shows the "Bypass permissions" badge at session start, but the actual session state never enters bypass — the JSONL log shows permissionMode: acceptEdits from the very first user message onward.
Trying to toggle to bypass through the UI returns: "Permission mode couldn't be changed. You can try again."
Steps to reproduce
- macOS, Claude Desktop 2.1.149, Cowork enabled
- Configure folder for
bypassPermissions(UI or epitaxy prefs) - Set
~/.claude/settings.json:
``json``
{
"permissions": { "defaultMode": "bypassPermissions" },
"skipDangerousModePermissionPrompt": true
}
- Open a new session in that folder — UI shows yellow "Bypass" badge
- Send any prompt
- Observe: badge persists or flips to "Edit automatically"; tool calls prompt for permission
- Try toggling mode via UI → "Permission mode couldn't be changed" warning
JSONL evidence
From ~/.claude/projects/<sanitized-cwd>/<session>.jsonl — current session (138 messages):
| permissionMode | count |
|---|---|
| acceptEdits | 8 user messages |
| bypassPermissions | 0 |
<task-notification> entries: 3 (none carry permissionMode, but they're interleaved with user messages that all carry acceptEdits).
First user message at line 3 already has permissionMode: acceptEdits — bypass is never written to the session.
Related issues
- #36473 — same symptom (Windows, CLI), closed stale
- #39057 — same symptom (macOS, VSCode), closed stale; comment by @AlexSostin identified
run_in_backgroundtask-notification snapshot as one trigger - #36819 — subagent
mode:frontmatter contamination (second trigger) - #55558 — auto mode not inherited in new sessions
- #59398 — "Permission mode couldn't be changed" persisting (Max plan)
- #60724 — same error on desktop app (AUTO mode)
This issue is the Cowork-specific manifestation that none of the above cover. The Cowork harness appears to inject background activity (CCD session-mgmt, status checks, etc.) at session start, and per @AlexSostin's hypothesis the task-notification frame restores a stale acceptEdits before the user's first turn even runs — which explains why bypass is never observed in the JSONL at all.
Workarounds attempted (none fully work)
defaultMode: bypassPermissionsin user settings.json → mode still resetsskipDangerousModePermissionPrompt: true→ no effect on the underlying reset- Folder-level epitaxy
bypassPermissionsack → UI shows badge but state doesn't follow - Toggling via UI mid-session → "Permission mode couldn't be changed" warning
Environment
- OS: macOS (Darwin)
- App: Claude Desktop (FleetView) 2.1.149
- Cowork: enabled (
cowork-enabled-cli-ops.jsonpresent, CCD MCP servers active) - Plan: Pro
- Session entrypoint:
claude-desktop(interactive)
Impact
bypassPermissions is effectively unusable in Cowork on the desktop app — every tool call prompts despite the configured opt-in, breaking autonomous workflows (skills, /loop, agent runs).
This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗