wiki-lint
Skill1 starsChanged 47 days agoMITView on GitHub
Check an LLM wiki's health and fix what it finds: broken links, leaked credentials, orphaned and unreferenced pages, missing frontmatter or descriptions, stale pages, oversized pages and duplicate titles. Ships a zero-dependency Python checker for markdown folders ([[wikilinks]] and relative links, Obsidian-compatible). Use on a schedule, before committing or merging wiki changes, after a refactor, or when an agent reports it cannot find a page.
- Reads credentials
42 other projects use a version of this.
Adopted by
Most recently taken up by
- Ar9av/obsidian-wikitheir own version, first seen Nov 8, 2026
- ggoosen/Digital-Workforcetheir own version, first seen Nov 8, 2026
- barakgut/llm-wikitheir own version, first seen Nov 1, 2026
- chobizzy/llm-wikitheir own version, first seen Nov 1, 2026
- wareagledusty/wiki-federation-starter-kittheir own version, first seen Nov 1, 2026
- leiverkus/research-superpowerstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use wiki-status, cross-linker and 8 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.
nexuschainsSkillwiki-status
Reports the current state of the wiki vault — page counts, category breakdown, hub pages, orphans, stale entries, and a delta showing what has changed since the last ingest. Use this skill when the operator asks "what's the status", "wiki dashboard", "how many pages", "what's stale", "what's been ingested", "show me the delta", or "wiki health overview". Also surfaces structural insights (top hubs, fragmented clusters, bridge pages) when the operator asks "wiki insights", "what's central", or "show me the hubs". Read-only: this skill reports and recommends; it does not modify any files.
Also in 5 projects that use this
nexuschainsSkillcross-linker
Scans the wiki vault and adds missing [[wikilinks]] between pages that are related but not yet connected. Use this skill when the operator says "link my pages", "find missing links", "cross-reference the wiki", "connect my wiki", "add wikilinks", or after any large ingest to weave new pages into the existing knowledge graph. Also trigger when orphaned pages need connecting or when wiki-lint reports fragmented tag clusters. This is a write-heavy skill — it modifies page files to insert links, unlike wiki-lint which only reports.
Also in 4 projects that use this
Ivy-Chen1999Skillwiki-synthesize
Systematically discover synthesis opportunities across the Obsidian wiki — pairs or clusters of concepts that co-occur frequently across pages but have no synthesis page connecting them. Creates new synthesis/ pages that draw explicit cross-cutting conclusions. Use when the user says "synthesize my wiki", "find connections", "what concepts keep coming up together", "/wiki-synthesize", or after a large ingest when the vault has grown significantly.
Also in 4 projects that use this
bozhouDevSkillwiki-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 7 projects that use this
Ivy-Chen1999Skillwiki-research
Autonomously research a topic via multi-round web search, synthesize findings, and file structured results into the Obsidian wiki. Use this skill when the user says "/wiki-research [topic]", "research X", "find everything about Y", "do a deep dive on Z", "autonomous research on X", or wants comprehensive, web-sourced knowledge on a topic filed directly into their wiki.
Also in 4 projects that use this
bozhouDevSkillwiki-update
Use when revising existing wiki pages because knowledge has changed, a new piece of information updates or contradicts existing content, or the user wants to directly edit wiki content with LLM assistance.
Also in 7 projects that use this
- +1 more from nexuschains
- +3 more from Ivy-Chen1999
Other versions42 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 42
- AgriciDaniel/claude-obsidian★ 16ksame name
- Ar9av/obsidian-wiki★ 3.7ksame name
- kfchou/wiki-skills★ 189same name
- IssacW228/student-llm-wiki★ 173same name
- vanillaflava/llm-wiki-skills★ 65same name
- cookyman74/llmwiki-harness★ 34same name
- Ivy-Chen1999/llm-wiki-kit★ 21same name
- schub-tech/llm-ideation-wiki★ 11same name
- CarbeneAI/Forge★ 9same name
- CodePhobiia/claude-roblox-game-studio★ 9same name
32 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.
In this repository11 other files it gives its agents.
- wiki-captureSkill
- wiki-conflictsSkill
- wiki-ingestSkill
- wiki-orientSkill
- wiki-querySkill
- wiki-recordSkill
- wiki-refactorSkill
- wiki-reviewSkill
- wiki-setupSkill
- wiki-sharedSkill
- wiki-verifySkill
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 4 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 33 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 52
Never create an empty stub just to clear the error.
- Very specific: line 54
Frontmatter: Add the missing description (one line saying what the page answers or holds, not the question that started it), title, or a …
- Distinctive: line 110
Do not fix a broken link by deleting the sentence around it.
- Very specific: line 112
Do not bump updated on a stale page without rereading it.
- Distinctive: line 114
Do not batch hundreds of fixes into one change.
- Distinctive: line 118
If your viewer resolves differently, trust your viewer and report the mismatch.
“Common” is measured: kept by at least 6 in 10 of the 33 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.
Files
Lint a wiki
A wiki kept by agents decays in predictable ways: links point at pages that were renamed or never written, new pages nobody links to, summaries that fall behind the pages they summarize, and pages that grow until nobody reads them. Linting finds these mechanically so the fixing can be deliberate.
Two findings are defects: a broken link and a credential-shaped string. Everything else in the report is information that needs a judgment call, not an automatic fix.
Run the check
Markdown folder (Obsidian vault, git repo, any directory of .md files):
python3 scripts/wiki_lint.py path/to/wiki # readable report
python3 scripts/wiki_lint.py path/to/wiki --json # for you to parsescripts/ is inside this skill's folder. Python 3.8 or later, no packages. Options:
--stale-days 90, --max-lines 200, --strict (also fail on frontmatter problems),
--today 2026-09-28 (measure ages from that date instead of the system clock).
Hosted wiki over MCP: call the host's health tool instead (on Dexio, wiki_health). It
reports the same categories.
Exit status 1 means at least one broken link or possible secret, so the same command works as a pre-commit hook or a CI step.
Fix in this order
- Secrets. The report shows where and what kind, never the value. Remove the value from
the page at once, replace it with where the credential lives ("in the deploy host's
.env"), and tell a person: the value is still in history, so the credential has to be rotated. A placeholder or an example key the checker flags can be reworded so it no longer looks like one. - Broken links. For each, decide which is true:
- The page was renamed or moved: point the link at the new path.
- The page should exist: it appears in
wanted, ranked by how many pages link to it. A target wanted by three or more pages usually deserves a real page; write it withwiki-record. - The link was speculative: remove the brackets and keep the words. Never create an empty stub just to clear the error. A stub is a broken link that no longer shows up.
- Frontmatter. Add the missing
description(one line saying what the page answers or holds, not the question that started it),title, or a validupdateddate. The description is what makes the catalog useful, so write it for someone deciding whether to open the page. - Orphaned pages (no links in or out). Read the page. If it still matters, link it from
the one or two pages a reader would come from and link out from it to its neighbors. If it
is superseded, archive it (
wiki-refactor). If it is a passing mention, fold its content into the page that covers the topic and archive it. - Unreferenced pages (links out, none in). Same as orphans, lower priority: search finds them, browsing does not.
- Stale pages. "Unchanged for N days while pages it links to changed" is a hint, not a
verdict. Reread the page against the newer pages and the original sources. If it still
holds, bump
updatedand say in the change note that you rechecked it. If not, fix it or record the conflict (wiki-conflicts). A page past its ownstale_afterdate must be rechecked before anyone relies on it. - Long pages. Split past about 200 lines (
wiki-refactor). Long pages are where contradictions hide, because nobody rereads the whole thing before appending. - Duplicate titles. Two pages with one title usually means two pages on one topic.
Merge them (
wiki-refactor), or retitle one so each title says what is different.
Then run the check again and confirm zero broken links and zero secrets before you finish.
Other uses of the script
python3 scripts/wiki_lint.py path/to/wiki --catalog # every page and its description
python3 scripts/wiki_lint.py path/to/wiki --links-to concepts/llm-wiki # before a rename
python3 scripts/wiki_lint.py path/to/wiki --verify-queue 10 # what to fact-check next--catalog prints the catalog from page descriptions, grouped by folder. Generate it when
you need an index instead of keeping index.md by hand, which drifts out of sync and is the
file every parallel writer collides on. --verify-queue ranks pages for wiki-verify.
Automate it
Pre-commit hook in a git-backed wiki (.git/hooks/pre-commit, made executable):
#!/bin/sh
python3 path/to/wiki_lint.py . >/dev/null || { python3 path/to/wiki_lint.py .; exit 1; }GitHub Actions:
- uses: actions/checkout@v4
- run: python3 skills/wiki-lint/scripts/wiki_lint.py wikiA scheduled agent run is better than either for the judgment calls: run the check weekly, fix broken links and frontmatter, and report orphans, stale pages and long pages to a person rather than deleting anything.
Pitfalls
- Do not fix a broken link by deleting the sentence around it. The sentence is usually right; only the target is wrong.
- Do not bump
updatedon a stale page without rereading it. That turns a warning into a false claim that the page was checked. - Do not batch hundreds of fixes into one change. Group by kind (all link fixes, then all descriptions) so a reviewer can read the diff and a bad fix is easy to revert.
- Resolution rules differ between tools. This checker resolves the exact path from the wiki root, then the path relative to the linking page, then the one page with that file name. If your viewer resolves differently, trust your viewer and report the mismatch.
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
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.

