obsidian-rlm-distiller — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited obsidian-rlm-distiller (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 Replaces: rlm-distill-ollama (fully deprecated)
Distills registered wiki source files into the three-layer RLM summary structure inside {wiki_root}/rlm/{concept}/. Delegates work to the cheapest available LLM CLI — never a local Ollama server.
1. copilot CLI available? → use gpt-5-mini (fastest, Paid - AI Credits)
2. claude CLI available? → use claude-haiku-4-5 (fallback, Paid)
3. gemini CLI available? → use gemini-3-flash-preview (final fallback, Paid)
4. none found → exit with instructions
rlm-distill-ollamais fully deprecated. Onlyrlm-distill-agentpointing at cheap cloud models is supported.
{wiki_root}/rlm/{concept}/
summary.md ← 1-5 sentence distilled summary
bullets.md ← key idea bullets (6-10 points)
deep.md ← full multi-pass distillationpython ./scripts/distill_wiki.py --wiki-root /path/to/wiki-rootpython ./scripts/distill_wiki.py --wiki-root /path/to/wiki-root --source arch-docspython ./scripts/distill_wiki.py --wiki-root /path/to/wiki-root --engine claude
python ./scripts/distill_wiki.py --wiki-root /path/to/wiki-root --engine gemini
python ./scripts/distill_wiki.py --wiki-root /path/to/wiki-root --engine copilotpython ./scripts/distill_wiki.py --wiki-root /path/to/wiki-root \
--rlm-cache-dir /path/to/project/.agent/learning/rlm_wiki_cachepython ./scripts/distill_wiki.py --wiki-root /path/to/wiki-root --dry-rundistill_wiki.py calls shutil.which() for each CLI in priority order. The first one found and authenticated is used for the entire batch:
ENGINE_PRIORITY = [
("copilot", "gpt-5-mini"),
("claude", "claude-haiku-4-5"),
("gemini", "gemini-3-flash-preview"),
]distill_wiki.py writes summaries directly into its own RLM cache directory. No cross-plugin script calls are made (ADR-001 compliant).
Default cache: {wiki-root}/rlm/{concept}/
To colocate with rlm-factory under .agent/learning/, pass --rlm-cache-dir:
python ./scripts/distill_wiki.py --wiki-root /path/to/wiki-root \
--rlm-cache-dir /path/to/project/.agent/learning/rlm_wiki_cacheThe cache location is determined by configuration in .agent/learning/rlm_profiles.json (the cache key of the wiki profile) — not by hard-coded cross-plugin paths.
/wiki-ingest populates new wiki nodes/wiki-query for optimal recall/wiki-rebuild full pipelinedistill_wiki.py — cheap-model fallback orchestratorraw_manifest.py — WikiSourceConfig loaderaudit.py — identifies stale/missing RLM summaries~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.