LLM Wiki
lewislulu/llm-wiki-skill
Build and maintain a Karpathy-style LLM knowledge base — a self-compiling Obsidian markdown wiki where an Agent ingests raw sources, compiles cross-linked concept/entity/summary pages, answers…
Sync knowledge from the current project into the Obsidian wiki.
$ npx skills add Ar9av/obsidian-wiki --skill wiki-update -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Ar9av/obsidian-wiki wiki-update --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Ar9av/obsidian-wiki.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.skills/wiki-update .claude/skills/wiki-update && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "wiki-update" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/wiki-update into .claude/skills/wiki-update/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wiki-update", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/wiki-updateType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Ar9av/obsidian-wiki --skill wiki-update -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Ar9av/obsidian-wiki wiki-update --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Ar9av/obsidian-wiki.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.skills/wiki-update .agents/skills/wiki-update && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "wiki-update" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/wiki-update into .agents/skills/wiki-update/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wiki-update", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Ar9av/obsidian-wiki --skill wiki-update -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Ar9av/obsidian-wiki wiki-update --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Ar9av/obsidian-wiki.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.skills/wiki-update .cursor/skills/wiki-update && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "wiki-update" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/wiki-update into .cursor/skills/wiki-update/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wiki-update", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Ar9av/obsidian-wiki.git --path .skills/wiki-update--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Ar9av/obsidian-wiki --skill wiki-update -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Ar9av/obsidian-wiki wiki-update --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Ar9av/obsidian-wiki.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.skills/wiki-update .gemini/skills/wiki-update && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "wiki-update" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/wiki-update into .gemini/skills/wiki-update/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wiki-update", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Ar9av/obsidian-wiki wiki-updateInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Ar9av/obsidian-wiki --skill wiki-update -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Ar9av/obsidian-wiki.git skills-src && mkdir -p .github/skills && cp -r skills-src/.skills/wiki-update .github/skills/wiki-update && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "wiki-update" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/wiki-update into .github/skills/wiki-update/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wiki-update", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Ar9av/obsidian-wiki --skill wiki-update -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Ar9av/obsidian-wiki wiki-update --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Ar9av/obsidian-wiki.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.skills/wiki-update .opencode/skills/wiki-update && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "wiki-update" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/wiki-update into .opencode/skills/wiki-update/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wiki-update", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
wiki-updateSync knowledge from the current project into the Obsidian wiki.
Wiki Update is an agent skill from Ar9av/obsidian-wiki. Sync knowledge from the current project into the Obsidian wiki. Use when work already in the current project should be distilled into the vault; named-vault routing includes @work update wiki. wiki-capture saves the current conversation and wiki-ingest handles external/new sources.
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Knowledge Management, covering LLM wikis. It works with Obsidian. The repository describes itself as: Framework for AI agents to build and maintain a digital brain through Obsidian wiki | Memory System for Agents. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 709727e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitrgnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Wiki Update loads about 3.5k tokens when it runs. Until then it costs about 74 tokens; SKILL.md has 1,602 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
line `@name` override → walk up CWD for `.env` → global config → prompt setup). This gives `OBSIDIAN_VAULT_PATH`, `OBSIDAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Ar9av/obsidian-wiki at commit 709727e, republished under its MIT licence (© Ar9av). 1,602 words, ~3,481 tokens.
.claude/skills/wiki-update/SKILL.md (or your agent's skills folder).You are distilling knowledge from the current project into the user's Obsidian wiki. This skill works from any project directory, not just the obsidian-wiki repo.
Writing profile: Before drafting or rewriting natural-language Markdown, read and apply the Writing Profile Resolution section in llm-wiki/SKILL.md. Framework schema, provenance, safety, and operation-specific requirements take precedence.
WRITING.md preferences apply only to newly drafted or rewritten natural-language Markdown; preserve source content and structured records.
llm-wiki/SKILL.md (inline @name override → walk up CWD for .env → global config → prompt setup). This gives OBSIDIAN_VAULT_PATH, OBSIDIAN_WIKI_REPO, OBSIDIAN_LINK_FORMAT (wikilink default or markdown), and optional QMD settings such as QMD_WIKI_COLLECTION. Works from any project directory.$OBSIDIAN_VAULT_PATH/.manifest.json to check if this project has been synced before.$OBSIDIAN_VAULT_PATH/index.md to know what the wiki already contains.When writing internal links in Steps 4–5, apply the link format from llm-wiki/SKILL.md (Link Format section) using the OBSIDIAN_LINK_FORMAT value.
Figure out what this project is by scanning the current working directory:
README.md, docs/, any markdown filespackage.json, pyproject.toml, go.mod, Cargo.toml or whatever defines the project.claude/ in the project)Derive a clean project name from the directory name.
Check .manifest.json for this project:
last_commit_synced. Before computing the delta, verify the stored SHA is still reachable:git merge-base --is-ancestor <last_commit_synced> HEADgit log <last_commit_synced>..HEAD --oneline to see what changed.<sha> is no longer reachable — branch may have been rebased or force-pushed. Falling back to full scan." Then treat as first-time sync: re-scan everything and update last_commit_synced to the current HEAD SHA at the end of Step 6.If nothing meaningful changed since last sync, tell the user and stop.
This is the core question from Karpathy's pattern: what would you want to know about this project if you came back in 3 months with zero context?
Worth distilling:
Not worth distilling:
The heuristic: if reading the codebase answers the question, don't wiki it. If you'd have to re-derive the reasoning by reading git blame across 20 commits, wiki it.
GUARD: If the obsidian-wiki code-understand command fails or is unavailable, skip this step and continue — it is an optimisation, not a requirement.
When this project contains code, run the local code-understanding extractor before distilling. It parses the codebase locally and returns a focus map — the ranked files and symbols the architecture hangs on — so you read the load-bearing parts instead of scanning everything.
obsidian-wiki code-understand --project "$(pwd)" --prettyWhen this is not the first sync (Step 2 computed last_commit_synced), seed the focus map from the delta:
obsidian-wiki code-understand --project "$(pwd)" --since <last_commit_synced> --pretty(First sync: omit --since.)
backend: codegraph, treat focus-map entries as structural facts with file:line citations; when backend: builtin, treat defines/imports entries as facts but treat rg-reference entries as weaker evidence — open the file and verify before citing. Open only the ranked files/file:lines the focus map points at; never paste the JSON into the wiki or the vault.(file:lines) from the focus map or from the opened source; keep using the existing provenance markers.projects/<name>/ page, cross-check each previously recorded code relationship against the current focus map (or obsidian-wiki ast-extract for a symbol-level recheck). Remove relationships whose target symbol no longer exists or is no longer reachable; update the page and record the removals in log.md. This keeps false positives from accumulating..codegraph/ or the code-understand JSON into $OBSIDIAN_VAULT_PATH — the graph is a cache/sidecar in the project repo, not wiki knowledge.backend: builtin because codegraph is unavailable and the user wants the enhanced backend, offer to install it for them: npm install -g @colbymchenry/codegraph (or set CODE_UNDERSTANDING_CODEGRAPH_BIN to an existing binary), then re-run this step so the focus map uses the graph. Never install without the user's go-ahead, and never let a missing codegraph block the sync.If obsidian-wiki is not installed or the command fails, skip this step and proceed to Step 4 as normal — it is an optimisation, not a requirement.
Goes under $VAULT/projects/<project-name>/:
projects/<project-name>/
├── <project-name>.md ← project overview (named after the project, NOT _project.md)
├── concepts/ ← project-specific ideas, architectures
├── skills/ ← project-specific how-tos, patterns
└── references/ ← project-specific source summariesThe overview page (<project-name>.md) should have:
Things that aren't project-specific go in the global categories:
| What you found | Where it goes |
|---|---|
| A general concept learned | concepts/ |
| A reusable pattern or technique | skills/ |
| A tool/service/person | entities/ |
| Cross-project analysis | synthesis/ |
Every page needs YAML frontmatter:
---
title: >-
Page Title
category: concepts
tags: [tag1, tag2]
sources: [projects/<project-name>]
summary: >-
One or two sentences (≤200 chars) describing what this page covers.
provenance:
extracted: 0.6
inferred: 0.35
ambiguous: 0.05
base_confidence: 0.59
lifecycle: draft
lifecycle_changed: TIMESTAMP_DATE
created: TIMESTAMP
updated: TIMESTAMP
---
Use folded scalar syntax (summary: >-) for title and summary to keep frontmatter parser-safe across punctuation (:, #, quotes) without escaping rules.
Keep the title and summary contents indented by two spaces under summary: >-.
# Page Title
- A fact the codebase or a doc actually states.
- A reason the design works this way. ^[inferred]
Use [[wikilinks]] to connect to other pages.Write a summary: frontmatter field on every new/updated page (1–2 sentences, ≤200 chars), using >- folded style. For project sync, a good summary answers "what does this page tell me about the project I wouldn't guess from its title?" This field powers cheap retrieval by wiki-query.
Apply provenance markers per llm-wiki (Provenance Markers section). For project sync specifically:
Compute the rough fractions and write the provenance: block on every new/updated page.
updated timestamp and add the new source.index.md to see what's already there before creating anything new.After creating/updating pages:
[[wikilinks]] from new pages to existing related pages[[wikilinks]] from existing pages back to the new ones where relevant.manifest.jsonAdd or update this project's entry. The project identity must be portable across machines: record the repository URL in source_repo (from git remote get-url origin, normalised to host/owner/name), and only an optional source_cwd_hint for where this machine happens to have it checked out. Never write a machine absolute path — see llm-wiki/SKILL.md → .manifest.json (Source key contract v2).
{
"projects": {
"<project-name>": {
"source_repo": "github.com/owner/<project-name>",
"source_cwd_hint": "~/code/<project-name>",
"last_synced": "TIMESTAMP",
"last_commit_synced": "abc123f",
"pages_in_vault": ["projects/<project-name>/<project-name>.md", "..."]
}
}
}If the project is not a git repository, use a repo:<stable-name> pseudo-key for source_repo and keep source_cwd_hint as the only location field.
index.mdAdd entries for any new pages created.
index.md, log.md, and hot.mdOne locked call, not three hand edits:
obsidian-wiki memory sync WIKI_UPDATE project=<project-name>
pages_created=X pages_updated=Y \
source_repo=github.com/owner/<project-name> \
--takeaways "Synced obsidian-wiki — wiki-capture and wiki-research added; the new capabilities are autonomous web research and conversation capture."--takeaways should carry the most important architectural insight or decision
surfaced during this sync, written conceptually rather than as a file list. Omit
it to leave the previous takeaways untouched.
If this project is an ongoing focus, record the thread so the next session picks it up:
obsidian-wiki memory todo add "<the open thread>" --origin projects/<project-name>.mdSee .skills/llm-wiki/references/MEMORY.md for the full procedure.
QMD_WIKI_COLLECTION)GUARD: If $QMD_WIKI_COLLECTION is empty or unset, skip this step. The markdown vault is the source of truth; QMD is only a search index.
Run this step only after pages, .manifest.json, index.md, log.md, and hot.md have been written. If Step 2 found no meaningful changes and the sync stopped early, do not refresh QMD.
This refresh currently requires the local QMD CLI. Use $QMD_CLI if set; otherwise use qmd. If the CLI is unavailable or returns an error, do not roll back the wiki update; report that the wiki was updated but QMD refresh was skipped or failed.
For CLI refresh:
${QMD_CLI:-qmd} updateIf the output says new hashes need vectors, or if pages were created/updated and embeddings may be stale, run:
${QMD_CLI:-qmd} embedVerify at least one created or materially updated page is visible in the wiki collection:
${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/projects/<project-name>/<page>.md" -l 5If the exact qmd:// path is uncertain, use:
${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION" | rg "<project-name>"Record QMD refresh in the final report as one of:
QMD refreshed: update + embed + verifiedQMD skipped: QMD_WIKI_COLLECTION unsetQMD skipped: qmd CLI unavailableQMD failed: <short error summary>concepts/react-server-components.md already exists. Update the existing one and add this project as a source.$VAULT/_meta/taxonomy.md if it exists, and use canonical tags.<project-name>.md file is what you'd read to get oriented. Make it good.© Ar9av, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .skills/wiki-update of Ar9av/obsidian-wiki.
Open the folder on GitHubat commit 709727e
Wiki Update next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Wiki Update this skillAr9av/obsidian-wiki | 3.5k | — | ~3.5k | Automated safety check: Notes | MIT | |
| LLM Wikilewislulu/llm-wiki-skill | 655 | — | ~3.7k | Automated safety check: Pass | None | |
| Obsidian CLI Read TransportAgriciDaniel/claude-obsidian | 15k | 1 repos | ~762 | Automated safety check: Pass | MIT | |
| LLM Wikizosmaai/pi-llm-wiki | 606 | — | ~4.4k | Automated safety check: Pass | MIT | |
| LLM Wikipraneybehl/llm-wiki-plugin | 118 | — | ~5.7k | Automated safety check: Pass | MIT | |
| Karpathy WikiSherwinQ/karpathy-wiki | 113 | — | ~967 | Automated safety check: Pass | MIT |
lewislulu/llm-wiki-skill
Build and maintain a Karpathy-style LLM knowledge base — a self-compiling Obsidian markdown wiki where an Agent ingests raw sources, compiles cross-linked concept/entity/summary pages, answers…
AgriciDaniel/claude-obsidian
Detects and uses the official Obsidian command-line interface for read-only vault access, falling back to direct file reads, while all mutations stay on a separate transaction core.
zosmaai/pi-llm-wiki
Build and maintain a persistent, interlinked Obsidian-compatible markdown wiki using Karpathy's LLM Wiki pattern.
praneybehl/llm-wiki-plugin
Build and maintain an LLM-curated knowledge base from papers, articles, transcripts, notes and project findings.
SherwinQ/karpathy-wiki
A skill your agent uses when building or maintaining a personal knowledge base with LLM assistance.
MartinLwx/dotfiles
Provides access to the user's personal wiki, including notes, research, project documentation, decisions, and archived knowledge.
Ar9av/obsidian-wiki
Ingest Hermes agent history into Obsidian as distilled knowledge.
Ar9av/obsidian-wiki
Ingest Codex CLI conversation/session history into Obsidian as distilled knowledge.
Ar9av/obsidian-wiki
Ingest GitHub Copilot CLI/session history into Obsidian as distilled knowledge.
Ar9av/obsidian-wiki
Adjust the user's Obsidian visual layout with CSS snippets. An agent skill from Ar9av/obsidian-wiki.
Ar9av/obsidian-wiki
Ingest OpenClaw session/history data into Obsidian as distilled knowledge.
Ar9av/obsidian-wiki
Turn the current conversation or finding into a structured permanent wiki note.
Works with
Categories
Sync knowledge from the current project into the Obsidian wiki. Wiki Update is an agent skill from Ar9av/obsidian-wiki. Sync knowledge from the current project into the Obsidian wiki.
Wiki Update fits situations like: work already in the current project should be distilled into the vault; named-vault routing includes @work update wiki.
Run `npx skills add Ar9av/obsidian-wiki --skill wiki-update -a claude-code`. Or copy the skill folder (.skills/wiki-update in Ar9av/obsidian-wiki) into .claude/skills/wiki-update in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Ar9av/obsidian-wiki --skill wiki-update -a codex`. Or copy the skill folder (.skills/wiki-update in Ar9av/obsidian-wiki) into .agents/skills/wiki-update in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Ar9av/obsidian-wiki --skill wiki-update -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wiki-update, .gemini/skills/wiki-update, .github/skills/wiki-update and .opencode/skills/wiki-update in your project.
Going by SKILL.md and its folder, Wiki Update needs the command-line tools its instructions call (git, rg and npm). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use git and npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Wiki Update is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Wiki Update: LLM Wiki (lewislulu/llm-wiki-skill, 655 stars), Obsidian CLI Read Transport (AgriciDaniel/claude-obsidian, 15k stars), LLM Wiki (zosmaai/pi-llm-wiki, 606 stars) and LLM Wiki (praneybehl/llm-wiki-plugin, 118 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Ar9av (a GitHub user) maintains it in Ar9av/obsidian-wiki, which has 3,532 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 7, 2026.
Source: Ar9av/obsidian-wiki on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.