claude-ide-bridge 2.30.1 → 2.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/README.md +189 -1179
  2. package/dist/activityLog.d.ts +19 -1
  3. package/dist/activityLog.js +78 -1
  4. package/dist/activityLog.js.map +1 -1
  5. package/dist/automation.d.ts +60 -1
  6. package/dist/automation.js +271 -41
  7. package/dist/automation.js.map +1 -1
  8. package/dist/bridge.d.ts +13 -0
  9. package/dist/bridge.js +224 -6
  10. package/dist/bridge.js.map +1 -1
  11. package/dist/claudeDriver.d.ts +5 -2
  12. package/dist/claudeDriver.js +8 -5
  13. package/dist/claudeDriver.js.map +1 -1
  14. package/dist/claudeOrchestrator.d.ts +4 -0
  15. package/dist/claudeOrchestrator.js +5 -3
  16. package/dist/claudeOrchestrator.js.map +1 -1
  17. package/dist/commands/marketplace.d.ts +1 -0
  18. package/dist/commands/marketplace.js +8 -4
  19. package/dist/commands/marketplace.js.map +1 -1
  20. package/dist/commands/tokenEfficiency.d.ts +9 -0
  21. package/dist/commands/tokenEfficiency.js +211 -0
  22. package/dist/commands/tokenEfficiency.js.map +1 -0
  23. package/dist/commands/tools.d.ts +28 -0
  24. package/dist/commands/tools.js +326 -0
  25. package/dist/commands/tools.js.map +1 -0
  26. package/dist/config.d.ts +5 -0
  27. package/dist/config.js +36 -0
  28. package/dist/config.js.map +1 -1
  29. package/dist/dashboard.js +40 -0
  30. package/dist/dashboard.js.map +1 -1
  31. package/dist/extensionClient.d.ts +5 -0
  32. package/dist/extensionClient.js +14 -0
  33. package/dist/extensionClient.js.map +1 -1
  34. package/dist/index.d.ts +20 -1
  35. package/dist/index.js +287 -54
  36. package/dist/index.js.map +1 -1
  37. package/dist/probe.d.ts +1 -0
  38. package/dist/probe.js +3 -1
  39. package/dist/probe.js.map +1 -1
  40. package/dist/prompts.js +123 -0
  41. package/dist/prompts.js.map +1 -1
  42. package/dist/server.d.ts +4 -0
  43. package/dist/server.js +31 -1
  44. package/dist/server.js.map +1 -1
  45. package/dist/streamableHttp.js +6 -0
  46. package/dist/streamableHttp.js.map +1 -1
  47. package/dist/tools/activityLog.js +2 -2
  48. package/dist/tools/activityLog.js.map +1 -1
  49. package/dist/tools/auditDependencies.js +3 -1
  50. package/dist/tools/auditDependencies.js.map +1 -1
  51. package/dist/tools/batchLsp.d.ts +1 -1
  52. package/dist/tools/batchLsp.js +14 -2
  53. package/dist/tools/batchLsp.js.map +1 -1
  54. package/dist/tools/bridgeDoctor.d.ts +3 -0
  55. package/dist/tools/bridgeDoctor.js +1 -0
  56. package/dist/tools/bridgeDoctor.js.map +1 -1
  57. package/dist/tools/bridgeStatus.d.ts +4 -1
  58. package/dist/tools/bridgeStatus.js +16 -7
  59. package/dist/tools/bridgeStatus.js.map +1 -1
  60. package/dist/tools/contextBundle.d.ts +7 -0
  61. package/dist/tools/contextBundle.js +85 -11
  62. package/dist/tools/contextBundle.js.map +1 -1
  63. package/dist/tools/editText.js +1 -1
  64. package/dist/tools/editText.js.map +1 -1
  65. package/dist/tools/explainDiagnostic.d.ts +137 -0
  66. package/dist/tools/explainDiagnostic.js +230 -0
  67. package/dist/tools/explainDiagnostic.js.map +1 -0
  68. package/dist/tools/fileOperations.js +3 -3
  69. package/dist/tools/fileOperations.js.map +1 -1
  70. package/dist/tools/getAnalyticsReport.d.ts +102 -0
  71. package/dist/tools/getAnalyticsReport.js +137 -0
  72. package/dist/tools/getAnalyticsReport.js.map +1 -0
  73. package/dist/tools/getBufferContent.js +1 -1
  74. package/dist/tools/getBufferContent.js.map +1 -1
  75. package/dist/tools/getDiagnostics.d.ts +4 -0
  76. package/dist/tools/getDiagnostics.js +29 -5
  77. package/dist/tools/getDiagnostics.js.map +1 -1
  78. package/dist/tools/getDiffFromHandoff.d.ts +89 -0
  79. package/dist/tools/getDiffFromHandoff.js +163 -0
  80. package/dist/tools/getDiffFromHandoff.js.map +1 -0
  81. package/dist/tools/getProjectContext.d.ts +114 -0
  82. package/dist/tools/getProjectContext.js +344 -0
  83. package/dist/tools/getProjectContext.js.map +1 -0
  84. package/dist/tools/getSessionUsage.d.ts +58 -0
  85. package/dist/tools/getSessionUsage.js +57 -0
  86. package/dist/tools/getSessionUsage.js.map +1 -0
  87. package/dist/tools/getToolCapabilities.d.ts +3 -0
  88. package/dist/tools/getToolCapabilities.js +1 -0
  89. package/dist/tools/getToolCapabilities.js.map +1 -1
  90. package/dist/tools/github/pr.js +1 -1
  91. package/dist/tools/github/pr.js.map +1 -1
  92. package/dist/tools/handoffNote.js +65 -5
  93. package/dist/tools/handoffNote.js.map +1 -1
  94. package/dist/tools/httpClient.js +1 -1
  95. package/dist/tools/httpClient.js.map +1 -1
  96. package/dist/tools/index.d.ts +7 -1
  97. package/dist/tools/index.js +242 -4
  98. package/dist/tools/index.js.map +1 -1
  99. package/dist/tools/lsp.d.ts +1 -1
  100. package/dist/tools/lsp.js +21 -2
  101. package/dist/tools/lsp.js.map +1 -1
  102. package/dist/tools/openFile.js +2 -2
  103. package/dist/tools/openFile.js.map +1 -1
  104. package/dist/tools/organizeImports.js +1 -1
  105. package/dist/tools/organizeImports.js.map +1 -1
  106. package/dist/tools/performanceReport.d.ts +133 -0
  107. package/dist/tools/performanceReport.js +218 -0
  108. package/dist/tools/performanceReport.js.map +1 -0
  109. package/dist/tools/previewEdit.d.ts +107 -0
  110. package/dist/tools/previewEdit.js +270 -0
  111. package/dist/tools/previewEdit.js.map +1 -0
  112. package/dist/tools/replaceBlock.js +1 -1
  113. package/dist/tools/replaceBlock.js.map +1 -1
  114. package/dist/tools/runClaudeTask.d.ts +4 -0
  115. package/dist/tools/runClaudeTask.js +14 -7
  116. package/dist/tools/runClaudeTask.js.map +1 -1
  117. package/dist/tools/runTests.js +1 -1
  118. package/dist/tools/runTests.js.map +1 -1
  119. package/dist/tools/saveDocument.js +1 -1
  120. package/dist/tools/saveDocument.js.map +1 -1
  121. package/dist/tools/searchAndReplace.js +1 -1
  122. package/dist/tools/searchAndReplace.js.map +1 -1
  123. package/dist/tools/searchTools.d.ts +61 -0
  124. package/dist/tools/searchTools.js +85 -0
  125. package/dist/tools/searchTools.js.map +1 -0
  126. package/dist/tools/searchWorkspace.js +2 -2
  127. package/dist/tools/searchWorkspace.js.map +1 -1
  128. package/dist/tools/terminal.js +1 -1
  129. package/dist/tools/terminal.js.map +1 -1
  130. package/dist/tools/testTraceToSource.d.ts +80 -0
  131. package/dist/tools/testTraceToSource.js +202 -0
  132. package/dist/tools/testTraceToSource.js.map +1 -0
  133. package/dist/tools/transaction.d.ts +243 -0
  134. package/dist/tools/transaction.js +309 -0
  135. package/dist/tools/transaction.js.map +1 -0
  136. package/dist/tools/utils.js +1 -1
  137. package/dist/tools/utils.js.map +1 -1
  138. package/dist/transport.d.ts +24 -0
  139. package/dist/transport.js +45 -3
  140. package/dist/transport.js.map +1 -1
  141. package/dist/version.d.ts +2 -0
  142. package/dist/version.js +14 -0
  143. package/dist/version.js.map +1 -1
  144. package/package.json +1 -1
