claude-ide-bridge 2.28.0 → 2.34.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.
- package/README.md +189 -1179
- package/dist/automation.d.ts +85 -1
- package/dist/automation.js +355 -38
- package/dist/automation.js.map +1 -1
- package/dist/bridge.d.ts +12 -0
- package/dist/bridge.js +151 -6
- package/dist/bridge.js.map +1 -1
- package/dist/claudeDriver.d.ts +5 -2
- package/dist/claudeDriver.js +8 -5
- package/dist/claudeDriver.js.map +1 -1
- package/dist/claudeOrchestrator.d.ts +4 -0
- package/dist/claudeOrchestrator.js +2 -0
- package/dist/claudeOrchestrator.js.map +1 -1
- package/dist/commands/install.d.ts +1 -0
- package/dist/commands/install.js +158 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/marketplace.d.ts +11 -0
- package/dist/commands/marketplace.js +120 -0
- package/dist/commands/marketplace.js.map +1 -0
- package/dist/companions/registry.d.ts +12 -0
- package/dist/companions/registry.js +71 -0
- package/dist/companions/registry.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +36 -0
- package/dist/config.js.map +1 -1
- package/dist/extensionClient.d.ts +5 -0
- package/dist/extensionClient.js +14 -0
- package/dist/extensionClient.js.map +1 -1
- package/dist/index.js +91 -23
- package/dist/index.js.map +1 -1
- package/dist/probe.d.ts +1 -0
- package/dist/probe.js +3 -1
- package/dist/probe.js.map +1 -1
- package/dist/prompts.js +33 -0
- package/dist/prompts.js.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.js +28 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/auditDependencies.js +2 -0
- package/dist/tools/auditDependencies.js.map +1 -1
- package/dist/tools/batchLsp.d.ts +1 -1
- package/dist/tools/batchLsp.js +14 -2
- package/dist/tools/batchLsp.js.map +1 -1
- package/dist/tools/bridgeDoctor.d.ts +3 -0
- package/dist/tools/bridgeDoctor.js +1 -0
- package/dist/tools/bridgeDoctor.js.map +1 -1
- package/dist/tools/bridgeStatus.d.ts +4 -1
- package/dist/tools/bridgeStatus.js +25 -2
- package/dist/tools/bridgeStatus.js.map +1 -1
- package/dist/tools/contextBundle.d.ts +7 -0
- package/dist/tools/contextBundle.js +85 -11
- package/dist/tools/contextBundle.js.map +1 -1
- package/dist/tools/editText.js +1 -1
- package/dist/tools/editText.js.map +1 -1
- package/dist/tools/explainSymbol.d.ts +9 -0
- package/dist/tools/explainSymbol.js +37 -0
- package/dist/tools/explainSymbol.js.map +1 -1
- package/dist/tools/fileOperations.js +3 -3
- package/dist/tools/fileOperations.js.map +1 -1
- package/dist/tools/findRelatedTests.d.ts +83 -0
- package/dist/tools/findRelatedTests.js +196 -0
- package/dist/tools/findRelatedTests.js.map +1 -0
- package/dist/tools/getAnalyticsReport.d.ts +102 -0
- package/dist/tools/getAnalyticsReport.js +129 -0
- package/dist/tools/getAnalyticsReport.js.map +1 -0
- package/dist/tools/getArchitectureContext.d.ts +85 -0
- package/dist/tools/getArchitectureContext.js +135 -0
- package/dist/tools/getArchitectureContext.js.map +1 -0
- package/dist/tools/getBufferContent.js +1 -1
- package/dist/tools/getBufferContent.js.map +1 -1
- package/dist/tools/getDiagnostics.d.ts +4 -0
- package/dist/tools/getDiagnostics.js +28 -4
- package/dist/tools/getDiagnostics.js.map +1 -1
- package/dist/tools/getProjectContext.d.ts +114 -0
- package/dist/tools/getProjectContext.js +344 -0
- package/dist/tools/getProjectContext.js.map +1 -0
- package/dist/tools/getSessionUsage.d.ts +58 -0
- package/dist/tools/getSessionUsage.js +57 -0
- package/dist/tools/getSessionUsage.js.map +1 -0
- package/dist/tools/getSymbolHistory.d.ts +157 -0
- package/dist/tools/getSymbolHistory.js +256 -0
- package/dist/tools/getSymbolHistory.js.map +1 -0
- package/dist/tools/getToolCapabilities.d.ts +3 -0
- package/dist/tools/getToolCapabilities.js +1 -0
- package/dist/tools/getToolCapabilities.js.map +1 -1
- package/dist/tools/getTypeSignature.d.ts +2 -2
- package/dist/tools/getTypeSignature.js +34 -2
- package/dist/tools/getTypeSignature.js.map +1 -1
- package/dist/tools/handoffNote.d.ts +3 -0
- package/dist/tools/handoffNote.js +1 -0
- package/dist/tools/handoffNote.js.map +1 -1
- package/dist/tools/headless/lspClient.d.ts +26 -0
- package/dist/tools/headless/lspClient.js +221 -0
- package/dist/tools/headless/lspClient.js.map +1 -0
- package/dist/tools/headless/lspFallback.d.ts +28 -0
- package/dist/tools/headless/lspFallback.js +122 -0
- package/dist/tools/headless/lspFallback.js.map +1 -0
- package/dist/tools/index.d.ts +7 -1
- package/dist/tools/index.js +215 -7
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/jumpToFirstError.js +2 -1
- package/dist/tools/jumpToFirstError.js.map +1 -1
- package/dist/tools/lsp.d.ts +5 -5
- package/dist/tools/lsp.js +125 -45
- package/dist/tools/lsp.js.map +1 -1
- package/dist/tools/openFile.js +4 -2
- package/dist/tools/openFile.js.map +1 -1
- package/dist/tools/organizeImports.js +1 -1
- package/dist/tools/organizeImports.js.map +1 -1
- package/dist/tools/replaceBlock.js +1 -1
- package/dist/tools/replaceBlock.js.map +1 -1
- package/dist/tools/runClaudeTask.d.ts +4 -0
- package/dist/tools/runClaudeTask.js +7 -0
- package/dist/tools/runClaudeTask.js.map +1 -1
- package/dist/tools/runCommand.d.ts +15 -0
- package/dist/tools/runCommand.js +5 -0
- package/dist/tools/runCommand.js.map +1 -1
- package/dist/tools/saveDocument.js +1 -1
- package/dist/tools/saveDocument.js.map +1 -1
- package/dist/tools/screenshotAndAnnotate.d.ts +103 -0
- package/dist/tools/screenshotAndAnnotate.js +192 -0
- package/dist/tools/screenshotAndAnnotate.js.map +1 -0
- package/dist/tools/searchTools.d.ts +61 -0
- package/dist/tools/searchTools.js +85 -0
- package/dist/tools/searchTools.js.map +1 -0
- package/dist/tools/searchWorkspace.js +2 -2
- package/dist/tools/searchWorkspace.js.map +1 -1
- package/dist/tools/utils.js +1 -1
- package/dist/tools/utils.js.map +1 -1
- package/dist/transport.d.ts +24 -0
- package/dist/transport.js +40 -2
- package/dist/transport.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.js +14 -0
- package/dist/version.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,1314 +2,324 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/claude-ide-bridge)
|
|
4
4
|
[](https://github.com/Oolab-labs/claude-ide-bridge/actions/workflows/ci.yml)
|
|
5
|
-
[](https://github.com/Oolab-labs/claude-ide-bridge/pkgs/container/claude-ide-bridge)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
7
|
|
|
7
|
-
**Claude Code,
|
|
8
|
+
**MCP bridge giving Claude Code IDE superpowers: 137 tools for LSP, debugging, git, GitHub, terminals, and more.**
|
|
8
9
|
|
|
9
|
-
A WebSocket bridge
|
|
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
|
-
|
|
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
|
-

|
|
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
|
-
|
|
57
|
-
claude-ide-bridge --watch
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
43
|
+
### Installing the VS Code extension separately
|
|
139
44
|
|
|
140
45
|
```bash
|
|
141
|
-
claude-ide-bridge
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
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
|
-
|
|
68
|
+
**S = slim mode (default) · F = full mode (`--full` flag)**
|
|
419
69
|
|
|
420
70
|
---
|
|
421
71
|
|
|
422
|
-
##
|
|
72
|
+
## Slim vs Full Mode
|
|
423
73
|
|
|
424
|
-
The bridge
|
|
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
|
-
|
|
76
|
+
Add `--full` to unlock all 137 tools, including git, GitHub, terminal, file tree, and orchestration:
|
|
427
77
|
|
|
428
78
|
```bash
|
|
429
|
-
|
|
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
|
-
|
|
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
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
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
|
-
##
|
|
96
|
+
## Usage Examples
|
|
592
97
|
|
|
593
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
872
|
-
|
|
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
|
-
###
|
|
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
|
-
#
|
|
924
|
-
|
|
139
|
+
# On the remote machine
|
|
140
|
+
claude-ide-bridge --full --watch --bind 0.0.0.0
|
|
925
141
|
```
|
|
926
142
|
|
|
927
|
-
|
|
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
|
-
#
|
|
956
|
-
|
|
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
|
-
#
|
|
980
|
-
|
|
150
|
+
# Or just the service
|
|
151
|
+
bash deploy/install-vps-service.sh
|
|
981
152
|
```
|
|
982
153
|
|
|
983
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1036
|
-
# Outputs a temporary URL like: https://abc123.trycloudflare.com
|
|
163
|
+
docker compose up
|
|
1037
164
|
```
|
|
1038
165
|
|
|
1039
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
"
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
204
|
+
---
|
|
1240
205
|
|
|
1241
|
-
|
|
206
|
+
## Plugin System
|
|
1242
207
|
|
|
1243
|
-
|
|
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
|
-
|
|
1247
|
-
|
|
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
|
-
|
|
218
|
+
Publish to npm with keyword `claude-ide-bridge-plugin` — users install by package name:
|
|
1251
219
|
|
|
1252
220
|
```bash
|
|
1253
|
-
|
|
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
|
-
|
|
224
|
+
See [documents/plugin-authoring.md](documents/plugin-authoring.md) for the full manifest schema and entrypoint API.
|
|
1260
225
|
|
|
1261
|
-
|
|
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
|
-
|
|
228
|
+
## Companion Marketplace
|
|
1266
229
|
|
|
1267
|
-
|
|
230
|
+
Install curated companion MCP servers directly into your Claude Desktop config:
|
|
1268
231
|
|
|
1269
|
-
|
|
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
|
-
|
|
238
|
+
`install` merges the companion into `mcpServers` in your Claude Desktop config atomically and idempotently — no manual JSON editing.
|
|
1272
239
|
|
|
1273
|
-
|
|
240
|
+
---
|
|
1274
241
|
|
|
1275
|
-
|
|
242
|
+
## CLI Reference
|
|
1276
243
|
|
|
1277
|
-
|
|
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
|
-
|
|
277
|
+
---
|
|
1280
278
|
|
|
1281
|
-
|
|
279
|
+
## Documentation
|
|
1282
280
|
|
|
1283
|
-
|
|
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
|
-
|
|
1286
|
-
npm update -g @anthropic-ai/claude-code
|
|
1287
|
-
```
|
|
299
|
+
---
|
|
1288
300
|
|
|
1289
|
-
|
|
301
|
+
## Requirements
|
|
1290
302
|
|
|
1291
|
-
|
|
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
|
-
|
|
1294
|
-
tmux kill-server
|
|
1295
|
-
env -u CLAUDECODE claude-ide-bridge start-all --workspace /your/project
|
|
1296
|
-
```
|
|
307
|
+
---
|
|
1297
308
|
|
|
1298
|
-
##
|
|
309
|
+
## License
|
|
1299
310
|
|
|
1300
|
-
|
|
311
|
+
MIT — see [LICENSE](LICENSE).
|
|
1301
312
|
|
|
1302
|
-
|
|
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)
|
|
317
|
+
Bug reports and PRs welcome. See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
1308
318
|
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
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
|
-
|
|
325
|
+
Per the project's bug fix protocol: a reproducing test must exist before a fix lands.
|