From david-skills
Audits Obsidian wiki vaults for broken links, orphan pages, tag compliance, duplicates, stubs, bloated pages, and content hygiene issues.
npx claudepluginhub thedavidweng/skillsThis skill uses the workspace's default tool permissions.
Audit an Obsidian wiki vault following Wikipedia-style conventions. Covers inline linking, tag compliance, duplicate detection, orphan pages, stub tracking, and content hygiene.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Processes PDFs: extracts text/tables/images, merges/splits/rotates pages, adds watermarks, creates/fills forms, encrypts/decrypts, OCRs scans. Activates on PDF mentions or output requests.
Share bugs, ideas, or general feedback.
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|David]] [[slug|Weng]] — should be [[slug|David Weng]]. 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.