The Problem
Developers using Obsidian often keep code snippets and notes in the same vault, but they lack an in‑app AI assistant that can read, edit, and run code directly against those files. Switching to external IDEs or web‑based LLM tools breaks the workflow and forces manual copy‑pasting.
What This Does
Claudian embeds Claude Code (and later Codex) as an interactive chat sidebar inside Obsidian. The plugin treats the vault as the agent’s working directory, exposing file‑read/write, search, bash execution, and multi‑step planning through the UI. Core entry points are src/main.ts (plugin bootstrap) and src/core/types/index.ts (type definitions). The chat runtime lives in src/core/runtime/ChatRuntime.ts and the Claude‑specific implementation in src/providers/claude/runtime/ClaudeChatRuntime.ts. UI components such as src/features/chat/ClaudianView.ts render the conversation, while tool integrations (e.g., inline edit, plan mode) are implemented in src/features/chat/rendering/.
How To Use It
Setup
Clone into Obsidian’s plugins folder cd /path/to/vault/.obsidian/plugins git clone https://github.com/YishenTu/claudian.git cd claudian
Install deps and build
npm ci # uses package-lock.json npm run build # invokes scripts/build.mjs → esbuild.config.mjs
The manifest.json and compiled main.js produced by the build are what Obsidian loads.
Configuration
Create a local env file from the example: cp .env.local.example .env.local
Edit .env.local to set CLAUDECLIPATH (the Claude Code CLI binary) and any API keys required by the chosen provider. The plugin reads this file via src/providers/claude/cli/findClaudeCLIPath.ts.
Provider settings are persisted by src/app/settings/ClaudianSettingsStorage.ts and can be edited in‑app through the Settings UI (src/features/settings/ClaudianSettings.ts).
Running
After enabling the plugin in Obsidian (Settings → Community plugins → Claudian), open the chat sidebar via the ribbon icon or Ctrl+Shift+L. The UI is driven by src/features/chat/controllers/ConversationController.ts, which instantiates ChatRuntime and forwards user messages to ClaudeChatRuntime. Inline edit is triggered by the hotkey defined in src/features/inline-edit/ui/InlineEditModal.ts.
Real‑World Use
A developer writes a new function in utils/math.md. Selecting the code and pressing the inline‑edit hotkey sends the snippet to Claude, which proposes a diff. The diff is displayed by src/features/chat/rendering/DiffRenderer.ts; the user approves, and the plugin writes the updated file back via src/core/storage/VaultFileAdapter.ts. All actions happen inside the vault without leaving Obsidian.
Code Health & Issues
Low – Missing comprehensive test coverage – only 2 test files (.test.ts) exist, leaving most runtime paths untested (src/core/runtime/, src/providers/claude/). Medium – Provider‑specific error handling – src/providers/claude/runtime/ClaudeMessageChannel.ts assumes the Claude CLI returns well‑formed JSON; no fallback for malformed output. Low – Hard‑coded hotkeys – key bindings are defined in UI components but not exposed in a central config, making customization difficult. Low – License present – LICENSE is included, satisfying legal requirements. Low – CI configured – GitHub Actions (.github/workflows/ci.yml) run lint, type‑check, and Jest, indicating a basic CI pipeline. Low – Dependency hygiene – package-lock.json is present; however, no automated security audit (e.g., npm audit) is defined in CI.
Overall the repository shows a coherent modular layout, TypeScript typings (src/core/types/*.ts), and a functioning build pipeline, but the limited test suite and sparse error handling are notable risk areas.
The Bottom Line
Claudian delivers a functional, well‑organized Obsidian plugin that brings Claude Code’s capabilities directly into a vault, ideal for solo developers or small teams that already use Obsidian for knowledge management. The codebase is clean and builds reliably, but production adoption should consider extending test coverage and strengthening error handling around external CLI interactions.