[BUG] [VSCode]

Resolved 💬 2 comments Opened May 4, 2026 by jofrev Closed Jun 18, 2026

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

  1. Set claudeCode.claudeProcessWrapper to any value, e.g. timeout 60
  2. Enable terminal mode: claudeCode.useTerminal: true
  3. Open Claude Code from the VS Code activity bar or command palette
  4. Observe the command run in the integrated terminal — the wrapper is absent; it runs plain claude ...
  5. 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.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