obsidian-wiki-builder — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited obsidian-wiki-builder (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 pyyaml and Python 3.8+. Also requires rlm-factory plugin installed.
pip install -r requirements.txtStatus: Active Author: Richard Fremmerlid Domain: Obsidian Wiki Engine
Transforms raw source documents (registered via wiki_sources.json) into Karpathy-style wiki nodes inside the designated wiki_root. Each concept gets its own {concept}.md node with wikilinks, cross-references, and an RLM summary layer.
{wiki_root}/
wiki/
_index.md ← master concept index
_toc.md ← table of contents
_{cluster}.md ← per-topic cluster page
{concept}.md ← individual wiki node
rlm/
{concept}/
summary.md ← 1-5 sentence distilled summary
bullets.md ← key idea bullets
deep.md ← full multi-pass distillation
meta/
wiki_sources.json ← raw source registry (created by wiki-init)
config.yaml ← wiki settings
agent-memory.json ← stale file trackingwiki_builder.py runs a 3-step pipeline internally:
ingest.py → concept_extractor.py → wiki node formattinginto one authoritative node (the Karpathy "compile" step), improves cluster assignment via keyword extraction
.md fileswith wikilinks, cluster pages, _index.md, and _toc.md
When two source files (e.g. arch-docs/auth.md and research/oauth.md) produce the same concept slug, they are merged into one wiki node that:
source_files frontmattermulti_source: true for identificationThis implements the core Karpathy "compile" metaphor: N raw files → M concept nodes (M ≤ N).
Note about repo-scoped inspection
python ./scripts/wiki_builder.py --wiki-root /path/to/wiki-rootpython ./scripts/wiki_builder.py --wiki-root /path/to/wiki-root --source arch-docspython ./scripts/wiki_builder.py --wiki-root /path/to/wiki-root \
--rlm-cache-dir /path/to/project/.agent/learning/rlm_wiki_cachepython ./scripts/wiki_builder.py --wiki-root /path/to/wiki-root --dry-runEach concept node uses this structure:
---
concept: {concept_name}
source: {source_label}
source_file: {relative_path}
wiki_root: {wiki_root}
generated_at: {timestamp}
cluster: {cluster_name}
---
# {Concept Name}
{1-sentence RLM summary}
## Key Ideas
- {bullet}
- {bullet}
## Details
{full content, truncated to 800 tokens if needed}
## See Also
- [[{related_concept_1}]]
- [[{related_concept_2}]]
## Raw Source
- `{source_label}` → `{source_file}`rlm_wiki_raw_sources_manifest.json)Canonical location: .agent/learning/rlm_wiki_raw_sources_manifest.json (mirrors rlm-factory's .agent/learning/rlm_profiles.json convention).
Managed by raw_manifest.py via the Guided Discovery agent during /wiki-init:
{
"namespace": "my-project",
"wiki_root": "/Users/me/vault/wiki-root",
"sources": {
"daily-notes": {
"path": "/Users/me/vault/notes",
"label": "daily-notes",
"extensions": [".md"],
"excludes": ["_archive", "*.tmp"],
"description": "Daily journal and quick capture notes"
},
"arch-docs": {
"path": "/Users/me/docs/architecture",
"label": "arch-docs",
"extensions": [".md", ".txt"],
"excludes": [],
"description": "Architecture decision records and design docs"
}
},
"global_excludes": ["_archive", "*.tmp", "__pycache__"]
}/wiki-init completes source registration/wiki-distill to inject fresh RLM summariesagent-memory.json shows diffs)raw_manifest.py — WikiSourceConfig loader (mirrors RLMConfig)ingest.py — raw file parsing and normalizationwiki_builder.py — Karpathy node formatter and linkerdistill_wiki.py — cheap-model distillation wrapper~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.