v0.1.0-alpha.0 · MIT · npm
Switch IDEs without losing your thread.
ide-bridge is a local MCP daemon that saves a structured context bundle per project — plan, decisions, TODOs, git state, conversation summary. Any MCP-capable IDE can save to it or load from it.
The problem
Agentic IDEs impose per-tool or per-session usage limits. When you hit one mid-task — branch half-refactored, plan half-executed — you have two options: wait, or switch. Switching means opening a different IDE and spending the first several turns re-explaining the plan, the constraints, the decisions already made, and the work already done. None of that information has anywhere to live except inside a single IDE's conversation history.
The context loss compounds. The rolling summary in your head is lossy. You forget the decision you made three hours ago that rules out the obvious approach. The new agent re-proposes it. You spend another exchange saying no, and explaining why, again. This is a single-user problem today — and a team problem in its near-future form.
The solution
ide-bridge is a local daemon that speaks MCP Streamable HTTP and binds exclusively to localhost:31415. Every connected IDE addresses the same six-tool surface. When an agent calls save_checkpoint, the daemon merges the incoming bundle fragment into a Portable Context Bundle (PCB) stored under ~/.ide-bridge/projects/.
The PCB is a single versioned JSON document: plan steps, decisions with rationale, TODOs, git state (remote, branch, HEAD, staged and unstaged diffs), a rolling conversation summary, and — where the source IDE supports it — the last N verbatim turns. Five per-IDE adapters handle structural differences between IDEs; a generic fallback covers any MCP-capable IDE not explicitly listed.
┌─ Claude Code ─┐ ┌─ Cursor ─┐ ┌─ Kiro ─┐ ┌─ Antigravity ─┐ ┌─ Any MCP IDE ─┐
│ CLAUDE.md │ │ .cursor/ │ │ .kiro/ │ │ AGENTS.md │ │ AGENTS.md │
│ Stop hook │ │ rules/ │ │ steer/ │ │ priming │ │ (generic) │
└──────┬────────┘ └────┬─────┘ └───┬────┘ └───────┬───────┘ └───────┬───────┘
│ MCP Streamable HTTP │ │ │
└──────────────────────────────┴───────────────┴──────────────────┘
│
http://localhost:31415/mcp
│
┌────────────▼────────────┐
│ ide-bridge daemon │
│ │
│ 6-tool MCP surface │
│ Per-IDE adapters │
│ PCB store │
│ Identity resolver │
└────────────┬─────────────┘
│
~/.ide-bridge/
projects/<project-id>/
bundle.json ← PCB (authoritative)
history/ ← append-only log
transcripts/<ide>/ ← raw per-IDE transcripts
config.json
daemon.logFeatures
- Zero cloud. The daemon binds to 127.0.0.1 only — no network egress, no accounts, no API keys.
- 5 native IDE adapters. Claude Code (L3), Cursor (L2), Kiro (L1), Antigravity (L0–L1), and a generic L0 fallback for any MCP-capable IDE.
- 6-tool MCP surface. save_checkpoint, load_checkpoint, append_decision, append_todo, list_projects, get_project_id — minimal by design to keep context-window overhead low.
- Atomic PCB store. Every write is a write-then-rename. The bundle is always in a consistent state, with an append-only history log alongside it.
- Hook-driven autosave. Claude Code gets a SessionStart hook (load on startup) and a PreCompact hook (save before context is compacted). Zero manual prompts required.
- 3-tier project identity. Project ID resolved in order: explicit .ide-bridge.yaml → git remote+branch → path fingerprint. The checked-in YAML always wins.
- Graceful fidelity degradation. Daemon picks min(source_fidelity, target_fidelity) automatically. Switching from L3 to L1 never crashes — it just drops verbatim turns.
- Service installer. launchd (macOS) and systemd --user (Linux) unit files so the daemon restarts automatically at login.
- Port conflict resolution. If :31415 is taken, the daemon probes :31416–:31425 and writes the chosen port to config.json. Nothing breaks.
- TypeScript strict throughout. noUncheckedIndexedAccess enabled. 61 passing tests, typecheck clean, zero dead code.
Supported IDEs
| IDE | Fidelity | Extract source | Import sink |
|---|---|---|---|
| Claude Code | L3 (full session resume) | ~/.claude/projects/<encoded-cwd>/*.jsonl | Synthesized JSONL + claude --resume |
| Cursor | L2 (last-N verbatim turns) | state.vscdb in Cursor's workspaceStorage | .cursor/rules/_imported.mdc primer |
| Kiro | L1 (rolling summary) | .kiro/steering/*, .kiro/specs/* | .kiro/steering/_imported.md |
| Antigravity | L0–L1 | AGENTS.md + bridge-captured plan/decisions | AGENTS.md with "Prior context" block |
| Generic | L0 (plan + decisions + TODOs + git) | Agent-driven saves only | AGENTS.md with "Prior context" block |
Any MCP-capable IDE not listed above gets the generic L0 adapter via a priming AGENTS.md. Fidelity levels: L0 = plan + decisions + TODOs + git. L1 = L0 + rolling summary. L2 = L1 + last-N verbatim turns. L3 = full session resume.
Install
Then in your project:
ide-bridge init && ide-bridge priming claude-codeBy the numbers
61
passing tests
5
native IDE adapters
6
MCP tools
0
cloud dependencies
Roadmap
shipped
Context portability across Claude Code, Cursor, Kiro, Antigravity, and generic fallback. Local-only, zero auth. CLI, priming files, launchd/systemd installers.
next
Cursor per-database resilience. initialize tool coverage. L3 forged-resume verification test. negotiateFidelity wiring between adapters.
planned
Remote sync (--remote <url>, Postgres-backed store). Disk-tailer rescue mode. Secret redaction MVP. Self-host Docker image.
future
Multi-IDE role orchestration over A2A. CrewAI-style YAML config. Presence channel, file leases, HITL states. Managed SaaS with auth + dashboard.
Star the repo if this solves something you've hit.
Contributions even more so.