Skip to content
Documentation
Skill

/capture

Save a memory to Wenlan in flow, or save something from this conversation as one note when the user asks for a note. Use proactively when the user states a preference, makes a decision, corrects you, or shares a durable fact. Invoked as `/capture <content>`.

From plugin
wenlan
9421 skills3 agents1 MCP

Claude Code

$ npx -y skills add wenlan-app/wenlan --skill capture --agent claude-code

SKILL.md

capture.SKILL.md
name: capture
description: >
  Save a memory to Wenlan in flow, or save something from this conversation as
  one note when the user asks for a note. 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__save_source", "mcp__wenlan__keep_original", "mcp__wenlan__recall", "mcp__wenlan__create_entity", "mcp__wenlan__create_relation", "mcp__wenlan__list_rejections", "mcp__wenlan__list_pages", "mcp__wenlan__read_page", "mcp__wenlan__write_page"]
user-invocable: true

/capture

Capture a single memory in the moment. Active verb: agent captures the moment of insight, like a photograph.

Run `echo $CODEX_THREAD_ID` once; when it is non-empty, pass `session: "codex:<that id>"` on `capture` and `write_page`.

Resolve the active space

The `/capture` 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 content. It prints the resolved Space line itself:

raw_args="<the full argument string passed to /capture>"
# 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)"
content="$(printf '%s\n' "$resolved" | cut -f3-)"

If `content` is empty, ask the user what they want to capture before calling the tool. Pass `space="$space"` to the `capture` MCP tool only when `space` is non-empty.

The resolver line reports the proposed client context. After capture, relay the tool's returned `space`, `space_source`, and `write_outcome`; those fields describe what the daemon actually persisted and are authoritative.

Unknown spaces are not auto-created. Register one through the resolved CLI binary, or omit `space` to store uncategorized:

W="$(command -v wenlan || echo "$HOME/.wenlan/bin/wenlan")"
"$W" spaces add <space>

Memory or note

Default to one memory. Save a note instead only when the user asks for one in their own words: "save this as a note", "write this up", "存成筆記", "寫成一篇筆記", or `/capture` text that starts with "note:". Proactive captures are always memories; never create a note on your own initiative, and never save the same thing as both a memory and a note in one turn. Turning many memories into notes is a different job: that is `$wenlan steep`.

To save a note, follow "Save a note" below and skip the memory steps.

A diagram you drew

A diagram, map, chart or HTML page you made in this conversation (an ASCII drawing in your reply too) is kept with `keep_original`, never captured as a memory or rewritten as a note. Pass `structure` and `session`. When to keep one without being asked is in that tool's description.

Something from another app or the web

When the user wants to keep something you read in another app or on the web (an email, a Notion or Drive page, a Slack thread, an issue, an article), save the original with `save_source` instead of capturing it. Pass its permanent link as `url`, its title, the text as you read it (not a summary), a `source_label` such as `gmail`, `notion`, `drive`, `slack`, `github` or `web`, and `space` when it is non-empty. Never make up a link: if you have no link to the original, capture the insight as a memory instead. Save only what the user asked to keep; never copy a whole inbox or channel.

The saved copy does not update on its own. When the original changes and the user wants Wenlan to follow, save it again with the same link; notes built on it are then marked for refresh. Report the link and the Space the result names.

How to invoke

Call the `wenlan` MCP server's `capture` tool with the user's content as a complete, self-contained statement. Attach `topic` from cwd or the conversation — don't make the user type it.

capture(content="<args, written as a full sentence with WHY>",
        memory_type="<picked from the 6 types>",
        entity="<primary entity name, if any>",
        entity_type="<person, project, tool, ...>",
        said=[{"speaker": "you", "text": "<the user's words it came from>"}],
        space=<resolved if non-empty>)

Pass `said` on every capture: the one to three lines of this conversation the memory comes from, copied word for word (usually the user's own message, plus your reply when the point is in it). When someone later opens a sentence built on this memory, Wenlan shows these lines; in a web chat they are the only original it has.

Set `memory_type` and `entity` yourself on every capture, whether Steep runs automatically or on demand. You already know both from the conversation, so this is a one-word choice, not extra work; nothing later may classify or link the memory for you.

`memory_type` — agent picks one of 6

Pick the type from the content itself with this mapping:

| Type | Use for | |---|---| | `identity` | Durable facts about the user (role, company, language preference) | | `preference` | "I prefer X because Y" — a habit, a correction, a stylistic choice | | `decision` | "Going with A over B because C" — a specific choice with rationale | | `lesson` | Root cause found, workaround discovered, technical insight earned | | `gotcha` | Sharp edge, surprising behavior, a thing to watch out for | | `fact` | Durable info about people, projects, tools — anchor to `entity` when possible |

If two types fit, pick the one closest to *why the memory matters*. A decision *also* implies a preference, but `decision` is more specific.

`entity` — extract the anchor

Pick the single most important named thing in the content: a person, project, t

Read more
@7xuanlu
Ships withwenlan

Open-source Obsidian alternative that works with your existing vault. The knowledge base you don't have to maintain: your AI tools keep it organized and up to date, with no API keys or plugins to set up. For you and your team.

9421 skills3 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
94
Star history of 7xuanlu/wenlan on GitHub, a chart by star-history.com

Other skills on wenlan.

prove

prove

Per-surface verification loops for wenlan — daemon, cli, mcp, plugin, suite strength (mutation), behavior trace, weekly sweep.…

@7xuanlu@7xuanluInstall Skill
run-wenlan-app

run-wenlan-app

Build, launch, screenshot, and drive the wenlan-app Tauri desktop app in dev mode on macOS (WKWebView) or Windows (WebView2). Use…

@7xuanlu@7xuanluInstall Skill
run-wenlan

run-wenlan

Build, launch, and stop the wenlan daemon (wenlan-server) for local dev and verification. Use when asked to run or restart the…

@7xuanlu@7xuanluInstall Skill
verify

verify

Drive/evidence recipe for verifying wenlan changes at their real surfaces (daemon HTTP, CLI, MCP stdio). The handle file the…

@7xuanlu@7xuanluInstall Skill
wenlan-brief

wenlan-brief

Read the current Space-owned project Brief from Wenlan. With an optional topic, appends separately labeled related context from…

@7xuanlu@7xuanluInstall Skill
wenlan-capture

wenlan-capture

Save a memory to Wenlan in flow, or save something from this conversation as one note when the user asks for a note. Use…

@7xuanlu@7xuanluInstall Skill

More skills from other plugins.

context7-cli

context7-cli

Use the ctx7 CLI to fetch library documentation and configure Context7 MCP. Activate when the user mentions "ctx7" or "context7",…

context712d64k
@upstash@upstashInstall Skill
docs-components

docs-components

Comprehensive MDX component patterns (Note, Pitfall, DeepDive, Recipes, etc.) for all documentation types. Authoritative source…

@reactjs@reactjsInstall Skill
codebase-wiki

codebase-wiki

How to work in a Codebase Wiki project (the `codebase-wiki` starter pack): an agent-authored, source-grounded wiki of the…

@inkeep@inkeepInstall Skill

Questions about capture.

Which coding agents can use capture?
capture installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.