Skip to main content

claude-wiki

PyPI version CI Python versions License

Installable Python package providing Claude Code hooks and a CLI for a personal knowledge base. It captures context from your AI coding sessions automatically, compiles it into a wiki of atomic, cross-linked articles, and feeds the relevant index back into your next session — so knowledge compounds instead of evaporating.

Adapted from Karpathy's LLM Knowledge Base architecture.

Features

  • Automatic capture. Session hooks extract the meaningful turns of each Claude Code session into immutable daily logs — no manual note-taking.
  • Compile to atomic articles. Daily logs are distilled by an LLM into one article per concept, plus cross-cutting connections/ and filed qa/ answers, each with YAML frontmatter and provenance backlinks. --max-logs caps the cost of a run.
  • Index-guided query (no RAG). query reads the catalog first, then answers from the KB — retrieval grounded in structure rather than embeddings.
  • Health checks. lint runs structural checks (broken wikilinks, orphan pages, sparse articles, frontmatter schema, and catalog↔article completeness) and optional LLM contradiction checks, with --fix for safe auto-repairs and machine-readable --json output and a stable exit-code contract for CI.
  • Topology & health monitoring. graph reports the link topology — orphans, hubs, and connected components — so you can spot a fragmented KB at a glance; status diagnoses repository health with --json for CI gating.
  • Obsidian-friendly output. Wikilinks, frontmatter, and a per-repo {repo_name}.md catalog keep the vault clean for Graph view; a global core.md registry links every registered repo with [[owner/repo]] links.
  • Project or user mode. Keep the KB inside the repo (.claude/knowledge/) or in an XDG user-wide vault; migrate moves data between modes with rollback.
  • Fast, non-fatal hooks. Handlers do only local I/O within the Claude Code timeout and offload LLM work to a backgrounded flush process; failures are logged, never fatal.

How it works

Claude Code session event
  -> claude-wiki-hook <Event>      (SessionStart / SessionEnd / PreCompact)
  -> hook handler (fast local I/O) -> backgrounded flush -> daily/YYYY-MM-DD.md

claude-wiki compile
  -> daily logs -> LLM -> kb_root/concepts/ · connections/ · qa/ + catalog

SessionStart hook -> injects catalog + recent daily log into next session

Daily logs are the append-only source of truth; the compiled wiki is LLM-owned and rebuilt from them. The catalog is the primary retrieval mechanism — the SessionStart hook injects it into each new session so context carries forward.

Install

With uv (recommended):

uvx claude-wiki init

From source in a clone of this repo:

uv sync --extra dev --frozen

Requires Python 3.12+. No API key — LLM calls use Claude Code's own credentials.

Usage

Initialize a repository:

claude-wiki init

Daily commands:

claude-wiki compile [--all] [--file FILE] [--dry-run] [--continue-on-error] [--max-logs N] [--path PATH]
claude-wiki query "your question" [--file-back] [--json] [--path PATH]
claude-wiki lint [--structural-only] [--fail-on-warning] [--fix] [--threshold N] [--json] [--path PATH]
claude-wiki graph [--json] [--top N] [--path PATH]
claude-wiki status [--json] [--path PATH]
claude-wiki tags [--json] [--path PATH]
claude-wiki migrate [--dry-run] [--path PATH] [--kb-dir KB_DIR] [--daily-dir DAILY_DIR]
claude-wiki rename-catalog [--dry-run] [--path PATH]

query, lint, status, and graph accept --json for machine-readable output and follow a stable exit-code contract. See the CLI reference for every flag.

Hook entry points (called by Claude Code via .claude/settings.local.json by default):

claude-wiki-hook SessionStart
claude-wiki-hook SessionEnd
claude-wiki-hook PreCompact

What claude-wiki init creates

my-project/
├── .claude-wiki.lock              # per-repo config (machine-managed)
├── .claude/settings.local.json   # repo-local hook registration (default)
└── .claude/daily/                 # conversation logs (created on first flush)

Use claude-wiki init --global to write hooks to ~/.claude/settings.json instead. Use claude-wiki init --path PATH to target a different repository root, or --no-hooks to skip hook installation.

Configuration

.claude-wiki.lock fields:

{
  "repo_name": "my-project",
  "repo_owner": "local",
  "layout_version": "2",
  "kb_dir": "project",
  "daily_dir": ".claude/daily",
  "reports_dir": "reports",
  "timezone": "UTC",
  "compile_after_hour": 18
}
  • layout_version tracks the internal directory-layout generation. New repositories use "2".
  • kb_dir is project (repo-relative .claude/knowledge/), user (XDG vault ~/.local/share/claude-wiki-vault/<owner>/<repo>/), or a custom path.
  • daily_dir defaults to .claude/daily in project mode and ~/.local/share/claude-wiki-daily/<owner>/<repo>/ in user mode.
  • reports_dir is deprecated; reports are written to the cache directory (<repo>/.claude/reports/ in project mode).

Environment overrides: CLAUDE_WIKI_PROJECT_DIR (KB location), CLAUDE_WIKI_STATE_DIR (machine state), CLAUDE_WIKI_CACHE_DIR (reports), and CLAUDE_WIKI_DEBUG (verbose hook logging).

Documentation

  • Full docs in docs/ — tutorials, how-to guides, reference, and explanation (Diátaxis).
  • examples/ for a self-contained walkthrough of compiled output.
  • CHANGELOG.md for release history.
  • docs/adr/ for architecture decisions.

Community

Development

make dev              # install with dev dependencies
make install-precommit # install git hooks (run once per clone)
make test             # run pytest
make lint             # ruff check
make format           # ruff format + mdformat
make typecheck        # mypy
make precommit        # all pre-commit hooks
make all              # full CI gate (format, lint, typecheck, test, precommit)

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

claude_wiki-0.13.0.tar.gz (261.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

claude_wiki-0.13.0-py3-none-any.whl (78.6 kB view details)

Uploaded Python 3

File details

Details for the file claude_wiki-0.13.0.tar.gz.

File metadata

  • Download URL: claude_wiki-0.13.0.tar.gz
  • Upload date:
  • Size: 261.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for claude_wiki-0.13.0.tar.gz
Algorithm Hash digest
SHA256 2e126d9760b222998aa25a7a8f2cb4bb2c913c16c74747d3711bd13b19677e34
MD5 5f5829e216c8f6d71da4ee5b67150497
BLAKE2b-256 be7b62372fd53cc93558116721f3b8532ab08f3220f6f94740c8082136a536f9

See more details on using hashes here.

File details

Details for the file claude_wiki-0.13.0-py3-none-any.whl.

File metadata

  • Download URL: claude_wiki-0.13.0-py3-none-any.whl
  • Upload date:
  • Size: 78.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for claude_wiki-0.13.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2336c9c4fe2cd91e19be7fe4f3276cfce190395411f16e3c68cf735190d179c5
MD5 22c16f47fe474d9574526455c46b7845
BLAKE2b-256 d756789bfe0777525c75e34f92b213a71aacfb1d5178ec3275ffc53aed755dad

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page