/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 <content>.
$ npx -y skills add 7xuanlu/wenlan --skill capture --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/capture
Context preview
The summary Claude sees to decide when to auto-load this skill.
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 <content>.
SKILL.md
capture.SKILL.mdname: capture
description: >
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 <content>.
argument-hint: "<content>"
allowed-tools: ["Bash", "mcp__wenlan__capture", "mcp__wenlan__recall", "mcp__wenlan__create_entity", "mcp__wenlan__create_relation", "mcp__wenlan__list_rejections", "mcp__wenlan__accept_revision", "mcp__wenlan__dismiss_revision"]
user-invocable: true
/capture
Capture one memory in the moment. Write the memory as a self-contained statement with the reason it matters.
Argument parsing
Accept one optional inline token of the form `space:<name>` anywhere in the argument string. Extract it before treating the rest as content:
raw_args="<the full argument string passed to /capture>"
space_arg="$(printf '%s\n' "$raw_args" | grep -oE 'space:[A-Za-z0-9_-]+' | head -1 | cut -d: -f2)"
content="$(printf '%s\n' "$raw_args" | sed -E 's/[[:space:]]*space:[A-Za-z0-9_-]+[[:space:]]*/ /g' | sed -E 's/^[[:space:]]+|[[:space:]]+$//g')"
If `content` is empty, ask the user what they want to capture.
Resolve the active space
Call the Codex resolver:
resolved="$(plugin-codex/bin/resolve-space.sh --cwd "$PWD" ${space_arg:+--arg "$space_arg"} 2>/dev/null)"
space="$(printf '%s\n' "$resolved" | cut -f1)"
source_layer="$(printf '%s\n' "$resolved" | cut -f2)"If `space` is non-empty, print `Resolved space: <space> (from <source-layer>)` and pass it to the `capture` MCP tool. If `space` is empty, print `Resolved space: none (unscoped)` and omit the `space` parameter.
After capture, relay the tool's returned `space`, `space_source`, and `write_outcome`; those fields describe what the daemon actually persisted and are authoritative.
How to invoke
Call the Wenlan MCP `capture` tool with the user's content as a complete, self-contained statement. Attach topic from cwd or the conversation when useful.
capture(
content="<content, written as a full sentence with WHY>",
memory_type="<picked from the 6 types>",
entity="<primary entity name, if any>",
space="<resolved if non-empty>"
)
Pick `memory_type`
The daemon classifies when a model or API key is configured. In local memory mode it may not, so pick the type from the content itself.
| Type | Use for | |---|---| | `identity` | Durable facts about the user | | `preference` | A habit, correction, or stylistic choice with a reason | | `decision` | A specific choice with rationale | | `lesson` | Root cause, workaround, or technical insight | | `gotcha` | Sharp edge or surprising behavior | | `fact` | Durable info about people, projects, tools, or places |
If two types fit, pick the one closest to why the memory matters.
Extract `entity`
Pick the single most important named anchor: person, project, tool, or place. Use the exact name. If there is no named anchor, omit `entity`.
Pass the single most important named anchor through `capture.entity`. Ordinary captures stop there; daemon enrichment handles routine extraction. Do not call `mcp__wenlan__create_entity` for ordinary captures. Never infer a relation the user did not state.
Use the explicit KG tools only when the user explicitly states a durable relation:
1. Call `mcp__wenlan__create_entity` for both named endpoints first and collect their stable ids. The call is idempotent and may return an existing id. 2. Call `mcp__wenlan__capture` with the complete relation statement and pass the primary entity name as `entity` so the memory resolves and links to it. 3. Call `mcp__wenlan__create_relation` with `from_entity_id`, `to_entity_id`, `relation_type`, and the capture result's required `source_memory_id`.
For a durable named entity explicitly established by the user, `mcp__wenlan__create_entity` may also be used alone when its stable id is needed. `Entity <id> ready` does not imply that a new row was created.
What to capture
- Decisions: "Going with approach A because B."
- Preferences: "Prefers TDD because it catches regressions early."
- Corrections: "Actually it is C, not D."
- Project facts: "Wenlan is the local memory daemon for AI tools."
What not to capture
- System prompts, boot logs, and command output.
- Transient task state.
- File paths or git history the user can re-derive.
- Agent operating rules that belong in AGENTS.md or another obey-tier file.
- Single-word acknowledgments.
If a capture the user expected is missing or the user explicitly asks why it was rejected, call `mcp__wenlan__list_rejections`. Do not list rejections after successful ordinary captures.
Post-capture contradiction signal
After `capture` returns, check `triggered_revisions` and `auto_superseded`.
If `auto_superseded` is non-empty, surface it as informational. No follow-up tool call is needed.
If `triggered_revisions` is non-empty and `auto_superseded` is empty, render:
Stored <new id>.
This capture topic-matches a protected memory now flagged for revision:
- <target id>
Action: accept (replace original) | dismiss (drop revision) | leave (decide later)
Inline verb map:
- accept: `accept_revision(target_source_id="<target id>")`
- dismiss: `dismiss_revision(target_source_id="<target id>")`
- leave: no call
Read more
name: capture description: > 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 <content>. argument-hint: "<content>" allowed-tools: ["Bash", "mcp__wenlan__capture", "mcp__wenlan__recall", "mcp__wenlan__create_entity", "mcp__wenlan__create_relation", "mcp__wenlan__list_rejections", "mcp__wenlan__accept_revision", "mcp__wenlan__dismiss_revision"] user-invocable: true
/capture
Capture one memory in the moment. Write the memory as a self-contained statement with the reason it matters.
Argument parsing
Accept one optional inline token of the form `space:<name>` anywhere in the argument string. Extract it before treating the rest as content:
raw_args="<the full argument string passed to /capture>" space_arg="$(printf '%s\n' "$raw_args" | grep -oE 'space:[A-Za-z0-9_-]+' | head -1 | cut -d: -f2)" content="$(printf '%s\n' "$raw_args" | sed -E 's/[[:space:]]*space:[A-Za-z0-9_-]+[[:space:]]*/ /g' | sed -E 's/^[[:space:]]+|[[:space:]]+$//g')"
If `content` is empty, ask the user what they want to capture.
Resolve the active space
Call the Codex resolver:
resolved="$(plugin-codex/bin/resolve-space.sh --cwd "$PWD" ${space_arg:+--arg "$space_arg"} 2>/dev/null)"
space="$(printf '%s\n' "$resolved" | cut -f1)"
source_layer="$(printf '%s\n' "$resolved" | cut -f2)"If `space` is non-empty, print `Resolved space: <space> (from <source-layer>)` and pass it to the `capture` MCP tool. If `space` is empty, print `Resolved space: none (unscoped)` and omit the `space` parameter.
After capture, relay the tool's returned `space`, `space_source`, and `write_outcome`; those fields describe what the daemon actually persisted and are authoritative.
How to invoke
Call the Wenlan MCP `capture` tool with the user's content as a complete, self-contained statement. Attach topic from cwd or the conversation when useful.
capture( content="<content, written as a full sentence with WHY>", memory_type="<picked from the 6 types>", entity="<primary entity name, if any>", space="<resolved if non-empty>" )
Pick `memory_type`
The daemon classifies when a model or API key is configured. In local memory mode it may not, so pick the type from the content itself.
| Type | Use for | |---|---| | `identity` | Durable facts about the user | | `preference` | A habit, correction, or stylistic choice with a reason | | `decision` | A specific choice with rationale | | `lesson` | Root cause, workaround, or technical insight | | `gotcha` | Sharp edge or surprising behavior | | `fact` | Durable info about people, projects, tools, or places |
If two types fit, pick the one closest to why the memory matters.
Extract `entity`
Pick the single most important named anchor: person, project, tool, or place. Use the exact name. If there is no named anchor, omit `entity`.
Pass the single most important named anchor through `capture.entity`. Ordinary captures stop there; daemon enrichment handles routine extraction. Do not call `mcp__wenlan__create_entity` for ordinary captures. Never infer a relation the user did not state.
Use the explicit KG tools only when the user explicitly states a durable relation:
1. Call `mcp__wenlan__create_entity` for both named endpoints first and collect their stable ids. The call is idempotent and may return an existing id. 2. Call `mcp__wenlan__capture` with the complete relation statement and pass the primary entity name as `entity` so the memory resolves and links to it. 3. Call `mcp__wenlan__create_relation` with `from_entity_id`, `to_entity_id`, `relation_type`, and the capture result's required `source_memory_id`.
For a durable named entity explicitly established by the user, `mcp__wenlan__create_entity` may also be used alone when its stable id is needed. `Entity <id> ready` does not imply that a new row was created.
What to capture
- Decisions: "Going with approach A because B."
- Preferences: "Prefers TDD because it catches regressions early."
- Corrections: "Actually it is C, not D."
- Project facts: "Wenlan is the local memory daemon for AI tools."
What not to capture
- System prompts, boot logs, and command output.
- Transient task state.
- File paths or git history the user can re-derive.
- Agent operating rules that belong in AGENTS.md or another obey-tier file.
- Single-word acknowledgments.
If a capture the user expected is missing or the user explicitly asks why it was rejected, call `mcp__wenlan__list_rejections`. Do not list rejections after successful ordinary captures.
Post-capture contradiction signal
After `capture` returns, check `triggered_revisions` and `auto_superseded`.
If `auto_superseded` is non-empty, surface it as informational. No follow-up tool call is needed.
If `triggered_revisions` is non-empty and `auto_superseded` is empty, render:
Stored <new id>. This capture topic-matches a protected memory now flagged for revision: - <target id> Action: accept (replace original) | dismiss (drop revision) | leave (decide later)
Inline verb map:
- accept: `accept_revision(target_source_id="<target id>")`
- dismiss: `dismiss_revision(target_source_id="<target id>")`
- leave: no call
Wenlan is a knowledge base for the AI-native age. Your AI agents capture what they learn, Wenlan keeps it current and distills it into source-cited wiki pages you can trust
Other skills on wenlan.
- /prove
Per-surface verification loops for wenlan — daemon, cli, mcp, plugin, suite strength (mutation), behavior trace, weekly sweep. Routes to scripts; every check records evidence via attest. Deeper than the built-in verify skill — use prove for mutation audits, behavior tracing, and
Open skill - /run-wenlan
Build, launch, and stop the wenlan daemon (wenlan-server) for local dev and verification. Use when asked to run or restart the daemon, or before driving any surface (HTTP, CLI, MCP) against a live instance.
Open skill - /verify
Drive/evidence recipe for verifying wenlan changes at their real surfaces (daemon HTTP, CLI, MCP stdio). The handle file the built-in verify protocol expects; launch primitives live in the run-wenlan skill, deeper machinery (mutation audit, behavior trace, weekly sweep) in the
Open skill - /brief
Read the current Space-owned project Brief from Wenlan for Codex. With an optional topic, appends separately labeled related context from the same Space. Invoked as /brief [topic] when resuming work or asking to catch up.
Open skill - /curate
Review pending Wenlan captures, revisions, or daemon refinements from Codex. Use for explicit audit walks after /brief or /handoff surfaces pending work. Invoked as /curate captures, /curate revisions, or /curate refinements.
Open skill - /distill
Synthesize or refresh source-backed Wenlan pages from Codex. Invoked as /distill [target], /distill deep, or /distill rebuild <page-id>.
Open skill

