> Sync the current project's knowledge into the Obsidian wiki. Use this skill from any project when the user says "update wiki", "sync to wiki", "save this to my wiki", "update obsidian", or wants to distill what they've been working on into their knowledge base. This is the cross-project skill that lets you push knowledge from wherever you are into the vault. Accepts inline named-vault routing like "@work update wiki" via the shared Config Resolution Protocol.
npx skills add https://github.com/Ar9av/obsidian-wiki --skill wiki-update
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.
llm-wiki/SKILL.md (inline @name override → walk up CWD for .env → ~/.obsidian-wiki/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> HEAD
git 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.
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 summaries
The 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:
{
"projects": {
"<project-name>": {
"source_cwd": "/absolute/path/to/project",
"last_synced": "TIMESTAMP",
"last_commit_synced": "abc123f",
"pages_in_vault": ["projects/<project-name>/<project-name>.md", "..."]
}
}
}
index.mdAdd entries for any new pages created.
log.mdAppend:
- [TIMESTAMP] WIKI_UPDATE project=<project-name> pages_updated=X pages_created=Y source_cwd=/path/to/project
hot.mdRead $OBSIDIAN_VAULT_PATH/hot.md (create from the template in wiki-ingest if missing). Rewrite Recent Activity with what was just synced — last 3 operations max. Update Active Threads if this project is an ongoing focus. Update Key Takeaways with the most important architectural insight or decision surfaced during this sync. Update updated timestamp.
Write conceptually: "Synced obsidian-wiki — added wiki-capture and wiki-research skills, core new capabilities are autonomous web research and conversation capture."
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} update
If the output says new hashes need vectors, or if pages were created/updated and embeddings may be stale, run:
${QMD_CLI:-qmd} embed
Verify 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 5
If 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.Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks
Comprehensive PDF manipulation toolkit for extracting text and tables, creating new PDFs, merging/splitting documents, and handling forms. When Claude needs to fill in a PDF form or programmatically process, generate, or analyze PDF documents at scale.
Presentation creation, editing, and analysis. When Claude needs to work with presentations (.pptx files) for: (1) Creating new presentations, (2) Modifying or editing content, (3) Working with layouts, (4) Adding comments or speaker notes, or any other presentation tasks
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.
Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.
Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.
Use this skill any time a .pptx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates, layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx filename, regardless of what they plan to do with the content afterward. If a .pptx file needs to be opened, created, or touched, use this skill.
Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax. Use when working with .md files in Obsidian, or when the user mentions wikilinks, callouts, frontmatter, tags, embeds, or Obsidian notes.
Take ar9av/wiki-update from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.