Claude Code IDE for Obsidian
by Ponywen0819
README.md
# Claude Code IDE for Obsidian
Connects the Claude Code CLI to Obsidian the same way the VS Code extension does:
Claude can read your selection and open files, open files, show diffs you keep/reject,
and run inside an embedded terminal.
Protocol is the WebSocket MCP variant reverse-engineered from the VS Code extension —
compatible with `coder/claudecode.nvim`.
## Build
```bash
npm install
npm run build # -> main.js + styles.css
npm test # protocol self-check (no Obsidian needed)
```
Install: copy `main.js`, `styles.css`, `manifest.json` into
`<vault>/.obsidian/plugins/obsidian-claude-code-ide/`, then enable it in
Settings → Community plugins.
## Use
Enabling the plugin starts a WebSocket server on `127.0.0.1`, writes
`~/.claude/ide/<port>.lock`, and is ready. Two ways to connect Claude:
- **Embedded terminal** (auto-connect): ribbon icon → *Claude Code terminal*, or the
command palette. Spawns `claude` with the env vars already set; it connects on its own.
- **Passive mode** (no native deps): in any terminal, `cd` into the vault and run
`claude`, then `/ide` → pick Obsidian.
## node-pty (embedded terminal only)
The terminal needs `node-pty`, a native module that must match Obsidian's Electron ABI.
It's an **optional** dependency — if it can't load, the terminal pane prints the passive-mode
steps instead and everything else still works.
To enable it, rebuild against Obsidian's Electron:
```bash
npx electron-rebuild -v <obsidian-electron-version> -m node_modules/node-pty
```
Find the Electron version in Obsidian via *Help → Debug info*. Copy the rebuilt
`node_modules/node-pty` next to `main.js` in the plugin folder.
## Layout
| File | Concern |
|------|---------|
| `src/ide-server.ts` | WS server, JSON-RPC/MCP, auth, lock file (Obsidian-free, tested) |
| `src/tools.ts` | The 11 MCP tool handlers (Obsidian-free, tested) |
| `src/main.ts` | Plugin lifecycle + Obsidian `EditorContext` implementation + selection bridge |
| `src/diff-modal.ts` | `openDiff` keep/reject UI |
| `src/terminal-view.ts` | xterm.js + node-pty terminal |
## Not done
- `executeCode` / `getDiagnostics` — no Obsidian equivalent (`getDiagnostics` returns `[]`).
- `isDirty` is always `false` (Obsidian autosaves; real dirty state isn't exposed).
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues