Obsidian Wiki — A Digital Brain You Grow with Your AI Agent
Turns what you figure out with your AI agent into interconnected, maintainable Markdown pages you own — a memory system, not a chat log.
- Source repo
- Ar9av/obsidian-wiki
- Stars
- ★ 3.6k
- Last updated
- 2d ago
- License
- MIT
- Primary language
- Python
- FA score
- 84/100 · Good
At a glance
- How it runs
- Works with
- Universal · cross-platformCodex · Claude Code
- Cost
- Free, no paid service needed
- Setup effort
- Low · running in minutes
- You'll need
- Typical use
- A developer hits a familiar problem in a different repo three months later and retrieves the compiled solution via /wiki-query, with [[wikilink]] citations.
- Not a fit if
- Teams wanting a hosted sync or backup service — it is just a local folder
- Users whose main inputs are audio or video, which are skipped by the agent
- Source review
- 84/100 · Good
What does this agent do, and when should you use it?
obsidian-wiki is an agent memory system built on an Obsidian vault, following Andrej Karpathy's LLM Wiki pattern: compile knowledge once into linked Markdown pages instead of re-asking an LLM or re-running RAG. It ships 39 skills as markdown files that any agent — Claude Code, Codex, Cursor, Gemini CLI and more — reads and runs, plus an optional Python CLI and a from obsidian_wiki import Memory library interface. Ingestion is incremental (a manifest tracks ingested sources), and every claim is tagged extracted, inferred, or ambiguous; lint, dedup, and cross-linking skills keep the vault clean. Session hooks inject the owner profile and open threads at session start and nudge a capture at session end. Everything is plain markdown on disk — no runtime, no API keys, no vendor.
After /wiki-setup initializes the vault, /wiki-ingest ~/research ingests docs, PDFs, chat exports, transcripts, screenshots, and URLs; /wiki-update distills the repo you're standing in (code-graph aware); /wiki-capture saves the current conversation; /wiki-history-ingest claude mines past Claude sessions. Query with /wiki-query, /wiki-narrate (a cited briefing), and /wiki-digest; search unnamed past sessions with obsidian-wiki sessions-build and sessions-query. Maintenance runs through /wiki-lint (broken links, orphans, contradictions), /wiki-dedup, /cross-linker, and /wiki-status. On the Python side, Memory("~/brain") exposes remember, add, search, and recap with no API key, embedding model, or vector store. Graphs export to graph.json, GraphML, Neo4j Cypher, Postgres SQL, or a self-contained graph.html; a vault can also run as a Dockerized HTTP/MCP memory service.
- A developer hits a familiar problem in a different repo three months later and retrieves the compiled solution via /wiki-query, with [[wikilink]] citations.
- A researcher points /wiki-ingest at ~/research so the agent merges papers and notes into existing pages instead of duplicating files.
- A heavy Claude user runs /wiki-history-ingest to mine conclusions scattered across past sessions into the vault.
- Teams running parallel agents rely on the locked, atomic writer for index.md, log.md, hot.md, and _meta/ so updates don't clobber each other.
- A user asks the agent to 'color my graph' in Obsidian's graph view to tint nodes by tag, category, or visibility.
- A Python developer uses the Memory class to use an existing vault as agent memory, injecting recap() at session start.
How do you install or deploy this agent?
Recommended path — install with pip and initialize a vault:
pip install obsidian-wiki
obsidian-wiki setup --vault ~/brainFor uv or pipx users:
uv tool install obsidian-wikipipx install obsidian-wiki(Note: uvx does not work — see the installation docs.) The setup command registers two session hooks by default; pass --no-hooks to skip them. Claude Code users can install as a plugin with no Python:
/plugin marketplace add Ar9av/obsidian-wiki
/plugin install obsidian-wiki@obsidian-wiki(The plugin ships skills only — no session hooks or CLI.) Or skip the terminal entirely and tell your agent:
https://github.com/Ar9av/obsidian-wiki — set up my wikiNo API keys are required.
How do you use this agent?
Open any project in your agent and say "set up my wiki". Start the daily loop with three commands:
/wiki-setup
/wiki-capture
/wiki-queryFeed it material:
/wiki-ingest ~/research
/wiki-update
/wiki-history-ingest claudeAsk it:
/wiki-query what do I know about rate limiting?
/wiki-narrate MCP security
/wiki-digest weekKeep the vault honest:
/wiki-lint
/wiki-dedup
/wiki-statusPython usage:
from obsidian_wiki import Memory
memory = Memory("~/brain")
memory.remember("stack", "Python, FastAPI", confidence=0.9)
memory.add("Postgres was chosen over MySQL for partial indexes.")
memory.search("postgres")
memory.recap()Open the vault in Obsidian and use Cmd/Ctrl+P → "Open graph view" to see the graph.
What are this agent's strengths and limitations?
- Knowledge is plain markdown on disk — readable, greppable, diffable — with no vendor lock-in; manage it with git or your own sync.
- It compiles, not accumulates: new knowledge merges into existing pages and contradictions get flagged, so nothing duplicates.
- Incremental ingestion: a manifest tracks every source, so the second run processes only the delta.
- Measured gains on structural questions: 81s→19s answer time, 44%→83% accuracy, 9.9→4.6 tool calls with the same model and vault.
- One .skills/ directory symlinked into every agent — works across 39 skills and a dozen-plus agents.
- The benchmark is small (one 38-page vault, n=2 per cell); the project itself says the percentages are only indicative, and one run failed when the agent ignored the CLI.
- It is not a sync service or backup — you must protect the folder yourself with git or your own sync.
- Audio and video inputs are skipped; Office file support depends on your agent.
- It is not a transcript recorder — nothing is saved unless you or a skill decides it's worth keeping, so things can be missed.
- The project describes itself as early-stage; dedup and cross-referencing quality still have room to improve.
How does this agent compare with similar options?
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| Obsidian Wiki — A Digital Brain You Grow with Your AI Agent This agent | 84 · Good | Agent plugin / skillFree | ★ 3.6k | 2d ago | Python | Codex · Claude Code |
| SwarmVault | 67 · Some gaps | CLIFree + model costs | ★ 731 | 4mo ago | TypeScript | Codex · Claude Code |
| Obsidian Second Brain | 66 · Some gaps | Agent plugin / skillFree + model costs | ★ 5k | today | Python | Codex · Claude Code |
| PipesHub Enterprise AI Context Platform | 66 · Some gaps | Self-hosted serviceFree + model costs | ★ 3.9k | today | Python | — |
How does FollowAgents rate this agent?
Why each dimension lost points
Least privilege: zero-dependency, purely local core CLI, but setup symlinks skills and rule files into a dozen-plus agent directories and auto-registers session hooks (opt-out only via --no-hooks) — deducted one point. User confirmation: staged writes (_staging + wiki-stage-commit), capture hook merely suggests, GitHub sync optional — but installation performs bulk writes without per-item confirmation. Full marks for data-flow transparency: _raw staging, manifest-based delta, and the 'nothing leaves your machine' claim match the architecture docs. Sensitive data: visibility/pii tags and filtered mode are opt-in, not default; no automatic PII detection — deducted. Full marks for dependency security: no runtime dependencies, all CI actions pinned by SHA. External effects: optional hourly cron auto-commit and multi-directory writes are reasonable but not minimal. Rollback: the vault is a plain git directory with atomic writes, but no explicit uninstall/rollback path for skill installation. Full marks for source attribution: explicit Karpathy credit, wikilink citations, trust fields with confidence levels.
Full marks for self-consistency: 39 skills, CLI, and Python API are described consistently across README/installation/configuration; legacy config paths remain honored. Dependency availability deducted one point: CodeGraph, QMD, and PageIndex backends degrade gracefully, but their CLI/MCP contracts are not version-locked, creating drift risk. Full marks for failure messages: doctor health checks, hooks that exit 0 rather than failing sessions, WIKI_RECAP_DEBUG explaining silent exits, fail-closed schema validation with exit 1.
Full marks for audience and scenarios: clearly targets developer knowledge management across ingest/query/curation/session-memory. Full marks for capability boundaries: the 'What it isn't' section explicitly rules out transcript recording, sync/backup, oracle behavior, and file conversion. Trigger precision deducted one point: slash commands are precise, but much routing relies on natural-language phrases ('set up my wiki', filtered-mode triggers) whose ambiguity cannot be verified statically. Full marks for environment fit: covers a dozen agents, XDG spec, legacy path compatibility, and multi-vault @name routing.
Full marks for information architecture: complete documentation matrix (installation, skills, architecture, CLI, configuration, API, deployment). Full marks for install notes: five install paths, trap warnings (uvx pitfall, legacy migration), doctor verification. Naming stability deducted one point: HIVEMIND_CAPTURE legacy spelling, ~/.obsidian-wiki legacy path, deprecated Skills CLI indicate renaming churn (compatibly handled). Full marks for examples and FAQ: 18-page demo vault, comparison table, graph export examples. Full marks for known limitations: small-sample study honestly disclosed, explicit non-goals. Full marks for license: MIT declared in both LICENSE and pyproject license-files. Versioning deducted one point: CalVer tags exist but no CHANGELOG file appears in the evidence. Maintenance responsibility deducted one point: SECURITY.md has response commitments and supported-version policy, but evidence shows a single-maintainer early-stage (Beta) project with no continuity guarantee.
Full marks for output usability: wikilink citations, lint/dedup/status commands, multiple graph export formats, self-contained interactive graph.html. Marginal value deducted one point: the performance comparison (4.4× faster, 44%→83% accuracy) is a self-reported benchmark with tiny samples (n=2 per cell, one 38-page vault); the methodology and limits are honestly disclosed, but static review cannot independently confirm the magnitude of benefit. Cost-benefit deducted one point: 'API cost unchanged' comes from the same self-run benchmark; the installation cost (multi-agent symlinks, hook registration) and ongoing vault-curation cost are not quantified.
Full marks for claim traceability: benchmark data traced to PR #175 with per-run logs, a networkx third-party ground truth (3.5e-18 agreement), and full methodology. Cross-source corroboration deducted one point: README/docs/CI/tests corroborate each other internally (wheel skill check, fixtures matching documented contracts), but no third-party evaluation or independent user verification exists. Full marks for fact/inference separation: the product itself mandates extracted/inferred/ambiguous tagging with lint drift detection, and the docs explicitly downgrade their own study's conclusions ('treat the exact percentages as indicative').
- Installation writes symlinks and rule files into many agent directories and registers session hooks by default; use --no-hooks if unwanted and verify with obsidian-wiki doctor afterwards.
- Sensitive-data protection relies on opt-in visibility/pii tags; in default mode every page can be output — assess documents containing personal information before ingesting.
- The performance and accuracy gains are a self-reported, very small-sample benchmark (n=2); treat them as indicative magnitude only, not a guarantee.
- Optional backends (CodeGraph, QMD, PageIndex) have unversion-locked CLI/MCP contracts that may drift across upgrades.
- If enabling GitHub sync, keep the repository private; the optional hourly cron auto-commits and pushes all vault changes.
- The Claude Code plugin install tracks the latest commit on main rather than a pinned version, so behavior can change at any update.