JetBrains plugin 0.1.14-beta: lock file never created, IDE detection always fails

Resolved 💬 4 comments Opened Mar 19, 2026 by lukassenfeld-oddin Closed Mar 23, 2026

Summary

The JetBrains Claude Code plugin (v0.1.14-beta) never writes the lock file to ~/.claude/ide/<port>.lock. This causes Claude CLI to always show "Install the [IDE] plugin from the JetBrains Marketplace" even though the plugin is installed and running correctly.

Environment

  • Plugin version: 0.1.14-beta (latest available as of 2025-03-19)
  • IDEs tested: GoLand 2025.2, PhpStorm 2025.2
  • Claude CLI version: 2.1.77 / 2.1.79
  • OS: macOS (Darwin 24.6.0, Apple Silicon)

Steps to Reproduce

  1. Install Claude Code plugin from JetBrains Marketplace
  2. Configure Claude command (e.g., claude or a custom wrapper)
  3. Open Claude from the IDE (toolbar button or terminal)
  4. Claude shows: ↑ Install the GoLand plugin from the JetBrains Marketplace
  5. Running /ide inside Claude shows: No available IDEs detected

What Works

The plugin does correctly:

  • Start a WebSocket server on a random port (confirmed via lsof)
  • Set CLAUDE_CODE_SSE_PORT and ENABLE_IDE_INTEGRATION=true env vars in the terminal
  • Create the ~/.claude/ide/ directory (via ensureLockFileDirectory)

What Doesn't Work

The plugin never calls createLockFile() to write ~/.claude/ide/<port>.lock. Without this file, Claude CLI cannot:

  • Discover the IDE's WebSocket server
  • Obtain the authToken needed to authenticate the WebSocket connection

The WebSocket server returns HTTP 400 for unauthenticated upgrade requests (expected behavior).

Debugging Evidence

  • ~/.claude/ide/ directory exists but is always empty — confirmed with polling, fswatch, and checks at wrapper start/during/after Claude session
  • CLAUDE_CODE_WEBSOCKET_AUTH_FILE_DESCRIPTOR env var is never set by the plugin
  • No lock file creation entries in GoLand's idea.log
  • Claude CLI debug log (--debug-file) shows: CLAUDE_CODE_WEBSOCKET_AUTH_FILE_DESCRIPTOR not set, no file descriptor token available
  • The plugin JAR contains LockFileUtil.class with createLockFile, generateAuthToken, ensureLockFileDirectory, and LockFileJsonContent.class with authToken, workspaceFolders, ideName, transport fields — the code exists but is never invoked
  • Issue reproduces with a bare wrapper (exec claude "$@") — no Docker or other tooling involved

Expected Behavior

The plugin should write a lock file at ~/.claude/ide/<port>.lock containing:

{
  "workspaceFolders": ["/path/to/project"],
  "pid": 12345,
  "ideName": "GoLand",
  "transport": "ws",
  "authToken": "generated-token"
}

This enables Claude CLI to discover and authenticate with the IDE's WebSocket server.

View original on GitHub ↗

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