agentleFS
Ivy-Chen1999Ivy-Chen1999/llm-wiki-kit/skills/wiki-lint/SKILL.md

wiki-lint

Skill21 starsChanged 4 months agoMITView on GitHub

Audit and maintain the health of the Obsidian wiki. Use this skill when the user wants to check their wiki for issues, find orphaned pages, detect contradictions, identify stale content, fix broken wikilinks, or perform general maintenance on their knowledge base. Also triggers on "clean up the wiki", "what needs fixing", "audit my notes", or "wiki health check".

  • Reads credentials

We split this skill into the rules it gives an agent

28 rules. 0 are common, 14 are distinctive, and 14 are very specific to this project.

  • 0

    Common

    Most of the 29 edited versions we read keep these.

  • 14

    Distinctive

    This author's own choices. Worth a look.

  • 14

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Before scanning anything: follow the Retrieval Primitives table in llm-wiki/SKILL.md.

    line 14
  2. Very specific:

    When flat, all notes live in notes/ only.

    line 27
  3. Distinctive:

    When check #11 finds synthesis gaps, do NOT list all of them.

    line 32
  4. Distinctive:

    After the full lint report, ask the user one question:

    line 35
  5. Very specific:

    If yes → create the insight note using the template in wiki-query/SKILL.md, then update index.md and hot.md

    line 39
  6. Distinctive:

    If no → drop it completely, no todo created

    line 40
  7. Distinctive:

    Never offer more than one synthesis at a time

    line 41
  8. Very specific:

    Read index.md for the full page inventory

    line 46
  9. Very specific:

    Read log.md for recent activity context

    line 47
  10. Distinctive:

    Run these checks in order.

    line 51
  11. Distinctive:

    Add wikilinks in appropriate sections

    line 64
  12. Very specific:

    Check if a corresponding .md file exists

    line 73
  13. Distinctive:

    If the target was renamed, update the link

    line 76
  14. Distinctive:

    If the target should exist, create it

    line 77
  15. Distinctive:

    If the link is wrong, remove or correct it

    line 78
  16. Distinctive:

    Every page should have: title, category, tags, sources, created, updated.

    line 82
  17. Distinctive:

    Add missing fields with reasonable defaults

    line 89
  18. Very specific:

    Every page *should* have a summary: frontmatter field — 1–2 sentences, ≤200 chars.

    line 93
  19. Distinctive:

    Look for phrases like "however", "in contrast", "despite" that may signal existing acknowledged contradictions vs.

    line 118
  20. Distinctive:

    Add an "Open Questions" section noting the contradiction

    line 121
  21. Very specific:

    Verify index.md matches the actual page inventory.

    line 126
  22. Very specific:

    Check that summaries in index.md still match page content

    line 130
  23. Very specific:

    Check whether pages are being honest about how much of their content is inferred vs extracted.

    line 134
  24. Very specific:

    Drift: if the page has a provenance: frontmatter block, flag it when any field is more than 0.20 off from the recomputed value

    line 143
  25. Very specific:

    Run the cross-linker skill targeted at the fragmented tag — it will surface and insert the missing links

    line 164
  26. Distinctive:

    If a tag group is large (n > 15) and still fragmented, consider splitting it into more specific sub-tags

    line 165
  27. Very specific:

    Run the cross-linker skill first if affinity scores look stale (e.g., affinity: {} on a page with many wikilinks)

    line 192
  28. Very specific:

    Run /wiki-synthesize to automatically discover and fill the top gaps

    line 211

“Common” is measured: kept by at least 6 in 10 of the 29 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Wiki Lint — Health Audit

You are performing a health check on an Obsidian wiki. Your goal is to find and fix structural issues that degrade the wiki's value over time.

Before scanning anything: follow the Retrieval Primitives table in llm-wiki/SKILL.md. Prefer frontmatter-scoped greps and section-anchored reads over full-page reads. On a large vault, blindly reading every page to lint it is exactly what this framework is built to avoid.

Flat-Vault Variant (optional)

Some vaults use a single notes/ folder instead of category folders, expressing the category via frontmatter (category: concept|entity|reference|insight). The starter vault shipped with this kit works this way. When the vault is flat, apply these overrides before running any checks:

CheckDefault behaviorFlat-vault override
#7 Provenance Driftchecks ^[inferred] markers + synthesis/ folderSKIP if the vault does not use provenance markers
#9 Visibility Tagschecks _meta/taxonomy.mdSKIP if the vault does not use visibility tags
#10 Misc Promotion Candidatesscans misc/ folderSKIP if no misc/ folder exists
#11 Synthesis Gapslooks for pages in synthesis/ADAPT — look for concept pairs co-occurring ≥ 3 times with no category: insight note connecting them; suggest creating one in notes/

