with one click
capture
> Use when this capability is needed.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
> Use when this capability is needed.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| Use when this capability is needed.
Review architecture and API design for the vfs-s3 project. Use when the user mentions @architect, asks to review an issue's design, discuss module boundaries, API shape, or architectural decisions for vfs-s3. Also trigger when the user wants to create an ADR (Architecture Decision Record) or evaluate a technical approach for the project. Intended for dispatch from Codex automation or Claude routines; GitHub trigger phrase: @vfs-s3-bot please prepare design doc Use when this capability is needed.
Standard output format for due diligence analysis reports. Use when producing your final analysis to ensure consistency across all specialist agents. Use when this capability is needed.
Use when a theorem is mathematically true but difficult to formalize directly, especially when proof search times out, the statement is large, or the proof needs helper lemmas, dependency research, or structured decomposition.
Retrieve claudit knowledge cache domains (ecosystem, core-config, optimization). Checks freshness and auto-refreshes stale domains. Use when this capability is needed.
Interact with a physical embodiment kit microcontroller located in the user's room. Send commands to control a display (faces, messages, prompts), NeoPixel lights, a piezo buzzer, and a vibration motor — and to read sensors (temperature, humidity, pressure, ambient lux, microphone, accelerometer). Use to answer questions about the physical environment and to express status, get the human's attention, or communicate visually/audibly/haptically in the room. Use when this capability is needed.
| name | capture |
| description | > Use when this capability is needed. |
Capture a single memory in the moment. Active verb: agent captures the moment of insight, like a photograph.
The /capture skill accepts 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 space_arg is non-empty, pass it to the resolver as --arg "$space_arg".
Call the bundled resolver:
resolved="$("$CLAUDE_PLUGIN_ROOT/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)"
Pass space="$space" to the capture MCP tool only when space is
non-empty. Before every capture, also print:
Resolved space: <space> (from <source-layer>)
If space is empty, print:
Resolved space: none (unscoped)
Unknown spaces are not auto-created. Register a new space first with
wenlan spaces add <space>, or omit space to store uncategorized.
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>",
space=<resolved if non-empty>)
memory_type — agent picks one of 6The daemon classifies when a local model or API key is configured. In local memory mode it does not, so the agent picks the type from the content itself. Use 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 anchorPick the single most important named thing in the content: a person,
project, tool, place. Use the exact name. Example: "Alice prefers TDD
because…" → entity="Alice". If the content has no named anchor,
omit entity.
topic / space inference~/Repos/wenlan/... → "wenlan").space only when scope is known; if uncertain, run list_spaces
later (post-PR-C) or omit.The MCP capture tool takes a single primary entity. For additional
entities or relations, use the dedicated MCP tools. If the content
names more than one entity, capture the memory first, then for each
additional entity:
create_entity(name="<entity>", entity_type="<person|project|tool|place>")
For a relation between two entities:
create_relation(from_entity="<a>", to_entity="<b>", relation_type="<verb>")
Skip these calls when the daemon has an LLM — its post-ingest enrichment covers extraction.
One capture = one idea. "Prefers TDD" and "Uses pytest" are two captures, not one.
/handoff (multi-item batch)./recall.After capture returns, check response.triggered_revisions and response.auto_superseded.
If auto_superseded is non-empty, the daemon already resolved the contradiction. Surface it as informational:
Note: auto-superseded mem_X. Wenlan replaced a prior protected memory because
trust=high and similarity > 0.9. No action needed.
No accept/dismiss call required. The revision was applied automatically.
If triggered_revisions is non-empty (and auto_superseded is empty), render an inline block to the user:
Stored mem_new.
This capture topic-matches a protected memory now flagged for revision:
- mem_target_abc
Action: accept (replace original content) | dismiss (drop the revision) | leave (decide later)
Inline verb map:
accept_revision(target_source_id="mem_target_abc")dismiss_revision(target_source_id="mem_target_abc")/briefBoth fields can technically be non-empty in a single response (multiple protected matches), but in practice only one fires per capture: auto_superseded fires when trust=full and similarity > 0.9, triggered_revisions fires otherwise.
If neither field is non-empty, the capture stored cleanly with no conflicts.
Source: 7xuanlu/origin — distributed by TomeVault.