plugins/obsidian-wiki-engine/skills/obsidian-wiki-linter/SKILL.md
Runs a semantic health check over the Obsidian LLM wiki using the cheapest available LLM CLI. Finds inconsistencies, missing concepts, stale articles, connection candidates, and new article suggestions. Writes a structured report to meta/lint-report.md. Use when the wiki is large enough to have quality drift, or as a periodic maintenance step.
npx skillsauth add richfrem/agent-plugins-skills obsidian-wiki-linterInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Requires Python 3.8+ and at least one CLI installed: copilot, claude, or gemini.
pip install -r requirements.txt
Status: Active Author: Richard Fremmerlid Domain: Obsidian Wiki Engine
Performs a semantic health check over the LLM wiki — the step Karpathy calls
"linting." Unlike audit.py (which checks structural coverage: orphans, missing
summaries, broken wikilinks), this skill uses an LLM to analyze semantic quality:
contradictions, knowledge gaps, and connection opportunities that only emerge once
the wiki is large enough to have internal consistency requirements.
| Category | What it finds | |:---------|:--------------| | Inconsistencies | Contradicting claims between two concept pages | | Missing Concepts | Topics implied by existing articles but not yet written | | Stale Articles | Pages with vague, outdated, or thin content | | Connection Candidates | Concept pairs that should have wikilinks but don't | | New Article Suggestions | Topics the wiki should cover based on its current scope |
python ./scripts/lint_wiki.py --wiki-root /path/to/wiki-root
python ./scripts/lint_wiki.py --wiki-root /path/to/wiki-root --sample 30
python ./scripts/lint_wiki.py --wiki-root /path/to/wiki-root --engine claude
python ./scripts/lint_wiki.py --wiki-root /path/to/wiki-root --dry-run
Same strict cheap-model chain as obsidian-rlm-distiller:
1. copilot → gpt-5-mini (free with Copilot Pro)
2. claude → claude-haiku-4-5 (fallback)
3. gemini → gemini-3-flash-preview (final fallback)
Report is written to {wiki-root}/meta/lint-report.md with YAML frontmatter:
generated_at: "2026-04-16T..."
engine: "claude"
model: "claude-haiku-4-5"
Followed by five sections:
--save-as outputs back — lint first to know what gaps to fill/wiki-rebuild (after ingest, distill, build)| audit.py | lint_wiki.py |
|:-----------|:---------------|
| Structural: missing summaries, broken links, orphans | Semantic: contradictions, gaps, stale content |
| Always fast, no LLM needed | Requires LLM call |
| Run before every /wiki-query | Run periodically (weekly or post-rebuild) |
| Exit code 1 on critical issues | Always exits 0 (report-only) |
lint_wiki.py — semantic health check orchestratoraudit.py — structural coverage checker (complementary)distill_wiki.py — shares engine detection logictools
Ingests repository files into the ChromaDB vector store. Builds or updates the vector index from a manifest or directory scan using ingest.py. Use when new files need to be indexed or the vector store is out of date. <example> user: "Index these new plugin files into the vector database" assistant: "I'll use vector-db-ingest to add them to the vector store." </example> <example> user: "The vector store is missing recent files -- update it" assistant: "I'll use vector-db-ingest to re-index the changes." </example>
data-ai
Removes stale and orphaned chunks from the ChromaDB vector store for files that have been deleted or renamed. Use after files are removed or moved to keep the vector index in sync with the filesystem. <example> user: "Clean up the vector store after I deleted some files" assistant: "I'll use vector-db-cleanup to remove orphaned chunks." </example> <example> user: "The vector database has chunks for files that no longer exist" assistant: "I'll run vector-db-cleanup to prune them." </example>
testing
Audit Vector DB coverage -- compares the live filesystem manifest against the ChromaDB index to identify coverage gaps.
development
3-Phase Knowledge Search strategy for the RLM Factory ecosystem. Auto-invoked when tasks involve finding code, documentation, or architecture context in the repository. Enforces the optimal search order: RLM Summary Scan (O(1)) -> Vector DB Semantic Search -> Grep/Exact Match. Never skip phases.