claude-ide-bridge 2.4.10 → 2.4.11
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 +251 -23
- package/dist/activityLog.d.ts +2 -21
- package/dist/activityLog.js +16 -10
- package/dist/activityLog.js.map +1 -1
- package/dist/activityTypes.d.ts +27 -0
- package/dist/activityTypes.js +9 -0
- package/dist/activityTypes.js.map +1 -0
- package/dist/bridge.js +4 -0
- package/dist/bridge.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.js +58 -6
- package/dist/config.js.map +1 -1
- package/dist/oauth.d.ts +1 -1
- package/dist/oauth.js +9 -6
- package/dist/oauth.js.map +1 -1
- package/dist/prompts.js +641 -0
- package/dist/prompts.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +8 -5
- package/dist/server.js.map +1 -1
- package/dist/streamableHttp.js +3 -2
- package/dist/streamableHttp.js.map +1 -1
- package/dist/tools/httpClient.d.ts +3 -1
- package/dist/tools/httpClient.js +7 -6
- package/dist/tools/httpClient.js.map +1 -1
- package/dist/tools/index.d.ts +21 -0
- package/dist/tools/index.js +3 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lsp.js +6 -1
- package/dist/tools/lsp.js.map +1 -1
- package/dist/tools/replaceBlock.js +2 -2
- package/dist/tools/replaceBlock.js.map +1 -1
- package/dist/tools/runCommand.js +17 -5
- package/dist/tools/runCommand.js.map +1 -1
- package/dist/tools/terminal.js +15 -5
- package/dist/tools/terminal.js.map +1 -1
- package/package.json +9 -3
- package/templates/CLAUDE.bridge.md +23 -0
- package/templates/dispatch-context.md +29 -0
- package/templates/scheduled-tasks/dependency-audit/SKILL.md +52 -0
- package/templates/scheduled-tasks/health-check/SKILL.md +54 -0
- package/templates/scheduled-tasks/nightly-review/SKILL.md +45 -0
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://github.com/Oolab-labs/claude-ide-bridge/actions/workflows/ci.yml)
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
6
|
|
|
7
|
-
A standalone MCP bridge that gives [Claude Code](https://claude.ai/code) full IDE integration — **
|
|
7
|
+
A standalone MCP bridge that gives [Claude Code](https://claude.ai/code) full IDE integration — **124+ tools** for LSP, debugging, terminals, Git, GitHub, diagnostics, code analysis, screen capture, and more. Works with any VS Code-compatible editor (VS Code, Windsurf, Cursor) and pairs with a companion extension for real-time editor state.
|
|
8
8
|
|
|
9
9
|
## How It Works
|
|
10
10
|
|
|
@@ -102,6 +102,30 @@ claude-ide-bridge start-all --workspace /your/project
|
|
|
102
102
|
|
|
103
103
|
Launches four tmux panes: health monitor, bridge, Claude Code, and remote control — with automatic restart on failure. Requires `tmux`.
|
|
104
104
|
|
|
105
|
+
## Documentation
|
|
106
|
+
|
|
107
|
+
> **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.
|
|
108
|
+
|
|
109
|
+
| Guide | What it covers |
|
|
110
|
+
|-------|----------------|
|
|
111
|
+
| **[Remote Access](docs/remote-access.md)** | Production reverse proxy setup (Caddy/nginx), TLS, Streamable HTTP transport |
|
|
112
|
+
| **[SSH Resilience](docs/ssh-resilience.md)** | Surviving SSH drops, tmux strategies, phone-to-VPS workflows |
|
|
113
|
+
| **[IP Allowlist](docs/ip-allowlist.md)** | Firewall rules, network access control for remote bridge instances |
|
|
114
|
+
| **[Worktree Isolation](docs/worktree-isolation.md)** | How git worktrees interact with the bridge, safe concurrent editing |
|
|
115
|
+
| **[Privacy Policy](docs/privacy-policy.md)** | What data the bridge handles, stores, and never transmits |
|
|
116
|
+
| **[Demo Setup](docs/demo-setup.md)** | Standing up a persistent demo instance for review/testing |
|
|
117
|
+
| **[Architecture Decisions](docs/adr/)** | ADRs for version numbers, reconnect guards, lock files, error model, session eviction |
|
|
118
|
+
|
|
119
|
+
**Reference docs** (in [`documents/`](documents/)):
|
|
120
|
+
|
|
121
|
+
| Doc | What it covers |
|
|
122
|
+
|-----|----------------|
|
|
123
|
+
| **[Platform Docs](documents/platform-docs.md)** | Complete tool reference (124+ tools), parameters, examples |
|
|
124
|
+
| **[Data Reference](documents/data-reference.md)** | Data flows, state management, protocol details |
|
|
125
|
+
| **[Plugin Authoring](documents/plugin-authoring.md)** | Writing custom plugins — manifest schema, entrypoint API |
|
|
126
|
+
| **[Use Cases](documents/use-cases.md)** | Real-world workflows and scenarios |
|
|
127
|
+
| **[Roadmap](documents/roadmap.md)** | Planned features and development direction |
|
|
128
|
+
|
|
105
129
|
## Full Orchestrator
|
|
106
130
|
|
|
107
131
|
The `start-all` command launches everything in a tmux session: bridge + Claude Code + remote control, with automatic health monitoring and process restart.
|
|
@@ -164,11 +188,15 @@ claude --plugin-dir ./claude-ide-bridge-plugin
|
|
|
164
188
|
|
|
165
189
|
| Event | What it does |
|
|
166
190
|
|-------|-------------|
|
|
191
|
+
| `PreToolUse` on Edit/Write | Resolves relative path args to absolute before bridge tools execute |
|
|
167
192
|
| `PostToolUse` on Edit/Write | Reminds Claude to check diagnostics after file edits |
|
|
168
193
|
| `SessionStart` | Reports bridge status, connection, and tool count |
|
|
194
|
+
| `InstructionsLoaded` | Injects live bridge status each time CLAUDE.md loads |
|
|
195
|
+
| `Elicitation` | Pre-fills file/path/uri fields using the active editor |
|
|
196
|
+
| `WorktreeCreate` | Reports bridge ↔ worktree relationship; warns about LSP limitations |
|
|
169
197
|
| `SubagentStart` | Verifies bridge is alive before IDE subagents run |
|
|
170
198
|
|
|
171
|
-
##
|
|
199
|
+
## 124+ MCP Tools
|
|
172
200
|
|
|
173
201
|
### File Operations (8)
|
|
174
202
|
`openFile` · `openDiff` · `saveDocument` · `closeTab` · `closeAllDiffTabs` · `checkDocumentDirty` · `getOpenEditors` · `searchWorkspace`
|
|
@@ -194,8 +222,8 @@ claude --plugin-dir ./claude-ide-bridge-plugin
|
|
|
194
222
|
### Code Quality (3)
|
|
195
223
|
`fixAllLintErrors` · `formatDocument` · `organizeImports`
|
|
196
224
|
|
|
197
|
-
### Snapshots & Plans (
|
|
198
|
-
`
|
|
225
|
+
### Snapshots & Plans (5)
|
|
226
|
+
`createPlan` · `updatePlan` · `getPlan` · `listPlans` · `deletePlan`
|
|
199
227
|
|
|
200
228
|
### Editor State (6)
|
|
201
229
|
`getCurrentSelection` · `getLatestSelection` · `getOpenEditors` · `getBufferContent` · `setEditorDecorations` · `clearEditorDecorations`
|
|
@@ -230,16 +258,16 @@ Text editing · Workspace settings · File watchers · Decorations · `executeVS
|
|
|
230
258
|
| Debug | 5 | Yes |
|
|
231
259
|
| Decorations | 2 | Yes |
|
|
232
260
|
| Screen Capture | 1 | Yes |
|
|
233
|
-
| Snapshots & Plans |
|
|
261
|
+
| Snapshots & Plans | 5 | No |
|
|
234
262
|
| Bridge & Session | 3 | No |
|
|
235
263
|
| Clipboard | 2 | Mixed |
|
|
236
264
|
| HTTP | 2 | No |
|
|
237
265
|
| VS Code Integration | 10 | Yes |
|
|
238
|
-
| **Total** | **~
|
|
266
|
+
| **Total** | **~124** | |
|
|
239
267
|
|
|
240
268
|
## MCP Prompts (Slash Commands)
|
|
241
269
|
|
|
242
|
-
The bridge exposes
|
|
270
|
+
The bridge exposes 15 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.
|
|
243
271
|
|
|
244
272
|
| Prompt | Argument | Description |
|
|
245
273
|
|--------|----------|-------------|
|
|
@@ -250,6 +278,13 @@ The bridge exposes 7 built-in slash commands via the MCP `prompts/list` + `promp
|
|
|
250
278
|
| `/mcp__bridge__git-review` | `base` (optional, default: `main`) | Review all changes since a git base branch |
|
|
251
279
|
| `/mcp__bridge__cowork` | `task` (optional) | Gather full IDE context and propose a Cowork action plan — run this **before** opening a Cowork session |
|
|
252
280
|
| `/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 |
|
|
281
|
+
| `/mcp__bridge__project-status` | _(none)_ | Quick project health: git status + diagnostics + test summary (Dispatch) |
|
|
282
|
+
| `/mcp__bridge__quick-tests` | `filter` (optional) | Run tests and return concise pass/fail summary (Dispatch) |
|
|
283
|
+
| `/mcp__bridge__quick-review` | _(none)_ | Review uncommitted changes with diff summary and diagnostics (Dispatch) |
|
|
284
|
+
| `/mcp__bridge__build-check` | _(none)_ | Check if the project builds successfully (Dispatch) |
|
|
285
|
+
| `/mcp__bridge__recent-activity` | `count` (optional, default: `10`) | Recent git log and uncommitted changes (Dispatch) |
|
|
286
|
+
| `/mcp__bridge__team-status` | _(none)_ | Workspace state, active tasks, and recent activity for team leads (Agent Teams) |
|
|
287
|
+
| `/mcp__bridge__health-check` | _(none)_ | Comprehensive project health: tests, diagnostics, security (Scheduled Tasks) |
|
|
253
288
|
|
|
254
289
|
> **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.
|
|
255
290
|
|
|
@@ -571,6 +606,176 @@ Config location:
|
|
|
571
606
|
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
572
607
|
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
573
608
|
|
|
609
|
+
## Dispatch (Mobile Remote Control)
|
|
610
|
+
|
|
611
|
+
[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.
|
|
612
|
+
|
|
613
|
+
### How it works
|
|
614
|
+
|
|
615
|
+
```
|
|
616
|
+
Your Phone (Claude App)
|
|
617
|
+
│
|
|
618
|
+
▼ terse instruction
|
|
619
|
+
Claude Desktop (main conversation)
|
|
620
|
+
│
|
|
621
|
+
▼ MCP tool calls
|
|
622
|
+
Bridge Server ──► IDE Extension ──► Your Code
|
|
623
|
+
│
|
|
624
|
+
▼ results
|
|
625
|
+
Claude Desktop
|
|
626
|
+
│
|
|
627
|
+
▼ concise summary
|
|
628
|
+
Your Phone
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
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.
|
|
632
|
+
|
|
633
|
+
> **Not Cowork:** Dispatch routes through the main conversation, not a Cowork session. All 124+ bridge tools are available. The Cowork tool-access limitation does not apply here.
|
|
634
|
+
|
|
635
|
+
### Setup
|
|
636
|
+
|
|
637
|
+
1. **Bridge running** — `claude-ide-bridge --watch` in your project directory
|
|
638
|
+
2. **Claude Desktop connected** — stdio shim configured (see [Use with Claude Desktop](#use-with-claude-desktop))
|
|
639
|
+
3. **Dispatch paired** — open Claude Desktop → Cowork → Dispatch → scan QR code with Claude mobile app
|
|
640
|
+
4. **Computer awake** — your desktop must be powered on and not sleeping
|
|
641
|
+
|
|
642
|
+
### Phone-friendly prompts
|
|
643
|
+
|
|
644
|
+
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:
|
|
645
|
+
|
|
646
|
+
| Prompt | Phone message | What it does |
|
|
647
|
+
|--------|--------------|--------------|
|
|
648
|
+
| `project-status` | "How's the build?" | Git status + diagnostics + test summary |
|
|
649
|
+
| `quick-tests` | "Run the tests" | Pass/fail summary with failure details |
|
|
650
|
+
| `quick-review` | "Review my changes" | Diff summary + diagnostics for changed files |
|
|
651
|
+
| `build-check` | "Does it build?" | Build/compile check with error summary |
|
|
652
|
+
| `recent-activity` | "What changed?" | Recent git log + uncommitted changes |
|
|
653
|
+
|
|
654
|
+
You can also type any natural-language instruction — the prompts above are shortcuts that produce consistently formatted output.
|
|
655
|
+
|
|
656
|
+
### Example Dispatch session
|
|
657
|
+
|
|
658
|
+
From your phone:
|
|
659
|
+
> "How's the build?"
|
|
660
|
+
|
|
661
|
+
Claude checks git status, diagnostics, and tests, then responds:
|
|
662
|
+
```
|
|
663
|
+
Branch: feature/oauth (3 uncommitted)
|
|
664
|
+
Diagnostics: 0 errors, 2 warnings
|
|
665
|
+
Tests: 142 passed, 0 failed (12s)
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
From your phone:
|
|
669
|
+
> "Review my changes"
|
|
670
|
+
|
|
671
|
+
Claude diffs your uncommitted work and responds with a file-by-file summary and an overall assessment.
|
|
672
|
+
|
|
673
|
+
### Cowork context template
|
|
674
|
+
|
|
675
|
+
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.
|
|
676
|
+
|
|
677
|
+
### Limitations
|
|
678
|
+
|
|
679
|
+
- **One conversation thread** — Dispatch uses a single persistent thread
|
|
680
|
+
- **Computer must be awake** — if your desktop sleeps, Dispatch goes dark
|
|
681
|
+
- **No push notifications** — check the phone app manually for responses
|
|
682
|
+
- **Best for reads, not writes** — information retrieval (status, tests, review) is highly reliable; multi-file edits from phone messages are not recommended
|
|
683
|
+
|
|
684
|
+
---
|
|
685
|
+
|
|
686
|
+
## Agent Teams (Parallel Multi-Agent)
|
|
687
|
+
|
|
688
|
+
[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.
|
|
689
|
+
|
|
690
|
+
### How it works with the bridge
|
|
691
|
+
|
|
692
|
+
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.
|
|
693
|
+
|
|
694
|
+
```
|
|
695
|
+
Team Lead (Claude Code)
|
|
696
|
+
├── Teammate A ──► Bridge Session 1 ──► IDE
|
|
697
|
+
├── Teammate B ──► Bridge Session 2 ──► IDE
|
|
698
|
+
└── Teammate C ──► Bridge Session 3 ──► IDE
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
All teammates share the same IDE and workspace. Each gets full access to all 124+ bridge tools.
|
|
702
|
+
|
|
703
|
+
### Setup
|
|
704
|
+
|
|
705
|
+
1. Enable agent teams: set `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` in your environment
|
|
706
|
+
2. Bridge running: `claude-ide-bridge --watch`
|
|
707
|
+
3. Ask Claude to create a team: *"Create an agent team to review and fix all TypeScript errors"*
|
|
708
|
+
|
|
709
|
+
### Bridge prompts for team leads
|
|
710
|
+
|
|
711
|
+
| Prompt | What it does |
|
|
712
|
+
|--------|-------------|
|
|
713
|
+
| `/mcp__bridge__team-status` | Workspace state, active tasks, recent activity across sessions |
|
|
714
|
+
| `/mcp__bridge__health-check` | Full project health: tests, diagnostics, security |
|
|
715
|
+
|
|
716
|
+
### Best practices
|
|
717
|
+
|
|
718
|
+
- **Pre-approve tools** — teammates block on permission prompts. Use `--dangerously-skip-permissions` in sandboxed environments or pre-approve common tools.
|
|
719
|
+
- **Avoid file conflicts** — assign teammates to different files/modules. The bridge doesn't lock files across sessions.
|
|
720
|
+
- **Use the team-status prompt** — the lead can call `/mcp__bridge__team-status` to see workspace state and recent activity across all sessions.
|
|
721
|
+
|
|
722
|
+
---
|
|
723
|
+
|
|
724
|
+
## Scheduled Tasks (Recurring Workflows)
|
|
725
|
+
|
|
726
|
+
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.
|
|
727
|
+
|
|
728
|
+
### How it works with the bridge
|
|
729
|
+
|
|
730
|
+
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.
|
|
731
|
+
|
|
732
|
+
```
|
|
733
|
+
Cron trigger (e.g., daily 9am)
|
|
734
|
+
│
|
|
735
|
+
▼
|
|
736
|
+
Claude Desktop (fresh session)
|
|
737
|
+
│
|
|
738
|
+
▼ loads MCP servers
|
|
739
|
+
Bridge Server ──► IDE Extension ──► Your Code
|
|
740
|
+
│
|
|
741
|
+
▼ structured report
|
|
742
|
+
Task history (viewable in Desktop sidebar)
|
|
743
|
+
```
|
|
744
|
+
|
|
745
|
+
### Ready-made task templates
|
|
746
|
+
|
|
747
|
+
Copy any of these into `~/.claude/scheduled-tasks/` to set up a recurring workflow:
|
|
748
|
+
|
|
749
|
+
| Template | Schedule | What it does |
|
|
750
|
+
|----------|----------|-------------|
|
|
751
|
+
| `nightly-review` | Daily | Review uncommitted changes, diagnostics, test status |
|
|
752
|
+
| `health-check` | Hourly/Daily | Full project health: tests, diagnostics, security advisories |
|
|
753
|
+
| `dependency-audit` | Weekly | Scan dependencies for CVEs and outdated packages |
|
|
754
|
+
|
|
755
|
+
```bash
|
|
756
|
+
# Install a scheduled task template
|
|
757
|
+
cp -r templates/scheduled-tasks/health-check ~/.claude/scheduled-tasks/
|
|
758
|
+
```
|
|
759
|
+
|
|
760
|
+
Then open Claude Desktop → Schedule → configure the frequency and permissions for the task.
|
|
761
|
+
|
|
762
|
+
### Bridge prompts for scheduled contexts
|
|
763
|
+
|
|
764
|
+
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.
|
|
765
|
+
|
|
766
|
+
### Bridge automation vs. Desktop scheduled tasks
|
|
767
|
+
|
|
768
|
+
The bridge has its own event-driven automation system (`--automation --automation-policy`). Here's when to use which:
|
|
769
|
+
|
|
770
|
+
| Feature | Trigger | Persistence | Best for |
|
|
771
|
+
|---------|---------|-------------|----------|
|
|
772
|
+
| **Desktop Scheduled Tasks** | Time-based (cron) | Survives restarts | Nightly reviews, weekly audits, periodic checks |
|
|
773
|
+
| **Bridge Automation Hooks** | Event-driven (file save, diagnostic error) | Requires bridge running | Immediate reactions: auto-fix on error, lint on save |
|
|
774
|
+
|
|
775
|
+
They're complementary — use scheduled tasks for periodic health checks and bridge automation for real-time reactions.
|
|
776
|
+
|
|
777
|
+
---
|
|
778
|
+
|
|
574
779
|
## Use with Claude.ai Web
|
|
575
780
|
|
|
576
781
|
Connect the bridge to [claude.ai](https://claude.ai) via a **Custom Connector** — chat with your IDE from the browser without installing anything extra.
|
|
@@ -612,36 +817,45 @@ The bridge is now permanently reachable at `https://bridge.yourdomain.com`. The
|
|
|
612
817
|
|
|
613
818
|
> **Auto-start:** Run `cloudflared service install` to register the tunnel as a systemd service so it starts on boot alongside the bridge.
|
|
614
819
|
|
|
615
|
-
### Step 2 — Start the bridge with
|
|
820
|
+
### Step 2 — Start the bridge with OAuth enabled
|
|
616
821
|
|
|
617
822
|
```bash
|
|
618
|
-
# Generate a token once
|
|
823
|
+
# Generate a token once — keep it safe, you'll need it to approve connections
|
|
619
824
|
TOKEN=$(uuidgen)
|
|
620
825
|
|
|
621
|
-
claude-ide-bridge
|
|
826
|
+
claude-ide-bridge \
|
|
827
|
+
--bind 0.0.0.0 \
|
|
828
|
+
--workspace /path/to/project \
|
|
829
|
+
--fixed-token $TOKEN \
|
|
830
|
+
--issuer-url https://bridge.yourdomain.com \
|
|
831
|
+
--cors-origin https://claude.ai
|
|
622
832
|
```
|
|
623
833
|
|
|
624
|
-
`--fixed-token`
|
|
834
|
+
- `--fixed-token` — token never rotates across restarts
|
|
835
|
+
- `--issuer-url` — your public HTTPS URL; activates OAuth 2.0 so claude.ai can authenticate
|
|
836
|
+
- `--cors-origin https://claude.ai` — allows claude.ai's browser requests to reach the bridge
|
|
625
837
|
|
|
626
838
|
### Step 3 — Add the Custom Connector on claude.ai
|
|
627
839
|
|
|
628
840
|
1. Go to **claude.ai → Settings → Integrations → Add custom connector**
|
|
629
|
-
2. Enter the
|
|
841
|
+
2. Enter the MCP endpoint URL (no token in the URL — OAuth handles auth):
|
|
630
842
|
```
|
|
631
|
-
https://bridge.yourdomain.com/mcp
|
|
843
|
+
https://bridge.yourdomain.com/mcp
|
|
632
844
|
```
|
|
633
|
-
3.
|
|
845
|
+
3. Click **Connect** — claude.ai redirects you to the bridge's authorization page
|
|
846
|
+
4. Enter your bridge token (`$TOKEN` from Step 2) and click **Authorize**
|
|
847
|
+
5. claude.ai completes the OAuth exchange and lists all available tools
|
|
634
848
|
|
|
635
|
-
The
|
|
849
|
+
> 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.
|
|
636
850
|
|
|
637
|
-
> **Tool availability:** All
|
|
851
|
+
> **Tool availability:** All 124+ tools are available. VS Code extension-dependent tools (LSP, debugger, editor state) require the extension to be connected on the remote machine. Without the extension, ~74 CLI tools still work (file ops, git, terminal, search, HTTP client).
|
|
638
852
|
|
|
639
853
|
### Alternatives
|
|
640
854
|
|
|
641
855
|
<details>
|
|
642
856
|
<summary>Reverse proxy with nginx or Caddy (if you already have a domain + TLS setup)</summary>
|
|
643
857
|
|
|
644
|
-
Put nginx or Caddy in front of the bridge with TLS. See [docs/remote-access.md](docs/remote-access.md) for a ready-made config.
|
|
858
|
+
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.
|
|
645
859
|
|
|
646
860
|
</details>
|
|
647
861
|
|
|
@@ -705,17 +919,24 @@ claude-ide-bridge gen-claude-md [--write] [--workspace <path>]
|
|
|
705
919
|
### Bridge options (default mode)
|
|
706
920
|
|
|
707
921
|
```
|
|
922
|
+
--bind <addr> Bind address (default: 127.0.0.1)
|
|
923
|
+
--fixed-token <uuid> Stable auth token across restarts (default: random UUID)
|
|
924
|
+
--issuer-url <url> Public HTTPS URL — activates OAuth 2.0 for remote clients
|
|
925
|
+
--cors-origin <url> Allow cross-origin requests from this origin (repeatable)
|
|
708
926
|
--workspace <path> Workspace folder (default: cwd)
|
|
709
927
|
--ide-name <name> IDE name shown to Claude (default: auto-detect)
|
|
710
928
|
--editor <cmd> Editor CLI command (default: auto-detect)
|
|
711
929
|
--port <number> Force specific port (default: random)
|
|
712
930
|
--linter <name> Enable specific linter (repeatable; default: auto-detect)
|
|
931
|
+
--grace-period <ms> Reconnect grace period in ms (default: 30000, max: 600000)
|
|
713
932
|
--allow-command <cmd> Add command to execution allowlist (repeatable)
|
|
714
933
|
--timeout <ms> Command timeout in ms (default: 30000, max: 120000)
|
|
715
934
|
--max-result-size <KB> Max output size in KB (default: 512, max: 4096)
|
|
935
|
+
--vps VPS/headless mode: adds curl, systemctl, nginx, pm2, docker to allowlist
|
|
716
936
|
--watch Supervisor mode: auto-restart on crash (exponential backoff, max 30s)
|
|
717
937
|
--auto-tmux Re-exec inside a tmux session automatically
|
|
718
938
|
--tool-rate-limit <n> Max tool calls per minute per session (default: 60)
|
|
939
|
+
--audit-log <path> Append all tool calls to a JSONL file (persistent audit trail)
|
|
719
940
|
--claude-driver <mode> Claude subprocess driver: subprocess | api | none (default: none)
|
|
720
941
|
--claude-binary <path> Path to claude binary (default: claude)
|
|
721
942
|
--automation Enable event-driven automation
|
|
@@ -761,7 +982,7 @@ claude-ide-bridge/
|
|
|
761
982
|
|
|
762
983
|
- **`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.
|
|
763
984
|
|
|
764
|
-
- **`createGithubIssueFromAIComment`** — Claude can scan your code for `// AI:` comments (e.g. `// AI: this function needs error handling`) and file them as GitHub issues automatically.
|
|
985
|
+
- **`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.
|
|
765
986
|
|
|
766
987
|
- **`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.
|
|
767
988
|
|
|
@@ -800,7 +1021,7 @@ The bridge saves a checkpoint every 30 seconds to `~/.claude/ide/checkpoint-<por
|
|
|
800
1021
|
|
|
801
1022
|
### Reduce duplicate git instructions
|
|
802
1023
|
|
|
803
|
-
Claude Code ships with its own built-in commit/PR guidance. When using the bridge's dedicated git tools (`gitCommit`, `gitPush`, `
|
|
1024
|
+
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`:
|
|
804
1025
|
|
|
805
1026
|
```json
|
|
806
1027
|
{
|
|
@@ -820,7 +1041,7 @@ Production-grade reliability:
|
|
|
820
1041
|
- Circuit breaker with exponential backoff for timeout cascades
|
|
821
1042
|
- Generation counter preventing stale handler responses
|
|
822
1043
|
- Extension-required tool filtering when extension disconnects
|
|
823
|
-
-
|
|
1044
|
+
- 1265+ tests (bridge) + 394 extension tests; full WebSocket round-trip integration coverage
|
|
824
1045
|
- 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+)
|
|
825
1046
|
|
|
826
1047
|
## Building
|
|
@@ -829,20 +1050,20 @@ Production-grade reliability:
|
|
|
829
1050
|
# Bridge
|
|
830
1051
|
npm run build # TypeScript compilation
|
|
831
1052
|
npm run dev # Development with tsx
|
|
832
|
-
npm test # Run
|
|
1053
|
+
npm test # Run 1265+ bridge tests
|
|
833
1054
|
|
|
834
1055
|
# Extension
|
|
835
1056
|
cd vscode-extension
|
|
836
1057
|
npm run build # esbuild bundle
|
|
837
1058
|
npm run package # Create .vsix
|
|
838
|
-
npm test # Run
|
|
1059
|
+
npm test # Run 394 extension tests
|
|
839
1060
|
```
|
|
840
1061
|
|
|
841
1062
|
## Troubleshooting
|
|
842
1063
|
|
|
843
1064
|
### Claude says a tool doesn't exist or tool count seems low
|
|
844
1065
|
|
|
845
|
-
When the VS Code extension is disconnected, tools that require extension access are automatically hidden from Claude's tool list. About 50 tools become unavailable (terminal, LSP, debug, editor state, etc.). Check the "Claude IDE Bridge" output channel in VS Code — if you see a disconnection event, use `Claude IDE Bridge: Reconnect` from the command palette, or reload the window.
|
|
1066
|
+
When the VS Code extension is disconnected, tools that require extension access are automatically hidden from Claude's tool list. About 50 tools become unavailable (terminal, LSP, debug, editor state, etc.) — leaving ~74 tools accessible via CLI fallbacks. Check the "Claude IDE Bridge" output channel in VS Code — if you see a disconnection event, use `Claude IDE Bridge: Reconnect` from the command palette, or reload the window.
|
|
846
1067
|
|
|
847
1068
|
### Bridge and extension version mismatch
|
|
848
1069
|
|
|
@@ -891,6 +1112,13 @@ tmux kill-server
|
|
|
891
1112
|
env -u CLAUDECODE claude-ide-bridge start-all --workspace /your/project
|
|
892
1113
|
```
|
|
893
1114
|
|
|
1115
|
+
## Developer Documentation
|
|
1116
|
+
|
|
1117
|
+
See [Documentation](#documentation) above for all guides, ADRs, and reference docs. AI-specific project instructions:
|
|
1118
|
+
|
|
1119
|
+
- **[CLAUDE.md](CLAUDE.md)** — Project instructions for AI assistants (Claude Code, Cursor). Covers architecture rules, plugin system, OAuth, remote deployment, security model.
|
|
1120
|
+
- **[.cursorrules](.cursorrules)** — Imperative rules for Cursor IDE AI. Condensed mirror of CLAUDE.md.
|
|
1121
|
+
|
|
894
1122
|
## Contributing
|
|
895
1123
|
|
|
896
1124
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, code style, and how to add new tools.
|
package/dist/activityLog.d.ts
CHANGED
|
@@ -1,23 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
timestamp: string;
|
|
4
|
-
tool: string;
|
|
5
|
-
durationMs: number;
|
|
6
|
-
status: "success" | "error";
|
|
7
|
-
errorMessage?: string;
|
|
8
|
-
}
|
|
9
|
-
export interface LifecycleEntry {
|
|
10
|
-
id: number;
|
|
11
|
-
timestamp: string;
|
|
12
|
-
event: string;
|
|
13
|
-
metadata?: Record<string, unknown>;
|
|
14
|
-
}
|
|
15
|
-
export type TimelineEntry = ({
|
|
16
|
-
kind: "tool";
|
|
17
|
-
} & ActivityEntry) | ({
|
|
18
|
-
kind: "lifecycle";
|
|
19
|
-
} & LifecycleEntry);
|
|
20
|
-
type ActivityListener = (kind: string, entry: ActivityEntry | LifecycleEntry) => void;
|
|
1
|
+
export type { ActivityEntry, ActivityListener, LifecycleEntry, TimelineEntry, } from "./activityTypes.js";
|
|
2
|
+
import type { ActivityEntry, ActivityListener, TimelineEntry } from "./activityTypes.js";
|
|
21
3
|
export declare class ActivityLog {
|
|
22
4
|
private entries;
|
|
23
5
|
private lifecycleEntries;
|
|
@@ -52,4 +34,3 @@ export declare class ActivityLog {
|
|
|
52
34
|
errors: number;
|
|
53
35
|
}>;
|
|
54
36
|
}
|
|
55
|
-
export {};
|
package/dist/activityLog.js
CHANGED
|
@@ -59,13 +59,16 @@ export class ActivityLog {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
catch {
|
|
63
|
-
|
|
62
|
+
catch (err) {
|
|
63
|
+
process.stderr.write(`[activityLog] Skipping malformed JSON line: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
catch {
|
|
68
|
-
|
|
67
|
+
catch (err) {
|
|
68
|
+
const code = err.code;
|
|
69
|
+
if (code !== "ENOENT") {
|
|
70
|
+
process.stderr.write(`[activityLog] Failed to load persist file: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
71
|
+
}
|
|
69
72
|
}
|
|
70
73
|
}
|
|
71
74
|
_appendToDisk(kind, entry) {
|
|
@@ -86,13 +89,16 @@ export class ActivityLog {
|
|
|
86
89
|
this._rotateDisk();
|
|
87
90
|
}
|
|
88
91
|
}
|
|
89
|
-
catch {
|
|
90
|
-
|
|
92
|
+
catch (err) {
|
|
93
|
+
const code = err.code;
|
|
94
|
+
if (code !== "ENOENT") {
|
|
95
|
+
process.stderr.write(`[activityLog] Failed to stat persist file for rotation: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
96
|
+
}
|
|
91
97
|
}
|
|
92
98
|
await fs.promises.appendFile(persistPath, line);
|
|
93
99
|
}
|
|
94
|
-
catch {
|
|
95
|
-
|
|
100
|
+
catch (err) {
|
|
101
|
+
process.stderr.write(`[activityLog] Disk persistence failed (best-effort): ${err instanceof Error ? err.message : String(err)}\n`);
|
|
96
102
|
}
|
|
97
103
|
})();
|
|
98
104
|
}
|
|
@@ -115,8 +121,8 @@ export class ActivityLog {
|
|
|
115
121
|
}
|
|
116
122
|
fs.writeFileSync(this.persistPath, `${lines.join("\n")}\n`);
|
|
117
123
|
}
|
|
118
|
-
catch {
|
|
119
|
-
|
|
124
|
+
catch (err) {
|
|
125
|
+
process.stderr.write(`[activityLog] Rotation failed: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
120
126
|
}
|
|
121
127
|
}
|
|
122
128
|
record(tool, durationMs, status, errorMessage) {
|
package/dist/activityLog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activityLog.js","sourceRoot":"","sources":["../src/activityLog.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"activityLog.js","sourceRoot":"","sources":["../src/activityLog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared type definitions for the activity log.
|
|
3
|
+
*
|
|
4
|
+
* Extracted into a standalone file (no imports) to break the circular
|
|
5
|
+
* dependency that would arise if server.ts imported from activityLog.ts
|
|
6
|
+
* directly. Both server.ts and activityLog.ts import from here instead.
|
|
7
|
+
*/
|
|
8
|
+
export interface ActivityEntry {
|
|
9
|
+
id: number;
|
|
10
|
+
timestamp: string;
|
|
11
|
+
tool: string;
|
|
12
|
+
durationMs: number;
|
|
13
|
+
status: "success" | "error";
|
|
14
|
+
errorMessage?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface LifecycleEntry {
|
|
17
|
+
id: number;
|
|
18
|
+
timestamp: string;
|
|
19
|
+
event: string;
|
|
20
|
+
metadata?: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
export type TimelineEntry = ({
|
|
23
|
+
kind: "tool";
|
|
24
|
+
} & ActivityEntry) | ({
|
|
25
|
+
kind: "lifecycle";
|
|
26
|
+
} & LifecycleEntry);
|
|
27
|
+
export type ActivityListener = (kind: string, entry: ActivityEntry | LifecycleEntry) => void;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared type definitions for the activity log.
|
|
3
|
+
*
|
|
4
|
+
* Extracted into a standalone file (no imports) to break the circular
|
|
5
|
+
* dependency that would arise if server.ts imported from activityLog.ts
|
|
6
|
+
* directly. Both server.ts and activityLog.ts import from here instead.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=activityTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activityTypes.js","sourceRoot":"","sources":["../src/activityTypes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
package/dist/bridge.js
CHANGED
|
@@ -90,6 +90,10 @@ export class Bridge {
|
|
|
90
90
|
this.logger.info(`OAuth 2.0 enabled — issuer: ${config.issuerUrl}`);
|
|
91
91
|
}
|
|
92
92
|
this.activityLog = new ActivityLog();
|
|
93
|
+
if (config.auditLogPath) {
|
|
94
|
+
this.activityLog.setPersistPath(config.auditLogPath);
|
|
95
|
+
this.logger.info(`Audit log: ${config.auditLogPath}`);
|
|
96
|
+
}
|
|
93
97
|
this.extensionClient = new ExtensionClient(this.logger);
|
|
94
98
|
// Handle new Claude Code connections
|
|
95
99
|
this.server.on("connection", (ws) => {
|