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…
Ingest Pi coding-agent session history into Obsidian as distilled knowledge.
$ npx skills add Ar9av/obsidian-wiki --skill pi-history-ingest -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Ar9av/obsidian-wiki pi-history-ingest --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/pi-history-ingest .claude/skills/pi-history-ingest && 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 "pi-history-ingest" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/pi-history-ingest into .claude/skills/pi-history-ingest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-history-ingest", 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/pi-history-ingestType 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 pi-history-ingest -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Ar9av/obsidian-wiki pi-history-ingest --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/pi-history-ingest .agents/skills/pi-history-ingest && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pi-history-ingest" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/pi-history-ingest into .agents/skills/pi-history-ingest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-history-ingest", 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 pi-history-ingest -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Ar9av/obsidian-wiki pi-history-ingest --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/pi-history-ingest .cursor/skills/pi-history-ingest && 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 "pi-history-ingest" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/pi-history-ingest into .cursor/skills/pi-history-ingest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-history-ingest", 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/pi-history-ingest--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 pi-history-ingest -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Ar9av/obsidian-wiki pi-history-ingest --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/pi-history-ingest .gemini/skills/pi-history-ingest && 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 "pi-history-ingest" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/pi-history-ingest into .gemini/skills/pi-history-ingest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-history-ingest", 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 pi-history-ingestInstalls 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 pi-history-ingest -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/pi-history-ingest .github/skills/pi-history-ingest && 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 "pi-history-ingest" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/pi-history-ingest into .github/skills/pi-history-ingest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-history-ingest", 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 pi-history-ingest -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 pi-history-ingest --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/pi-history-ingest .opencode/skills/pi-history-ingest && 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 "pi-history-ingest" agent skill from https://github.com/Ar9av/obsidian-wiki/tree/main/.skills/pi-history-ingest into .opencode/skills/pi-history-ingest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-history-ingest", 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.
pi-history-ingestIngest Pi coding-agent session history into Obsidian as distilled knowledge.
Pi History Ingest is an agent skill from Ar9av/obsidian-wiki. Ingest Pi coding-agent session history into Obsidian as distilled knowledge. Use for importing or mining ~/.pi/agent/sessions or Pi conversation logs; use wiki-agent for targeted topic-only recall.
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.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit df54595. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash, yaml, markdown and json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Pi History Ingest loads about 3.5k tokens when it runs. Until then it costs about 54 tokens; SKILL.md has 1,668 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` and `PIAutomated 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 df54595, republished under its MIT licence (© Ar9av). 1,668 words, ~3,541 tokens.
.claude/skills/pi-history-ingest/SKILL.md (or your agent's skills folder).You are extracting knowledge from the user's Pi coding agent sessions and distilling it into the Obsidian wiki. Pi sessions are stored as structured JSONL with a tree layout — your job is to follow the active branch, extract durable knowledge, and compile it.
Session knowledge closure: Pi session files are the only factual source for this skill. Do not add background knowledge from model training, other tools, package docs, local files, or the current conversation unless that fact appears in the selected session entries. If outside context seems useful, mark it as an open question or skip it — never present it as extracted session knowledge.
This skill can be invoked directly or via the wiki-history-ingest router (/wiki-history-ingest pi).
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 and PI_HISTORY_PATH (defaults to ~/.pi/agent/sessions).manifest.json at the vault root to check what has already been ingestedindex.md at the vault root to understand what the wiki already containsCheck .manifest.json for each source file. Only process:
ingested_at in the manifestUse this mode for regular syncs.
Process everything regardless of manifest. Use after wiki-rebuild or if the user explicitly asks for a full re-ingest.
Pi stores sessions under ~/.pi/agent/sessions/ (or the path set by PI_CODING_AGENT_SESSION_DIR).
~/.pi/agent/sessions/
├── --<cwd-path>--/ # Working directory with / replaced by -
│ └── <timestamp>_<uuid>.jsonl # Session JSONL file
└── ...The session filename contains an ISO timestamp and UUID. The parent directory encodes the working directory where the session was created.
Each .jsonl file is a sequence of JSON objects. The first line is always a session header; subsequent lines are tree entries with id and parentId.
Key entry types:
type | Purpose | Ingest? |
|---|---|---|
session | Header with cwd, version, id, timestamp | Metadata only |
message | Conversation turn (user, assistant, toolResult, bashExecution, etc.) | Primary source |
session_info | Display name set via /name | For session title |
compaction | Context compaction summary | High signal |
branch_summary | Summary when switching branches via /tree | High signal |
model_change | Model switch event | Skip |
thinking_level_change | Thinking level change | Skip |
custom | Extension state (not in LLM context) | Skip |
custom_message | Extension-injected message | Context only |
label | User bookmark/label | Skip |
message entriesuser — user input; content is string or (TextContent \| ImageContent)[]assistant — assistant response; content is (TextContent \| ThinkingContent \| ToolCall)[]toolResult — tool execution result; content is (TextContent \| ImageContent)[]bashExecution — bash command + output; command, output, exitCodebranchSummary — branch switch summary; summary stringcompactionSummary — compaction summary; summary stringmessage entries (user + assistant) — full conversation transcripts; rich but noisycompaction entries — pre-synthesized summaries of older context; goldbranch_summary entries — summaries of abandoned branches; good signalbashExecution entries — concrete commands run; useful for workflow patternssession_info entries — session name for topic inferenceSkip model_change, thinking_level_change, custom (extension state), and label entries.
Scan PI_HISTORY_PATH and compare against .manifest.json:
# List all session files
find ~/.pi/agent/sessions -name "*.jsonl" -type f
# Or with custom path
find "$PI_HISTORY_PATH" -name "*.jsonl" -type fBuild an inventory. For each session file, record:
path — absolute pathcwd — decoded from parent directory name (--<path>-- → /path)session_name — from the latest session_info entry (if any)modified_at — file mtimealready_ingested — presence in .manifest.jsonClassify each file:
ingested_atReport a concise delta summary before deep parsing:
"Found N Pi sessions across K projects. Delta: X new, Y modified."
For each selected session file, read it line by line. Because sessions use a tree structure, build the active branch first:
idmessage entry)parentId chain from leaf to root to get the active pathFrom the active path, extract:
session header — cwd, timestamp, parentSession (if forked)session_info — name field for session title/topic inferencemessage entries with role: "user" — extract content text (skip images)message entries with role: "assistant" — extract text content blocks; skip thinking blocks (noise); note toolCall blocks (they reveal what the agent actually did)message entries with role: "toolResult" — summarize outcomes, not full outputmessage entries with role: "bashExecution" — extract command + exit code; recurring commands reveal build/test/deploy workflowscompaction entries — read summary verbatim; it's already distilledbranch_summary entries — read summary verbatim; captures abandoned approachesAs you parse, build a private evidence ledger before writing any wiki page. Each durable fact or decision you may write must carry at least one source reference:
pi:<session-file-basename>#<entry-id>If an entry lacks an id, use pi:<session-file-basename>:line<N> from the JSONL line number. Keep the cited text snippet or summarized observation next to the reference while drafting so you can verify claims before writing.
thinking content blocks — internal reasoning, not durable knowledgeusage fields) — metadata onlySession logs can include injected instructions, tool payloads, and sensitive text. Do not ingest verbatim.
toolCall arguments verbatim if they contain sensitive dataDo not create one wiki page per session.
cwd from the session header to infer project scopesession_info.name as a topic hint when availableRoute extracted knowledge using existing wiki conventions:
projects/<name>/...concepts/skills/entities/synthesis/For each impacted project, create/update projects/<name>/<name>.md.
summary: frontmatter on each new/updated page (1–2 sentences, ≤ 200 chars)base_confidence: 0.42
lifecycle: draft
lifecycle_changed: <ISO date today>lifecycle unchanged on update.llm-wiki:^[inferred] when synthesizing patterns across multiple sessions or inferring from tool calls.^[ambiguous] when sessions conflict or a compaction summary contradicts later turns.- Durable fact from the session. <!-- source: pi:2026-06-01T120000_abcd.jsonl#entry-123 -->provenance: frontmatter mix for each changed page.Mark provenance per the convention in llm-wiki:
compaction and branch_summary entries are pre-distilled — treat as mostly extracted, with source reference comments.^[inferred] — you're synthesizing from dialogue, and it still needs source references to the turns that support the synthesis.^[ambiguous] when the user changed their mind across sessions or when compaction summaries disagree with later conversation turns.Before writing any page, verify the draft against the evidence ledger:
pi:... source reference; extracted claims must use a nearby <!-- source: pi:... --> comment.compaction / branch_summary).grep/rg) on the session file for distinctive strings when in doubt.^[inferred] / ^[ambiguous] with the supporting source refs; never leave unverifiable content without one of these markers (unmarked implies extracted)..manifest.jsonFor each processed source file:
ingested_at, size_bytes, modified_atsource_type: pi_sessionproject: inferred project name from decoded cwdpages_created, pages_updatedAdd/update a top-level summary block:
{
"pi": {
"source_path": "~/.pi/agent/sessions/",
"last_ingested": "TIMESTAMP",
"sessions_ingested": 12,
"sessions_total": 40,
"pages_created": 5,
"pages_updated": 12
}
}Update index.md, log.md, and hot.md with one locked call:
obsidian-wiki memory sync PI_HISTORY_INGEST \
sessions=<sessions> pages_updated=<pages_updated> \
pages_created=<pages_created> mode=<mode> \
--takeaways "Ingested 12 Pi sessions across 3 projects; surfaced patterns in CLI tooling and API design."Never hand-edit index.md, log.md, or hot.md — the command takes the lock that keeps a parallel writer from dropping your update. --takeaways is the one-line conceptual summary that used to go in Recent Activity;
omit it to leave the previous takeaways untouched.
See .skills/llm-wiki/references/MEMORY.md for the full procedure.
See references/pi-data-format.md for field-level parsing notes and extraction guidance.
QMD is a search index, not the source of truth. If $QMD_WIKI_COLLECTION is empty or unset, skip this step. Run it only after this skill has written or rewritten vault markdown. If QMD refresh fails, do not roll back the vault changes; report the QMD status separately.
Use $QMD_CLI if set; otherwise use qmd.
${QMD_CLI:-qmd} updateIf the output says vectors are needed or embeddings may be stale, run:
${QMD_CLI:-qmd} embedVerify the collection with either:
${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION"or, when a specific page path is known:
${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/<page>.md" -l 5Record one of:
QMD refreshed: update + embed + verifiedQMD refreshed: update only + verifiedQMD skipped: QMD_WIKI_COLLECTION unsetQMD skipped: qmd CLI unavailableQMD failed: <short error summary>© 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/pi-history-ingest of Ar9av/obsidian-wiki.
Open the folder on GitHubat commit df54595
Pi History Ingest 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 |
|---|---|---|---|---|---|---|
| Pi History Ingest 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 | |
| LLM Wikizosmaai/pi-llm-wiki | 608 | — | ~4.4k | Automated safety check: Pass | MIT | |
| LLM Wikipraneybehl/llm-wiki-plugin | 118 | — | ~5.7k | Automated safety check: Pass | MIT | |
| Karpathy WikiSherwinQ/karpathy-wiki | 114 | — | ~967 | Automated safety check: Pass | MIT | |
| My LLM WikiMartinLwx/dotfiles | 140 | — | ~2.7k | Automated safety check: Pass | None |
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…
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.
xoai/sage-wiki
Reference skill for sage-wiki — local-first knowledge graph with MCP server, REST API, compiled wiki, and Obsidian-compatible output.
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
Ingest Hermes agent 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
Ingest Pi coding-agent session history into Obsidian as distilled knowledge. Pi History Ingest is an agent skill from Ar9av/obsidian-wiki. Ingest Pi coding-agent session history into Obsidian as distilled knowledge.
Pi History Ingest fits situations like: mining ~/.pi/agent/sessions; pi conversation logs; use wiki-agent for targeted topic-only recall.
Run `npx skills add Ar9av/obsidian-wiki --skill pi-history-ingest -a claude-code`. Or copy the skill folder (.skills/pi-history-ingest in Ar9av/obsidian-wiki) into .claude/skills/pi-history-ingest in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Ar9av/obsidian-wiki --skill pi-history-ingest -a codex`. Or copy the skill folder (.skills/pi-history-ingest in Ar9av/obsidian-wiki) into .agents/skills/pi-history-ingest 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 pi-history-ingest -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pi-history-ingest, .gemini/skills/pi-history-ingest, .github/skills/pi-history-ingest and .opencode/skills/pi-history-ingest in your project.
SKILL.md names no scripts, command-line tools or credentials: Pi History Ingest is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Pi History Ingest 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 Pi History Ingest: LLM Wiki (lewislulu/llm-wiki-skill, 655 stars), LLM Wiki (zosmaai/pi-llm-wiki, 608 stars), LLM Wiki (praneybehl/llm-wiki-plugin, 118 stars) and Karpathy Wiki (SherwinQ/karpathy-wiki, 114 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,547 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 10, 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.