Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add wenlan-app/wenlan --skill distillgit clone --depth 1 https://github.com/wenlan-app/wenlanWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/wenlan-app/wenlan/distill)<a href="https://agentmods.dev/skills/wenlan-app/wenlan/distill"><img src="https://agentmods.dev/badge/skills/wenlan-app/wenlan/distill/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/wenlan-app/wenlan/distill"><img src="https://agentmods.dev/badge/skills/wenlan-app/wenlan/distill.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00051 | $0.03781 |
| Opus 5.5 | $0.00020 | $0.01512 |
| Sonnet 5.5 | $0.00010 | $0.00756 |
| Haiku 4.5 | $0.00005 | $0.00378 |
Grade B, and why
distill scanned grade B with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Reads agent configuration directoriesmediumAgent snooping
.claude/, .codex/, .gemini/ hold keys, settings and other credentials a mod has no legitimate need for.
resolver="$(find "$HOME/.codex/plugins/cache" -path '*/wenlan/*/bin/resolve-space.sh' 2>/dev/null | head -1)" Copies of this mod
1 near-identical copy found in the catalogue:
- distill — 89% identical, 440 lines differ
How it starts
The opening of the file, as written. The whole thing — 418 lines — stays where its author put it; the contents beside it link to each section on GitHub.
/distill
Force a distillation pass now. The daemon's background distill cycles run
on its own clock; /distill is the explicit user-triggered pass.
Mental model
Distillation is four operations bundled into one flow:
- emerge — cluster new memories into new pages
- absorb — assign orphan memories to existing pages, propose new pages from topics that 2+ existing pages link to but no page is named for
- refresh — regenerate stale pages from their source memories (only when the user has not edited the page; pages you have touched stay locked)
- merge — combine duplicate pages flagged by the daemon's global review
The default flow runs all four. The rebuild verb is a destructive opt-in
that overrides the lock on a single page.
Single flow
One POST to the daemon. Response splits into:
pages_created/created_ids: pages the daemon synthesized itself (only when daemon has an LLM).pending: clusters the daemon couldn't finish. The agent synthesizes each in this session and POSTs them back to/api/pages.
Trigger timing is the only thing that differs between background distill cycles and this skill. Code path is the same; daemon hands back clusters when it can't synthesize; whoever called fills in the rest.
Resolve the active space
The /distill skill accepts one optional inline token of the form
space:<name> anywhere in the argument string. The bundled resolver strips it
and returns the rest as the target. It prints the resolved Space line itself:
raw_args="<the full argument string passed to /distill>"
# The resolver ships inside the installed plugin; the relative path only
# exists in a wenlan checkout.
resolver="$(find "$HOME/.codex/plugins/cache" -path '*/wenlan/*/bin/resolve-space.sh' 2>/dev/null | head -1)"
resolved="$("${resolver:-plugin-codex/bin/resolve-space.sh}" --cwd "$PWD" --args "$raw_args")"
space="$(printf '%s\n' "$resolved" | cut -f1)"
source_layer="$(printf '%s\n' "$resolved" | cut -f2)"
target="$(printf '%s\n' "$resolved" | cut -f3-)"
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday Changed · +3 lines 2c954af24dbe
- 3d ago Changed · +257 lines · +12 tokens per session 2e217ff2dfe3
- 4d ago First seen · 158 lines · 39 tokens per session scan B df098e61e6e9
distill is a skill published in the GitHub repository wenlan-app/wenlan (82 stars, last pushed yesterday), licensed Apache-2.0. It adds 51 tokens to every session and 3,781 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it B with 1 finding (reads agent configuration directories). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-11.
Other skills, from other repositories
slm-media
Save pictures and PDFs in SuperLocalMemory and find them again by describing them. Covers when to save a picture or document, remembermedia, rememberdocument, getmedia, mediastatus and mediauploadlink, how recall returns pictures and PDF pages, the limits, what stays private, turning the feature on with slm media (16…
forget
Delete a Wenlan memory by exact id from Codex. Destructive and confirmation gated. Invoked as /forget .
recall
Search Wenlan's local memory from Codex by query. Targeted lookup, not session orientation. Invoked as /recall .
capture
Save a durable memory to Wenlan from Codex. Use proactively when the user states a preference, makes a decision, corrects you, or shares a durable fact. Invoked as /capture .
handoff
End a Codex work session. Stores durable captures, writes a narrative session log, and automatically applies typed item-level deltas to the current Space Brief. Invoked as /handoff.
lint
Lint Wenlan memory quality and hygiene, check vocabulary, or resolve every finding into a ready repair, review item, system action, or blocker.