weank2 downloadsConnect your vault to the vcoder CLI: share selections, review proposed edits as diffs, surface broken links and note lint as diagnostics.
Connect an Obsidian vault to the vcoder CLI through its /ide command. Obsidian then acts as vcoder's IDE:
| Capability | What happens |
|---|---|
| Selection sync | vcoder sees which note is open and what text you selected. The prompt footer shows ⧉ N lines selected, so you can say "rewrite this paragraph". |
| Send to vcoder | Command, editor right-click, or file-menu entry. Inserts @note.md#L3-5 into the vcoder prompt. |
| Diff review | When vcoder asks permission to edit a note, a diff tab opens in Obsidian (unified or side by side, with word-level highlights). Choose Accept, Reject, or Edit proposal, then accept your edited version. |
| Note diagnostics | getDiagnostics reports unresolved [[links]] / ![[embeds]], missing #heading / #^block targets, invalid or duplicate frontmatter keys, unclosed code fences, heading level skips and duplicate headings. vcoder sees any new problems its edits introduce automatically. |
| openFile | The model can open a note and highlight a passage for you. |
npm install -g @voyah-ai/vcoder-nodeThe plugin does nothing on its own. It only serves a vcoder session running on the same machine.
Manual install:
main.js, manifest.json and styles.css from the latest release.<vault>/.obsidian/plugins/vcoder-ide/.From source (development):
npm install && npm run build.main.js, manifest.json and styles.css into <vault>/.obsidian/plugins/vcoder-ide/.cd /path/to/vault
vcoder # then run /ide and pick "Obsidian"
vcoder ○ status bar item to copy a launch command. The command includes VCODER_SSE_PORT=<port>, which makes vcoder connect to Obsidian on startup. vcoder --ide also works.VCODER_SSE_PORT./config.| Setting | Purpose |
|---|---|
| Lockfile directory | Defaults to $VCODER_HOME/ide or ~/.vcoder/ide. If you start Obsidian from the Dock, it does not inherit shell variables. In that case, set this explicitly when you use a custom VCODER_HOME. |
| Share active note | Sends the open note even when nothing is selected. |
| Diff layout | Unified or side by side. |
| Diagnostics | Turn each of the four rule groups on or off, and set the vault scan limit. |
Claude Code IDE connects Obsidian to Anthropic's Claude Code. This plugin connects to vcoder instead. Each CLI discovers IDEs through its own lockfile directory, so the two plugins do not interfere and can be installed side by side.
This plugin is an independent implementation. It is not a fork and shares no code. Besides selection sharing, it adds:
openFilefs). The plugin writes one lockfile, ~/.vcoder/ide/<port>.lock (or $VCODER_HOME/ide, or the Lockfile directory setting). vcoder reads this file to discover the running Obsidian instance. The plugin deletes it when it unloads. It reads or writes no other files outside the vault.getDiagnostics without a file, the plugin lists the vault's Markdown notes and checks them, up to the Vault scan limit (default 5000). The results go only to the local vcoder session.crypto.randomUUID).0600) lockfile. The lockfile is deleted on unload.openDiff errors, so vcoder falls back to its terminal prompt).executeCode is not implemented.The plugin implements the vcoder IDE contract:
<vcoder home>/ide/<port>.lock with contents {workspaceFolders, pid, ideName, transport:"ws", authToken}.mcp, header X-Claude-Code-Ide-Authorization.selection_changed, at_mentioned.openDiff (blocking; returns FILE_SAVED+contents / DIFF_REJECTED / TAB_CLOSED), close_tab, closeAllDiffTabs, getDiagnostics, openFile, getWorkspaceFolders, getOpenEditors, getCurrentSelection, getLatestSelection, checkDocumentDirty, saveDocument.npm run dev # esbuild watch → main.js
npm run lint # eslint-plugin-obsidianmd (same rules as the community directory review)
npm test # vitest: lockfile, MCP server wire contract, diff, diagnostics rules
npm run build # tsc + production bundle
npm run fake-ide -- /tmp/vault # headless IDE peer (FAKE_IDE_DIFF=accept|reject|hold) for testing a real vcoder CLI
src/core/ has no Obsidian imports and is fully unit tested.src/obsidian/ is the adapter layer (views, editor extension, metadata cache).test-vault/ contains seeded problems for every diagnostic rule. Symlink this repo to test-vault/.obsidian/plugins/vcoder-ide and open the folder as a vault.npm run release -- 0.1.1 # bump manifest/versions/package, lint, test, build, commit, tag
git push && git push origin 0.1.1 # push the tag on its own; CI (.github/workflows/release.yml) publishes the release
The tag must equal the manifest.json version, with no v prefix. Obsidian installs and updates the plugin from the release that matches this version. The release workflow adds GitHub build provenance attestations for main.js, manifest.json and styles.css (verify with gh attestation verify main.js -R weank1984/obsidian-vcoder-ide).