[BUG] [VSCode]
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 claudeCode.claudeProcessWrapper is set, it is silently ignored in terminal mode (claudeCode.useTerminal: true). The VS Code integrated terminal always launches claude directly, with no wrapper applied.
What Should Happen?
Both terminal mode and the native UI mode should honour claudeProcessWrapper. With a wrapper of timeout 60, terminal mode should execute timeout 60 claude ..., just as the UI mode does.
Error Messages/Logs
No error is surfaced. The wrapper is silently ignored.
Steps to Reproduce
- Set
claudeCode.claudeProcessWrapperto any value, e.g.timeout 60 - Enable terminal mode:
claudeCode.useTerminal: true - Open Claude Code from the VS Code activity bar or command palette
- Observe the command run in the integrated terminal — the wrapper is absent; it runs plain
claude ... - Disable terminal mode and open Claude Code again — the UI mode correctly applies the wrapper
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.126
Platform
Anthropic API
Operating System
Other
Terminal/Shell
VS Code integrated terminal
Additional Information
Issue was observed in Ubuntu-24.04 WSL 2 on Windows 11.
Investigated by inspecting the bundled extension.js from anthropic.claude-code-2.1.126-linux-x64. The two relevant code paths are both in the jl4 function (the terminal launch helper registered under the claude-vscode.terminal.open command).
Probable root cause:
In extension.js, the terminal launch function hardcodes the command as ["claude", ...args] in both of its execution paths — the shell-integration path and the 3-second sendText fallback:
// shell integration path
let D = ["claude", ...G];
// sendText fallback
let H = ["claude", ...G];
The UI mode correctly calls resolveClaudeBinary(), which reads e6("claudeProcessWrapper") and prepends the wrapper before spawning the process. The terminal launch function never calls resolveClaudeBinary() and is entirely disconnected from the setting.
Fix: Read claudeProcessWrapper once at the top of the terminal launch function and spread its parts into both command arrays:
let _wp = (e6("claudeProcessWrapper") || "").trim().split(/\s+/).filter(Boolean);
// ...
let D = [..._wp, "claude", ...G];
// ...
let H = [..._wp, "claude", ...G];
This handles no wrapper ([]), single-word wrappers (npx), and multi-word wrappers (bun run) correctly, and is consistent with how resolveClaudeBinary applies the setting in the UI mode.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