Symlink Required for VS Code Extension After Local Installation Migration

Resolved 💬 4 comments Opened Jul 9, 2025 by fwends Closed Jan 5, 2026

Bug Description
itle: VS Code Extension Requires Symlink After Migration to Local Installation

Description:
The VS Code extension fails to work after migrating from global npm installation to local installation, requiring a manual symlink to function properly.

Environment:

  • OS: macOS (Darwin 24.5.0)
  • Claude Code Version: 1.0.44
  • Node.js: 24.2.0 (installed via Homebrew)
  • VS Code Extension: mailto:anthropic.claude-code@1.0.31
  • Installation Method: Local (migrated from npm-global)

Steps to Reproduce:

  1. Install Claude Code globally via npm: npm install -g @anthropic-ai/claude-code
  2. Install VS Code extension - works correctly
  3. Migrate to local installation: claude migrate-installer
  4. Uninstall global installation: npm uninstall -g @anthropic-ai/claude-code
  5. VS Code extension stops working - "Claude: Open Chat" command not found

Expected Behavior: VS Code extension should work seamlessly with local installation after migration.

Actual Behavior: VS Code extension fails to find Claude after migration. Requires manual symlink: ln -s ~/.claude/local/claude /opt/homebrew/bin/claude

Issue: The diagnostic then shows misleading "Multiple installations found" warning.

Suggested Fix: Migration process should automatically create the necessary symlink for VS Code extension compatibility.

Environment Info

  • Platform: darwin
  • Terminal: iTerm.app
  • Version: 1.0.44
  • Feedback ID: 182dd093-475a-4519-a273-0a5adac38e56

Errors

[{"error":"Error: Command failed: security find-generic-password -a $USER -w -s \"Claude Code\"\nsecurity: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.\n\n    at genericNodeError (node:internal/errors:983:15)\n    at wrappedFn (node:internal/errors:537:14)\n    at checkExecSyncError (node:child_process:892:11)\n    at execSync (node:child_process:964:15)\n    at wD (file:///Users/greg/.claude/local/node_modules/@anthropic-ai/claude-code/cli.js:702:3921)\n    at file:///Users/greg/.claude/local/node_modules/@anthropic-ai/claude-code/cli.js:623:9350\n    at Q (file:///Users/greg/.claude/local/node_modules/@anthropic-ai/claude-code/cli.js:526:13327)\n    at uC (file:///Users/greg/.claude/local/node_modules/@anthropic-ai/claude-code/cli.js:623:8496)\n    at hC (file:///Users/greg/.claude/local/node_modules/@anthropic-ai/claude-code/cli.js:623:7361)\n    at wB (file:///Users/greg/.claude/local/node_modules/@anthropic-ai/claude-code/cli.js:623:11970)","timestamp":"2025-07-09T10:04:56.430Z"},{"error":"RangeError [ERR_CHILD_PROCESS_STDIO_MAXBUFFER]: stdout maxBuffer length exceeded\n    at Socket.onChildStdout (node:child_process:482:14)\n    at Socket.emit (node:events:507:28)\n    at Socket.emit (node:domain:489:12)\n    at addChunk (node:internal/streams/readable:559:12)\n    at readableAddChunkPushByteMode (node:internal/streams/readable:510:3)\n    at Readable.push (node:internal/streams/readable:390:5)\n    at Pipe.onStreamRead (node:internal/stream_base_commons:189:23)","timestamp":"2025-07-09T10:04:56.666Z"},{"error":"AbortError: The operation was aborted\n    at abortChildProcess (node:child_process:726:27)\n    at AbortSignal.onAbortListener (node:child_process:796:7)\n    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:827:20)\n    at AbortSignal.dispatchEvent (node:internal/event_target:762:26)\n    at runAbort (node:internal/abort_controller:488:10)\n    at abortSignal (node:internal/abort_controller:459:3)\n    at AbortController.abort (node:internal/abort_controller:507:5)\n    at Timeout._onTimeout (file:///Users/greg/.claude/local/node_modules/@anthropic-ai/claude-code/cli.js:600:90)\n    at listOnTimeout (node:internal/timers:608:17)\n    at process.processTimers (node:internal/timers:543:7)","timestamp":"2025-07-09T10:23:29.192Z"}]

View original on GitHub ↗

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