Wiki Maintainer
openclaw/openclaw
Maintain the OpenClaw memory wiki vault with deterministic pages, managed blocks, and source-backed updates.
Synthesize wiki pages from related memories. An agent skill from davepoon/buildwithclaude.
$ npx skills add davepoon/buildwithclaude --skill distill -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install davepoon/buildwithclaude distill --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/davepoon/buildwithclaude.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/origin/skills/distill .claude/skills/distill && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "distill" agent skill from https://github.com/davepoon/buildwithclaude/tree/main/plugins/origin/skills/distill into .claude/skills/distill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distill", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/davepoon/buildwithclaude/tree/main/plugins/origin/skills/distillType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add davepoon/buildwithclaude --skill distill -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install davepoon/buildwithclaude distill --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davepoon/buildwithclaude.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/origin/skills/distill .agents/skills/distill && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "distill" agent skill from https://github.com/davepoon/buildwithclaude/tree/main/plugins/origin/skills/distill into .agents/skills/distill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distill", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add davepoon/buildwithclaude --skill distill -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install davepoon/buildwithclaude distill --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davepoon/buildwithclaude.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/origin/skills/distill .cursor/skills/distill && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "distill" agent skill from https://github.com/davepoon/buildwithclaude/tree/main/plugins/origin/skills/distill into .cursor/skills/distill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distill", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/davepoon/buildwithclaude.git --path plugins/origin/skills/distill--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add davepoon/buildwithclaude --skill distill -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install davepoon/buildwithclaude distill --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davepoon/buildwithclaude.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/origin/skills/distill .gemini/skills/distill && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "distill" agent skill from https://github.com/davepoon/buildwithclaude/tree/main/plugins/origin/skills/distill into .gemini/skills/distill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distill", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install davepoon/buildwithclaude distillInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add davepoon/buildwithclaude --skill distill -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/davepoon/buildwithclaude.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/origin/skills/distill .github/skills/distill && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "distill" agent skill from https://github.com/davepoon/buildwithclaude/tree/main/plugins/origin/skills/distill into .github/skills/distill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distill", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add davepoon/buildwithclaude --skill distill -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install davepoon/buildwithclaude distill --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davepoon/buildwithclaude.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/origin/skills/distill .opencode/skills/distill && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "distill" agent skill from https://github.com/davepoon/buildwithclaude/tree/main/plugins/origin/skills/distill into .opencode/skills/distill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distill", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
distillSynthesize wiki pages from related memories. An agent skill from davepoon/buildwithclaude.
Distill is an agent skill from davepoon/buildwithclaude. Synthesize wiki pages from related memories. One endpoint, one flow: daemon clusters and synthesizes what it can; agent finishes whatever the daemon couldn't (no LLM or cluster too big). Invoked as /distill [target].
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: A single hub to find Claude Skills, Agents, Commands, Hooks, Plugins, and Marketplace collections to extend Claude Code, Claude Desktop, Agent SDK and OpenClaw. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 10bfc43. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
mcp__plugin_origin_origin__recallmcp__plugin_origin_origin__distillmcp__plugin_origin_origin__create_pagemcp__plugin_origin_origin__update_pagemcp__plugin_origin_origin__delete_pagemcp__plugin_origin_origin__get_page_sourcesBashFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Distill loads about 3.2k tokens when it runs. Until then it costs about 57 tokens; SKILL.md has 1,339 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: mcp__plugin_origin_origin__recall, mcp__plugin_origin_origin__distill, mcp__plugin_origin_origin__crAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from davepoon/buildwithclaude at commit 10bfc43, republished under its MIT licence (© davepoon). 1,339 words, ~3,173 tokens.
.claude/skills/distill/SKILL.md (or your agent's skills folder).Force a distillation pass now. The daemon's background distill cycles run
on its own clock; /distill is the explicit user-triggered pass.
Distillation is four operations bundled into one flow:
The default flow runs all four. The rebuild verb is a destructive opt-in
that overrides the lock on a single page.
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.
For bare /distill, infer a target from cwd:
Bash: top=$(git -C "$PWD" rev-parse --show-toplevel 2>/dev/null); \
common=$(git -C "$PWD" rev-parse --git-common-dir 2>/dev/null); \
if [ -n "$common" ]; then \
case "$common" in /*) root=$(dirname "$common");; *) root=$(cd "$top" && cd "$(dirname "$common")" && pwd);; esac; \
basename "$root"; \
fiorigin).basename "$PWD".deep → no scope (global pass).rebuild <page-id> → call
distill(target=<page-id>, force=true). Confirms "Rebuild page <id>?
Your edits will be wiped, page regenerates from sources." before
proceeding. Skip the rest of this skill — single-page rebuild does
not produce pending clusters; the daemon's response shape is
{"status": "ok", "force": true, "page_id": ..., "updated": true}.
Report verbatim.For /distill <arg> → forward <arg> to target.
distill(target="<scope>")The tool returns the daemon's full JSON payload as text. Parse it as JSON. Possible shapes:
{
"pages_created": 0,
"scoped": true,
"created_ids": [],
"pending": [
{ "source_ids": [...], "contents": [...], "entity_id": ...,
"entity_name": ..., "space": ..., "estimated_tokens": ... },
...
],
"stale_pages": [
{ "page_id": ..., "title": ..., "summary": ...,
"source_memory_ids": [...], "stale_reason": "source_updated",
"user_edited": false, "sources_updated_count": 3 },
...
],
"stale_truncated": false,
"orphan_topics": [
{ "label": "Topic Z", "count": 3 },
...
]
}The route never invokes the daemon LLM. created_ids is always empty
when called from this skill; pending carries every cluster the
daemon found. The agent synthesizes them in this session — that's why
the LLM choice is consistent with how the user invoked the skill.
unresolved + hint: relay to user verbatim and stop.
pending clusterThe daemon route filters out clusters fully covered by an existing page (subset or Jaccard ≥ 0.8). What remains is either:
existing_page_id is set) → the cluster
has new memories beyond what's in the matched page. The agent has
LLM access, so the right move is to refresh the existing page in
the same pass.Cluster shape:
pending: [
{
source_ids, contents, entity_id, entity_name, space,
estimated_tokens,
existing_page_id?, existing_page_title?, new_memory_count?
},
...
]For each cluster, first run a coherence check before synthesizing:
cluster.contents.Origin but spanning RwLock bugs, schema choices, onboarding UI,
migrations, and CSS), the cluster is incoherent. Skip
synthesizing it. Record it for the report under "Skipped (low
coherence)" with the existing page title (if refresh) or a short
topic hint (if new).The coherence judgement is something only the agent can do — it needs to read the prose. Daemon clustering is heuristic; agent is the final filter against producing a grab-bag page.
For each coherent cluster:
existing_page_title when refreshing
unless the new memories materially change the topic. For new
clusters: cluster.entity_name if specific, otherwise derive from
the first memory's content.[[wikilinks]]. Cite source
ids inline with (source: mem_XXX).New cluster (no existing_page_id) — call the MCP tool:
create_page(title="...", summary="...", content="...",
entity_id="<cluster.entity_id or omit>",
space="<cluster.space>",
source_memory_ids=[...])Refresh candidate (existing_page_id is set) — replace the body
in place via the update_page MCP tool. This is a single atomic
call: replaces content + source list + optional summary, clears the
daemon's stale_reason, bumps version, preserves page_id +
created_at so external [[wikilinks]] keep working.
update_page(page_id=cluster.existing_page_id,
content="...",
source_memory_ids=cluster.source_ids,
summary="...")The stale_pages block in the response lists pages whose sources
changed since last compile. Shape:
stale_pages: [
{ page_id, title, summary, source_memory_ids,
sources_updated_count, stale_reason, user_edited },
...
]
stale_truncated: <bool> # true when 10+ stale pages existFor each stale page:
user_edited == true → never auto-rewrite. The user touched
the page; the upstream memories also changed. Surface in the
"Conflict" report block and stop. The user resolves by hand, OR
runs /distill rebuild <page-id> to wipe their edits and
regenerate from sources.user_edited == false → fetch source memories via
get_page_sources(page_id="<id>"), run the same coherence check
used for clusters, then call update_page with the existing
source_memory_ids and freshly synthesized prose.update_page(page_id=stale.page_id,
content="<refreshed prose>",
source_memory_ids=stale.source_memory_ids,
summary="<optional refreshed claim>")When stale_truncated == true, tell the user "more stale pages
remain — re-run /distill after this pass to continue."
orphan_topics lists wikilink labels that 2+ existing pages reach
for but no page is named for. Each entry is a topic-discovery
signal — other pages are asking for this page.
Do not auto-create pages from this list — the agent doesn't have
the source memories at hand, and an empty-stub page is worse than no
page. Surface them in the report so the user can choose to run
/distill <label> intentionally:
Topic suggestions (other pages link here, no page yet):
- "Topic Z" (3 pages reference it)
- "Other" (2 pages reference it)Skip the section when orphan_topics is empty.
Three output shapes. Pick the one that matches what happened.
If pending is empty (every cluster already fully covered):
Scope `<scope>` is up to date — no new memories to distill.If at least one cluster was synthesized:
Distilled N page(s) from <total> memories in scope `<scope>`:
- <Title> v1, synthesized from <K> sources
- <Title> v3 → v4: +mem_xyz, +250 chars
...For each page, create_page and update_page return a WriteResult
whose warnings array carries a pre-formatted delta line from the
daemon (e.g. "v3 → v4: +mem_xyz, +250 chars"). Render it verbatim
after the title. When warnings is empty or the call returned no
WriteResult, fall back to:
v1, synthesized from <K> sources (K = source_ids length)refreshed (bare, as before)This lets the user see exactly what changed per page without opening each file.
If at least one cluster was skipped on the coherence check:
Skipped M cluster(s) — low coherence (memories share entity but
topics scatter; would produce a grab-bag page):
- "<existing_page_title or topic hint>" (<N> memories)
...If at least one stale page was refreshed:
Refreshed K stale page(s):
- <Title> v2 → v3: +mem_abc, +180 chars
- <Title> refreshed
...Same delta-line rule as new/refresh clusters: render warnings[0]
from the update_page WriteResult verbatim; fall back to refreshed
when absent.
If at least one stale page was skipped because user_edited:
Conflict on L stale page(s) — page has user edits, sources also
changed. Open and reconcile manually:
- <Title> (~/.origin/pages/<slug>.md)Distinct wording from the coherence-skip block so the user can tell the two reasons apart at a glance.
Emit the blocks back-to-back when more than one outcome happened in the same pass.
When the only outcome is skipped clusters (and pending was
non-empty), still emit the Skipped block. Do not report "up to
date" in that case — the scope isn't up to date, the candidates were
just too low quality.
Rules:
/read "<title>"
for that.<total> = sum of source_ids.len() across the clusters that were
actually synthesized.After writing the pages above, snapshot the change so the user can git log their memory's life timeline. Defensive — silent skip if git is
missing or ~/.origin/ is not a repo yet.
Bash: git -C ~/.origin add -A && \
git -C ~/.origin -c user.name=Origin -c user.email=daemon@origin.local \
commit --quiet -m "distill: <N> pages" 2>/dev/null || \
(sleep 1 && git -C ~/.origin add -A && \
git -C ~/.origin -c user.name=Origin -c user.email=daemon@origin.local \
commit --quiet -m "distill: <N> pages" 2>/dev/null) || trueThe retry handles index.lock races — the daemon may be writing to
~/.origin/ at the same moment (auto-commit from captures). One-second
wait is enough for the daemon to release the lock.
/distill rebuild <page-id> when you want to wipe a page you
previously edited and have the daemon regenerate from current
sources. Destructive: your prose goes away. Use after you are
done curating a page and want it back on the auto-refresh path.Each cluster the agent synthesizes counts against this session's tokens. Daemon-side clusters (when an LLM is present) cost daemon LLM tokens instead (cents on API, seconds on-device). Either way, keep cluster sizes reasonable — the daemon already enforces a per-cluster token budget via its tuning config.
© davepoon, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/origin/skills/distill of davepoon/buildwithclaude.
Open the folder on GitHubat commit 10bfc43
Distill next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Distill this skilldavepoon/buildwithclaude | 3.6k | — | ~3.2k | Automated safety check: Notes | MIT | |
| Wiki Maintaineropenclaw/openclaw | 392k | 1 repos | ~462 | Automated safety check: Pass | MIT | |
| Wiki SynthesizeAr9av/obsidian-wiki | 3.5k | — | ~2.3k | Automated safety check: Notes | MIT | |
| Memori Long-Term MemoryMemoriLabs/Memori | 17k | — | ~2k | Automated safety check: Notes | Custom licence | |
| LLM WikiYeachan-Heo/oh-my-claudecode | 40k | — | ~721 | Automated safety check: Pass | MIT | |
| Memori Long-Term MemoryMemoriLabs/Memori | 17k | — | ~2k | Automated safety check: Pass | Apache-2.0 |
openclaw/openclaw
Maintain the OpenClaw memory wiki vault with deterministic pages, managed blocks, and source-backed updates.
Ar9av/obsidian-wiki
Find recurring concept combinations across the wiki that lack an explicit synthesis page, then create cross-cutting synthesis pages.
MemoriLabs/Memori
Connects Claude Code to Memori Cloud for long-term memory, recalling stored context before substantive replies and saving new context afterward.
Yeachan-Heo/oh-my-claudecode
Keeps a persistent markdown wiki of project and session knowledge that the agent can ingest into, query, lint and read across sessions.
MemoriLabs/Memori
Adds structured long-term memory to OpenClaw agents, built automatically from sessions, with tools the agent calls to recall facts, summaries and decisions.
yc-software/qm
Deliberately search, add to, or curate your long-term memory with the memory tool — beyond the automatic recall/capture every turn already does.
davepoon/buildwithclaude
A skill your agent uses when the user asks to "analyze video", "watch this video", "what happens in this video", "describe this clip", "review this footage", "classify these videos", "compare…
davepoon/buildwithclaude
Activate this agent for any future-oriented question that requires deep quantitative analysis, historical precedents, and structured scenario planning.
davepoon/buildwithclaude
Build, update, and apply iOS design specifications using Apple Human Interface Guidelines (HIG) source data.
davepoon/buildwithclaude
Download YouTube videos with customizable quality and format options.
davepoon/buildwithclaude
Discover Atlas Cloud image and video models, inspect their live schemas, and submit one confirmed media generation request with bounded GET polling.
davepoon/buildwithclaude
Toolkit for creating animated GIFs optimized for Slack, with validators for size constraints and composable animation primitives.
Synthesize wiki pages from related memories. An agent skill from davepoon/buildwithclaude. Distill is an agent skill from davepoon/buildwithclaude. Synthesize wiki pages from related memories.
Run `npx skills add davepoon/buildwithclaude --skill distill -a claude-code`. Or copy the skill folder (plugins/origin/skills/distill in davepoon/buildwithclaude) into .claude/skills/distill in your project. Claude Code loads it when a task matches its description.
Run `npx skills add davepoon/buildwithclaude --skill distill -a codex`. Or copy the skill folder (plugins/origin/skills/distill in davepoon/buildwithclaude) into .agents/skills/distill in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add davepoon/buildwithclaude --skill distill -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/distill, .gemini/skills/distill, .github/skills/distill and .opencode/skills/distill in your project.
Going by SKILL.md and its folder, Distill needs the command-line tools its instructions call (git). Its frontmatter pre-approves these tools: mcp__plugin_origin_origin__recall, mcp__plugin_origin_origin__distill, mcp__plugin_origin_origin__create_page, mcp__plugin_origin_origin__update_page, mcp__plugin_origin_origin__delete_page, mcp__plugin_origin_origin__get_page_sources, Bash.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Distill is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Distill: Wiki Maintainer (openclaw/openclaw, 392k stars), Wiki Synthesize (Ar9av/obsidian-wiki, 3.5k stars), Memori Long-Term Memory (MemoriLabs/Memori, 17k stars) and LLM Wiki (Yeachan-Heo/oh-my-claudecode, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
davepoon (a GitHub user) maintains it in davepoon/buildwithclaude, which has 3,604 GitHub stars. The repository holds 245 skills in this directory. The repository was last updated on October 6, 2026.
Source: davepoon/buildwithclaude on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.