From david-skills
Audits an Obsidian wiki vault for broken links, orphan pages, tag compliance, duplicate pages, and content hygiene. Useful for maintaining Wikipedia-style wikis.
How this skill is triggered — by the user, by Claude, or both
Slash command
/david-skills:wiki-auditThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Audit an Obsidian wiki vault following Wikipedia-style conventions. Covers inline linking, tag compliance, duplicate detection, orphan pages, stub tracking, and content hygiene.
Audit an Obsidian wiki vault following Wikipedia-style conventions. Covers inline linking, tag compliance, duplicate detection, orphan pages, stub tracking, and content hygiene.
Read these before starting:
system/wiki/schema.md — linking rules, tag taxonomy, article formatsystem/wiki/workflows.md — lint checkssystem/wiki/index.md — page catalogScan all .md files under wiki/. For each page, extract:
sources/ links)Goal: Find terms in body text that reference other wiki pages but aren't wikilinked.
Process:
## Sources sections)[[wikilinks]]Fix pattern: [[slug|matched text]] — use display text matching what's in the body.
Pitfall: Watch for split links like [[slug|Jane]] [[slug|Doe]] — should be [[slug|Jane Doe]]. Detect by checking adjacent wikilinks to same target.
Check for:
## Related or ## See also sections (must be inline instead)inbox/ references in ## Sources sections (inbox is temporary)## 2024-01) in non-timeline pagesschema.mdmaps/ (e.g., all-family.md, all-teachers.md, all-university.md).[[target]] where target doesn't exist as a pagestub-index.md for tracking)maps/ and change kind: mapGroup orphan pages by their tags, then create index pages in maps/ that link to all pages sharing a tag. This fixes orphans in bulk and provides browsable navigation.
maps/all-family.md → all `family` tagged pages
maps/all-teachers.md → all `teacher` tagged pages
maps/all-university.md → all `university` tagged pages
Pattern: Index pages are kind: map, grouped by relationship or context. Each entry is a [[slug|Display Name]] wikilink. Include a ## Sources section (even if empty) for schema compliance.
Batch count: Check orphan count before and after to measure impact.
Topic pages with >15 outbound links and <10 prose lines are likely index/map pages. Move them to maps/ and change kind: map. This keeps topics/ for substantive content and maps/ for navigation.
Also: When moving files, update kind in frontmatter. Slug stays the same so existing wikilinks don't break.
When two files represent the same entity (same person/project/place), merge into one canonical file and delete the other.
write_file to overwrite the canonical file entirely.rm the non-canonical file.git ls-files to know which file is tracked before deciding which to keep as canonical.git add the modified canonical file + git rm the deleted duplicate.After merge, report what was kept vs discarded:
Merged: li-si.md (kept)
Deleted: li-si.md
Unique items merged: ID number, 2 emails, WeChat ID
When many orphan pages share a tag, create a tag index page in maps/ to link them all at once. This is faster and more maintainable than adding inline links one by one.
maps/all-family.md, maps/all-teacher.md, maps/all-university.md).kind: map in frontmatter. Body groups entries by sub-category with [[slug|Display Name]] links. Include relationship or context annotations.Index pages go under wiki/maps/, not maps/. If using write_file, the path must include the full wiki/ prefix (e.g., {{vault_root}}/wiki/maps/all-family.md).
---
layer: wiki
kind: map
tags: [map]
status: active
---
# Family Index
An index of family members.
## Paternal
- [[zhang-san|张三]] — father
## Maternal
- [[li-si|李四]] — mother
A tag index page IS a compiled truth: it compiles scattered individual pages into a browsable, grouped overview. The index page itself becomes the canonical reference for "all X in the vault."
For pages with ## Related:
## Related sectioninbox/ to appropriate sources/ subdirectoryinbox/ paths with sources/ paths in ## SourcesLayer tags (from kind): person | project | place | topic | concept | map
Domain tags: broad domains relevant to the wiki owner (e.g., ai, media, startup, writing)
Context tags: relationship or institutional context (e.g., family, teacher, school)
Do NOT use: tech stack tags, one-off tags, page-name-as-tag. If an unfamiliar tag appears, report it — do NOT auto-delete.
zhang-san, li-si)jane-doe, john-smith)Generate a categorized report:
After fixes, update system/wiki/index.md and commit.
Schema defines only two status values: draft (stub, no content) and active (has substantive content). If pages have non-standard values (unknown, inactive, archived, etc.), batch-fix:
activedraftUse sed or a Python script to replace. Always re-read the file after to verify YAML validity.
npx claudepluginhub thedavidweng/skillsAudits markdown wiki for broken links, orphan pages, contradictions, stale claims, missing frontmatter, coverage gaps; generates categorized report with fixes after ingests.
Health checks an Obsidian wiki vault for orphan pages, dead wikilinks, frontmatter gaps, stale claims, missing cross-references, and empty sections. Optionally generates Dataview dashboards and canvas maps. Runs on phrases like "lint", "health check", "clean up wiki", "wiki audit".
Wiki maintenance — lint broken links, merge near-duplicates, upgrade confidence, flag stale pages via freshness tiers, gap analysis, concept synthesis. Use on: 'wiki maintenance', 'wiki cleanup', 'fix wiki', 'wiki health', 'check wiki', 'consolidate wiki'.