[BUG] Dispatch-spawned Claude Code sessions ignore user's model and permission-mode settings — no way to change from mobile
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
When Dispatch spawns a Claude Code session from the mobile app, the session always starts with Sonnet as the default model and standard permission mode, regardless of the user's configured preferences. Since the spawned Code session is not accessible from the mobile app, there is no way to correct model or permission-mode selection remotely.
This defeats the core value proposition of Dispatch: assigning work from your phone and coming back to finished results. If the session starts with the wrong model and permissions, the task either produces lower-quality output (Sonnet instead of Opus) or gets blocked by permission prompts that nobody can approve from mobile.
Actual Behavior
- Model: Always defaults to Sonnet, ignoring
settings.jsonand environment variables - Permission mode: Always defaults to standard (ask permissions), ignoring
settings.json - The spawned Code session is visible in the Desktop sidebar but not accessible from the mobile app
- No workaround exists from mobile — the user must physically go to the desktop to change settings
Root Cause Analysis
Claude Desktop is an Electron app that [constructs a custom environment for CLI subprocesses, extracting only PATH and dropping all other environment variables](https://github.com/anthropics/claude-code/issues/22559). This means:
~/.zshrcexports are not inherited (Electron does not source login shells)launchctl setenvvariables are present in the Electron parent process but not forwarded to the CLI child processsettings.json"model"field is a [known ignored setting on startup](https://github.com/anthropics/claude-code/issues/13242)
Combined with the fact that Dispatch-spawned sessions are [not accessible from Claude mobile](https://github.com/anthropics/claude-code/issues/37713), users have zero control over these parameters when working remotely.
Environment
- Platform: macOS (Mac Studio)
- Claude Desktop: Latest version
- Claude iOS app: Latest version
- Plan: Max
- Model desired: Opus 4.6
- Permission mode desired: bypassPermissions
Related Issues
- #37713 — Dispatch sessions fully isolated from Projects (covers directory/file access, not model/permissions)
- #36170 — Dispatch slow and infinitely asking permissions (symptom of the same root cause)
- #13242 —
settings.jsonmodel setting ignored on startup - #22559 — Desktop app drops all environment variables except PATH
- #36313 — No way to revisit folder permissions for Dispatch
Proposed Solutions (any of these would resolve the issue)
- Inherit settings: Dispatch-spawned Code sessions should read and apply
~/.claude/settings.jsonmodel and permission-mode settings - Mobile UI controls: Add model and permission-mode selection to the Dispatch mobile interface before or during session creation
- Mobile session access: Allow viewing and interacting with spawned Code sessions from the mobile app (would enable
/modeland Shift+Tab) - Dispatch configuration: Add Dispatch-specific settings (e.g., in Claude Desktop Settings → Dispatch → Default model / Default permission mode)
What Should Happen?
Expected Behavior
Dispatch-spawned Claude Code sessions should inherit the user's configured model and permission-mode preferences from ~/.claude/settings.json (or environment variables). At minimum:
"model": "opus"in settings.json → Code session starts with Opus"permissions": { "defaultMode": "bypassPermissions" }→ Code session starts in bypass mode
Alternatively, Dispatch should expose model and permission-mode selection in the mobile UI before spawning a Code session.
Error Messages/Logs
Steps to Reproduce
Steps to Reproduce
- Configure preferred model and permission mode:
- Set
"model": "opus"in~/.claude/settings.json - Set
"permissions": { "defaultMode": "bypassPermissions" }in~/.claude/settings.json - Alternatively: set
ANTHROPIC_MODEL=opusandCLAUDE_CODE_PERMISSION_MODE=bypassPermissionsvialaunchctl setenv(for GUI apps) or~/.zshrc(for shell)
- Restart Claude Desktop
- Open Dispatch from the Claude iOS app
- Send a task that triggers a Claude Code session (e.g., "Open a Claude Code session on my project at ~/projects/myapp and fix the failing tests")
- Observe: Dispatch spawns a Code session on the desktop using Sonnet and standard permission mode
- From the iPhone, there is no way to access the spawned Code session to run
/model opusor change the permission mode via Shift+Tab
Claude Model
Not sure / Multiple models
Is this a regression?
No, this never worked
Last Working Version
_No response_
Claude Code Version
Claude 1.1.9134 (87a63a) 2026-03-26T22:41:57.000Z
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_
14 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
👎
I have been banging my head with this problem for the last several days. Claude continues to hallucinate with its suggested workarounds. It has gotten to a point, where I believe Anthropic probably doesn't have any plan to match OpenClaw and NemoClaw feature to feature. I wish I had not gone down Claude CoWork lane to have built multiple workflows which I now have to baby sit in each of their execution run. Had I implemented those in OpenClaw, I would be better off. Still hoping that Anthropic will come through. So will give it another 2 weeks or so for this bug to be fixed.
I'm a Max subscriber who bought a Mac Mini specifically to run Claude as an always-on autonomous agent via Cowork Dispatch. The current behavior where Dispatch-spawned sessions ignore permission settings makes this impossible — every task requires manual phone approval, which defeats the entire purpose of autonomous agent workflows.
My ideal flow: I send one message from my phone → Claude works autonomously for hours/days → consumes the full weekly token allocation → reports back when done. Right now, tasks stop every few minutes waiting for permission clicks.
Could we get either:
defaultModefrom settings.json (the reported bug)--dangerously-skip-permissionsor auto mode for Dispatch/Cowork contextsThis is the #1 blocker for using Claude as a true autonomous agent. Happy to help test any fix.
+1 Two extensions to roll into this issue (or open as separate but linked):
1. Effort level has the exact same gap. Claude Opus 4.7 added the
xhigheffort level for long-horizon agentic work. Claude Code readseffortLevelfrom~/.claude/settings.jsonand supports per-session override; Dispatch's spawn APIs don't. Specifically:start_code_taskschema exposesmodelwith enum[claude-opus-4-7, claude-opus-4-7[1m], claude-sonnet-4-6, claude-haiku-4-5-20251001]— verified to work when passed explicitly.start_code_taskschema has noeffortparameter.start_task(Cowork) schema has neithermodelnoreffort. So Cowork background tasks have no programmatic way to override the hardcoded defaults at all.2. The in-session UI correctly blocks mid-session changes, but there's no path to pick the right config on a new session either. On clicking the "Legacy Model" dropdown in a running Dispatch task, the UI says: "The model can't be changed once a session has started. Start a new session to use a different model." That's accurate as a mid-session constraint — the gap is that task creation itself doesn't expose model or effort controls, so starting a new session doesn't actually help.
Simplest fix paths, in order of decreasing effort:
modelandeffortLevelfrom~/.claude/settings.json(parity with Claude Code; no new UI; respects user prefs globally). This also fixes #49273 and #50200 naturally.modelandeffortparameters to bothstart_taskandstart_code_taskschemas and have orchestrator surfaces (including the desktop Dispatch UI's "new task" flow) expose them.On a Max plan with
{ "model": "opus", "effortLevel": "high" }in~/.claude/settings.json, every Dispatch-spawned session is silently downgraded to a legacy model/effort config I can't change after the fact. Workaround today is having my orchestrator spawn tasks programmatically with explicitmodel: "opus"— which works forstart_code_taskbut has no equivalent forstart_taskor for tasks created from the UI.The original issue says that it defaults to Sonnet but my own experience and others' online _seem_ to indicate that it's using Opus 4.7, thus chewing through tokens quickly when Sonnet could do the job at less expense. Not sure how to prove that, though.
Confirmed on Claude 1.8555.2 (a476c3) on Mac. settings.json with permissions.defaultMode: bypassPermissions, the UI toggle, and launchctl setenv CLAUDE_CODE_PERMISSION_MODE bypassPermissions all set correctly after a full restart — Dispatch-spawned sessions still prompt for bash commands in Dispatch (in Cowork on Claude.app).
Still reproducing on a current Desktop build (a few days behind latest; this has been reported for weeks). My user-level ~/.claude/settings.json sets permissions.defaultMode: "auto". When Dispatch spawns a Code session, it does not come up in auto — it lands in a mode that still prompts for ordinary terminal commands. Other creation paths (New Session in the Desktop Code tab, scheduled routines) honor defaultMode.
Concrete repro I just ran: in a Dispatch-spawned session with the mobile Code-tab picker set to Auto, a plain read-only "git -C <dir> status" still triggered a permission prompt — so the running session was not actually in auto/classifier mode despite Auto being selected from mobile. Changing the mode from the mobile picker does not take effect on the running session, and reopening it on desktop shows the mode never matched what I picked.
Net: Dispatch ignores my configured default and cannot be corrected remotely — the exact situation where I rely on it (away from my machine). Please have Dispatch honor user-level defaultMode.
Bug: Claude Dispatch ignores model in
~/.claude/settings.jsonI changed the model in
~/.claude/settings.jsonto a model other thanclaude-sonnet-4-6, but Claude Dispatch still usesclaude-sonnet-4-6.Repro
~/.claude/settings.json."model"to a different Claude model.Expected
Claude Dispatch uses the model selected in
~/.claude/settings.json.Actual
Claude Dispatch still uses
claude-sonnet-4-6.Impact
The configured model appears to be ignored or overridden, and there is no clear way to force Claude Dispatch to use the selected model.
This is still an issue. Also adding a screenshot of the Dispatch-spawned Code session from my laptop Desktop app, showing the model it's selected (Opus 4.8 1M) and the permissions (Accept Edits). My Desktop local settings are Sonnet 4.6 and Auto permissions.
<img width="825" height="83" alt="Image" src="https://github.com/user-attachments/assets/ca5d531f-41cd-4a46-9067-51b2b36f91e6" />
Same bug, plus a new failure mode:
/modelin the Dispatch thread silently no-ops but the thread claims it worked.Desktop app (Windows, bundle 2.1.205), Pro plan. My
~/.claude/settings.jsonhas"model": "claude-sonnet-5". The Dispatch (Répartition) coordinator thread ignores it. Confirmed by asking it directly, it reports "Claude Sonnet 5."The new part: typing
/model opusin the Dispatch input doesn't switch the coordinator. Instead of failing visibly, the thread replies with a confirmation like "Confirmed: this thread is now running on Opus 4.8, for this session only." Re-asking "what model are you?" from a cold turn still returns Sonnet 5. So the/modelcommand is being consumed as ordinary chat text, and the model plausibly-completes a fake confirmation, which makes it look fixed when it isn't.This is worse than a silent ignore: a user following the workaround from #67078 gets false-positive feedback that the switch succeeded.
I came across a similar issue, Dispatch uses Opus 4.7 with no apparent way to change this, none of the methods are sticky, always falls back to the legacy model for new Dispatch query.
Solution, model for dispatch is tied to code model selector within claude desktop. tab over to code new chat. Change to desired model. go over to dispatch and hit delete conversation using the 3 dots to change to your new desired model
Adding a fresh mobile reproduction, since this is still open and bites us daily.
Environment: Claude Code in the Android app, remote-controlling a long-running agent session (steps take minutes, so the human is away between them).
What happens: The user selects a specific model (for us, a Fable-tier model) from the mobile picker. Repeatedly — most reliably after a context compaction / session continuation — the session comes back running a different model than the one selected (we see it revert to an Opus-tier model), and the user has to re-select the intended model again. It does not stick across the compaction boundary, and from the phone there is no reliable way to make the choice persist.
This looks like the same root as #13242 (settings.json model preference ignored on startup) and #59516 (model not preserved after
/compact, which was closed as a duplicate), but the mobile manifestation is the one described here in #39889: the choice is dropped and cannot be corrected in a way that holds from the mobile client.Impact: on a phone-driven, multi-hour agent session the revert is silent — the user only notices later that hours ran on the wrong (often more expensive) model. Cost and behaviour both change under them without a signal.
Ask: persist the mobile-selected model across compaction/continuation, and surface the currently active model in the mobile UI so a silent revert is at least visible.