Embeds Qoder CLI as an AI collaborator in your vault. Your vault becomes the working directory, giving qodercli capabilities for file reads and writes, search, bash commands, and multi-step workflows.
An Obsidian plugin that embeds Qoder CLI (qodercli) in your vault. Your vault becomes the agent's working directory — file read/write, search, bash, and multi-step workflows all work out of the box.

@ mentions — Bring vault notes, the current selection, or external directories into context as removable chips./ opens built-in and project-level commands; skills, agents, and hooks come from the same Qoder CLI project files as the terminal.# Instruction Mode — Write a custom instruction on an empty input; it is refined before being applied.! Bash Mode — Run a shell command in the vault directory; opt-in under Settings → Experimental.Qoderian is desktop-only (macOS, Linux, Windows) and needs Obsidian v1.7.2+ plus a signed-in Qoder CLI.
Install with the official script (recommended):
macOS / Linux
curl -fsSL https://qoder.com/install | bash
Windows — PowerShell (Windows Terminal recommended)
irm https://qoder.com/install.ps1 | iex
Windows — CMD
curl -fsSL https://qoder.com/install.cmd -o install.cmd && install.cmd
Or through npm (requires Node.js ≥ 20):
npm install -g @qoder-ai/qodercli
The installer puts qodercli on your PATH; Windows on arm64 is not supported. Then sign in from a terminal:
qodercli login
Sign-in is managed entirely by your local CLI; Qoderian never asks for an API key.
From Obsidian Community Plugins (recommended)
From GitHub Release
main.js, manifest.json, and styles.css from the latest releaseqoderian in your vault's plugins folder:/path/to/vault/.obsidian/plugins/qoderian/
From source
cd /path/to/vault/.obsidian/plugins
git clone <repository-url> qoderian
cd qoderian
npm ci
npm run build
This writes main.js and styles.css next to manifest.json, which is where Obsidian loads them from.Open the chat sidebar from the ribbon icon or the command palette (Open Qoderian). Type a message and press Enter; qodercli streams its response back into the panel and works on your vault files just like the terminal CLI.
# Watch mode; rebuilds on change
npm run dev
# Production build
npm run build
# Checks
npm run typecheck
npm run lint
npm run test
npm run test:coverage
npm run audit:prod
Copy .env.local.example to .env.local and set OBSIDIAN_VAULT to have development builds copied into a local vault automatically.
For SDK or qodercli lifecycle changes, run the initialization-only smoke check against a signed-in local CLI. It follows the official model-selection sample:
npm run smoke:qoder
# Optional when qodercli is not on PATH:
QODER_CLI_PATH=/absolute/path/to/qodercli npm run smoke:qoder
The smoke check starts an idle Query, reads runtime model metadata, and closes the Query without sending a user turn.
Open Settings → Qoderian:
| Group | Contents |
|---|---|
| Setup | Qoder CLI edition and path to the qodercli executable (auto-detected by default) |
| Display | Chat view placement, maximum tabs, auto-scroll, deferred math rendering during streaming, and default expansion of file edits (the language selector sits above this group) |
| Conversations | Auto-generated titles and the model that writes them |
| Content | User name, custom system prompt, excluded tags, media folder |
| Input | Send-key behavior and vim-style navigation mappings |
| Safety | User Qoder settings loading and safe-mode permissions |
| Commands & Skills / Subagents / MCP Servers / Qoder Plugins | Inspect and edit the Qoder CLI project configuration stored in .qoder/ |
| Experimental | Bash mode (!) toggle |
qodercli. How that data is handled is governed by Qoder's terms of service and privacy policy.vault/.qoderian/; Qoder CLI project files, commands, skills, agents, and MCP configuration live in vault/.qoder/; native transcripts are managed by qodercli itself. Obsidian stores the open-tab layout in .obsidian/plugins/qoderian/data.json.qodercli and is never copied into your vault. Secrets may appear in third-party MCP configurations stored in .qoder/mcp.json; never commit or sync that file somewhere untrusted.YOLO, and keep backups or version control for an important vault.qodercli feedback collect the current vault's runtime state to help locate the problem; uncheck "Attach workspace diagnostics" in the dialog to send only your note.Redact settings, logs, and screenshots before filing an issue.
If you see spawn qodercli ENOENT, the plugin could not auto-detect your installation. This is common with Node version managers (nvm, fnm, volta), because GUI apps like Obsidian do not inherit your shell's PATH.
Leave the CLI path empty first so auto-detection can run. If it still fails, find the path and set it in Settings → CLI path:
| Platform | Command | Example path |
|---|---|---|
| macOS / Linux | which qodercli |
/Users/you/.local/bin/qodercli |
| Windows | where.exe qodercli |
C:\Users\you\AppData\Local\qodercli\qodercli.exe |
| npm install | npm root -g |
{root}\@qoder-ai\qodercli\cli.js |
On Windows, prefer the native executable over .cmd or .ps1 wrappers.
If you installed the CLI through npm, check whether qodercli and node resolve to the same place:
dirname $(which qodercli)
dirname $(which node)
If they differ, Obsidian may find the CLI but not the Node.js runtime it needs. Prefer the native qodercli binary or install Node.js in a standard location visible to desktop applications, then restart Obsidian.
This usually means incompatible arguments. Qoderian filters and converts SDK-supplied arguments into a qodercli-compatible form; if it still happens, please open an issue with the error log.
Ctrl+Shift+I / Cmd+Option+I) for errorssrc/
├── main.ts # Plugin entry point
├── app/ # Plugin lifecycle, settings, and Obsidian-level storage
├── core/ # Stable app domain, runtime contracts, and host utilities
│ ├── runtime/ # ChatRuntime boundary and turn contracts
│ └── ... # conversation types, settings, filesystem, context, markdown parsing
├── qoder/ # qodercli and Qoder Agent SDK integration
│ ├── qoder-services.ts # Qoder service composition root
│ ├── qoder-host-context.ts # Narrow host contract; no dependency on main.ts
│ ├── runtime/ # Sessions, message channel, CLI discovery, approval, process adapters
│ ├── stream/ # SDK message types and stream transformation
│ ├── history/ # Native transcript reading, resume, and forking
│ ├── tools/ mcp/ # Qoder tool vocabulary and SDK MCP option adapters
│ ├── services/ # Cold-start services: inline edit, refine, titles
│ ├── models/ config/ # Model catalog and Qoder settings
│ └── storage/ # Commands, skills, agents, plugins, MCP config
├── features/
│ ├── chat/ # Sidebar chat: tabs, controllers, renderers
│ ├── inline-edit/ # Inline edit modal and preview
│ └── settings/ # Settings shell and CLI settings UI (agents, plugins, commands)
├── shared/ # Reusable UI components and modals
├── i18n/ # Internationalization (10 locales)
└── style/ # Modular CSS
Qoderian drives qodercli through @qoder-ai/qoder-agent-sdk@^1.0.41; custom-spawn.ts only handles Obsidian/Electron process compatibility. Qoder is the only integration, so there is no provider registry, capability matrix, or routing layer. See ARCHITECTURE.md for dependency rules and the SDK lifecycle conventions followed from the official TypeScript samples.
# Bump the version (syncs package.json, both manifests, and versions.json)
npm version patch # 1.0.0 → 1.0.1
# Verify the build output
npm run build
npm run release:check
# Push the tag to trigger the release workflow
git push --follow-tags
.npmrc sets npm's tag prefix to empty, so a 1.0.1 tag matches manifest.json exactly. The workflow builds from source and attaches main.js, manifest.json, and styles.css to the GitHub Release.
Issues and focused pull requests are welcome. Please read the contribution guide before opening a pull request, and report security issues privately per SECURITY.md.
Qoderian source code is licensed under the MIT License. Use of the Qoder Agent SDK and Qoder services is governed by the Qoder Product Service Terms. Third-party and upstream attribution is listed in NOTICE.