Whole-vault consistency pass over a markdown knowledge base (Obsidian vault, LLM-maintained wiki, docs folder, personal notes repo). Reads every note and reports broken markdown and wikilinks, missing or malformed frontmatter, missing reciprocal links, orphan notes, stale time-bound phrasing ("next sprint", "currently") in old notes, aged TBD markers, contradictions between decision records and later notes, inconsistent tags and emergent hub candidates - grouped by severity with a suggested fix each. Report first; edits only after the user approves. Use when the user says "lint my vault", "check my notes for broken links", "audit my knowledge base", "vault health check", "what's stale in my notes", "find orphan pages", or after a large reorganisation or bulk import.
79
92%
Does it follow best practices?
Impact
100%
1.21x1 of 3 eval scenarios. Add 2 more for a full score.
Passed
No findings from the security scan
A personal or team knowledge base rots quietly: links break when files move, notes lose their way in from the rest of the base, "next sprint" stops being true, and a later note silently contradicts a recorded decision. Small bases (up to a few hundred notes) fit in an agent's context, so this skill reads all of it, checks every rule below, and reports. It does not change anything until the user says which findings to act on.
Look at the base's root for a file describing its conventions: CLAUDE.md, AGENTS.md, README.md, SCHEMA.md, or an Obsidian .obsidian/ folder. Read it. Folder purposes, required frontmatter, and which folders are immutable or auto-generated all come from there. Where the schema and this skill disagree, the schema wins.
Without a schema, use these defaults and say so at the top of the report:
title. created is recommended, not required.decisions/ (or adr/). The one allowed edit is a status line marking it superseded.README.md / index.md files, and journal-style folders (daily/, journal/, logs/, dated files).node_modules/, anything the schema calls generated or mirrored.Glob **/*.md minus exclusions. Whole-file reads, not chunks. For each note track: path, parsed frontmatter, H1, outbound links in all three forms ([text](relative/path.md), [[wikilink]] / [[wikilink|alias]], and paths listed in a frontmatter links: field), tags, dates.
Resolve links the way the base does: relative markdown links against the note's folder; wikilinks by filename anywhere in the base (case-insensitive, .md optional, #heading suffix ignored). A link to a non-markdown file that exists (image, PDF) is valid.
Each finding: severity, path, one-sentence description, suggested fix.
High
links: entry that resolves to nothing. Suggest the likeliest intended target if a near-match exists (renamed or moved file).Medium
title), or unparseable YAML.links: field and its schema expects symmetry: A lists B, B does not list A.created or updated date is more than six weeks before today. Quote the phrase and the age.Low
title.Data-Platform, data_platform, data-platform). Suggest the majority form.Write the report (to the path the user names, or to chat). Top block:
old-folder/: the folder was probably renamed")Then findings grouped by severity, then by folder, one line each:
[HIGH] path/to/note.md: <what is wrong>. Fix: <suggested edit>.
Do not report exempt files as orphans, valid wikilinks as broken, or superseded decisions as contradictions. A noisy report gets ignored; a false positive costs more trust than a miss.
After the report, offer two batches:
Make approved edits in one pass. If the base is a git repository, offer a single commit for them; never push.
Never: