Most AI note tools stop at "save a summary." AgriciDaniel/claude-obsidian — roughly 13k GitHub stars, 1.4k forks, MIT license, release v2.1.1 — is built for a compounding loop: capture sources, ground claims, connect knowledge, query the vault again. It implements the Karpathy LLM Wiki pattern as a local-first Obsidian vault wired to Claude Code Agent Skills, not as another cloud Notion alternative that owns your files.
Drop material in inbox/, run /claude-obsidian:wiki-ingest, and Claude reads, links, and files pages into a connected Markdown knowledge graph you can open in Obsidian Graph view or query read-only with /claude-obsidian:wiki-query.
TL;DR — what builders ask first
| Question | Direct answer |
|---|---|
| Repo? | github.com/AgriciDaniel/claude-obsidian |
| Stars / license? | ~13k stars · MIT · Agent Skills compatible |
| Pattern? | Karpathy LLM Wiki + kepano obsidian-skills substrate |
| Vault vs product checkout? | Clone is the product; your vault is a separate directory |
| First commands? | init vault → claude --plugin-dir … → /claude-obsidian:wiki |
| vs RAG chat? | Pre-compiled linked wiki + provenance ledgers, not chunk retrieval every ask |
| Honest gaps? | No PDF semantic extraction; URL/YouTube need external runner; Windows writes need WSL |
Why it feels different from chat-with-PDF
The README states the design plainly: your vault remains ordinary files. Network egress is explicit. Parallel agents return drafts; one orchestrator applies one recoverable transaction. High-risk claims need two independent sources; contradictions stay visible.
That aligns with explainx.ai's read on local-first agent memory: the durable artifact is Markdown on disk, not a hidden vector index. Compared to OpenKnowledge's WYSIWYG editor, claude-obsidian leans Obsidian-native — Graph, Canvas, Bases, callouts — and Claude Code-first for mutations.
Quick start: clone product, initialize vault
Every mutating command previews before apply. Pin --generated-at and --operation-id, review the JSON plan hash, then pass --approved-plan-sha256 with --apply.
1. Get the product (not your vault)
git clone https://github.com/AgriciDaniel/claude-obsidian.git
cd claude-obsidian
The checkout contains skills, hooks, and scripts/claude-obsidian.py. It is not where your notes live.
2. Initialize a separate vault
export GENERATED_AT="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
export OPERATION_ID="init-reviewed"
python3 scripts/claude-obsidian.py init "$HOME/Documents/MyKnowledgeVault" \
--generated-at "$GENERATED_AT" --operation-id "$OPERATION_ID"
Review the emitted JSON plan, copy approved_plan_sha256, then apply:
python3 scripts/claude-obsidian.py init "$HOME/Documents/MyKnowledgeVault" \
--generated-at "$GENERATED_AT" --operation-id "$OPERATION_ID" \
--approved-plan-sha256 "<sha256-from-the-plan>" --apply
For an existing Obsidian vault, use the non-destructive adopt workflow in the installation guide.
3. Open vault in Obsidian, run Claude Code from it
cd "$HOME/Documents/MyKnowledgeVault"
claude --plugin-dir /absolute/path/to/claude-obsidian
Inside Claude Code:
/claude-obsidian:wiki
Place a source in inbox/, then:
/claude-obsidian:wiki-ingest
Save a scoped insight (never an automatic transcript):
/claude-obsidian:save
Ask the vault read-only:
/claude-obsidian:wiki-query
Multi-agent hosts (Codex, OpenCode, Gemini)
bash bin/setup-multi-agent.sh --host codex
bash bin/setup-multi-agent.sh --host codex --apply
Cursor and Windsurf pick up workspace-local skill discovery from .cursor/rules and .windsurf/rules in the product checkout.
The compounding knowledge loop
| Phase | Skill / action | What happens |
|---|---|---|
| Capture | inbox/ + capture apply | Content-addressed immutable copies in .raw/ |
| Ground | wiki-ingest | Source and claim ledgers track authority, freshness, contradictions |
| Connect | wiki-ingest, canvas | Linked pages, MOCs, Obsidian Canvas maps |
| Reuse | wiki-query, wiki-retrieve | BM25 (+ optional rerank) over vault evidence |
| Maintain | wiki-lint | Dead links, orphans, stale indexes, empty sections |

