[BUG] VS Code extension ignores `remoteControlAtStartup` — re-filing after #41036 and #53647 were auto-misrouted by dup-bot
Preflight Checklist
- [x] I have searched existing issues to make sure this isn't a duplicate
- [x] This is a single bug report (not bundling multiple bugs)
- [x] I am using the latest version of Claude Code
Note to maintainers (please read before any auto-dup routing)
This bug has been filed twice already. Both times the duplicate-detection bot has auto-routed it to #29929 (a CLI /config persistence bug — unrelated to the VS Code extension's launch path):
- #41036 (filed 2026-03-30) — auto-closed 2026-04-03 as dup of #29929, auto-locked 2026-04-13. Filer pointed out the misrouting in a comment; thread was locked before triage.
- #53647 (filed 2026-04-26, includes code-level reverse-engineering of the exact missing call site) — auto-closed 2026-04-30 as dup of #41036, auto-locked 2026-05-07.
Both were closed by github-actions[bot]. Zero human-team engagement on any thread.
The enhancement request #37589 (15 👍, currently stale) covers a separate proposed setting name. This issue is about the existing, documented remoteControlAtStartup field already being silently ignored by the VS Code extension launch path.
Requesting human triage. Happy to test a fix against the Windows 11 build.
What's wrong?
remoteControlAtStartup: true in ~/.claude/settings.json auto-starts the Remote Control bridge for terminal CLI sessions, but is silently ignored by the VS Code extension. Every VS Code panel session requires manually typing /remote-control to enable mobile/web remote access.
Root cause (credit to @Ashkaan in #53647, binary v2.1.120 — still present in v2.1.143)
The bridge auto-start gate in the claude binary feeds into replBridgeEnabled:
replBridgeEnabled: (tY || RD)
// tY = !resume && !continue && !inRemoteSession && (cliFlag || zi() || daemonFlag)
// zi() reads remoteControlAtStartup from settings.json or ~/.claude.json
The field is replBridgeEnabled — it only takes effect for interactive REPL sessions. The VS Code extension launches claude in print/SDK mode (--input-format stream-json --output-format stream-json --print), which has no REPL, so the gate is never reached.
Separately, the VS Code extension has its own per-channel remote-control state (remoteControlState in extension.js) and an IPC handler toggleRemoteControl(channelId, enable). The handler is invoked only by the webview's UI toggle. Nothing in claudeLaunched(V) reads remoteControlAtStartup and auto-calls toggleRemoteControl(V, true).
What should happen
When remoteControlAtStartup: true, the VS Code extension should call toggleRemoteControl(channelId, true) after claudeLaunched(channelId), matching the CLI's behavior.
Steps to reproduce
- Set
"remoteControlAtStartup": truein~/.claude/settings.json - Run
claudein PowerShell — bridge auto-starts, session appears at claude.ai/code ✅ - Open a new conversation in the VS Code extension panel (native UI, not
claudeCode.useTerminal) — bridge does NOT auto-start ❌ - Manually clicking the Remote Control toggle in the webview, or typing
/remote-control, works — confirming the feature itself is supported per-session
Use case
I run a Claude Code-based EA inside the EA project directory and want it always available via the Claude mobile app, so I can voice-talk to it on a walk. The CLI path works perfectly. The VS Code extension path requires walking back to the keyboard every time the panel restarts to type /remote-control, which defeats the "always on" framing.
Workaround (now treating as the design until fixed)
Run claude remote-control --name "EA" in VS Code's integrated terminal as a persistent server. The graphical panel continues to work alongside it; the terminal-resident server is the actual mobile-accessible Remote Control endpoint. Verified working on Windows 11 / v2.1.143.
Claude Code Version
CLI binary 2.1.143, VS Code extension 2.1.143
Platform
Anthropic API (Claude Pro)
OS / Shell
Windows 11 Home 10.0.26200 / VS Code with integrated PowerShell
Related
- #37589 — enhancement request for a
remoteControlEnabledsetting (currentlystale, 15 👍) - #41036 — same bug, auto-closed as wrong dup, locked
- #53647 — same bug refiled with code-level evidence, auto-closed as wrong dup, locked
- #29929 — actually about CLI
/configpersistence (different bug, repeatedly mis-routed here) - #28951 — about
/rcnot available in VS Code at all (the manual path is now fixed; auto-start is not)
Showing cached comments. Read the full discussion on GitHub ↗
11 Comments
Proposed Solution
---
title: "VS Code extension ignores
remoteControlAtStartup"issue: https://github.com/anthropics/claude-code/issues/62149
repo: anthropics/claude-code
issue-num: 62149
type: bug-fix
area: ide, remote
platform: vscode, windows
competition: zero (0 comments, filed twice before as #41036/#53647)
quote: $2,000-$3,000
---
claude-code #62149 — VS Code Extension Ignores
remoteControlAtStartup📋 Issue Summary
| Field | Value |
|-------|-------|
| Repository | anthropics/claude-code |
| Issue | #62149 |
| Title | [BUG] VS Code extension ignores
remoteControlAtStartup|| Type | Bug (area:ide, platform:vscode, platform:windows) |
| Has Repro | Yes |
| Competition | Zero (0 comments; previously auto-misrouted as dupes #41036, #53647) |
| Estimated Quote | $2,000–$3,000 |
---
🔍 Root Cause Analysis
The Feature:
remoteControlAtStartupThe
remoteControlAtStartupsetting in~/.claude/settings.jsonis designed to automatically enable Remote Control when a Claude Code session starts. This lets users control their local Claude Code session from claude.ai/code (web UI) or the Claude mobile app without manually running/remote-controleach time.Expected behavior: Every new Claude Code session (CLI or IDE) should auto-enable Remote Control on launch.
Actual behavior:
Architecture: How Remote Control Gets Enabled
The Remote Control enablement path differs between CLI and VS Code:
Confirmed Root Cause (Binary Analysis — @Ashkaan, #53647)
Binary analysis of the compiled
claude.exeby @Ashkaan confirmed:replBridgeEnabledgate is REPL-only: The gate that readsremoteControlAtStartupand callstoggleRemoteControl()lives inside the interactive REPL loop. It is never reached whenclauderuns in print/SDK mode (--input-format stream-json --output-format stream-json --print).claudewith--printand JSON streaming flags, which bypasses the REPL entirely. The process communicates via stdin/stdout JSON-RPC rather than an interactive terminal loop.toggleRemoteControl(channelId, enable)IPC handler, but theclaudeLaunched(V)lifecycle hook does not:remoteControlAtStartupfrom~/.claude/settings.jsontoggleRemoteControl(channelId, true)when the setting istrueremoteControlAtStartupand enables Remote Control outside the REPL loop. This affects VS Code, any other IDE extension, and potentially headless/SDK integrations.Why This Was Filed Three Times
The issue was filed as #41036, #53647, and now #62149. The first two were auto-misrouted by the dup-bot because:
---
🛠️ Proposed Fix
Fix Option A: VS Code Extension Reads Setting on Launch (Recommended)
Location: VS Code extension's
claudeLaunched(V)lifecycle handlerApproach: When the VS Code extension launches a Claude Code session, read
remoteControlAtStartupfrom the user's settings and auto-calltoggleRemoteControl()if enabled.Why this is the right fix:
settings.jsontoggleRemoteControl(channelId, enable)IPC handlerFix Option B: Bridge Auto-Start Gate in SDK/Print Mode (Alternative/Complementary)
Location:
claudebinary — session initialization codeApproach: Move the
remoteControlAtStartupread-and-enable logic out of the REPL-specific path and into the session initialization code that runs regardless of mode (REPL, print, SDK).Trade-offs:
Recommended: Fix A + Guard in Fix B
Implement Fix A as the primary solution (VS Code extension reads setting). As a complementary fix, add a session-init-level
remoteControlAtStartuphandler in the binary (Fix B) with a guard that only auto-enables when an IDE channel is detected:---
📁 Files to Modify
| File | Component | Change |
|------|-----------|--------|
|
vscode-extension/src/extension.ts| VS Code extension | InclaudeLaunched(V), readremoteControlAtStartupfrom~/.claude/settings.jsonand calltoggleRemoteControl(channelId, true)||
src/session/init.ts(inferred) | Claude binary | MoveremoteControlAtStartupcheck from REPL loop to session init, with IDE-channel guard ||
src/remote-control/bridge.ts(inferred) | Claude binary | EnsurereplBridgeEnabledgate also applies to SDK/print mode when IDE channel is present |---
✅ Testing Plan
Test 1: VS Code Extension with
remoteControlAtStartup: true"remoteControlAtStartup": truein~/.claude/settings.jsonclaude.ai/codefor active session)/remote-controlcommand neededTest 2: VS Code Extension with
remoteControlAtStartup: false"remoteControlAtStartup": false(or omit) in~/.claude/settings.json/remote-controlif desiredTest 3: CLI Session Unchanged
"remoteControlAtStartup": trueclaudein terminal (interactive REPL)Test 4: Headless/CI Mode Not Affected
"remoteControlAtStartup": trueclaude --print "hello"orclaude --input-format stream-json --output-format stream-jsonTest 5: Windows Platform
platform:windowslabel)~/.claude/settings.jsonworks on Windows (%USERPROFILE%\.claude\settings.json)Test 6: Settings Hot-Reload
remoteControlAtStartup: falsetruewhile session is running---
📊 Impact Assessment
User Impact
remoteControlAtStartup: trueRisk Assessment
trueCompetitive Positioning
---
💰 Pricing Rationale
| Factor | Assessment |
|--------|-----------|
| Has repro | Yes — step-by-step reproduction included |
| Root cause known | Yes — confirmed by binary analysis (@Ashkaan, #53647) |
| Fix complexity | Low-Medium — localized extension change + optional binary gate |
| Competition | Zero (0 comments) |
| User impact | Medium — affects all VS Code users with the setting |
| Risk | Low — additive change, backward compatible |
Quote: $2,000–$3,000
This is well-documented with confirmed root cause, making it a straightforward fix. The price reflects the value of a complete, tested solution for a persistent bug that has been filed three times.
---
📝 Notes
claudebinary; coordinate with the core team for integrationremoteControlAtStartupusage and auto-enable success rateConfirming on macOS — same root cause, same fix seam, verified end-to-end.
Reproduced on macOS 26.5 / Apple Silicon, VS Code extension
anthropic.claude-code-2.1.160-darwin-arm64, Max subscription.remoteControlAtStartup: truein~/.claude/settings.jsonis honored by the terminal CLI but ignored by the VS Code panel launcher — every panel session still needs a manual/remote-control.@Ashkaan's root cause (from #53647) is still present in 2.1.160:
extension.js,remoteControlAtStartupappears only in the settings schema (...boolean().optional().describe(...)) and is never read anywhere else.toggleRemoteControl(channelId, true)exists but is only invoked by the webview UI toggle (thetoggle_remote_controlIPC handler) — never from theclaudeLaunched(channelId)lifecycle.I verified the proposed Fix A end-to-end by patching the real
claudeLaunched(z)impl to readremoteControlAtStartupfrom~/.claude/settings.jsonand, whentrue, callthis.toggleRemoteControl(z, true)(deferred ~4s so the session is initialized). Result: every VS Code panel session now auto-connects to claude.ai / the mobile app with the native webview UI fully intact — no manual/remote-control.So Fix A is correct and low-risk: it's just the missing
claudeLaunched -> toggleRemoteControlcall. Happy to share the exact patch diff or test a real fix against the macOS build.Confirming this on Claude Code 2.1.107, Windows 11, VS Code native extension.
~/.claude/settings.json(global user scope) contains"remoteControlAtStartup": true.managed-settings.json, no project/local override of the key,disableRemoteControlnot set./remote-controlmanually in the same session works correctly every time, so auth (claude.ai OAuth) and mobile pairing are fine — only the auto-start-on-launch path is affected.Matches the root cause described above: the extension launches in print/SDK mode and never hits the REPL gate that reads
remoteControlAtStartup. +1 for Fix Option A (read the setting in the extension's launch lifecycle and calltoggleRemoteControl()when enabled).Still reproduces on v2.1.187 (Windows 11, VS Code extension)
Confirming this is still present on the latest build — not fixed as of
2.1.187.Environment
2.1.187anthropic.claude-code-2.1.187-win32-x64Config (
~/.claude/settings.json):Repro
remoteControlAtStartup: truein~/.claude/settings.json./remote-control(/rc) manually each session. ❌Expected: the extension honors
remoteControlAtStartupthe same way the CLI does.Also reproduces on macOS with Claude Code v2.1.181 (VS Code native extension).
~/.claude/settings.jsonhas{ "remoteControlAtStartup": true }(also confirmed via/config→ "Enable Remote Control for all sessions = true").managed-settings.json, no project/local override — nothing overriding the value./remote-controlmust be run manually every session.Auth is a Claude Max subscription (no
ANTHROPIC_API_KEYset). Note:/bugis also unavailable in the VS Code extension environment.Confirming this still repros on v2.1.204 (macOS) — the report is v2.1.143, so it's persisted across ~60 builds — and adding two data points beyond the original repro:
settings.json. SettingremoteControlAtStartup: truein the Team/Enterprise Managed settings (settings.json) editor atclaude.ai/admin-settings/claude-codepropagates to~/.claude/remote-settings.jsonon member machines, and the VS Code extension still ignores it. So enterprise admins can't enable this org-wide for IDE users either — there's no admin toggle for it, and the managed setting is silently dropped by the extension launch path.claudeLaunched(...)never callstoggleRemoteControl(..., true).(Aside:
~/.claude/policy-limits.jsonshowsdefaults.remote_control_at_startup: false, but that does not block the Desktop app on the same machine, so it isn't the cause — reinforcing that this is purely the VS Code extension launch-path gap, not a policy/precedence issue.)Same ask: human triage, and have the VS Code extension honor
remoteControlAtStartupin its launch path. Happy to test a fix on macOS.Confirming this on v2.1.207 (Windows, VS Code extension), still broken.
Additional data point beyond settings.json: running
/config remoteControl=trueinside the VS Code extension returns "Set Enable Remote Control for all sessions to true", but a new session started afterward still does NOT auto-connect — it never appears in the mobile app. So even the in-app toggle path is ignored, not just the hand-edited remoteControlAtStartup key. Manual/remote-controlper session works, and the CLI (claudein a terminal) auto-connects fine with the same setting — consistent with the print/SDK-mode root cause described above (the REPL-only gate is never reached when the extension launches claude with --print/stream-json).Workaround for others landing here: run
claudein the VS Code integrated terminal instead of the extension panel to get auto Remote Control.Still reproduces on v2.1.210 (Windows 11 / WSL2, VS Code native extension, Claude Max). Thread's newest confirmation is 2.1.207, so adding a current data point plus one new finding.
Ruling out stale config. Rather than just checking the setting, I cycled it: toggled off via the
/configUI, restarted VS Code, toggled on, restarted again. Verified afterward that both~/.claude/settings.jsonand~/.claude.jsonholdremoteControlAtStartup: true. Then opened a panel session and did not type/remote-control. No session on mobile, no RC UI. The same settings auto-connect fine runningclaudein a WSL terminal on the same machine.Also confirms @linzoie's point that the in-app toggle path is affected, not just the hand-edited key: the toggle's own definition reads and writes
remoteControlAtStartup, so it's a new front-end over the same ignored setting.New finding: the init-response plumbing exists in 2.1.210. The binary now builds an init response carrying:
The CLI's own description of that last field: "IDE-side rollout kill-switch for RC auto-enable (tengu_ide_rc_auto_enable), independent of remote_control_auto_enable. Carried on the init response (not experimentGates) because the host reads it at init time... Absent (older CLI) → treat as false."
So the CLI does resolve the setting and does tell the host to auto-enable. Locally,
cachedGrowthBookFeatures.tengu_ide_rc_auto_enableisfalse.Speculating, but it reads like the host-side fix landed behind a rollout flag that hasn't reached general availability. If so this may be a rollout question rather than an unfixed bug, which would be useful to know either way. Happy to test against a build with the gate on.
Confirming this also reproduces on macOS (not Windows-specific):
~/.claude/settings.jsoncontains"remoteControlAtStartup": true(verified on disk)/remote-controlin an extension session connects successfully every timeSo the setting is saved correctly and Remote Control itself works, but the extension never auto-enables it, consistent with the print/SDK-mode analysis above.
Reproduced on macOS 26.5 (arm64), VS Code 1.130.0, extension
2.1.219-darwin-arm64, CLI2.1.211.~/.claude/settings.jsoncontains"remoteControlAtStartup": true(written both by hand and via/config remoteControl=true). New terminal sessions are fine; new sessions in the VS Code extension panel never auto-start the bridge.The cause looks like it's on the extension side, not in settings resolution. In
extension.js:and the auto-start site:
remote_control_auto_enableis the field the CLI computes from the setting — its own schema describes it as "Whether the CLI resolver says Remote Control should auto-enable at session start (explicit setting → policy default → GB rollout), so IDE hosts can mirror TUI behavior." That part resolves correctly here. But the extension ANDs it withide_rc_auto_enable_gate, which comes from the server-side flagtengu_ide_rc_auto_enable, defaulting tofalse:So while that flag is off for an account, no local configuration can make the IDE honor
remoteControlAtStartup— not user settings, not policy settings, not/config. The setting is silently inert in the panel while working in the TUI, which is exactly why this keeps getting dup-closed onto the terminal-side persistence issues (#29929, #30432): different code path, opposite symptom. The feature-override hooks that would let a user force it are also no-ops in the shipped build —setGrowthBookConfigOverrideisfunction sIg(e,t){return}, and theCLAUDE_INTERNAL_FC_OVERRIDESreader early-returns before ever readingprocess.env.Two things that would each fix the user-visible bug:
remoteControlAutoEnableOn()respect an explicitly-setremoteControlAtStartupregardless of the rollout gate — the gate is presumably there to stage the default-on behavior, whichremote_control_auto_on_by_defaultalready distinguishes (p && d === void 0). An explicit user opt-in isn't the rollout case./configcurrently reports "Enable Remote Control for all sessions: true" in a panel session where it can never take effect.Workaround for anyone landing here: run
/remote-controlmanually in each panel session, or useclaudein a terminal where the setting is honored.Still reproducing on VS Code extension 2.1.220 (bundled native binary 2.1.220), macOS 26 / Apple Silicon, claude.ai OAuth subscription.
Adding a current data point, plus one correction to the standing root-cause analysis — the extension's remote-control code has changed materially since @jasonnickel's 2.1.160 read, and the bug survives the change.
Environment / ruled out
~/.claude/settings.json→"remoteControlAtStartup": true(user scope, confirmed present)disableRemoteControl— not set in any settings scopemanaged-settings.jsonat any standard macOS pathremoteControlState,remoteControlAtStartupSource,remoteControlAtStartupWriteSeqare all absent from~/.claude.json(onlyhasRemoteEnvironment: trueandremoteControlSurfacesSeen: ["mobile"])claudeis 2.1.37, but the extension resolves its own bundled binary viaasAbsolutePath(join("resources","native-binary", t))— verifiedresources/native-binary/claude --version→ 2.1.220. So the launched binary is well past the 2.1.203 support line; this is not a version-skew artifact./remote-controlmanually in the same panel session works every time — auth and mobile pairing are fine, only auto-start is affected.Correction: the plumbing is no longer absent in 2.1.220
The thread's standing root cause is that
remoteControlAtStartup"appears only in the settings schema and is never read anywhere else" (observed on 2.1.160). That is no longer accurate. Token counts inextension.js(2.1.220):Reproduce with:
grep -rhoE "remoteControl[A-Za-z]*" <ext-dir>/extension.js | sort | uniq -cSo substantial RC startup machinery now exists in the extension — and the bug still reproduces on that same build.
Where I'd look next (hypothesis, not verified)
remoteControlAutoEnableDefaultdoes not appear to be read from local settings; in 2.1.220 it is assigned from the CLI's initialization payload:If
remote_control_auto_enablecarries an account/server-side default rather than a projection of the localremoteControlAtStartup, the extension's auto-enable decision would never consult the user'ssettings.jsonat all — which matches the observed behaviour exactly: setting present and correct, plumbing present, auto-enable never fires.That would also be consistent with the original
replBridgeEnabledanalysis: the local-settings read (zi()) gates the REPL path, while the extension launches in print/SDK mode and instead depends onremote_control_auto_enablearriving from initialization.Worth confirming whether
remote_control_auto_enableis intended to carry the local setting through, and if not, whether the fix seam is simply to have the extension OR-in its own read ofremoteControlAtStartupafterclaudeLaunched(channelId).Happy to run any diagnostic against 2.1.220 on macOS.