A Codex-first enhanced Claudian fork for local-first knowledge work in Obsidian.
简体中文 | English
Claudian Plus embeds provider-backed coding agents in your Obsidian sidebar. Codex is the default; Claude, Kimi, OpenCode, Pi, Antigravity and DeepSeek Harness run through the same conversation model. When a session ends, its decisions are distilled into .claudian-plus/memory.md — plain Markdown inside your vault that you can read, edit or delete.
3.2.7 — Feedback becomes entries you can reopen instead of toasts that vanish; the header chip makes every window switchable and closable. A three-tier sandbox (read-only / workspace / full access) is now enforced per provider, chat font size is plugin-owned, provider CLIs accept bare command names with a Detect button, and OpenCode stops dying on a rejected --cwd flag. Changelog · All releases
@note, @folder and drag-and-drop resolve against the vault you already have open.memory.md is in your file list, next to your notes.| What you need | A typical AI extension | Claudian Plus |
|---|---|---|
| Continuity across sessions | Erased when the window closes | Distilled into memory.md and injected into later prompts |
| Provider choice | One vendor's model | Codex by default, plus six more over the same session |
| Data sovereignty | Sessions indexed on someone else's server | Prompts, sessions and memory stay under .claudian-plus/ |
An agent can answer with a fenced ```claudian-ui program that renders as native Obsidian DOM. No iframe, no innerHTML, and replay is byte-for-byte on every provider.
@functions and 8 actions (@Set, @Reset, @Toggle, @ToAssistant, @OpenUrl, @Copy, @OpenNote, @InsertToNote).Form submits once. Every bound field arrives as exactly one assistant turn; Quiz and Checklist grade and track progress locally, without a model round-trip.claudian-ui or openui fence in a Markdown note renders as the same interface, and the block keeps a private state store, so note widgets never reach conversation state. Programs above 200,000 characters stay plain code.@InsertToNote is off by default. When enabled, each use still shows a preview and asks for confirmation before writing at the cursor.Execution details row with tool count, names, failures and thinking time.Stop generation (Esc) tooltip, in the corner where your eye already is.
Open memory file shows exactly what was distilled, and the file is plain Markdown.Memory is opt-in.
memoryEnableddefaults to on, but the switches that send a transcript to an auxiliary query default to off on new installations, because distilled memory contains personal context.
Three layers, one direction of dependency: vault context feeds a provider-neutral core, which dispatches to provider adaptors. Feature code depends on core contracts, never on provider internals.
| Provider | Access | Transport | Detail |
|---|---|---|---|
| Codex CLI | Enabled by default | codex app-server |
Default model gpt-5.6-sol, native streaming |
| Claude Code | Enabled by default | Claude Agent SDK | Thinking-chain folding, permission modes, project history |
| Antigravity (Gemini) | Opt in | agy CLI |
Registry proxy detection, multi-model, thinking budget |
| DeepSeek Harness | Opt in | HTTP Remote + WebSocket mux | Needs Node.js on PATH; Desktop build unsupported |
| Kimi | Opt in | ACP | Model and command discovery, per-tool approval, image attachments |
| OpenCode | Opt in | ACP | Runs as a sandboxed sidecar process |
| Pi | Opt in | RPC | Node built-ins plus a bundled TypeBox, so it survives missing tool dependencies |
DeepSeek Harness is a first-class provider, implemented directly against the official Harness contracts. Sessions bind to the harness's own history, models come from the native catalog and are refreshed from the settings tab, and every tab in one vault shares a single process. It stays off until you send a turn, so rendering its settings never starts a process. Setup and the exact capability boundary are in src/providers/dsh/README.md.
Capabilities differ per provider and are declared explicitly, because the codebase is written so no feature can silently assume parity.
main.js, manifest.json and styles.css from the latest release..obsidian/plugins/claudian-plus/ inside your vault.Requirements: Obsidian 1.11.4 or later, desktop only. Claudian Plus talks to local agent CLI processes and needs filesystem access.
Requires Node.js 24 and at least one provider CLI: Codex, Claude Code, Antigravity, DeepSeek Harness, Kimi, OpenCode or Pi.
git clone https://github.com/wuyifan-code/Claudian-plus.git && cd Claudian-plus
npm ci && npm run typecheck && npm run build
Set OBSIDIAN_VAULT in .env.local and npm run build copies the output straight into your vault. Full script list is in 09 / Development.
| Command | Purpose |
|---|---|
Open chat view |
Open the Claudian Plus sidebar workspace |
Quick agent input |
Send a targeted instruction using the current editor selection |
New tab |
Open a new session tab |
New session (in current tab) |
Start a new conversation in the active tab |
Close current tab |
Close the active session tab |
Inline edit with AI |
Edit selected text in place |
Summarize current note |
Produce a structured summary of the active note |
Suggest tags for current note |
Suggest tags from the note's content |
Create MOC for topic |
Generate a Map of Content note for a topic |
Open memory file |
Open the Markdown file distilled by Dreaming V3 |
Cleanup expired short-term memories |
Remove expired short-term memory entries |
Dream: consolidate memories |
Run a memory consolidation pass now |
Scan vault knowledge |
Rebuild the local knowledge index |
Undo last canvas write |
Revert the most recent approved Canvas modification |
Check provider CLI health |
Inspect provider CLIs for missing binaries, outdated versions or configuration errors |
Copy startup diagnostics |
Copy startup diagnostics for filing an issue |
Everything the plugin knows lives inside your vault:
<your-vault>/
├── .claudian-plus/
│ ├── claudian-plus-settings.json # Shared settings + provider configs
│ ├── memory.md # Distilled memory injected into prompts
│ └── sessions/*.meta.json # Session metadata
├── .claudian/ # Legacy Claudian data, read-only migration
└── .obsidian/plugins/claudian-plus/ # main.js, manifest.json, styles.css
src/. Data leaves your machine only through the provider CLIs you configure..claudian/ directory is detected and copied, with the originals left intact; provider settings are merged, so an upgrade keeps your existing config.npm run dev # Build CSS + start esbuild in watch mode
npm run typecheck # TypeScript type check
npm run lint # ESLint checks
npm run test # Unit and integration tests
npm run test:watch # Re-run tests on change
npm run test:coverage # Coverage report
npm run test:architecture # Architecture boundary enforcement
npm run check:performance # Bundle size and startup performance check
Claudian Plus is built on two upstream open-source projects.
| Project | Author | License | Contribution |
|---|---|---|---|
| Claudian | Yishen Tu | MIT | Obsidian agent workspace, provider abstraction, session architecture |
| Codian | BCS1037 / BCS | AGPL-3.0 | Live Composer, file browser actions, skills management, provider settings |
Original and Claudian-derived code is MIT; Codian-derived code retains AGPL-3.0 obligations. See LICENSE and NOTICE.
Community contributors, credited where the fix landed:
| Contributor | Reported in | Contribution |
|---|---|---|
| Mofusigil | PR #5 | Traced the Codex fork failure to thread/rollback being rejected on paginated threads, and verified the inclusive lastTurnId boundary against thread_processor.rs. Shipped in 3.1.0 as 5ac19e8e. |
| miemiecaigou | #9, #10, #11, #12, #13 | Located the caret-colour specificity conflict, the duplicate-tab and split-block causes of the scrambled history layout, the cold-start console window, and the Antigravity usage-window normalisation path. |
在递归中遇见更深的自己 (Discovering a deeper self within recursion)