obsidian-wiki-linter — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited obsidian-wiki-linter (Agent Skill) and scored it 87/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 3 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 3 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Requires Python 3.8+ and at least one CLI installed: copilot, claude, or gemini.
pip install -r requirements.txtStatus: 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-rootpython ./scripts/lint_wiki.py --wiki-root /path/to/wiki-root --sample 30python ./scripts/lint_wiki.py --wiki-root /path/to/wiki-root --engine claudepython ./scripts/lint_wiki.py --wiki-root /path/to/wiki-root --dry-runSame strict cheap-model chain as obsidian-rlm-distiller:
1. copilot → gpt-5-mini (Paid, AI Credits)
2. claude → claude-haiku-4-5 (fallback, Paid)
3. gemini → gemini-3-flash-preview (final fallback, Paid)
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 logic~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.