package/README.md CHANGED
@@ -2,1314 +2,324 @@
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/claude-ide-bridge)](https://www.npmjs.com/package/claude-ide-bridge)
4
4
  [![CI](https://github.com/Oolab-labs/claude-ide-bridge/actions/workflows/ci.yml/badge.svg)](https://github.com/Oolab-labs/claude-ide-bridge/actions/workflows/ci.yml)
5
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![Docker](https://img.shields.io/badge/docker-ghcr.io%2FOolab--labs%2Fclaude--ide--bridge-blue)](https://github.com/Oolab-labs/claude-ide-bridge/pkgs/container/claude-ide-bridge)
6
+ [![License: MIT](https://img.shields.io/npm/l/claude-ide-bridge)](https://opensource.org/licenses/MIT)
6
7
 
7
- **Claude Code, but with your IDE's eyes.**
8
+ **MCP bridge giving Claude Code IDE superpowers: 137 tools for LSP, debugging, git, GitHub, terminals, and more.**
8
9
 
9
- A WebSocket bridge that connects Claude Code to VS Code (and Windsurf, Cursor) so Claude can see what your IDE sees: live diagnostics, go-to-definition, find references, hover types, open files, breakpoints, debugger state. Not file access actual IDE context, the same signals a developer reads while working.
10
+ A WebSocket bridge between Claude Code CLI and your VS Code extension. Claude sees what your IDE sees live diagnostics, go-to-definition, call hierarchies, hover types, breakpoints, debugger state and can act on it: edit files, run tests, commit, open PRs, all without you copy-pasting anything.
10
11
 
11
- Install the companion extension, start the bridge, open Claude. That's it. Claude can now navigate your codebase the way you do, run tests, check diagnostics, commit, and create PRs — without you copy-pasting anything.
12
+ Works locally, over SSH, in Docker, and on a VPS. Extension is optional headless mode covers git, terminals, GitHub, and LSP via `typescript-language-server`.
12
13
 
13
14
  ```
14
15
  Claude Code ──── bridge ──── VS Code extension ──── your editor state
15
16
  ```
16
17
 
17
- ![claude-ide-bridge demo](demo.gif)
18
-
19
- **Works from your phone.** SSH into your dev machine, send a message, watch Claude fix bugs and run tests on your home machine while you're away.
20
-
21
- ## Pick your path
22
-
23
- | I want to… | Go to |
24
- |---|---|
25
- | Get started (5 min setup) | [Quick Start](#quick-start) |
26
- | Understand what tools are available | [Platform Docs](documents/platform-docs.md) |
27
- | Run two IDEs in parallel | [Multi-IDE Orchestrator](#multi-ide-orchestrator) |
28
- | Access from remote / phone | [Remote Access](docs/remote-access.md) |
29
- | Deploy to a VPS | [Deploy](deploy/README.md) |
30
- | Write a plugin | [Plugin Authoring](documents/plugin-authoring.md) |
31
- | Use with Claude Desktop / Dispatch | [Session Continuity](#session-continuity) |
32
- | Use with claude.ai web | [Custom Connector](#use-with-claudeai-web) |
33
-
34
18
  ## Quick Start
35
19
 
36
20
  **Prerequisites:** [Claude Code CLI](https://claude.ai/code), Node.js ≥ 20
37
21
 
38
22
  ```bash
23
+ # 1. Install the bridge
39
24
  npm install -g claude-ide-bridge
25
+
26
+ # 2. One-command setup (installs extension, writes CLAUDE.md, registers MCP server)
40
27
  cd /your/project
41
28
  claude-ide-bridge init
42
- ```
43
-
44
- > **Updating?** Use `npm install -g claude-ide-bridge@latest` instead of `npm update -g` — `update` may lag behind the registry cache by several minutes after a new release.
45
-
46
- `init` does four things:
47
- 1. Installs the companion VS Code/Windsurf/Cursor extension
48
- 2. Appends a `## Claude IDE Bridge` section to your `CLAUDE.md` (creating it if needed)
49
- 3. Writes `.claude/rules/bridge-tools.md` — a rules file that directs Claude to call MCP tools instead of shell equivalents (`runTests` instead of `npm test`, `getDiagnostics` instead of `tsc`, `gitCommit` instead of `git commit`, `searchWorkspace` instead of `grep`)
50
- 4. Registers the bridge as a global MCP server in `~/.claude.json` so bridge tools appear in **every** `claude` session, any directory
51
-
52
- The rules file is loaded automatically via `@import` in `CLAUDE.md` on every session. No extra flags or configuration needed.
53
-
54
- **Then start the bridge and open Claude:**
55
29
 
56
- ```bash
57
- claude-ide-bridge --watch # terminal 1 — keeps running, auto-restarts on crash
58
- claude --ide # terminal 2 — Claude Code with IDE tools active
59
- ```
60
-
61
- > **`--watch`** restarts the bridge automatically if it crashes, with exponential backoff (2s → 30s). Safe for long-running sessions.
62
-
63
- Type `/mcp` in Claude to confirm the server is connected, then `/ide` to see open files, diagnostics, and editor state.
64
-
65
- > **One bridge per workspace.** Each project needs its own bridge instance on its own port. If you work across multiple repos, start a separate `claude-ide-bridge --watch` in each directory.
66
-
67
- > **Why `~/.claude.json` and not `.mcp.json`?** When VS Code, Windsurf, or Cursor launches Claude Code, it injects `--mcp-config` which overrides any project `.mcp.json`. Only `~/.claude.json` is loaded in every session regardless of how Claude Code is started. `init` writes there by design — you don't need to touch `.mcp.json`.
30
+ # 3. Start the bridge
31
+ claude-ide-bridge --full --watch
68
32
 
69
- **Adding the bridge to an existing project** (without re-running full `init`):
70
-
71
- ```bash
72
- claude-ide-bridge gen-claude-md --write
33
+ # 4. Open Claude Code bridge connects automatically
34
+ claude --ide
73
35
  ```
74
36
 
75
- This appends the bridge section to your existing `CLAUDE.md` and writes `.claude/rules/bridge-tools.md`. Run it once per project.
76
-
77
- **Tools not showing up?** See the [troubleshooting guide](docs/troubleshooting.md).
78
-
79
- ## Slim Mode vs Full Mode
80
-
81
- By default, the bridge starts in **slim mode** — 50 IDE-exclusive tools that Claude can't replicate with its built-in `Read`/`Write`/`Bash` tools: LSP intelligence, debugger, editor decorations, diagnostics, refactoring, impact analysis, and editor state. This is the right default for most workflows because Claude already has file editing and shell access built in.
37
+ > **Updating?** Use `npm install -g claude-ide-bridge@latest` `npm update -g` may lag the registry cache after a new release.
82
38
 
83
- If you need Claude to use the bridge's **git, terminal, file ops, HTTP client, or GitHub** tools instead of its built-in equivalents, start in full mode:
84
-
85
- ```bash
86
- claude-ide-bridge --watch --full # all 136+ tools
87
- ```
88
-
89
- Or set it permanently in your config file (`claude-ide-bridge.config.json`):
90
-
91
- ```json
92
- {
93
- "fullMode": true
94
- }
95
- ```
96
-
97
- **When to use `--full`:**
98
- - You're running headless/CI and want structured git/GitHub tools instead of raw `git` commands
99
- - You want Claude to use `runTests` (with framework detection and structured output) instead of `npm test`
100
- - You need `sendHttpRequest` with SSRF protection, or `githubCreatePR` with template support
101
- - You're using automation hooks (`--automation`) that need terminal or git tools
102
-
103
- **When slim mode is enough (most users):**
104
- - You're working in VS Code/Cursor/Windsurf and want Claude to see your IDE state
105
- - Claude's built-in `Read`/`Write`/`Bash` tools handle file ops and git fine
106
- - You want a smaller tool list for faster responses and less token overhead
107
-
108
- See [MCP Tools](#mcp-tools) below for the full tool breakdown by category.
109
-
110
- ## What Can Claude Do?
111
-
112
- With the bridge connected, try these prompts in Claude:
113
-
114
- - **"Explain the function at src/server.ts:140"** — uses `explainSymbol` to get type info, docs, callers, and references in one call
115
- - **"Preview what renaming `handleRequest` to `processRequest` would change"** — uses `refactorPreview` to show affected files without applying
116
- - **"Review this file and highlight issues inline"** — Claude uses `setEditorDecorations` to annotate your editor with findings
117
- - **"Fix all errors in open files"** — uses `getDiagnostics` to find errors, then `editText` to fix them
118
- - **"Show me who calls this function"** — uses `getCallHierarchy` to trace callers and callees
119
- - **"Run the tests and fix failures"** — uses `runTests` or `runCommand` to execute tests, reads output, and applies fixes
120
- - **"Create a PR for these changes"** — uses `getGitDiff`, `gitCommit`, and `githubCreatePR` to commit and open a pull request
121
-
122
- ## Multi-IDE Orchestrator
123
-
124
- > **When to use this:** Large projects (50k+ lines) where a single Claude session runs out of context mid-task, or where you're running genuinely parallel workstreams — one agent implementing while another reviews, or one exploring the backend while another works on the frontend. For most projects, a single bridge is sufficient.
125
-
126
- Run two bridges simultaneously — one per IDE window — with a meta-orchestrator routing between them. Each agent gets a completely independent context (separate LSP cache, open files, terminal history), so their work doesn't interfere.
127
-
128
- ```
129
- Claude Code
130
-
131
- Meta-Orchestrator (port 4746)
132
- ├── Bridge A (port 55000) — e.g. backend work, active changes
133
- └── Bridge B (port 55001) — e.g. frontend work, or clean reviewer
134
- ```
39
+ After `init`, type `/mcp` in Claude Code to confirm the bridge is connected. Type `/ide` to see open files, diagnostics, and editor state.
135
40
 
136
- **Setup (each IDE needs a fixed port):**
41
+ > **One bridge per workspace.** Each project runs its own bridge instance on its own port. Start a separate `claude-ide-bridge --watch` in each directory.
137
42
 
138
- In each VS Code/Windsurf workspace settings, set `claudeIdeBridge.port` to `55000` and `55001` respectively. Then:
43
+ ### Installing the VS Code extension separately
139
44
 
140
45
  ```bash
141
- claude-ide-bridge orchestrator --port 4746
142
- claude --ide # auto-discovers orchestrator, exposes both workspaces' tools
143
- ```
144
-
145
- Use `switchWorkspace ws1` / `switchWorkspace ws2` in Claude to pin to a specific IDE. Tools from both are available; conflicting names get a `__<IDE>_<port>` suffix.
146
-
147
- **Concrete use cases where it pays off:**
148
- - **Large monorepo**: database layer in one IDE, API layer in another — each agent stays focused without context bleed
149
- - **Implement + review**: one agent writes, the other reviews the diff with fresh eyes (no anchoring bias)
150
- - **Self-hosting dev loop**: modify the bridge itself in IDE A, validate through IDE B without downtime
151
-
152
- **Where it's not worth the overhead:** projects under ~50k lines, tasks that need to touch both workspaces frequently (handoff cost dominates), or anything a single `runClaudeTask` subprocess handles adequately.
153
-
154
- See [docs/multi-ide-review.md](docs/multi-ide-review.md) for the staged review workflow.
155
-
156
- ## Documentation
157
-
158
- > **These guides are essential for setup and deployment** — not optional reading. Each covers a specific scenario you'll encounter when running the bridge beyond localhost.
159
-
160
- | Guide | What it covers |
161
- |-------|----------------|
162
- | **[Troubleshooting](docs/troubleshooting.md)** | Tools not showing up, wrong config file, WSL/Windows PATH, port conflicts |
163
- | **[Remote Access](docs/remote-access.md)** | Production reverse proxy setup (Caddy/nginx), TLS, Streamable HTTP transport |
164
- | **[SSH Resilience](docs/ssh-resilience.md)** | Surviving SSH drops, tmux strategies, phone-to-VPS workflows |
165
- | **[IP Allowlist](docs/ip-allowlist.md)** | Firewall rules, network access control for remote bridge instances |
166
- | **[Worktree Isolation](docs/worktree-isolation.md)** | How git worktrees interact with the bridge, safe concurrent editing |
167
- | **[Privacy Policy](docs/privacy-policy.md)** | What data the bridge handles, stores, and never transmits |
168
- | **[Demo Setup](docs/demo-setup.md)** | Standing up a persistent demo instance for review/testing |
169
- | **[Architecture Decisions](docs/adr/)** | ADRs for version numbers, reconnect guards, lock files, error model, session eviction |
170
- | **[Release Checklist](docs/release-checklist.md)** | Pre-release gate: hardcoded count audit, doc completeness, publish steps |
171
-
172
- **Reference docs** (in [`documents/`](documents/)):
173
-
174
- | Doc | What it covers |
175
- |-----|----------------|
176
- | **[Platform Docs](documents/platform-docs.md)** | Complete tool reference (136+ tools), parameters, examples |
177
- | **[Data Reference](documents/data-reference.md)** | Data flows, state management, protocol details |
178
- | **[Plugin Authoring](documents/plugin-authoring.md)** | Writing custom plugins — manifest schema, entrypoint API |
179
- | **[Use Cases](documents/use-cases.md)** | Real-world workflows and scenarios |
180
- | **[Roadmap](documents/roadmap.md)** | Planned features and development direction |
181
-
182
- ## Session Continuity
183
-
184
- The bridge persists state across restarts and context switches (CLI ↔ Desktop ↔ Cowork).
185
-
186
- ### Handoff Notes
187
- Use `setHandoffNote` to save context before switching sessions. Notes are **workspace-scoped** — switching workspaces won't overwrite each other's context. `getHandoffNote` retrieves the most recent note for your current workspace.
188
-
189
- The bridge also auto-snapshots a basic handoff note whenever a new session connects and the existing note is stale (>5 minutes old).
190
-
191
- ### Checkpoint Restore
192
- When the bridge restarts within 5 minutes of the previous run, it automatically restores the list of open files from the last session checkpoint. The first connecting client receives a notification:
193
- > `Session restored from checkpoint: N file(s) tracked (checkpoint was Xs old)`
194
-
195
- ### CLI → Desktop → Cowork Workflow
196
- 1. **CLI session:** work normally; bridge tracks opened files
197
- 2. **Switching to Desktop:** call `setHandoffNote` first, or run `/mcp__bridge__cowork` to auto-collect context
198
- 3. **Cowork:** MCP tools are NOT available inside Cowork — the handoff note is the bridge. Always run `/mcp__bridge__cowork` in regular chat before opening Cowork (Cmd+2).
199
-
200
- > **Cowork sessions (Claude Desktop computer-use):** MCP bridge tools are NOT available inside Cowork. Run `/mcp__bridge__cowork` in a regular Desktop chat first to capture context, then open Cowork. Cowork also operates in an isolated git worktree — files won't appear in your main `git status` until merged.
201
-
202
- ## Full Session Launcher (`start-all`)
203
-
204
- > **Not the same as [Multi-IDE Orchestrator](#multi-ide-orchestrator).** The Multi-IDE Orchestrator runs two bridge instances for two parallel IDE windows. `start-all` is a convenience launcher that runs a single bridge instance alongside Claude Code and remote control in a tmux session.
205
-
206
- The `start-all` command launches everything in a tmux session: bridge + Claude Code + remote control, with automatic health monitoring and process restart.
207
-
208
- ```bash
209
- # Via npm global install or npx
210
- claude-ide-bridge start-all --workspace /path/to/your-project
211
-
212
- # Or the dedicated alias
213
- claude-ide-bridge-start --workspace /path/to/your-project
214
-
215
- # From source
216
- npm run start-all -- --workspace /path/to/your-project
217
- ```
218
-
219
- Options:
220
-
221
- | Flag | Description |
222
- |------|-------------|
223
- | `--workspace <path>` | Project directory (default: `.`) |
224
- | `--notify <topic>` | ntfy.sh topic for push notifications |
225
- | `--ide <name>` | IDE name hint (e.g. `windsurf`) |
226
-
227
- Requires `tmux` and the `claude` CLI to be on `PATH`.
228
-
229
- ## Claude Code Plugin
230
-
231
- The bridge ships as a **Claude Code plugin** with 9 skills, 3 subagents, and 16 hook events — available on the [Claude Code plugin directory](https://claude.com/plugins):
232
-
233
- ```bash
234
- # Load the plugin
235
- claude --plugin-dir ./claude-ide-bridge-plugin
46
+ claude-ide-bridge install-extension
236
47
  ```
237
48
 
238
- ### Skills
239
-
240
- | Skill | Description | Remote Session |
241
- |-------|-------------|:-:|
242
- | `/ide-diagnostics-board` | Visual diagnostics dashboard (HTML) across the workspace | CLI fallback |
243
- | `/ide-coverage` | Test coverage heatmap (HTML) from lcov/JSON data | CLI fallback |
244
- | `/ide-quality` | Multi-language lint sweep + auto-fix + format + optional commit | CLI fallback |
245
- | `/ide-debug` | Full debug cycle: run tests, set breakpoints, evaluate expressions, fix, verify | Requires bridge |
246
- | `/ide-review` | Deep PR review using LSP code intelligence + GitHub tools | Requires bridge |
247
- | `/ide-refactor` | Safe refactoring with snapshot checkpoints and auto-rollback | Requires bridge |
248
- | `/ide-explore` | Codebase exploration using LSP (runs in isolated Explore agent) | Requires bridge |
249
- | `/ide-deps` | Interactive dependency graph (HTML) for a file or symbol | Requires bridge |
250
- | `/ide-monitor` | Continuous monitoring for diagnostics, tests, or terminal output | Requires bridge |
251
-
252
- > **Remote sessions** (`claude remote-control`): Skills marked "CLI fallback" work without the bridge by using built-in Claude Code tools. Skills marked "Requires bridge" need the `claude --ide` session.
253
-
254
- ### Subagents
255
-
256
- | Agent | Description |
257
- |-------|-------------|
258
- | `ide-code-reviewer` | Evidence-based code review using LSP tools, with persistent memory |
259
- | `ide-debugger` | Autonomous debug cycles with breakpoints and expression evaluation |
260
- | `ide-test-runner` | Runs tests, categorizes failures, applies fixes |
261
-
262
- ### Hooks
263
-
264
- | Event | What it does |
265
- |-------|-------------|
266
- | `PreToolUse` | Resolves relative path args to absolute before bridge tools execute |
267
- | `PostToolUse` on Edit/Write | Reminds Claude to check diagnostics after file edits |
268
- | `SessionStart` | Reports bridge status, connection, and tool count |
269
- | `InstructionsLoaded` | Injects live bridge status each time CLAUDE.md loads |
270
- | `Elicitation` | Pre-fills file/path/uri fields using the active editor |
271
- | `ElicitationResult` | Logs user responses (or cancellations) to MCP elicitation dialogs |
272
- | `PostCompact` | Re-injects bridge status after Claude compacts context |
273
- | `WorktreeCreate` | Reports bridge ↔ worktree relationship; warns about LSP limitations |
274
- | `WorktreeRemove` | Warns that IDE state may be stale after worktree removal |
275
- | `SubagentStart` | Verifies bridge is alive before IDE subagents run |
276
- | `SubagentStop` | Surfaces subagent final response summary for parent agent awareness |
277
- | `TeammateIdle` | Reports bridge health when a team agent finishes and awaits coordination |
278
- | `TaskCompleted` | Logs task completion summary and confirms bridge availability |
279
- | `ConfigChange` | Warns if changed config files require a bridge restart |
280
- | `Stop` | Logs session end and surfaces final response for automated workflows |
281
- | `StopFailure` | Logs API errors that ended the turn; checks bridge health |
282
-
283
- ## MCP Tools
284
-
285
- The bridge exposes tools in two modes:
286
-
287
- - **Slim mode (default)** — 50 IDE-exclusive tools. Only tools that require a live VS Code extension and have no native Claude equivalent. This is what you get with `claude-ide-bridge --watch`.
288
- - **Full mode (`--full`)** — all 136+ tools, adding git, terminal, file ops, HTTP, and GitHub. Use this for large projects or workflows that rely on those integrations.
289
-
290
- ### Slim mode — 50 IDE tools (default)
291
-
292
- | Category | Tools |
293
- |----------|-------|
294
- | LSP / Code Intelligence | `getDiagnostics` · `watchDiagnostics` · `goToDefinition` · `findReferences` · `getHover` · `getCodeActions` · `applyCodeAction` · `renameSymbol` · `searchWorkspaceSymbols` · `getDocumentSymbols` · `getCallHierarchy` · `getSemanticTokens` · `getCodeLens` · `getDocumentLinks` · `batchGetHover` · `batchGoToDefinition` |
295
- | Impact Analysis | `getChangeImpact` · `getImportedSignatures` |
296
- | Refactor & Navigation | `refactorAnalyze` · `refactorPreview` · `refactorExtractFunction` · `prepareRename` · `selectionRanges` · `foldingRanges` · `signatureHelp` · `explainSymbol` · `getImportTree` |
297
- | Editor Decorations | `setEditorDecorations` · `clearEditorDecorations` |
298
- | Debugger | `startDebugging` · `stopDebugging` · `setDebugBreakpoints` · `evaluateInDebugger` · `getDebugState` |
299
- | Editor State | `getOpenEditors` · `getCurrentSelection` · `getLatestSelection` · `checkDocumentDirty` · `saveDocument` · `openFile` · `closeTab` · `captureScreenshot` |
300
- | VS Code | `executeVSCodeCommand` |
301
- | Bridge | `getBridgeStatus` · `getToolCapabilities` |
302
-
303
- ### Full mode (`--full`) adds
304
-
305
- | Category | Count | Tools (sample) |
306
- |----------|------:|----------------|
307
- | Git | 16 | `getGitStatus` · `getGitDiff` · `gitCommit` · `gitPush` · `gitBlame` · … |
308
- | Terminal | 8 | `runCommand` · `createTerminal` · `sendTerminalCommand` · … |
309
- | File ops | 8 | `createFile` · `editText` · `searchWorkspace` · `getFileTree` · … |
310
- | GitHub | 13 | `githubCreatePR` · `githubListIssues` · `githubPostPRReview` · … |
311
- | HTTP | 2 | `sendHttpRequest` · `parseHttpFile` |
312
- | Code analysis | 9 | `auditDependencies` · `detectUnusedCode` · `getSecurityAdvisories` · … |
313
- | Code quality | 3 | `fixAllLintErrors` · `formatDocument` · `organizeImports` |
314
- | Diagnostics+ | 2 | `runTests` · `getCodeCoverage` |
315
- | Plans | 5 | `createPlan` · `updatePlan` · `getPlan` · … |
316
- | Clipboard | 2 | `readClipboard` · `writeClipboard` |
317
- | LSP extras | 4 | `getHoverAtCursor` · `getTypeSignature` · `getInlayHints` · `getTypeHierarchy` |
318
- | More editor | 2 | `openDiff` · `getBufferContent` |
319
- | Session | 2 | `getHandoffNote` · `setHandoffNote` |
320
-
321
- ## MCP Prompts (Slash Commands)
322
-
323
- The bridge exposes 27 built-in slash commands via the MCP `prompts/list` + `prompts/get` protocol. These appear as `/mcp__bridge__<name>` in any MCP client that supports prompts.
324
-
325
- **General / Dispatch**
326
-
327
- | Prompt | Argument | Description |
328
- |--------|----------|-------------|
329
- | `/mcp__bridge__review-file` | `file` (required) | Code review for a specific file using current diagnostics |
330
- | `/mcp__bridge__explain-diagnostics` | `file` (required) | Explain and suggest fixes for all diagnostics in a file |
331
- | `/mcp__bridge__generate-tests` | `file` (required) | Generate a test scaffold for the exported symbols in a file |
332
- | `/mcp__bridge__debug-context` | _(none)_ | Snapshot current debug state, open editors, and diagnostics |
333
- | `/mcp__bridge__git-review` | `base` (optional, default: `main`) | Review all changes since a git base branch |
334
- | `/mcp__bridge__cowork` | `task` (optional) | Gather full IDE context and propose a Cowork action plan — run this **before** opening a Cowork session |
335
- | `/mcp__bridge__set-effort` | `level` (optional: `low`/`medium`/`high`, default: `medium`) | Prepend an effort-level instruction to tune Claude's thoroughness for the next task |
336
- | `/mcp__bridge__project-status` | _(none)_ | Quick project health: git status + diagnostics + test summary (Dispatch) |
337
- | `/mcp__bridge__quick-tests` | `filter` (optional) | Run tests and return concise pass/fail summary (Dispatch) |
338
- | `/mcp__bridge__quick-review` | _(none)_ | Review uncommitted changes with diff summary and diagnostics (Dispatch) |
339
- | `/mcp__bridge__build-check` | _(none)_ | Check if the project builds successfully (Dispatch) |
340
- | `/mcp__bridge__recent-activity` | `count` (optional, default: `10`) | Recent git log and uncommitted changes (Dispatch) |
341
- | `/mcp__bridge__team-status` | _(none)_ | Workspace state, active tasks, and recent activity for team leads (Agent Teams) |
342
- | `/mcp__bridge__health-check` | _(none)_ | Comprehensive project health: tests, diagnostics, security (Scheduled Tasks) |
343
- | `/mcp__bridge__orient-project` | _(none)_ | Architecture overview from key docs and CLAUDE.md |
344
-
345
- **LSP Intelligence**
346
-
347
- | Prompt | Arguments | Description |
348
- |--------|-----------|-------------|
349
- | `/mcp__bridge__find-callers` | `symbol` (required) | List all callers of a symbol via call hierarchy + references |
350
- | `/mcp__bridge__blast-radius` | `file`, `line`, `column` (all required) | Compute change impact at a position — risk badge + reference counts |
351
- | `/mcp__bridge__why-error` | `file` (required), `line` (optional) | Explain a diagnostic in plain English with type context |
352
- | `/mcp__bridge__unused-in` | `file` (required) | Find dead exports and unused code in a file |
353
- | `/mcp__bridge__trace-to` | `symbol` (required) | Trace outgoing call chain from a symbol with type signatures |
354
- | `/mcp__bridge__imports-of` | `symbol` (required) | List every file that imports a symbol, with reference counts |
355
- | `/mcp__bridge__circular-deps` | _(none)_ | Detect circular import cycles in the workspace |
356
- | `/mcp__bridge__refactor-preview` | `file`, `line`, `column`, `newName` (all required) | Preview rename edits and blast-radius risk before committing |
357
- | `/mcp__bridge__module-exports` | `file` (required) | List a file's exported symbols with type signatures |
358
- | `/mcp__bridge__type-of` | `file`, `line`, `column` (all required) | Get the type signature at a position (no documentation) |
359
- | `/mcp__bridge__deprecations` | _(none)_ | Find `@deprecated` APIs workspace-wide and count their callers |
360
- | `/mcp__bridge__coverage-gap` | `file` (required) | List untested functions by correlating coverage data with document symbols |
361
-
362
- > **Cowork sessions and MCP tools:** MCP tools (including all bridge tools) are **not available inside a Cowork session**. Use a two-step workflow: run `/mcp__bridge__cowork` in a regular Claude Code chat first — it gathers full IDE context and produces an action plan — then open a Cowork session armed with that context.
363
-
364
- Prompts are served directly from the bridge — no extension required. Implemented in `src/prompts.ts`.
365
-
366
- ---
367
-
368
- ## MCP Resources
369
-
370
- The bridge exposes your workspace files as MCP Resources via `resources/list` and `resources/read`. Any MCP client that supports the resources protocol can browse and read files directly — without calling individual file tools.
371
-
372
- - Workspace tree is walked automatically (skips `node_modules`, `.git`, `dist`, etc.)
373
- - Only text file extensions are exposed
374
- - Cursor-paginated (50 files per page)
375
- - 1 MB per-file cap
376
- - Workspace-confined: paths outside the workspace are rejected
377
-
378
- No configuration needed — resources are enabled by default.
379
-
380
- ---
381
-
382
- ## HTTP Monitoring Endpoints
383
-
384
- The bridge exposes several HTTP endpoints for monitoring and integration. All require `Authorization: Bearer <token>` except `/.well-known/mcp`.
385
-
386
- | Endpoint | Description |
387
- |----------|-------------|
388
- | `GET /health` | Liveness probe — returns `{ status, uptime, connections }` |
389
- | `GET /ready` | Readiness probe — returns 200 only after MCP handshake completes and reports tool count + extension state. Returns 503 before ready. |
390
- | `GET /status` | Detailed status object with uptime and session diagnostics |
391
- | `GET /metrics` | Prometheus-format metrics: `bridge_tool_calls_total`, `bridge_tool_duration_ms_avg`, `bridge_uptime_seconds` |
392
- | `GET /stream` | Server-Sent Events stream of all activity log entries in real time (tool calls, lifecycle events). Keep-alive pings included. |
393
- | `GET /tasks` | Sanitized task list (when `--claude-driver` is active) |
394
- | `GET /.well-known/mcp` | Public MCP server discovery — name, version, capabilities, transports (no auth required) |
395
-
396
- ```bash
397
- TOKEN=$(cat ~/.claude/ide/*.lock | python3 -c "import sys,json; print(json.load(sys.stdin)['authToken'])")
398
-
399
- # Live tool call feed
400
- curl -N -H "Authorization: Bearer $TOKEN" http://localhost:PORT/stream
401
-
402
- # Prometheus scrape
403
- curl -H "Authorization: Bearer $TOKEN" http://localhost:PORT/metrics
404
- ```
49
+ Or search **Claude IDE Bridge** in the VS Code / Cursor / Windsurf marketplace.
405
50
 
406
51
  ---
407
52
 
408
- ## OpenTelemetry
409
-
410
- The bridge instruments every tool call with OpenTelemetry spans. Tracing is zero-overhead when disabled (the default).
53
+ ## Tool Categories
411
54
 
412
- ```bash
413
- # Export traces to any OTLP-compatible collector (Jaeger, Datadog, Honeycomb, etc.)
414
- OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 claude-ide-bridge
415
- OTEL_SERVICE_NAME=my-bridge claude-ide-bridge # optional service name override
416
- ```
55
+ | Category | Count | Example tools | Mode |
56
+ |---|---|---|---|
57
+ | LSP & Code Intelligence | 29 | `goToDefinition`, `findReferences`, `getCallHierarchy`, `getHover`, `explainSymbol` | S |
58
+ | Debugging | 6 | `setDebugBreakpoints`, `startDebugging`, `evaluateInDebugger`, `getDebugState` | S |
59
+ | Refactoring | 5 | `refactorAnalyze`, `refactorPreview`, `renameSymbol`, `refactorExtractFunction` | S |
60
+ | Editor State | 8 | `getDiagnostics`, `getDocumentSymbols`, `getOpenEditors`, `contextBundle`, `watchDiagnostics` | S |
61
+ | Git | 12 | `gitAdd`, `gitCommit`, `gitPush`, `getGitStatus`, `getGitDiff`, `gitCheckout`, `gitBlame` | F |
62
+ | GitHub | 5 | `githubCreatePR`, `getPRTemplate`, `getGitHotspots` | F |
63
+ | Files & Search | 10 | `findFiles`, `getFileTree`, `searchWorkspace`, `searchAndReplace`, `createFile`, `editText` | F |
64
+ | Terminal & Shell | 6 | `runInTerminal`, `getTerminalOutput`, `runCommand`, `runVSCodeTask`, `listVSCodeTasks` | F |
65
+ | Claude Orchestration | 5 | `runClaudeTask`, `listClaudeTasks`, `getClaudeTaskStatus`, `cancelClaudeTask` | F |
66
+ | Quality & Analysis | 11 | `getCodeCoverage`, `auditDependencies`, `detectUnusedCode`, `generateTests`, `getSecurityAdvisories` | F |
417
67
 
418
- Spans are exported on process exit. No bridge code changes needed — the env var activates tracing automatically.
68
+ **S = slim mode (default) · F = full mode (`--full` flag)**
419
69
 
420
70
  ---
421
71
 
422
- ## Claude Orchestration & Automation
72
+ ## Slim vs Full Mode
423
73
 
424
- The bridge can spawn Claude subprocesses, queue tasks, and drive event-driven automation directly from VS Code events.
74
+ The bridge starts in **slim mode** by default — 56 IDE-exclusive tools covering LSP, debugging, refactoring, and editor state. These are capabilities Claude does not have natively, so slim mode adds signal without duplicating built-in file/shell tools.
425
75
 
426
- ### Starting with automation enabled
76
+ Add `--full` to unlock all 137 tools, including git, GitHub, terminal, file tree, and orchestration:
427
77
 
428
78
  ```bash
429
- # Enable subprocess driver + event-driven automation with a policy file
430
- claude-ide-bridge --workspace /path/to/project \
431
- --claude-driver subprocess \
432
- --automation \
433
- --automation-policy ./automation-policy.json
79
+ claude-ide-bridge --full --watch
434
80
  ```
435
81
 
436
- ### Automation policy file
82
+ Or set permanently in `claude-ide-bridge.config.json`:
437
83
 
438
84
  ```json
439
- {
440
- "onDiagnosticsError": {
441
- "enabled": true,
442
- "minSeverity": "error",
443
- "prompt": "Fix the errors in {{file}}:\n{{diagnostics}}",
444
- "cooldownMs": 30000
445
- },
446
- "onFileSave": {
447
- "enabled": true,
448
- "patterns": ["**/*.ts", "!node_modules/**"],
449
- "prompt": "Review the saved file: {{file}}",
450
- "cooldownMs": 10000
451
- },
452
- "onFileChanged": {
453
- "enabled": true,
454
- "patterns": ["**/*.ts"],
455
- "prompt": "A file was edited: {{file}}. Run getDiagnostics to check for new errors.",
456
- "cooldownMs": 15000
457
- },
458
- "onCwdChanged": {
459
- "enabled": true,
460
- "prompt": "Working directory changed to {{cwd}}. Call getBridgeStatus and getOpenEditors to orient.",
461
- "cooldownMs": 10000
462
- },
463
- "onPostCompact": {
464
- "enabled": true,
465
- "prompt": "Context was compacted. Call getOpenEditors and getDiagnostics to rebuild your understanding of the current state.",
466
- "cooldownMs": 60000
467
- },
468
- "onInstructionsLoaded": {
469
- "enabled": true,
470
- "prompt": "Call getToolCapabilities to confirm the bridge is connected and note which tools are available for this session."
471
- },
472
- "onTestRun": {
473
- "enabled": true,
474
- "onFailureOnly": true,
475
- "prompt": "Tests failed ({{failed}}/{{total}}). Fix the failures:\n{{failures}}",
476
- "cooldownMs": 15000
477
- },
478
- "onGitCommit": {
479
- "enabled": true,
480
- "prompt": "Committed {{hash}} on {{branch}}: {{message}}\nFiles changed: {{files}}",
481
- "cooldownMs": 5000
482
- },
483
- "onGitPush": {
484
- "enabled": true,
485
- "prompt": "Pushed {{branch}} to {{remote}} ({{hash}}). Run getGitLog to confirm.",
486
- "cooldownMs": 5000
487
- },
488
- "onBranchCheckout": {
489
- "enabled": true,
490
- "prompt": "Switched to branch {{branch}} (from {{previousBranch}}). Call getDiagnostics to check state.",
491
- "cooldownMs": 5000
492
- },
493
- "onPullRequest": {
494
- "enabled": true,
495
- "prompt": "PR #{{number}} opened: {{title}} ({{url}}). Run getDiagnostics on changed files.",
496
- "cooldownMs": 5000
497
- },
498
- "onDiagnosticsCleared": {
499
- "enabled": true,
500
- "prompt": "All errors cleared in {{file}}. Run the tests for that file to confirm the fix is complete.",
501
- "cooldownMs": 10000
502
- },
503
- "onTaskCreated": {
504
- "enabled": false,
505
- "prompt": "A new task was created ({{taskId}}). Call getClaudeTaskStatus to monitor progress.",
506
- "cooldownMs": 5000
507
- },
508
- "onTaskSuccess": {
509
- "enabled": false,
510
- "prompt": "Task {{taskId}} succeeded. Review the output and check for follow-up actions:\n\n{{output}}",
511
- "cooldownMs": 5000
512
- },
513
- "onPermissionDenied": {
514
- "enabled": false,
515
- "prompt": "The tool '{{tool}}' was blocked: {{reason}}. Call getBridgeStatus to check bridge health.",
516
- "cooldownMs": 15000
517
- }
518
- }
85
+ { "fullMode": true }
519
86
  ```
520
87
 
521
- When automation is active, VS Code save/change events, diagnostic errors, and Claude Code hook events automatically enqueue Claude tasks. Output streams to the "Claude IDE Bridge" output channel in real time.
522
-
523
- **Policy triggers:**
524
-
525
- | Trigger | When it fires | Key fields |
526
- |---------|--------------|------------|
527
- | `onDiagnosticsError` | VS Code reports new errors/warnings for a file | `enabled`, `minSeverity` (`error`/`warning`), `prompt` (supports `{{file}}` and `{{diagnostics}}`), `cooldownMs` |
528
- | `onFileSave` | A file matching `patterns` is explicitly saved (Ctrl+S) | `enabled`, `patterns` (minimatch globs), `prompt` (supports `{{file}}`), `cooldownMs` |
529
- | `onFileChanged` | Any buffer edit on a matching file (unsaved changes, external writes) — CC 2.1.83+ | `enabled`, `patterns` (minimatch globs), `prompt` (supports `{{file}}`), `cooldownMs` |
530
- | `onCwdChanged` | Claude Code's working directory changes — CC 2.1.83+; wired via `claude-ide-bridge notify CwdChanged` from a CC `CwdChanged` hook | `enabled`, `prompt` (supports `{{cwd}}`), `cooldownMs` |
531
- | `onPostCompact` | Claude compacts its context (Claude Code 2.1.76+) | `enabled`, `prompt`, `cooldownMs` |
532
- | `onInstructionsLoaded` | Claude loads CLAUDE.md at session start (Claude Code 2.1.76+) | `enabled`, `prompt` |
533
- | `onTestRun` | `runTests` completes | `enabled`, `onFailureOnly` (bool, default `true`), `prompt` (supports `{{runner}}`, `{{failed}}`, `{{passed}}`, `{{total}}`, `{{failures}}`), `cooldownMs` |
534
- | `onGitCommit` | `gitCommit` tool succeeds | `enabled`, `prompt` (supports `{{hash}}`, `{{branch}}`, `{{message}}`, `{{count}}`, `{{files}}`), `cooldownMs` |
535
- | `onGitPull` | `gitPull` tool succeeds | `enabled`, `prompt` (supports `{{remote}}`, `{{branch}}`), `cooldownMs` |
536
- | `onGitPush` | `gitPush` tool succeeds | `enabled`, `prompt` (supports `{{remote}}`, `{{branch}}`, `{{hash}}`), `cooldownMs` |
537
- | `onBranchCheckout` | Git branch created or switched (via `gitCheckout` tool) | `enabled`, `prompt` (supports `{{branch}}`, `{{previousBranch}}`, `{{created}}`), `cooldownMs` |
538
- | `onPullRequest` | PR event occurs (via `githubCreatePR` or bridge PR tools) | `enabled`, `prompt` (supports `{{url}}`, `{{number}}`, `{{title}}`, `{{branch}}`), `cooldownMs` |
539
- | `onDiagnosticsCleared` | File's error/warning count drops from non-zero to zero | `enabled`, `prompt` (supports `{{file}}`), `cooldownMs` |
540
- | `onTaskCreated` | A Claude Code `TaskCreated` hook fires (CC 2.1.84+) | `enabled`, `prompt` (supports `{{taskId}}`, `{{prompt}}`), `cooldownMs` |
541
- | `onTaskSuccess` | An orchestrator task completes successfully | `enabled`, `prompt` (supports `{{taskId}}`, `{{output}}`), `cooldownMs` |
542
- | `onPermissionDenied` | A Claude Code `PermissionDenied` hook fires (CC 2.1.89+) | `enabled`, `prompt` (supports `{{tool}}`, `{{reason}}`), `cooldownMs` |
543
-
544
- > **Every hook prompt is prefixed with `@@ HOOK: <name> | file: <path> | ts: <iso> @@`** before reaching the orchestrator. This lets Claude identify which hook triggered a task and correlate it with IDE context without needing to parse the prompt body.
545
-
546
- > **Cloud sessions**: If `CLAUDE_CODE_REMOTE=true` (Claude Code on the web), automation tasks will still enqueue but the bridge itself runs locally — those tasks will not execute. Guard policy prompts or the `onInstructionsLoaded` hook with an environment check if needed.
547
-
548
- ### Wiring Claude Code events to automation hooks
549
-
550
- Five hooks (`onPostCompact`, `onInstructionsLoaded`, `onTaskCreated`, `onPermissionDenied`, `onCwdChanged`) fire from Claude Code's own lifecycle — not from MCP tool calls. To activate them, add the bridge `notify` command to your `~/.claude/settings.json` hooks:
551
-
552
- ```json
553
- {
554
- "hooks": {
555
- "PostCompact": [{ "matcher": "", "hooks": [{ "type": "command", "command": "claude-ide-bridge notify PostCompact" }] }],
556
- "InstructionsLoaded": [{ "matcher": "", "hooks": [{ "type": "command", "command": "claude-ide-bridge notify InstructionsLoaded" }] }],
557
- "TaskCreated": [{ "matcher": "", "hooks": [{ "type": "command", "command": "claude-ide-bridge notify TaskCreated --taskId $TASK_ID --prompt $PROMPT" }] }],
558
- "PermissionDenied": [{ "matcher": "", "hooks": [{ "type": "command", "command": "claude-ide-bridge notify PermissionDenied --tool $TOOL --reason $REASON" }] }],
559
- "CwdChanged": [{ "matcher": "", "hooks": [{ "type": "command", "command": "claude-ide-bridge notify CwdChanged --cwd $CWD" }] }]
560
- }
561
- }
562
- ```
563
-
564
- `claude-ide-bridge init` writes these entries automatically. `getBridgeStatus` reports which hooks are enabled in your policy but not yet wired in `settings.json`.
565
-
566
- The `notify` subcommand reads the running bridge's lock file for port and token, then POSTs `{ event, args }` to the bridge's `/notify` HTTP endpoint — no MCP session required.
567
-
568
- ### CLI flags
569
-
570
- | Flag | Description |
571
- |------|-------------|
572
- | `--claude-driver <mode>` | `subprocess` \| `api` \| `none` (default: `none`) |
573
- | `--claude-binary <path>` | Path to the `claude` binary (default: `claude`) |
574
- | `--automation` | Enable event-driven automation |
575
- | `--automation-policy <path>` | Path to JSON automation policy file |
576
-
577
- ### Task management tools (registered when `--claude-driver != none`)
578
-
579
- | Tool | Description |
580
- |------|-------------|
581
- | `runClaudeTask` | Enqueue a Claude task with optional context files, streaming, and model override (`model` param, e.g. `"claude-haiku-4-5-20251001"`) |
582
- | `getClaudeTaskStatus` | Poll task status and output by task ID |
583
- | `cancelClaudeTask` | Cancel a pending or running task |
584
- | `listClaudeTasks` | List session-scoped tasks with optional status filter |
585
- | `resumeClaudeTask` | Re-enqueue a completed or failed task by ID, preserving its original prompt, context files, and model |
586
-
587
- A `GET /tasks` HTTP endpoint (Bearer-auth required) provides a sanitized task list for external monitoring.
88
+ **Use `--full` when:**
89
+ - Running headless or in CI and you want structured git/GitHub output
90
+ - You want `runTests` (framework detection, structured pass/fail) instead of `npm test`
91
+ - You need `githubCreatePR` with PR template support
92
+ - You want Claude managing the whole workflow end-to-end (edit → test → commit → PR)
588
93
 
589
94
  ---
590
95
 
591
- ## Headless / CI Usage
96
+ ## Usage Examples
592
97
 
593
- Use with `claude -p` for automation:
594
-
595
- ```bash
596
- # Fix all lint errors
597
- claude -p "Use getDiagnostics to find all errors, then fix them" \
598
- --mcp-config ./mcp-bridge.json
599
-
600
- # Run tests and fix failures
601
- claude -p "Run tests with runTests, fix any failures, and commit" \
602
- --mcp-config ./mcp-bridge.json
603
-
604
- # Generate architecture overview
605
- claude -p "Map the project using getFileTree, getDocumentSymbols, and getCallHierarchy" \
606
- --mcp-config ./mcp-bridge.json --output-format json
98
+ ### Find every caller of a function
607
99
  ```
608
-
609
- ## Persistent Sessions *(beta)*
610
-
611
- When the bridge restarts, it picks up where it left off — restoring the set of files you had open in Claude's view of the workspace.
612
-
613
- **What's restored:**
614
- - Open file tracking (the set of files Claude was aware of across the last session's activity)
615
- - Task queue — pending and running tasks survive bridge crashes and restarts (persisted to `~/.claude/ide/tasks-<port>.json`)
616
- - Activity log — all tool calls from past sessions remain readable
617
-
618
- **What isn't restored:**
619
- - In-progress tool calls (those are cancelled on disconnect)
620
- - Live diagnostics (always fetched fresh from the extension)
621
- - Claude's own conversation context (that's Claude Code's responsibility, not the bridge's)
622
-
623
- **How it works:** The bridge checkpoints session state every 30 seconds to `~/.claude/ide/`. On startup, the first connecting Claude session is seeded with the union of all previously-tracked open files. No configuration needed — this is on by default.
624
-
625
- > **Beta caveat:** Checkpoint restore is file-list only. Full "resume from mid-task" support (restoring partial tool progress, re-streaming output) is not yet implemented.
626
-
627
- ---
628
-
629
- ## Headless VPS *(new)*
630
-
631
- Run the bridge on a remote server with no display — give Claude full IDE capabilities over SSH without opening a desktop environment.
632
-
633
- **Recommended: VS Code Remote-SSH or Cursor SSH**
634
-
635
- Connect your local VS Code, Cursor, or Windsurf to a VPS via Remote-SSH. The bridge extension runs in the remote extension host automatically — no extra setup. LSP, debugger, terminals, and all editor-state tools work normally because the extension and bridge run together on the server.
636
-
637
- > **Windsurf SSH tip:** Windsurf with an active SSH session counts as Remote-SSH — the extension loads on the VPS side and connects to the bridge. Confirm with `curl .../health` and look for `"extension": true`.
638
-
639
- **Fully headless (no IDE)**
640
-
641
- For servers with no VS Code at all:
642
-
643
- ```bash
644
- # On the VPS — install Node.js 20 + the bridge
645
- curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
646
- apt-get install -y nodejs
647
- npm install -g claude-ide-bridge
648
-
649
- # Generate a stable token (survives restarts — save this value)
650
- export BRIDGE_TOKEN=$(uuidgen | tr '[:upper:]' '[:lower:]')
651
-
652
- # Start the bridge in the background with tmux
653
- tmux new-session -d -s bridge 'claude-ide-bridge --bind 0.0.0.0 --port 9000 --fixed-token $BRIDGE_TOKEN --workspace /path/to/project'
654
-
655
- # Confirm the token
656
- claude-ide-bridge print-token --port 9000
100
+ "Show me everything that calls processPayment()"
657
101
  ```
102
+ Claude runs `getCallHierarchy` — returns the full incoming call tree with file paths and line numbers, no grep required.
658
103
 
659
- ```bash
660
- # On your local machine — write an MCP config pointing at the VPS
661
- # Run from inside your project directory (merges into the nearest .mcp.json)
662
- bash scripts/gen-mcp-config.sh remote \
663
- --host your-vps-ip:9000 \
664
- --token <token-from-above> \
665
- --write
104
+ ### Fix all type errors in the workspace
666
105
  ```
667
-
668
- Available tools in headless mode: file operations, git, terminals, search, CLI linters, dependency audits, HTTP client. LSP, debugger, and editor-state tools require the extension.
669
-
670
- > **Stable tokens:** Use `--fixed-token <uuid>` (or `CLAUDE_IDE_BRIDGE_TOKEN=<uuid>`) to keep the same token across restarts. Without it, a new token is generated each time the bridge starts, requiring a config update.
671
-
672
- > **VPS filesystem scope:** A bridge running on a VPS serves **that VPS's filesystem only**. File tools (`readFile`, `writeFile`, `searchWorkspace`, etc.) read and write files on the VPS — not on your local Mac. If you want Claude to work on files on your local machine, run the bridge locally (or use VS Code Remote-SSH, which runs both the extension and bridge on the VPS alongside your remote files).
673
-
674
- > **Security:** `--bind 0.0.0.0` exposes the bridge to the network. Put nginx or Caddy in front with TLS before exposing to the internet. See [docs/remote-access.md](docs/remote-access.md) for a production Caddy setup.
675
-
676
- ---
677
-
678
- ## Supported Editors
679
-
680
- | Editor | Status |
681
- |--------|--------|
682
- | VS Code | Supported |
683
- | Windsurf | Supported |
684
- | Cursor | Supported |
685
- | Google Antigravity | Supported |
686
-
687
- Install the extension in any supported editor:
688
-
689
- ```bash
690
- # Auto-detect editor
691
- claude-ide-bridge install-extension
692
-
693
- # Specify editor
694
- claude-ide-bridge install-extension windsurf
695
- claude-ide-bridge install-extension cursor
696
-
697
- # Or via the install script
698
- bash scripts/install-extension.sh --ide <name>
106
+ "Fix the TypeScript errors in src/api/"
699
107
  ```
108
+ Claude calls `getDiagnostics` to get live compiler errors, then `editText` to patch each one. No build step needed — diagnostics are live from the language server.
700
109
 
701
- ## Remote Desktop IDEs
702
-
703
- Run the bridge on a VPS with the IDE on your local machine — full tools, no compromise.
704
-
705
- ### VS Code Remote-SSH / Cursor SSH (recommended)
706
-
707
- When you connect VS Code or Cursor to a VPS via SSH, the extension host runs on the VPS. The bridge extension runs there too — it spawns the bridge, polls lock files, and connects over VPS localhost. Nothing needs to change on your end.
708
-
709
- **Setup:**
710
- 1. Install the extension in VS Code/Cursor locally (it will auto-install on the VPS via SSH)
711
- 2. Connect via Remote-SSH and open your VPS workspace
712
- 3. The extension activates on the VPS, auto-installs `claude-ide-bridge` if needed, and starts the bridge
713
- 4. Claude Code on your local machine connects normally via the lock file
714
-
715
- All tools are available — LSP, debugger, terminals, git, diagnostics — because the extension runs alongside the bridge on the same machine.
716
-
717
- ### Headless VPS (no IDE, CLI tools only)
718
-
719
- For VPS environments without VS Code (e.g. a pure server setup):
720
-
721
- ```bash
722
- # On the VPS — start bridge with a stable token so it survives restarts
723
- export BRIDGE_TOKEN=$(uuidgen | tr '[:upper:]' '[:lower:]')
724
- tmux new-session -d -s bridge 'claude-ide-bridge --bind 0.0.0.0 --port 9000 --fixed-token $BRIDGE_TOKEN --workspace /path/to/project'
725
-
726
- # Get the auth token
727
- claude-ide-bridge print-token --port 9000
110
+ ### Create a PR from the current branch
728
111
  ```
729
-
730
- ```bash
731
- # On your local machine — generate and write the MCP config
732
- # Run from inside your project directory (merges into the nearest .mcp.json)
733
- bash scripts/gen-mcp-config.sh remote \
734
- --host your-vps-ip:9000 \
735
- --token <token-from-above> \
736
- --write
112
+ "Push my branch and open a PR against main"
737
113
  ```
114
+ Claude calls `gitPush`, then `githubCreatePR` — picks up your repo's PR template automatically and pre-fills it from recent commits.
738
115
 
739
- > **Stable tokens:** `--fixed-token` keeps the same token across bridge restarts so your local config stays valid. Without it, the token changes every restart.
740
-
741
- > **Security:** `--bind 0.0.0.0` exposes the bridge to your network. For production, put nginx or Caddy in front with TLS. The `remote` config generator uses `http://` — update the URL to `https://` once TLS is in place.
742
-
743
- Available tools in headless mode: file operations, git, terminals, search, CLI linters, dependency audits, HTTP client. LSP, debugger, and editor-state tools are unavailable without the extension.
744
-
745
- ## Use with Claude Desktop
746
-
747
- Connect the Claude Desktop app to your running bridge — chat with your IDE using natural language.
748
-
749
- ```bash
750
- # Generate the config (prints to stdout)
751
- bash scripts/gen-claude-desktop-config.sh
752
-
753
- # Write it to the config file (backs up existing config)
754
- bash scripts/gen-claude-desktop-config.sh --write
116
+ ### Set a breakpoint and inspect a variable
755
117
  ```
756
-
757
- Then restart Claude Desktop once to load the new config. After that, the bridge's **stdio shim** handles everything automatically — it discovers the running bridge via lock files, buffers requests until connected, and reconnects transparently when the bridge restarts. No port or token needs to be hard-coded, and no further Desktop restarts are needed when the bridge restarts.
758
-
759
- > **Tool availability:** Without the VS Code extension connected, ~50 tools (debugger, LSP intelligence, editor state, decorations, refactoring) are unavailable. Claude Desktop works best alongside the running extension. You can verify connectivity by asking *"What tools do you have available?"* — the response will list what's active.
760
-
761
- > **Debugging the shim:** If the connection seems stuck, the shim logs to stderr. In Claude Desktop, check **Settings → Developer → MCP Logs** to see shim output. Common cause: bridge not running — start it with `claude-ide-bridge --watch` first.
762
-
763
- **Try it:** Open Claude Desktop and ask *"What diagnostics are in my workspace?"* or *"What files are open in my IDE?"*
764
-
765
- You can also use the general config generator:
766
-
767
- ```bash
768
- bash scripts/gen-mcp-config.sh claude-desktop --write
118
+ "Break on line 42 of auth.ts and tell me what token contains"
769
119
  ```
120
+ Claude calls `setDebugBreakpoints`, `startDebugging`, then `evaluateInDebugger` — real debugger evaluation, not console.log guessing.
770
121
 
771
- Config location:
772
- - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
773
- - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
774
-
775
- ## Dispatch (Mobile Remote Control)
776
-
777
- [Dispatch](https://docs.anthropic.com) is a Claude Desktop feature that lets you send instructions from your phone to your desktop Claude session. Combined with the bridge, you can check on your project, run tests, and review changes — all from a phone message.
778
-
779
- ### How it works
780
-
122
+ ### Refactor a symbol safely
781
123
  ```
782
- Your Phone (Claude App)
783
-
784
- ▼ terse instruction
785
- Claude Desktop (main conversation)
786
-
787
- ▼ MCP tool calls
788
- Bridge Server ──► IDE Extension ──► Your Code
789
-
790
- ▼ results
791
- Claude Desktop
792
-
793
- ▼ concise summary
794
- Your Phone
124
+ "Rename UserService to AuthService everywhere"
795
125
  ```
796
-
797
- Dispatch messages land in Claude Desktop's **main conversation**, which has full MCP bridge access. Claude calls the bridge tools, gathers results, and sends a summary back to your phone.
798
-
799
- > **Not Cowork:** Dispatch routes through the main conversation, not a Cowork session. All 136+ bridge tools are available. The Cowork tool-access limitation does not apply here.
800
-
801
- ### Setup
802
-
803
- 1. **Bridge running** — `claude-ide-bridge --watch` in your project directory
804
- 2. **Claude Desktop connected** — stdio shim configured (see [Use with Claude Desktop](#use-with-claude-desktop))
805
- 3. **Dispatch paired** — open Claude Desktop → Cowork → Dispatch → scan QR code with Claude mobile app
806
- 4. **Computer awake** — your desktop must be powered on and not sleeping
807
-
808
- ### Phone-friendly prompts
809
-
810
- The bridge includes 5 Dispatch-optimized prompts designed for terse phone triggers. Each instructs Claude to call specific bridge tools and return concise, phone-screen-friendly output:
811
-
812
- | Prompt | Phone message | What it does |
813
- |--------|--------------|--------------|
814
- | `project-status` | "How's the build?" | Git status + diagnostics + test summary |
815
- | `quick-tests` | "Run the tests" | Pass/fail summary with failure details |
816
- | `quick-review` | "Review my changes" | Diff summary + diagnostics for changed files |
817
- | `build-check` | "Does it build?" | Build/compile check with error summary |
818
- | `recent-activity` | "What changed?" | Recent git log + uncommitted changes |
819
-
820
- You can also type any natural-language instruction — the prompts above are shortcuts that produce consistently formatted output.
821
-
822
- ### Example Dispatch session
823
-
824
- From your phone:
825
- > "How's the build?"
826
-
827
- Claude checks git status, diagnostics, and tests, then responds:
828
- ```
829
- Branch: feature/oauth (3 uncommitted)
830
- Diagnostics: 0 errors, 2 warnings
831
- Tests: 142 passed, 0 failed (12s)
832
- ```
833
-
834
- From your phone:
835
- > "Review my changes"
836
-
837
- Claude diffs your uncommitted work and responds with a file-by-file summary and an overall assessment.
838
-
839
- ### Cowork context template
840
-
841
- For better Dispatch results, copy `templates/dispatch-context.md` into your Cowork context folder. It maps terse phone commands to bridge tools and sets response formatting guidelines for mobile output.
842
-
843
- ### Limitations
844
-
845
- - **One conversation thread** — Dispatch uses a single persistent thread
846
- - **Computer must be awake** — if your desktop sleeps, Dispatch goes dark
847
- - **No push notifications** — check the phone app manually for responses
848
- - **Best for reads, not writes** — information retrieval (status, tests, review) is highly reliable; multi-file edits from phone messages are not recommended
126
+ Claude calls `refactorAnalyze` (checks blast radius and risk), `refactorPreview` (shows every edit before touching a file), then `renameSymbol` — language-server rename, not find-and-replace.
849
127
 
850
128
  ---
851
129
 
852
- ## Agent Teams (Parallel Multi-Agent)
853
-
854
- [Agent Teams](https://code.claude.com/docs/en/agent-teams) let multiple Claude Code instances work in parallel on the same project. A team lead assigns tasks, teammates execute them independently, and results are synthesized.
855
-
856
- ### How it works with the bridge
857
-
858
- Each teammate is an independent Claude Code session that connects to the bridge via its own WebSocket/MCP session. The bridge already supports multiple concurrent sessions (`MAX_SESSIONS = 5`), so **agent teams work out of the box** — no additional configuration needed.
859
-
860
- ```
861
- Team Lead (Claude Code)
862
- ├── Teammate A ──► Bridge Session 1 ──► IDE
863
- ├── Teammate B ──► Bridge Session 2 ──► IDE
864
- └── Teammate C ──► Bridge Session 3 ──► IDE
865
- ```
866
-
867
- All teammates share the same IDE and workspace. Each gets full access to all 136+ bridge tools.
868
-
869
- ### Setup
130
+ ## Deployment Options
870
131
 
871
- 1. Enable agent teams: set `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` in your environment
872
- 2. Bridge running: `claude-ide-bridge --watch`
873
- 3. Ask Claude to create a team: *"Create an agent team to review and fix all TypeScript errors"*
132
+ ### Local (VS Code / Cursor / Windsurf)
133
+ Standard setup. Extension connects automatically. Full LSP, debugger, and editor state available.
874
134
 
875
- ### Bridge prompts for team leads
876
-
877
- | Prompt | What it does |
878
- |--------|-------------|
879
- | `/mcp__bridge__team-status` | Workspace state, active tasks, recent activity across sessions |
880
- | `/mcp__bridge__health-check` | Full project health: tests, diagnostics, security |
881
-
882
- ### Best practices
883
-
884
- - **Pre-approve tools** — teammates block on permission prompts. Use `--dangerously-skip-permissions` in sandboxed environments or pre-approve common tools.
885
- - **Avoid file conflicts** — assign teammates to different files/modules. The bridge doesn't lock files across sessions.
886
- - **Use the team-status prompt** — the lead can call `/mcp__bridge__team-status` to see workspace state and recent activity across all sessions.
887
- - **SendMessage auto-resume (≥ v2.1.77)** — As of Claude Code v2.1.77, `SendMessage` automatically resumes stopped agents instead of returning an error. You no longer need to check whether a teammate agent is running before sending it a message.
888
-
889
- ---
890
-
891
- ## Scheduled Tasks (Recurring Workflows)
892
-
893
- Claude Desktop's [Scheduled Tasks](https://code.claude.com/docs/en/scheduled-tasks) run recurring autonomous workflows on a cron schedule. Each run fires a fresh Claude session with full MCP access — including all bridge tools.
894
-
895
- ### How it works with the bridge
896
-
897
- When a scheduled task fires, Claude Desktop loads your MCP servers from config. If the bridge's stdio shim is configured (see [Use with Claude Desktop](#use-with-claude-desktop)), the task gets full access to all bridge tools.
898
-
899
- ```
900
- Cron trigger (e.g., daily 9am)
901
-
902
-
903
- Claude Desktop (fresh session)
904
-
905
- ▼ loads MCP servers
906
- Bridge Server ──► IDE Extension ──► Your Code
907
-
908
- ▼ structured report
909
- Task history (viewable in Desktop sidebar)
910
- ```
911
-
912
- ### Ready-made task templates
913
-
914
- Copy any of these into `~/.claude/scheduled-tasks/` to set up a recurring workflow:
915
-
916
- | Template | Schedule | What it does |
917
- |----------|----------|-------------|
918
- | `nightly-review` | Daily | Review uncommitted changes, diagnostics, test status |
919
- | `health-check` | Hourly/Daily | Full project health: tests, diagnostics, security advisories |
920
- | `dependency-audit` | Weekly | Scan dependencies for CVEs and outdated packages |
135
+ ### Remote SSH
136
+ VS Code Remote-SSH and Cursor SSH load the extension on the VPS side (`extensionKind: ["workspace"]`). Start the bridge on the remote machine. All 137 tools work over SSH.
921
137
 
922
138
  ```bash
923
- # Install a scheduled task template
924
- cp -r templates/scheduled-tasks/health-check ~/.claude/scheduled-tasks/
139
+ # On the remote machine
140
+ claude-ide-bridge --full --watch --bind 0.0.0.0
925
141
  ```
926
142
 
927
- Then open Claude Desktop → Schedule → configure the frequency and permissions for the task.
928
-
929
- ### Bridge prompts for scheduled contexts
930
-
931
- The `health-check` MCP prompt (`/mcp__bridge__health-check`) produces the same structured report as the scheduled task template — useful for ad-hoc runs from any MCP client.
932
-
933
- ### Bridge automation vs. Desktop scheduled tasks
934
-
935
- The bridge has its own event-driven automation system (`--automation --automation-policy`). Here's when to use which:
936
-
937
- | Feature | Trigger | Persistence | Best for |
938
- |---------|---------|-------------|----------|
939
- | **Desktop Scheduled Tasks** | Time-based (cron) | Survives restarts | Nightly reviews, weekly audits, periodic checks |
940
- | **Bridge Automation Hooks** | Event-driven (file save, diagnostic error) | Requires bridge running | Immediate reactions: auto-fix on error, lint on save |
941
-
942
- They're complementary — use scheduled tasks for periodic health checks and bridge automation for real-time reactions.
943
-
944
- ---
945
-
946
- ## Use with Claude.ai Web
947
-
948
- Connect the bridge to [claude.ai](https://claude.ai) via a **Custom Connector** — chat with your IDE from the browser without installing anything extra.
949
-
950
- **Prerequisites:** The bridge must be reachable over HTTPS from the public internet. The recommended path is a **Cloudflare Named Tunnel** — no domain registration required, free, and the URL never changes.
951
-
952
- ### Step 1 — Expose the bridge with a Cloudflare Named Tunnel
143
+ ### VPS + systemd
144
+ Persistent bridge with automatic restarts, fixed auth token, and optional OAuth 2.0 for remote MCP clients (claude.ai, Codex CLI).
953
145
 
954
146
  ```bash
955
- # Install cloudflared on the machine running the bridge
956
- curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 \
957
- -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared
958
-
959
- # Authenticate (one-time — opens a browser window)
960
- cloudflared tunnel login
961
-
962
- # Create a named tunnel (one-time)
963
- cloudflared tunnel create my-bridge
964
-
965
- # Route a hostname to it (requires a domain managed on Cloudflare)
966
- cloudflared tunnel route dns my-bridge bridge.yourdomain.com
967
-
968
- # Create ~/.cloudflared/config.yml
969
- cat > ~/.cloudflared/config.yml <<'EOF'
970
- tunnel: my-bridge
971
- credentials-file: /root/.cloudflared/<tunnel-id>.json
972
-
973
- ingress:
974
- - hostname: bridge.yourdomain.com
975
- service: http://localhost:9000
976
- - service: http_status:404
977
- EOF
147
+ # Full provisioning
148
+ bash deploy/bootstrap-new-vps.sh
978
149
 
979
- # Start the tunnel (permanent — add to systemd or pm2 for auto-start on reboot)
980
- cloudflared tunnel run my-bridge
150
+ # Or just the service
151
+ bash deploy/install-vps-service.sh
981
152
  ```
982
153
 
983
- The bridge is now permanently reachable at `https://bridge.yourdomain.com`. The URL **does not change** across `cloudflared` or bridge restarts.
984
-
985
- > **Auto-start:** Run `cloudflared service install` to register the tunnel as a systemd service so it starts on boot alongside the bridge.
986
-
987
- ### Step 2 — Start the bridge with OAuth enabled
154
+ See [deploy/README.md](deploy/README.md) and [docs/remote-access.md](docs/remote-access.md).
988
155
 
156
+ ### Docker
989
157
  ```bash
990
- # Generate a token once keep it safe, you'll need it to approve connections
991
- TOKEN=$(uuidgen)
992
-
993
- claude-ide-bridge \
994
- --bind 0.0.0.0 \
995
- --workspace /path/to/project \
996
- --fixed-token $TOKEN \
997
- --issuer-url https://bridge.yourdomain.com \
998
- --cors-origin https://claude.ai
158
+ docker run -p 3284:3284 ghcr.io/oolab-labs/claude-ide-bridge:latest --full --bind 0.0.0.0
999
159
  ```
1000
160
 
1001
- - `--fixed-token` — token never rotates across restarts
1002
- - `--issuer-url` — your public HTTPS URL; activates OAuth 2.0 so claude.ai can authenticate
1003
- - `--cors-origin https://claude.ai` — allows claude.ai's browser requests to reach the bridge
1004
-
1005
- ### Step 3 — Add the Custom Connector on claude.ai
1006
-
1007
- 1. Go to **claude.ai → Settings → Integrations → Add custom connector**
1008
- 2. Enter the MCP endpoint URL (no token in the URL — OAuth handles auth):
1009
- ```
1010
- https://bridge.yourdomain.com/mcp
1011
- ```
1012
- 3. Click **Connect** — claude.ai redirects you to the bridge's authorization page
1013
- 4. Enter your bridge token (`$TOKEN` from Step 2) and click **Authorize**
1014
- 5. claude.ai completes the OAuth exchange and lists all available tools
1015
-
1016
- > The bridge token is entered once during authorization. After that, claude.ai holds a short-lived OAuth access token that it refreshes automatically — you don't need to update the connector URL when the bridge restarts.
1017
-
1018
- > **Tool availability:** All 136+ tools are available in full mode. VS Code extension-dependent tools (LSP, debugger, editor state) require the extension to be connected on the remote machine. Without the extension, ~57 CLI-backed tools still work (file ops, git, terminal, search, HTTP client). In slim mode (default), only the 50 IDE-exclusive tools are exposed.
1019
-
1020
- ### Alternatives
1021
-
1022
- <details>
1023
- <summary>Reverse proxy with nginx or Caddy (if you already have a domain + TLS setup)</summary>
1024
-
1025
- Put nginx or Caddy in front of the bridge with TLS — proxy **all paths** (not just `/mcp`) so the OAuth discovery and authorization endpoints are reachable. See [docs/remote-access.md](docs/remote-access.md) for a ready-made config.
1026
-
1027
- </details>
1028
-
1029
- <details>
1030
- <summary>Ephemeral Cloudflare Tunnel (one-off testing only)</summary>
1031
-
1032
- > ⚠️ **Do not use for permanent setups.** The subdomain (`abc123.trycloudflare.com`) changes every time `cloudflared` restarts — your MCP config and connector URL will break. Use the named tunnel above for anything you'll use more than once.
1033
-
161
+ Or with Compose:
1034
162
  ```bash
1035
- cloudflared tunnel --url http://localhost:9000
1036
- # Outputs a temporary URL like: https://abc123.trycloudflare.com
163
+ docker compose up
1037
164
  ```
1038
165
 
1039
- </details>
1040
-
1041
- **Mobile app:** The connector syncs to the Claude mobile app once added on the web. If it doesn't appear immediately, use claude.ai in your phone's browser — the connector works there without the native app.
1042
-
1043
- **Try it:** Open [claude.ai](https://claude.ai), start a new conversation, and ask *"What files are in my workspace?"*
166
+ Headless image includes `typescript-language-server` and `universal-ctags` for LSP and symbol search without VS Code. See [documents/headless-quickstart.md](documents/headless-quickstart.md).
1044
167
 
1045
168
  ---
1046
169
 
1047
- ## Streamable HTTP (Remote MCP)
1048
-
1049
- The bridge also exposes an MCP-compliant **Streamable HTTP** transport at `POST/GET/DELETE /mcp`. This lets any MCP client that speaks HTTP (including Claude Desktop via Custom Connectors, or curl) connect without a WebSocket.
1050
-
1051
- ```bash
1052
- # Start the bridge (listens on localhost by default)
1053
- claude-ide-bridge --workspace /path/to/your-project
1054
-
1055
- # Connect remotely by binding to all interfaces
1056
- claude-ide-bridge --workspace /path/to/your-project --bind 0.0.0.0
1057
- ```
1058
-
1059
- > **Security warning:** `--bind 0.0.0.0` exposes the bridge to your entire network. Always put it behind a reverse proxy with TLS and authentication before exposing it to the internet. See [docs/remote-access.md](docs/remote-access.md) for a production-ready Caddy/nginx setup.
1060
-
1061
- The bridge token (from the lock file at `~/.claude/ide/<port>.lock`) is required as a Bearer header:
1062
-
1063
- ```bash
1064
- TOKEN=$(cat ~/.claude/ide/*.lock | python3 -c "import sys,json; print(json.load(sys.stdin)['authToken'])")
1065
-
1066
- # Initialize a session
1067
- curl -X POST http://localhost:PORT/mcp \
1068
- -H "Authorization: Bearer $TOKEN" \
1069
- -H "Content-Type: application/json" \
1070
- -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"my-client","version":"1.0"}}}'
1071
- ```
1072
-
1073
- For remote access over the internet, see [docs/remote-access.md](docs/remote-access.md) for Caddy/nginx reverse proxy setup with TLS.
1074
-
1075
- ## CLI Reference
1076
-
1077
- ### Subcommands
1078
-
1079
- ```
1080
- claude-ide-bridge init [--workspace <path>] One-command setup: install extension + write CLAUDE.md + print next steps
1081
- claude-ide-bridge start-all [options] Full tmux orchestrator (bridge + Claude + remote)
1082
- claude-ide-bridge install-extension [editor] Install VS Code extension into your IDE
1083
- claude-ide-bridge gen-claude-md [--write] [--workspace <path>]
1084
- Print bridge workflow guidance (or write to CLAUDE.md)
1085
- ```
1086
-
1087
- ### Bridge options (default mode)
1088
-
1089
- ```
1090
- --bind <addr> Bind address (default: 127.0.0.1)
1091
- --fixed-token <uuid> Stable auth token across restarts (default: random UUID)
1092
- --issuer-url <url> Public HTTPS URL — activates OAuth 2.0 for remote clients
1093
- --cors-origin <url> Allow cross-origin requests from this origin (repeatable)
1094
- --workspace <path> Workspace folder (default: cwd)
1095
- --ide-name <name> IDE name shown to Claude (default: auto-detect)
1096
- --editor <cmd> Editor CLI command (default: auto-detect)
1097
- --port <number> Force specific port (default: random)
1098
- --linter <name> Enable specific linter (repeatable; default: auto-detect)
1099
- --grace-period <ms> Reconnect grace period in ms (default: 30000, max: 600000)
1100
- --allow-command <cmd> Add command to execution allowlist (repeatable)
1101
- --timeout <ms> Command timeout in ms (default: 30000, max: 120000)
1102
- --max-result-size <KB> Max output size in KB (default: 512, max: 4096)
1103
- --vps VPS/headless mode: adds curl, systemctl, nginx, pm2, docker to allowlist
1104
- --watch Supervisor mode: auto-restart on crash (exponential backoff, max 30s)
1105
- --auto-tmux Re-exec inside a tmux session automatically
1106
- --tool-rate-limit <n> Max tool calls per minute per session (default: 60)
1107
- --audit-log <path> Append all tool calls to a JSONL file (persistent audit trail)
1108
- --claude-driver <mode> Claude subprocess driver: subprocess | api | none (default: none)
1109
- --claude-binary <path> Path to claude binary (default: claude)
1110
- --automation Enable event-driven automation
1111
- --automation-policy <path> Path to JSON automation policy file
1112
- --plugin <path> Load a plugin directory (repeatable)
1113
- --plugin-watch Watch plugin directories and hot-reload on change
1114
- --full Register all 136+ tools (default: slim mode with 50 IDE-exclusive tools)
1115
- --verbose Enable debug logging
1116
- --version, -v Print version and exit
1117
- --analytics <on|off> Enable or disable anonymous usage analytics
1118
- --help Show this help
1119
- ```
1120
-
1121
- ## Architecture
1122
-
1123
- ```
1124
- claude-ide-bridge/
1125
- src/
1126
- bridge.ts Main orchestrator
1127
- server.ts HTTP/WebSocket server
1128
- transport.ts MCP transport layer
1129
- extensionClient.ts Extension WebSocket client
1130
- config.ts CLI args & config
1131
- claudeDriver.ts IClaudeDriver interface + SubprocessDriver
1132
- claudeOrchestrator.ts Task queue (MAX_CONCURRENT=10, MAX_QUEUE=20)
1133
- automation.ts AutomationHooks — onDiagnosticsError / onFileSave / onFileChanged / onTestRun / onGitCommit / onGitPull / onGitPush / onBranchCheckout / onPullRequest / onCwdChanged / onPostCompact / onInstructionsLoaded policies
1134
- tools/ 136+ MCP tool implementations
1135
- vscode-extension/
1136
- src/extension.ts VS Code extension
1137
- src/connection.ts WebSocket connection management
1138
- src/handlers/ Request handlers (terminal, lsp, debug, ...)
1139
- claude-ide-bridge-plugin/
1140
- skills/ 9 slash commands
1141
- agents/ 3 specialized subagents
1142
- hooks/ 16 hook events (PreToolUse, PostToolUse, SessionStart, InstructionsLoaded, Elicitation, ElicitationResult, PostCompact, WorktreeCreate, WorktreeRemove, SubagentStart, SubagentStop, TeammateIdle, TaskCompleted, ConfigChange, Stop, StopFailure)
1143
- .mcp.json MCP server config
1144
- ```
1145
-
1146
- ## Tips
1147
-
1148
- ### Useful tools you might not know about
1149
-
1150
- - **`bridgeDoctor`** — comprehensive environment health check. Verifies extension connection, git, TypeScript, linter, test runner, lock file, node_modules, and GitHub CLI. Returns actionable suggestions for anything broken. Call this first when tools are missing or the setup feels off.
1151
-
1152
- - **`getBridgeStatus`** — ask Claude to call this when things feel wrong. It returns extension connection state, circuit breaker status (including remaining suspension time), active session count, uptime, and `lastDisconnect` (timestamp, WebSocket close code, and reason for the most recent disconnect — useful for diagnosing 1006 abnormal-close events). Faster than reading logs.
1153
-
1154
- - **`getActivityLog`** — returns a history of all tool calls in the current bridge session. Pass `showStats: true` to get per-tool call counts, average durations, and error rates. Useful after long autonomous tasks.
1155
-
1156
- - **`getHandoffNote`** / **`setHandoffNote`** — a persistent scratchpad (10KB, shared across all MCP sessions) stored at `~/.claude/ide/handoff-note.json`. Use it to pass context between a Claude Code CLI session and Claude Desktop, or between sessions on different machines. Ask Claude to write a summary note before closing a session, then read it in the next.
1157
-
1158
- - **`createGithubIssueFromAIComment`** — Claude can scan your code for `// AI:` comments (e.g. `// AI: this function needs error handling`) and file them as GitHub issues automatically. The extension pushes AI comment cache in real time — call `createGithubIssueFromAIComment` directly to file the detected comments as issues.
1159
-
1160
- - **`executeVSCodeCommand`** — run any VS Code command by ID with optional arguments. Requires the command to be on the allowlist (`--vscode-allow-command <id>`). Use `listVSCodeCommands` to discover available command IDs.
1161
-
1162
- ### Keep your documentation and AI memory fresh
1163
-
1164
- Claude's effectiveness improves significantly when your project documentation and memory stay current. A few habits that pay off:
1165
-
1166
- - **Update `CLAUDE.md` after architectural changes.** Run `claude-ide-bridge gen-claude-md --write` when you add new tools or change patterns — stale guidance causes Claude to use wrong workflows.
1167
- - **Tell Claude to remember important decisions.** Say "remember that we don't mock the database in tests" or "remember we're targeting Node 20". Claude Code stores these in its memory and applies them in future sessions automatically.
1168
- - **Update memory at end-of-session.** If you've been working on a complex feature or debugging a subtle issue, ask Claude to save a summary to memory before closing — next session picks up where you left off with full context.
1169
- - **Prune stale memories.** Ask Claude "what do you remember about this project?" occasionally and tell it to forget anything outdated. Stale memory causes Claude to confidently do the wrong thing.
1170
- - **Keep `documents/` in sync with code.** If your team has docs in the `documents/` directory (platform-docs, roadmap, etc.), update them when features ship. Claude reads these at session start — accurate docs mean fewer mistakes.
170
+ ## Automation Hooks
1171
171
 
1172
- > **Quick memory check:** Ask Claude *"What do you remember about this project?"* at the start of a new session to confirm context loaded correctly.
1173
-
1174
- ### After restarting the bridge
1175
-
1176
- When you restart the bridge (e.g. after an update or crash), existing sessions need to reconnect:
1177
-
1178
- - **Claude Code (remote):** Start a **new Claude Code conversation** — the old session's MCP connection is tied to the previous bridge process.
1179
- - **Claude Desktop:** The stdio shim reconnects automatically — no app restart needed. Only restart Claude Desktop if the shim process itself died (check MCP Logs in Settings → Developer).
1180
- - **VS Code extension:** The extension reconnects automatically. If the bridge was updated, **reload the VS Code window** (`Developer: Reload Window`) so the extension picks up the new version.
1181
-
1182
- ### Persistent Sessions (beta)
1183
-
1184
- The bridge saves a checkpoint every 30 seconds to `~/.claude/ide/checkpoint-<port>.json`. On restart, it reads the most recent checkpoint to restore state.
1185
-
1186
- **What persists:**
1187
-
1188
- - **Open-file tracking** — restored only after a **crash or kill signal**, not after a clean `stop()` (which deletes the checkpoint). The first Claude Code session to reconnect after a crash receives the merged list of files that were open across all prior sessions. Subsequent sessions in the same run start empty.
1189
- - **Task history** (when `--claude-driver` is enabled) — saved to `~/.claude/ide/tasks-<port>.json` and restored on every restart, including clean stops.
1190
-
1191
- **Staleness window:** Checkpoints older than **5 minutes** are silently ignored and no restore occurs. A `console.warn` is emitted when a stale checkpoint is rejected.
1192
-
1193
- **Multi-workspace safety:** Each checkpoint is tagged with its workspace path. Two bridge instances running on different workspaces will not share or cross-contaminate each other's checkpoints.
1194
-
1195
- ### Reduce duplicate git instructions
1196
-
1197
- Claude Code ships with its own built-in commit/PR guidance. When using the bridge's dedicated git tools (`gitCommit`, `gitPush`, `githubCreatePR`, etc.), you can suppress the duplicate Claude Code instructions by adding to `~/.claude/settings.json`:
172
+ Event-driven hooks that trigger Claude tasks automatically no polling, no manual invocation.
1198
173
 
1199
174
  ```json
1200
175
  {
1201
- "includeGitInstructions": false
176
+ "hooks": [
177
+ {
178
+ "event": "onDiagnosticsError",
179
+ "prompt": "Fix the type error in {{file}}: {{diagnostics}}",
180
+ "cooldownMs": 30000
181
+ },
182
+ {
183
+ "event": "onFileSave",
184
+ "patterns": ["src/**/*.ts"],
185
+ "prompt": "Run tests for {{file}} and fix any failures"
186
+ },
187
+ {
188
+ "event": "onGitCommit",
189
+ "prompt": "Review commit {{hash}}: {{message}}"
190
+ }
191
+ ]
1202
192
  }
1203
193
  ```
1204
194
 
1205
- This keeps the prompt clean and ensures Claude uses the bridge's structured git tools rather than raw shell commands.
1206
-
1207
- ---
1208
-
1209
- ## Connection Hardening
1210
-
1211
- Production-grade reliability:
1212
- - WebSocket heartbeat (10s) with automatic reconnect
1213
- - Sleep/wake detection via heartbeat gap monitoring
1214
- - Circuit breaker with exponential backoff for timeout cascades
1215
- - Generation counter preventing stale handler responses
1216
- - Extension-required tool filtering when extension disconnects
1217
- - 1579+ tests (bridge) + 394 extension tests; full WebSocket round-trip integration coverage
1218
- - MCP elicitation support (`elicitation: {}` capability) — bridge can send `elicitation/create` mid-task to request structured user input via Claude Code's interactive dialog (Claude Code 2.1.76+)
1219
-
1220
- ## Building
1221
-
195
+ Start with:
1222
196
  ```bash
1223
- # Bridge
1224
- npm run build # TypeScript compilation
1225
- npm run dev # Development with tsx
1226
- npm test # Run 1579+ bridge tests
1227
-
1228
- # Extension
1229
- cd vscode-extension
1230
- npm run build # esbuild bundle
1231
- npm run package # Create .vsix
1232
- npm test # Run 394 extension tests
197
+ claude-ide-bridge --full --watch --automation --automation-policy ./policy.json --claude-driver subprocess
1233
198
  ```
1234
199
 
1235
- ## Troubleshooting
200
+ **18 hook events:** `onFileSave`, `onFileChanged`, `onDiagnosticsError`, `onDiagnosticsCleared`, `onGitCommit`, `onGitPush`, `onGitPull`, `onBranchCheckout`, `onPullRequest`, `onTestRun`, `onTestPassAfterFailure`, `onPostCompact`, `onInstructionsLoaded`, `onTaskCreated`, `onTaskSuccess`, `onPermissionDenied`, `onCwdChanged`, `onDebugSessionEnd`
1236
201
 
1237
- ### Claude says a tool doesn't exist or tool count seems low
202
+ All hooks support `cooldownMs` (min 5s), `promptName`/`promptArgs` for named prompts, and `when` conditions (`minDiagnosticCount`, `testRunnerLastStatus`). See [docs/automation.md](docs/automation.md).
1238
203
 
1239
- When the VS Code extension is disconnected, 50 tools that require extension access return an error with reconnect instructions (they remain visible but non-functional). These include LSP, debugger, editor state, and refactoring tools. In slim mode (default), all tools need the extension; in full mode, ~57 CLI-backed tools (git, terminal, file ops, HTTP, GitHub) still work. Check the "Claude IDE Bridge" output channel in VS Code — if you see a disconnection event, use `Claude IDE Bridge: Reconnect` from the command palette, or reload the window.
204
+ ---
1240
205
 
1241
- ### Bridge and extension version mismatch
206
+ ## Plugin System
1242
207
 
1243
- The extension auto-installs the bridge via npm on first use. If you also have a manually installed version, they may diverge. To check:
208
+ Extend the bridge with custom MCP tools without forking. Plugins load in-process alongside built-in tools and support hot reload.
1244
209
 
1245
210
  ```bash
1246
- claude-ide-bridge --version # bridge version
1247
- # Compare with the version shown in the extension's output channel on startup
211
+ # Scaffold a new plugin
212
+ claude-ide-bridge gen-plugin-stub ./my-plugin --name "org/my-plugin" --prefix "myPrefix"
213
+
214
+ # Load it
215
+ claude-ide-bridge --full --watch --plugin ./my-plugin --plugin-watch
1248
216
  ```
1249
217
 
1250
- To force the extension's managed version:
218
+ Publish to npm with keyword `claude-ide-bridge-plugin` — users install by package name:
1251
219
 
1252
220
  ```bash
1253
- # Run the Install / Upgrade command from VS Code's command palette:
1254
- # "Claude IDE Bridge: Install / Upgrade Bridge"
1255
- # Or manually:
1256
- npm install -g claude-ide-bridge@latest
221
+ claude-ide-bridge --plugin claude-ide-bridge-my-plugin
1257
222
  ```
1258
223
 
1259
- Then reload the VS Code window.
224
+ See [documents/plugin-authoring.md](documents/plugin-authoring.md) for the full manifest schema and entrypoint API.
1260
225
 
1261
- ### Extension keeps reconnecting (oscillation)
1262
-
1263
- Repeated disconnects / `tools/list` changes usually mean multiple old VSIX versions are installed across VS Code forks (e.g. both VS Code and Cursor). Install the latest extension in every editor and reload each window.
226
+ ---
1264
227
 
1265
- ### Remote control: prompt doesn't appear or gets stuck (Claude mobile app)
228
+ ## Companion Marketplace
1266
229
 
1267
- When using `claude remote-control` from the Claude mobile app, the user prompt sometimes fails to appear in the session or the input appears stuck. This is a known quirk of the remote control connection, not a bridge issue.
230
+ Install curated companion MCP servers directly into your Claude Desktop config:
1268
231
 
1269
- **Fix:** Force-quit and relaunch the Claude app. The session reconnects and the prompt reappears.
232
+ ```bash
233
+ claude-ide-bridge marketplace list
234
+ claude-ide-bridge marketplace search memory
235
+ claude-ide-bridge install claude-mem
236
+ ```
1270
237
 
1271
- This tends to happen after the phone has been in the background for a while or after a network change (switching from WiFi to cellular). If you notice messages not sending or the UI not updating, a quick app restart is the fastest fix.
238
+ `install` merges the companion into `mcpServers` in your Claude Desktop config atomically and idempotently no manual JSON editing.
1272
239
 
1273
- ### Remote control: agent is running but not making progress
240
+ ---
1274
241
 
1275
- Occasionally a running agent or tool call hangs — the bridge is active, the extension is connected, but Claude isn't advancing. This usually means the subprocess or agent has stalled internally.
242
+ ## CLI Reference
1276
243
 
1277
- **Fix:** Stop the current process (interrupt the Claude Code session or cancel the running task), then try again. In most cases the task resumes cleanly on the second attempt. If it happens repeatedly on the same prompt, try breaking the task into smaller steps.
244
+ | Command | What it does |
245
+ |---|---|
246
+ | `claude-ide-bridge init` | One-command setup: install extension + write CLAUDE.md + register MCP server |
247
+ | `claude-ide-bridge --watch` | Start bridge with auto-restart on crash (2s → 30s backoff) |
248
+ | `claude-ide-bridge --full` | Enable all 137 tools (default: 56 slim tools) |
249
+ | `claude-ide-bridge install-extension` | Install companion VS Code extension |
250
+ | `claude-ide-bridge gen-claude-md --write` | Add bridge section to existing CLAUDE.md |
251
+ | `claude-ide-bridge print-token` | Print auth token from active lock file |
252
+ | `claude-ide-bridge gen-plugin-stub <dir>` | Scaffold a new plugin |
253
+ | `claude-ide-bridge marketplace list` | List available companion servers |
254
+ | `claude-ide-bridge install <companion>` | Install companion into Claude Desktop config |
255
+ | `claude-ide-bridge notify <Event>` | Post a hook event to a running bridge (for CC hook wiring) |
256
+ | `claude-ide-bridge start-all` | Launch tmux session with bridge + extension watcher |
257
+
258
+ **Key flags:**
259
+
260
+ | Flag | Default | Description |
261
+ |---|---|---|
262
+ | `--full` | off | Enable all tools |
263
+ | `--watch` | off | Auto-restart on crash |
264
+ | `--bind <host>` | `127.0.0.1` | Bind address (`0.0.0.0` for remote access) |
265
+ | `--port <n>` | auto | Port (auto-detected from lock files) |
266
+ | `--fixed-token <uuid>` | — | Stable auth token across restarts |
267
+ | `--automation` | off | Enable automation hooks |
268
+ | `--automation-policy <path>` | — | Path to policy JSON |
269
+ | `--claude-driver subprocess` | none | Enable Claude subprocess orchestration |
270
+ | `--plugin <path>` | — | Load a plugin (repeatable) |
271
+ | `--plugin-watch` | off | Hot-reload plugins on change |
272
+ | `--issuer-url <url>` | — | Activate OAuth 2.0 mode |
273
+ | `--cors-origin <origin>` | — | Add CORS origin (repeatable) |
274
+ | `--vps` | off | Expand command allowlist for VPS use |
275
+ | `--grace-period <ms>` | 120000 | Session preservation window across disconnects |
1278
276
 
1279
- ### Tool parameters rejected with type errors in long sessions
277
+ ---
1280
278
 
1281
- After conversation compaction, deferred tools (loaded via ToolSearch) lose their input schemas, causing array/number parameters to be rejected with type errors. This is a known Claude Code bug fixed in v2.1.76.
279
+ ## Documentation
1282
280
 
1283
- **Fix:** Update Claude Code to ≥ 2.1.76:
281
+ | File | Description |
282
+ |---|---|
283
+ | [ARCHITECTURE.md](ARCHITECTURE.md) | System topology, request lifecycle, component map, design decisions |
284
+ | [documents/platform-docs.md](documents/platform-docs.md) | Full tool reference — all 137 tools with parameters and examples |
285
+ | [documents/prompts-reference.md](documents/prompts-reference.md) | All MCP prompts (31 prompts, 12 plugin skills, 4 subagents) |
286
+ | [docs/automation.md](docs/automation.md) | Automation hooks reference — all 18 events, policy schema, condition filters |
287
+ | [docs/troubleshooting.md](docs/troubleshooting.md) | Diagnostics, common errors, and fixes |
288
+ | [docs/remote-access.md](docs/remote-access.md) | VPS setup, OAuth 2.0, nginx/Caddy reverse proxy |
289
+ | [documents/headless-quickstart.md](documents/headless-quickstart.md) | CI, Docker, server use without VS Code |
290
+ | [docs/cowork-workflow.md](docs/cowork-workflow.md) | Computer-use (Cowork) workflow and git worktree setup |
291
+ | [docs/multi-ide.md](docs/multi-ide.md) | Multiple sessions and parallel editor instances |
292
+ | [docs/migration.md](docs/migration.md) | Upgrade guide between major versions |
293
+ | [documents/plugin-authoring.md](documents/plugin-authoring.md) | Plugin manifest schema, entrypoint API, distribution |
294
+ | [documents/styleguide.md](documents/styleguide.md) | Code conventions, tool factory pattern, output formats |
295
+ | [docs/adr/](docs/adr/) | Architecture Decision Records |
296
+ | [CONTRIBUTING.md](CONTRIBUTING.md) | Contributor guide, build setup, test requirements |
297
+ | [deploy/README.md](deploy/README.md) | VPS provisioning and systemd service scripts |
1284
298
 
1285
- ```bash
1286
- npm update -g @anthropic-ai/claude-code
1287
- ```
299
+ ---
1288
300
 
1289
- ### `start-all` launched from inside a Claude Code session
301
+ ## Requirements
1290
302
 
1291
- Launching `start-all` from within an active Claude Code session can cause tmux conflicts. Kill the existing tmux server first:
303
+ - **Node.js 20** (bridge)
304
+ - **VS Code, Cursor, or Windsurf** — optional. Headless mode covers git, terminals, GitHub, and LSP via `typescript-language-server`. Extension required for debugger, editor decorations, and live editor state.
305
+ - **Claude Code CLI** — for local use. Remote MCP clients (claude.ai, Codex CLI) work via Streamable HTTP transport with OAuth 2.0.
1292
306
 
1293
- ```bash
1294
- tmux kill-server
1295
- env -u CLAUDECODE claude-ide-bridge start-all --workspace /your/project
1296
- ```
307
+ ---
1297
308
 
1298
- ## Developer Documentation
309
+ ## License
1299
310
 
1300
- See [Documentation](#documentation) above for all guides, ADRs, and reference docs. AI-specific project instructions:
311
+ MIT — see [LICENSE](LICENSE).
1301
312
 
1302
- - **[CLAUDE.md](CLAUDE.md)** — Project instructions for AI assistants (Claude Code, Cursor). Covers architecture rules, plugin system, OAuth, remote deployment, security model.
1303
- - **[.cursorrules](.cursorrules)** — Imperative rules for Cursor IDE AI. Condensed mirror of CLAUDE.md.
313
+ ---
1304
314
 
1305
315
  ## Contributing
1306
316
 
1307
- See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, code style, and how to add new tools.
317
+ Bug reports and PRs welcome. See [CONTRIBUTING.md](CONTRIBUTING.md).
1308
318
 
1309
- ## Support
1310
-
1311
- If Claude IDE Bridge saves you time, consider [sponsoring the project](https://github.com/sponsors/Oolab-labs).
1312
-
1313
- ## License
319
+ When reporting a bug, include the output of:
320
+ ```bash
321
+ claude-ide-bridge print-token # confirms bridge is running
322
+ # then in Claude: call getBridgeStatus
323
+ ```
1314
324
 
1315
- MIT
325
+ Per the project's bug fix protocol: a reproducing test must exist before a fix lands.