When flat, all notes live in notes/ only. Categories are expressed via frontmatter category: concept|entity|reference|insight, not via folders.

Also verify after every lint run: are _system/index.md and _system/hot.md up to date? If notes exist in notes/ that are missing from index.md, flag and offer to add them.

Synthesis Gap behavior (trigger 3 of 3): When check #11 finds synthesis gaps, do NOT list all of them. Instead:

  1. Rank gaps by co-occurrence count (highest first)
  2. Pick only the top 1
  3. After the full lint report, ask the user one question:

"[[notes/X]] and [[notes/Y]] co-occur N times but have no insight page connecting them — want me to draft one now?"

  • If yes → create the insight note using the template in wiki-query/SKILL.md, then update index.md and hot.md
  • If no → drop it completely, no todo created
  • Never offer more than one synthesis at a time

Before You Start

  1. Resolve the vault path (precedence, highest first): the OBSIDIAN_VAULT_PATH environment variable if set, else a .env in the current working directory (vault-scoped), else ~/.obsidian-wiki/config (global default).
  2. Read index.md for the full page inventory
  3. Read log.md for recent activity context

Lint Checks

Run these checks in order. Report findings as you go.

1. Orphaned Pages

Find pages with zero incoming wikilinks. These are knowledge islands that nothing connects to.

How to check:

  • Glob all .md files in the vault
  • For each page, Grep the rest of the vault for [[page-name]] references
  • Pages with zero incoming links (except index.md and log.md) are orphans

How to fix:

  • Identify which existing pages should link to the orphan
  • Add wikilinks in appropriate sections

2. Broken Wikilinks

Find [[wikilinks]] that point to pages that don't exist.

How to check:

  • Grep for \[\[.*?\]\] across all pages
  • Extract the link targets
  • Check if a corresponding .md file exists

How to fix:

  • If the target was renamed, update the link
  • If the target should exist, create it
  • If the link is wrong, remove or correct it

3. Missing Frontmatter

Every page should have: title, category, tags, sources, created, updated.

How to check:

  • Grep frontmatter blocks (scope to ^--- at file heads) instead of reading every page in full
  • Flag pages missing required fields

How to fix:

  • Add missing fields with reasonable defaults

3a. Missing Summary (soft warning)