Fifteen skills, one provenance model
Build and use the wiki
| Skill | What it does |
|---|---|
wiki | Initialize or adopt vault, diagnose readiness, route work |
save | Save one scoped answer — not a full session transcript |
wiki-ingest | Turn captured sources into linked pages + provenance |
wiki-query | Read-only answers from vault evidence |
wiki-lint | Dead links, orphans, metadata gaps, stale indexes |
Extend the workflow
| Skill | What it adds |
|---|---|
autoresearch | Bounded web research with explicit egress consent |
canvas | Obsidian Canvas creation and maintenance |
defuddle | Clean web HTML before ingestion |
wiki-fold | Extractive rollups of the operation log |
wiki-mode | Generic, LYT, PARA, or Zettelkasten filing |
wiki-retrieve | Contextual prefixes, BM25, optional cosine rerank |
wiki-cli | Obsidian CLI reads/search; filesystem transport fallback |
Reference skills
| Skill | Role |
|---|---|
obsidian-markdown | Obsidian Flavored Markdown, callouts, embeds |
obsidian-bases | Native .base tables and formulas |
think | Structured observe → connect → create review loop |
Trigger phrases and contracts live in each skills/<name>/SKILL.md. For slash-command ergonomics across hosts, see Claude Code commands reference.
Shape the vault: PARA, Zettelkasten, LYT
wiki-mode routes new notes without bulk-moving legacy data:
| Mode | Filing principle |
|---|---|
| Generic | Sources, concepts, entities, sessions |
| LYT | Maps of Content + atomic linked notes |
| PARA | Projects, Areas, Resources, Archives |
| Zettelkasten | Stable IDs, atomic notes, dense links |
Switching modes changes routing for new work only — not silent reorganization of old notes.
Operator CLI reference
Wrapper: python3 scripts/claude-obsidian.py
| Command | Effect |
|---|---|
doctor --vault PATH | Vault selection and readiness |
init / adopt | Plan or create / adopt vault |
migrate --vault PATH | Add v1 ledgers without rewriting legacy raw data |
transaction inspect/apply/recover | Inspect bundles, apply once, recover interrupted ops |
lint --vault PATH | Deterministic findings for a UTC date |
capture plan/apply | Preflight and immutable capture |
checkpoint OPERATION_ID | Explicit git checkpoint after an operation |
High-level mutators emit approved_plan_sha256. Drift between plan and filesystem fails before any vault write.
Honest capability boundaries
| Input / capability | Current support |
|---|---|
| Local filesystem | Implemented bounded byte capture |
| Images | Metadata, hash, bounded dimensions |
| PDF / EPUB | Metadata and hash only — no semantic extraction |
| URL / YouTube | Consent plan + external runner required |
| OCR | Local consent plan + external runner |
| BM25 | Local, deterministic |
| Embeddings / remote models | Optional, egress-gated |
| Obsidian CLI | Optional reads; filesystem always available |
This is not a factual oracle, cloud sync service, or substitute for backups and source control. Treat it like loop-engineering a PKM pipeline: explicit phases, inspectable artifacts, recoverable failures.
Comparison anchors on explainx.ai
| Alternative | When claude-obsidian wins | When something else wins |
|---|---|---|
| Karpathy gist only | You want Obsidian UX + 15 packaged skills + transaction CLI | You need a 50-line starter with zero dependencies |
| Obsidian vault as agent memory | You want provenance ledgers and ingest/query/lint as first-class ops | You only need search + hooks in an existing vault |
| OpenKnowledge editor | Obsidian power user, CLI transaction model | WYSIWYG editor + no-code GitHub sync for teams |
| files.md local notes | Multi-source research wiki with claim ledgers | Single-folder private notes without agent orchestration |
What people are asking (issues and maturity)
- 66 open issues / 70 open PRs (August 2026) — active but not finished product polish; read issue titles before betting a team wiki on edge cases.
- Windows writes — plan on WSL for apply paths; native Windows is inspection-only.
- PDF research — ingest stores hash/metadata; you still need your own extraction pipeline for dense PDF corpora.
- Web sources —
autoresearchand URL capture require explicit egress consent; not "paste any URL silently." - Plugin vs vault upgrades — upgrade product checkout independently; run
migrateon older vaults before new ledger features.
Requirements
- Python 3.11+ for portable core
- Obsidian (recommended) for Graph/Canvas
- Bash for setup scripts and shell tests
- Git optional — for explicit checkpoints only
- Optional: Obsidian CLI, Ollama, defuddle (capability-detected)
Run health check:
python3 scripts/claude-obsidian.py doctor --vault "$HOME/Documents/MyKnowledgeVault"
The bottom line
claude-obsidian is the most complete open-source packaging of Obsidian + Claude Code + Karpathy LLM Wiki available in August 2026: fifteen coordinated skills, transaction-safe vault writes, and honest provenance instead of chat-summary amnesia.
Clone github.com/AgriciDaniel/claude-obsidian, initialize a separate vault, invest one real source through wiki-ingest, then query with wiki-query before you bulk-import a library. Pair it with agent skills literacy if you plan to customize wiki-mode or add hooks.
Related on explainx.ai
- Karpathy LLM Wiki Pattern — Complete Guide · lineage and ingest/query/lint ops
- What Is an Obsidian Vault for AI Agent Memory? · graph-native agent memory
- OpenKnowledge — Local LLM Wiki Editor · WYSIWYG alternative
- What Are Agent Skills? · SKILL.md contract claude-obsidian extends
- Claude Code Commands Reference · slash commands and plugins
- Loop Engineering with Claude Code · phased agent workflows
- files.md — Private Local-First Notes · lighter-weight PKM
- Google Open Knowledge Format (OKF) · interoperable bundle spec
Source: AgriciDaniel/claude-obsidian on GitHub (MIT; README and docs as of August 26, 2026).
Star counts, skill names, and platform matrix reflect the public repository at publication time. Run doctor and read docs/installation.md before production vault adoption.
