Karpathy-style LLM Wiki skill with multi-vault sqlite registry and Socratic wizard
Project description
oh-my-wiki (OMW)
A host-universal LLM-wiki you drive from your AI coding agent (Claude Code / Codex / Gemini).
oh-my-wiki exposes exactly two surfaces. The omw CLI handles deterministic ops — omw setup, omw vault create, omw lint, omw schema list, omw supersede, omw review, omw links, omw fields, omw view, omw doctor — with no LLM required. The omw skill brings natural-language reasoning inside your AI session: ingest, query, autoresearch, summary, synthesis, and a set of wiki-maintenance personas (wiki-librarian, wiki-auditor, curator, fact-checker, consistency-checker, terminology-manager). The model is personas propose → you confirm → deterministic ops execute, so every file change is auditable. After each op, omw suggests the state-endorsed next lifecycle step (omw next --after <op>, deterministic; safe default = stop) and lets you confirm or skip — full multi-step orchestration is still left to your host AI agent (Claude Code / Codex / Gemini), not reimplemented here.
Short alias: OMW (lowercase omw). Both oh-my-wiki and omw register as skills and respond to the same trigger phrases.
Tutorial: Walk through real dialogs and verified CLI examples in TUTORIAL.md (English) or TUTORIAL.ko.md (한국어).
What's new in v3
- Schemas — 13 built-in page types (
omw schema list/show), with per-vault overrides in<vault>/schemas/ - Confidence + supersede —
confidencefrontmatter field;omw supersederetires old pages cleanly - Review queue (SR) — spaced-repetition via
omw review due/omw review done - Web search —
omw searchqueries an external provider (brave/tavily/exa/…);omw serveexposes vault FTS5 as a local retrieve-only HTTP API on port 8765 - Entity-linking —
omw links suggest/omw links linkauto-inserts[[slug|Name]]references - Inline fields —
omw fieldsreadskey::inline syntax alongside frontmatter - Korean matching — Korean entity names with josa (
카르파시가) are suggested and linked correctly - Note viewers —
omw viewopens the active vault, a page, or a search in Obsidian or Logseq (URI schemes, no plugin needed);omw setup viewerscaffolds the viewer config - Visibility (secure-by-default) —
omw visibility get/setmarks pagespublic/private;omw serveexposes only public pages - URL inbox + fetch —
omw fetch <url>saves a web page or YouTube transcript toraw/(tiered urllib → chromium → cloud, SSRF-guarded);omw inbox add/list/run/removequeues URLs for batch fetch - Slash-command family — each op is also an explicit slash command (
/omw-ingest,/omw-query,/omw-summary,/omw-synthesis, …) alongside/omw <op>; generated at install time from the op registry (see Slash commands) - Persona slash commands — one per persona (
/omw-fact-checker,/omw-librarian,/omw-auditor,/omw-curator,/omw-consistency-checker,/omw-terminology-manager), each dispatchingomw persona-run <role> - Guided lifecycle chaining — after a pipeline op,
omw next --after <op>computes the state-endorsed next op (deterministic — static successor filtered by vault state); the skill offers it via your host's ask tool (safe default = stop, never auto-runs) summary/synthesisops —omw summary <page>condenses a page into a summary page;omw synthesis <topic>weaves a cluster's structured pages into awiki/syntheses/page
Install
Choose whichever path fits your environment. After the PyPI or git path, run omw doctor to confirm everything is wired correctly. After the Skills CLI path, the CLI is set up on first use (then omw doctor).
Path A — PyPI (pip / pipx) — recommended
Install the omw CLI from PyPI without cloning:
pipx install oh-my-wiki # isolated CLI (recommended)
# or
pip install oh-my-wiki # into the current environment
Both give you a working omw command (omw status, omw vault create …, omw lint, …). The published wheel is self-contained — it bundles the schemas, personas, backends, and the full skill. To register the bundled skill with your agents afterwards, run:
omw setup agents
Installing straight from GitHub works the same way: pipx install git+https://github.com/dandacompany/oh-my-wiki.
Path B — git clone + install script (developers, Codex CLI users)
git clone https://github.com/dandacompany/oh-my-wiki
cd oh-my-wiki
bash bin/install.sh
The installer checks for Python 3.10+, pip-installs the package editable, creates ~/.claude/skills/oh-my-wiki and ~/.claude/skills/omw symlinks (idempotent), runs pytest -q to verify, and prints next steps. Add --dev to include pytest/ruff extras. Use --force to replace existing symlinks without a prompt; --no-test to skip the test step. Run bash bin/install.sh --help for all flags.
Path C — Skills CLI (Claude Code users)
skills add dandacompany/oh-my-wiki@oh-my-wiki -g -y --copy -a claude-code
This installs the skill into ~/.claude/skills/ and registers both the oh-my-wiki and omw short-alias skill names. This installs the skill only. The omw CLI is installed on first use — open your agent and say set up omw (or omw 셋업 점검해줘); the skill runs its CLI preflight and installs the CLI with your confirmation. Or install it yourself now: pipx install oh-my-wiki.
Verify the install
omw doctor
omw home: /Users/you/.omw ok
registry: /Users/you/.omw/registry.db ok
* demo (wiki/markdown) /Users/you/.omw/vaults/demo
Quickstart (~60 seconds)
Step 1 — Run the setup wizard
omw setup
Follow the prompts to configure your first vault, search provider, and persona preferences. Accept the defaults for a fast start.
Step 2 — Check status
omw status
{
"vault_count": 0,
"active": null,
"needs": "setup",
"vaults": []
}
Step 3 — Create your first vault
omw vault create demo --mode wiki
{
"created": "demo",
"path": "~/.omw/vaults/demo",
"mode": "wiki",
"type": "markdown"
}
omw vault list
[
{
"name": "demo",
"path": "~/.omw/vaults/demo",
"mode": "wiki",
"type": "markdown",
"is_active": true
}
]
Step 4 — Add a note (in your AI session)
Open Claude Code (or Codex / Gemini) and say:
ingest this
Andrej Karpathy calls the LLM Wiki a "compounding knowledge artifact". Every
source gets saved verbatim to raw/, a summary lands at wiki/summaries/, and
the entities and concepts that appeared get their own pages. 10–15 page touches
per ingest is normal.
Step 5 — Run a lint check
omw lint
{
"vault_id": 1,
"vault_path": "~/.omw/vaults/demo",
"frontmatter_issues": [],
"drift": { "missing_files": [], "mtime_drift": [] },
"links": {
"broken": [],
"orphans": [],
"index_drift": { "missing_from_index": [], "dangling_in_index": [] },
"contradictions": [],
"supersedes": [],
"superseded_unmarked": [],
"link_suggestions": []
},
"auto_fix_hints": []
}
→ Full tutorial: TUTORIAL.md · 한국어
Architecture
SKILL.md dispatcher → commands/<op>.md (LLM procedure) → scripts/<op>.py (deterministic I/O)
└─ registry.py → ~/.omw/registry.db (sqlite)
└─ adapters.py → filesystem (markdown / obsidian)
The 18 CLI subcommands:
| Subcommand | Purpose |
|---|---|
status |
Show active vault and registry state |
vault |
Create, list, use, forget vaults |
lint |
Structural health check (frontmatter + links) |
search |
Web search via the configured external provider (brave/tavily/exa/…) |
serve |
Local retrieve-only HTTP query API (port 8765) — public pages only |
view |
Open the vault / a page / a search in Obsidian or Logseq |
visibility |
Get / set a page's public/private visibility (get / set) |
schema |
List / inspect page-type schemas |
supersede |
Mark a page superseded by a newer one |
review |
Spaced-repetition review queue (due / done) |
links |
Suggest and insert [[slug]] entity links |
fields |
Read frontmatter + inline key:: fields |
import |
Import an existing folder as a vault |
fetch |
Fetch one URL (web page / YouTube transcript) into raw/ |
inbox |
Queue URLs and batch-fetch them into raw/ (add/list/run/remove) |
next |
Recommend the next lifecycle action; --after <op> gives the state-endorsed next op (deterministic) |
setup |
Interactive setup wizard |
doctor |
Verify install health |
Visibility (secure-by-default):
omw servereturns only pages withvisibility: publicin their frontmatter. Pages without the field are treated as private and never served. Publish pages explicitly withomw visibility set <relpath...> public.
The skill also exposes natural-language ops via your AI session: ingest, query, autoresearch, summary, synthesis, find, edit, move, delete, and wiki-maintenance persona invocations (fact-check, consistency-check, build glossary). Each is also an explicit slash command — see Slash commands.
Slash commands
Every procedure op and every persona is also exposed as an explicit slash command,
generated at install time from the op registry + persona roster (so a new op/persona
auto-gets one, with zero drift). The /omw <op> alias still works — these are additive
shortcuts that skip the "which op?" step.
Op commands (each dispatches commands/<op>.md):
| Command | Op |
|---|---|
/omw-ingest |
pull a source into raw/ and reindex |
/omw-query |
answer a question from the wiki (LLM synthesis) |
/omw-open |
open a page for reading |
/omw-edit |
edit a page following schema conventions |
/omw-move |
move / rename a page and fix backlinks |
/omw-delete |
delete a page (confirm first) |
/omw-autoresearch |
multi-round web research into raw/ |
/omw-summary |
condense a page/source into a summary page |
/omw-synthesis |
weave a cluster's pages into a synthesis page |
Persona commands (each dispatches omw persona-run <role>):
| Command | Persona |
|---|---|
/omw-librarian |
tidy structure, cross-links, orphans |
/omw-auditor |
diagnose what's wrong with the vault |
/omw-curator |
keep index.md in sync and well-ordered |
/omw-fact-checker |
verify claims via web search, tag confidence |
/omw-consistency-checker |
find contradictions within / across pages |
/omw-terminology-manager |
build / maintain the per-vault glossary |
Lifecycle chaining: after a pipeline op the skill runs
omw next --after <op>and offers the state-endorsed next step (search/fetch → ingest → summary → synthesis → lint → review; autoresearch → synthesis). The computation is deterministic; the skill asks via your host's tool with a safe default of stop and never auto-runs.
Storage
- The vault registry lives at
~/.omw/registry.db(override withOMW_HOME) as a per-user sqlite database. - The note index is regenerated by
scripts/reindex.pyafter every mutation. - Your files stay in the vault path you chose. oh-my-wiki never touches them outside the op you explicitly invoked.
Development
pytest -vruns all tests.ruff check scripts/ tests/runs the linter.omw statusinspects the registry/vault state.python3 -m scripts.lint --vault-id Nruns the health check on a specific vault.
Continuous integration runs on GitHub Actions, across a matrix of Python 3.10, 3.11, and 3.12 on both ubuntu-latest and macos-latest.
License
Released under the MIT License. See LICENSE for the full text.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oh_my_wiki-2.43.0.tar.gz.
File metadata
- Download URL: oh_my_wiki-2.43.0.tar.gz
- Upload date:
- Size: 428.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4dc71be846dbe34d14aadd774db46d0d35784a431dccbeb2bb4c6053acafe468
|
|
| MD5 |
28e5139108070983ded5e1b90320c4cd
|
|
| BLAKE2b-256 |
2fef71f8ba55e226e7c804c7b4b8bc57d0dae95da7c0502ad105599b065e3174
|
File details
Details for the file oh_my_wiki-2.43.0-py3-none-any.whl.
File metadata
- Download URL: oh_my_wiki-2.43.0-py3-none-any.whl
- Upload date:
- Size: 554.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61b6b8e3801beabe7f8eacbf10909f1ebd4284f4172b27ed5631fdfaad01ad60
|
|
| MD5 |
b132f8579a82f710129bcfb07634b8f3
|
|
| BLAKE2b-256 |
63d31cb10ca494854201953e100be9e16fc273d109366e375607abce34418291
|