Every page should have a summary: frontmatter field — 1–2 sentences, ≤200 chars. This is what cheap retrieval (e.g. wiki-query's index-only mode) reads to avoid opening page bodies.

How to check:

  • Grep frontmatter for ^summary: across the vault
  • Flag pages without it, but as a soft warning, not an error — older pages predating this field are fine; the check exists to nudge ingest skills into filling it on new writes.
  • Also flag pages whose summary exceeds 200 chars.

How to fix:

  • Re-ingest the page, or manually write a short summary (1–2 sentences of the page's content).

4. Stale Content

Pages whose updated timestamp is old relative to their sources.

How to check:

  • Compare page updated timestamps to source file modification times
  • Flag pages where sources have been modified after the page was last updated

5. Contradictions

Claims that conflict across pages.

How to check:

  • This requires reading related pages and comparing claims
  • Focus on pages that share tags or are heavily cross-referenced
  • Look for phrases like "however", "in contrast", "despite" that may signal existing acknowledged contradictions vs. unacknowledged ones

How to fix:

  • Add an "Open Questions" section noting the contradiction
  • Reference both sources and their claims

6. Index Consistency

Verify index.md matches the actual page inventory.

How to check:

  • Compare pages listed in index.md to actual files on disk
  • Check that summaries in index.md still match page content

7. Provenance Drift

Check whether pages are being honest about how much of their content is inferred vs extracted. See the Provenance Markers section in llm-wiki for the convention.

How to check:

  • For each page with a provenance: block or any ^[inferred]/^[ambiguous] markers, count sentences/bullets and how many end with each marker
  • Compute rough fractions (extracted, inferred, ambiguous)
  • Apply these thresholds:
    • AMBIGUOUS > 15%: flag as "speculation-heavy" — even 1-in-7 claims being genuinely uncertain is a signal the page needs tighter sourcing or should be moved to synthesis/
    • INFERRED > 40% with no sources: in frontmatter: flag as "unsourced synthesis" — the page is making connections but has nothing to cite
    • Hub pages (top 10 by incoming wikilink count) with INFERRED > 20%: flag as "high-traffic page with questionable provenance" — errors on hub pages propagate to every page that links to them
    • Drift: if the page has a provenance: frontmatter block, flag it when any field is more than 0.20 off from the recomputed value
  • Skip pages with no provenance: frontmatter and no markers — treated as fully extracted by convention

How to fix:

  • For ambiguous-heavy: re-ingest from sources, resolve the uncertain claims, or split speculative content into a synthesis/ page
  • For unsourced synthesis: add sources: to frontmatter or clearly label the page as synthesis
  • For hub pages with INFERRED > 20%: prioritize for re-ingestion — errors here have the widest blast radius
  • For drift: update the provenance: frontmatter to match the recomputed values

8. Fragmented Tag Clusters

Checks whether pages that share a tag are actually linked to each other. Tags imply a topic cluster; if those pages don't reference each other, the cluster is fragmented — knowledge islands that should be woven together.

How to check:

  • For each tag that appears on ≥ 5 pages:
    • n = count of pages with this tag
    • actual_links = count of wikilinks between any two pages in this tag group (check both directions)
    • cohesion = actual_links / (n × (n−1) / 2)
  • Flag any tag group where cohesion < 0.15 and n ≥ 5

How to fix:

  • Run the cross-linker skill targeted at the fragmented tag — it will surface and insert the missing links
  • If a tag group is large (n > 15) and still fragmented, consider splitting it into more specific sub-tags

9. Visibility Tag Consistency

Checks that visibility/ tags are applied correctly and aren't silently missing where they matter.

How to check:

  • Untagged PII patterns: Grep page bodies for patterns that commonly indicate sensitive data — lines containing password, api_key, secret, token, ssn, email:, phone: followed by an actual value (not a field description). If a page matches and lacks visibility/pii or visibility/internal, flag it as a likely mis-classification.
  • visibility/pii without sources:: A page tagged visibility/pii should always have a sources: frontmatter field — if there's no provenance, there's no way to verify the classification. Flag any visibility/pii page missing sources:.
  • Visibility tags in taxonomy: visibility/ tags are system tags and must not appear in _meta/taxonomy.md. If found there, flag as misconfigured — they'd be counted toward the 5-tag limit on pages that include them.

How to fix:

  • For untagged PII patterns: add visibility/pii (or visibility/internal if it's team-context rather than personal data) to the page's frontmatter tags
  • For missing sources:: add provenance or escalate to the user — don't auto-fill
  • For taxonomy contamination: remove the visibility/ entries from _meta/taxonomy.md

10. Misc Promotion Candidates

Find pages in misc/ that have accumulated enough project affinity to be promoted.

How to check:

  • Glob $OBSIDIAN_VAULT_PATH/misc/*.md
  • For each page, read the affinity frontmatter field
  • Flag pages where any single project's score ≥ 3

How to fix:

  • Run the cross-linker skill first if affinity scores look stale (e.g., affinity: {} on a page with many wikilinks)
  • To promote: move the page to projects/<project-name>/references/ (or another appropriate category), update its category frontmatter, remove promotion_status, and grep the vault for backlinks to update them

11. Synthesis Gaps

Identify high-value synthesis opportunities the wiki is missing — concept pairs that co-occur across many pages but have no synthesis/ page connecting them.

How to check:

  • List all pages in synthesis/ — collect the concept pairs each one already covers (from its [[wikilinks]] or title)
  • Pick 10-15 frequently linked concepts from concepts/ and entities/
  • For each pair, run a quick grep to count pages that link to both:
    grep -rl "\[\[ConceptA\]\]" "$OBSIDIAN_VAULT_PATH" --include="*.md" > /tmp/a.txt
    grep -rl "\[\[ConceptB\]\]" "$OBSIDIAN_VAULT_PATH" --include="*.md" > /tmp/b.txt
    comm -12 <(sort /tmp/a.txt) <(sort /tmp/b.txt) | wc -l
  • Flag pairs with co-occurrence ≥ 3 that have no existing synthesis page

How to fix:

  • Run /wiki-synthesize to automatically discover and fill the top gaps

Output Format

Report findings as a structured list:

## Wiki Health Report

### Orphaned Pages (N found)
- `concepts/foo.md` — no incoming links

### Broken Wikilinks (N found)
- `entities/bar.md:15` — links to [[nonexistent-page]]

### Missing Frontmatter (N found)
- `skills/baz.md` — missing: tags, sources

### Stale Content (N found)
- `references/paper-x.md` — source modified 2024-03-10, page last updated 2024-01-05

### Contradictions (N found)
- `concepts/scaling.md` claims "X" but `synthesis/efficiency.md` claims "not X"

### Index Issues (N found)
- `concepts/new-page.md` exists on disk but not in index.md

### Missing Summary (N found — soft)
- `concepts/foo.md` — no `summary:` field
- `entities/bar.md` — summary exceeds 200 chars

### Provenance Issues (N found)
- `concepts/scaling.md` — AMBIGUOUS > 15%: 22% of claims are ambiguous (re-source or move to synthesis/)
- `entities/some-tool.md` — drift: frontmatter says inferred=0.10, recomputed=0.45
- `concepts/transformers.md` — hub page (31 incoming links) with INFERRED=28%: errors here propagate widely
- `synthesis/speculation.md` — unsourced synthesis: no `sources:` field, 55% inferred

### Fragmented Tag Clusters (N found)
- **#systems** — 7 pages, cohesion=0.06 ⚠️ — run cross-linker on this tag
- **#databases** — 5 pages, cohesion=0.10 ⚠️

### Visibility Issues (N found)
- `entities/user-records.md` — contains `email:` value pattern but no `visibility/pii` tag
- `concepts/auth-flow.md` — tagged `visibility/pii` but missing `sources:` frontmatter
- `_meta/taxonomy.md` — contains `visibility/internal` entry (system tag must not be in taxonomy)

### Misc Promotion Candidates (N found)
Pages in misc/ that have ≥ 3 connections to a single project and are ready to be promoted:

| Page | Top Project | Affinity Score |
|---|---|---|
| `misc/web-martinfowler-articles-microservices.md` | `obsidian-wiki` | 4 |

### Synthesis Gaps (N found)
Concept pairs that co-occur frequently but have no synthesis page:

| Pair | Co-occurrence | Suggested Action |
|---|---|---|
| [[Caching]] × [[Consistency]] | 5 pages | Run `/wiki-synthesize` |
| [[Testing]] × [[Observability]] | 3 pages | Run `/wiki-synthesize` |

After Linting

Append to log.md:

- [TIMESTAMP] LINT issues_found=N orphans=X broken_links=Y stale=Z contradictions=W prov_issues=P missing_summary=S fragmented_clusters=F visibility_issues=V promotion_candidates=C synthesis_gaps=G

Offer to fix issues automatically or let the user decide which to address.

Download now (ZIP)

  • Other versions37 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 2

    1. chobizzy/llm-wiki★ 258% same
    2. nexuschains/operator-os★ 011% same

    Wrote their own version · 35

    1. AgriciDaniel/claude-obsidian★ 16ksame name
    2. kfchou/wiki-skills★ 183same name
    3. IssacW228/student-llm-wiki★ 173same name
    4. vanillaflava/llm-wiki-skills★ 65same name
    5. cookyman74/llmwiki-harness★ 34same name
    6. schub-tech/llm-ideation-wiki★ 11same name
    7. CarbeneAI/Forge★ 9same name
    8. CodePhobiia/claude-roblox-game-studio★ 9same name
    9. SantaJordan/gtm-engineer-starter★ 9same name
    10. crabin/llm-wiki★ 8same name

    25 more not listed

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • Used alongsideProjects with it also use wiki-init, wiki-review and 2 more.

    Other files people use alongside this one.

    Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
    • bozhouDevSkill

      wiki-init

      Use when bootstrapping a new personal wiki for any knowledge domain — research, codebase documentation, reading notes, competitive analysis, or any long-term knowledge accumulation project.

      Also in 5 projects that use this

    • justvinhhereSkill

      wiki-review

      Use when the user runs /review, says "show pending changes", "what's uncommitted", or wants an audit of uncommitted wiki edits before they land in history. Narrates uncommitted changes, flags structural issues scoped to those changes, and commits them with a conventional subject. Fully automatic.

      Also in 4 projects that use this

    • javatarzSkill

      wiki

      Access and manage the local GitHub Wiki clone. Use this skill when you need to read wiki content (architecture, design docs, guides), update wiki documentation, check wiki status, or push wiki changes. The wiki contains high-level system design and architectural documentation.

      Also in 4 projects that use this

    • HK-hubSkill

      defuddle

      Extract clean markdown content from web pages using Defuddle CLI, removing clutter and navigation to save tokens. Use instead of WebFetch when the user provides a URL to read or analyze, for online documentation, articles, blog posts, or any standard web page.

      Also in 5 projects that use this

  • In this repository19 other files it gives its agents.

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.