[BUG] VS Code extension v2.1.51 fails to activate on Windows due to hardcoded Linux path
Status Fixed / completed
Reported on v2.1.51
Maintainer reply None cached
Activity 4 comments · opened Feb 24, 2026 · closed Feb 24, 2026
Preflight Checklist
- [ ] 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?
VS Code extension v2.1.51 fails to activate on Windows, causing command 'claude-vscode.terminal.open' not found when clicking the Claude icon.
The extension cannot activate because a Linux build path is hardcoded in the win32-x64 build of the extension.
What Should Happen?
The extension should activate successfully on Windows and open Claude Code when clicking the Claude icon.
Error Messages/Logs
2026-02-24 12:16:04.803 [error] Activating extension Anthropic.claude-code failed due to an error:
TypeError: The argument 'filename' must be a file URL object, file URL string, or absolute path string.
Received 'file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk.mjs'
at Module.createRequire (node:internal/modules/cjs/loader:1915:13)
at Object.<anonymous> (c:\Users\<username>\.vscode\extensions\anthropic.claude-code-2.1.51-win32-x64\extension.js:45:4602)
Steps to Reproduce
- Install Claude Code VS Code extension v2.1.51 on Windows 11
- Click the Claude icon in VS Code
- Error:
command 'claude-vscode.terminal.open' not foundappears - Open Developer: Show Logs → Extension Host to confirm the activation error above
Claude Model
Sonnet (default)
Is this a regression?
Yes, this worked in a previous version
Last Working Version
2.1.49
Claude Code Version
2.1.51
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
Downgrading the extension to a previous version resolves the issue.
Extension can be downgraded via: Extensions panel → Claude Code → Install Another Version
4 Comments
Used Claude to Fix Claude, works great.
<img width="232" height="217" alt="Image" src="https://github.com/user-attachments/assets/f40b30da-23e8-4174-bf99-da8ba0a5b9fe" />
```# fix-claude-code-extension.ps1
#
Fixes Claude Code VSCode extension activation failure on Windows.
#
Error:
Activating extension 'Anthropic.claude-code' failed:
The argument 'filename' must be a file URL object, file URL string,
or absolute path string. Received 'file:///home/runner/work/...'
#
Root cause:
The extension bundle contains two hardcoded Linux CI build paths
(file:///home/runner/work/...). On Windows, Node.js rejects these
URLs in fileURLToPath() because they have no Windows drive letter.
This crashes the extension immediately at activation.
#
What this script patches:
Fix 1 - createRequire call: crashes at activation time
.createRequire("file:///home/runner/.../sdk.mjs")
-> .createRequire(__filename) (use actual file path instead)
#
Fix 2 - path resolution call: crashes when agent SDK is invoked
SomeFunc("file:///home/runner/.../sdk.mjs")
-> inline child_process lookup for the claude CLI on PATH
#
Usage:
Right-click -> "Run with PowerShell"
OR from a PowerShell prompt: .\fix-claude-code-extension.ps1
$ErrorActionPreference = "Stop"
$extensionRoot = "$env:USERPROFILE\.vscode\extensions"
$badUrl = 'file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk.mjs'
---- Regex patterns (stable across minified versions) ----
Fix 1: .createRequire("file:///home/...sdk.mjs")
The method name createRequire is stable even in minified code.
$pattern1 = '\.createRequire\("file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk\.mjs"\)'
$replacement1 = '.createRequire(__filename)'
Fix 2: anyMinifiedName("file:///home/...sdk.mjs")
After fix 1 removes the createRequire case, any remaining call
with this URL is the fileURLToPath wrapper (Ye or similar).
Replace it with an inline lookup that finds the claude CLI on PATH.
$pattern2 = '[a-zA-Z_$][a-zA-Z0-9_$]*\("file:///home/runner/work/claude-cli-internal/claude-cli-internal/build-agent-sdk/sdk\.mjs"\)'
$replacement2 = '(function(){try{return(require("child_process").spawnSync(process.platform==="win32"?"where.exe":"which",["claude"],{encoding:"utf8"}).stdout||"").split(/[\r\n]+/).filter(Boolean)[0]}catch(e){}})()'
---- Find extension directories ----
if (-not (Test-Path $extensionRoot)) {
Write-Host "VSCode extensions directory not found: $extensionRoot" -ForegroundColor Red
exit 1
}
$dirs = Get-ChildItem $extensionRoot -Directory | Where-Object { $_.Name -like 'anthropic.claude-code-*' }
if ($dirs.Count -eq 0) {
Write-Host "No Claude Code extension found in: $extensionRoot" -ForegroundColor Yellow
exit 1
}
Write-Host "Found $($dirs.Count) Claude Code extension(s):`n"
foreach ($dir in $dirs) {
$label = $dir.Name
$file = Join-Path $dir.FullName 'extension.js'
if (-not (Test-Path $file)) {
Write-Host "[$label] extension.js not found, skipping" -ForegroundColor Yellow
continue
}
$content = [System.IO.File]::ReadAllText($file, [System.Text.Encoding]::UTF8)
if ($content.IndexOf($badUrl) -lt 0) {
Write-Host "[$label] Not affected (bad URL not found) - already patched or different version" -ForegroundColor Green
continue
}
# Count occurrences before patching
$count = ([regex]::Matches($content, [regex]::Escape($badUrl))).Count
Write-Host "[$label] Found $count occurrence(s) of the bad CI path. Patching..." -ForegroundColor Cyan
# Backup original
$backup = "$file.bak"
Copy-Item $file $backup
Write-Host "[$label] Backup saved -> extension.js.bak"
# Apply Fix 1: createRequire
$patched = [regex]::Replace($content, $pattern1, $replacement1)
$fix1count = $count - ([regex]::Matches($patched, [regex]::Escape($badUrl))).Count
Write-Host "[$label] Fix 1 (createRequire): replaced $fix1count occurrence(s)"
# Apply Fix 2: fileURLToPath wrapper
$patched2 = [regex]::Replace($patched, $pattern2, $replacement2)
$fix2count = ([regex]::Matches($patched, [regex]::Escape($badUrl))).Count `
Write-Host "[$label] Fix 2 (path resolver): replaced $fix2count occurrence(s)"
# Verify no bad URLs remain
$remaining = ([regex]::Matches($patched2, [regex]::Escape($badUrl))).Count
if ($remaining -gt 0) {
Write-Host "[$label] WARNING: $remaining occurrence(s) still remain after patching!" -ForegroundColor Yellow
}
# Write patched file
[System.IO.File]::WriteAllText($file, $patched2, [System.Text.Encoding]::UTF8)
Write-Host "[$label] Patched successfully" -ForegroundColor Green
Write-Host ""
}
Write-Host "Done. Reload VSCode to apply: Ctrl+Shift+P -> 'Developer: Reload Window'" -ForegroundColor White
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
Hi, sorry about the disruption. We just published v2.1.52 which should hopefully work better.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.