prove
Per-surface verification loops for wenlan — daemon, cli, mcp, plugin, suite strength (mutation), behavior trace, weekly sweep.…
Search Wenlan's local memory by query. Targeted lookup, not orientation. Invoked as `/wenlan-recall <query>`. Use when the user asks \"do you remember\", \"what do you know about\", \"look up\".
$ npx -y skills add wenlan-app/wenlan --skill wenlan-recall --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/wenlan-recallContext preview
The summary Claude sees to decide when to auto-load this skill.
Search Wenlan's local memory by query. Targeted lookup, not orientation. Invoked as `/wenlan-recall <query>`. Use when the user asks \"do you remember\", \"what do you know about\", \"look up\".
name: wenlan-recall description: "Search Wenlan's local memory by query. Targeted lookup, not orientation. Invoked as `/wenlan-recall <query>`. Use when the user asks \"do you remember\", \"what do you know about\", \"look up\"."
Search Wenlan's memory by natural-language query. Returns matching memories ranked by hybrid vector + FTS search, then re-ordered by the agent if it helps.
The `/wenlan-recall` 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 query. It prints the resolved Space line itself:
raw_args="<the full argument string passed to /wenlan-recall>"
resolved="$("{{WENLAN_SKILLS_DIR}}/wenlan/scripts/resolve-space.sh" --cwd "$PWD" --args "$raw_args")"
space="$(printf '%s\n' "$resolved" | cut -f1)"
source_layer="$(printf '%s\n' "$resolved" | cut -f2)"
query="$(printf '%s\n' "$resolved" | cut -f3-)"If `query` is empty, ask the user what they want to search for. Pass `space="$space"` to the `recall` MCP tool only when `space` is non-empty; otherwise omit the space filter.
When a local model or API key is configured, the daemon can rerank and expand server-side. In local memory mode it cannot. The skill always does **agent-side expansion and rerank** itself — cheap, makes results good in both modes.
Before calling `recall`, rewrite the user's query into a more search-friendly form:
"auth" → "auth OR authentication").
Don't over-expand. If the query is already specific, leave it alone. One recall call per `/wenlan-recall` invocation — duplicate calls double embedding load and the merge step is rarely worth it. The daemon's own `search_memory_expanded` exists for the multi-query case; if it matters, use that endpoint instead of issuing parallel calls here.
recall(query="<expanded query>", space=<resolved if non-empty>, memory_type=<inferred>)
Inferences (do not ask the user):
the topic being discussed, or whatever space was mentioned in recent turns. Pass only when scope is known; omit when uncertain or unscoped.
"lesson about Y", "preference for Z"). Otherwise omit and let hybrid search rank.
The daemon returns hits ranked by hybrid search. That ranking is good but not perfect — it doesn't know the user's exact intent.
Re-read the returned memories against the *original* query. Promote the ones that directly answer the question; demote ones that just share keywords.
Show the user the top 3-5 reranked hits. Surface the rest only if asked.
If the user explicitly asks how one returned memory changed, for its full history, or whether a correction was recorded, call `get_memory_revisions(memory_id="<source_id>")`. Do not fetch revision chains for ordinary recall results.
Each memory may carry revision fields: `version`, `pending_revision`, `merged_from`, `last_delta_summary`. Most memories are fresh (v1, none set) — render nothing extra for those. Only add a tag line when something meaningful is present.
**Condition:** emit the tag line when any of these holds:
**Format** — one compact line above the memory body:
<id> v<N> (merged <K> memories) ← merged_from has K entries <id> v<N>, pending revision against <id> ← pending_revision true <id> v<N> — <last_delta_summary> ← version > 1, delta populated <id> v<N> ← version > 1, no delta
Rules:
flag is set. Preserves current output for fresh memories.
"Alice database preference" finds more than "database stuff". The semantic matcher rewards specificity. If too many results return, add filters rather than making the query longer.
A living personal wiki. Wenlan turns your documents, notes, and AI chats into pages with links to their sources, and updates them as sources change without overwriting your edits. Claude Code, Codex and other AI tools can build on it.
Per-surface verification loops for wenlan — daemon, cli, mcp, plugin, suite strength (mutation), behavior trace, weekly sweep.…
Build, launch, screenshot, and drive the wenlan-app Tauri desktop app in dev mode on macOS (WKWebView) or Windows (WebView2). Use…
Build, launch, and stop the wenlan daemon (wenlan-server) for local dev and verification. Use when asked to run or restart the…
Drive/evidence recipe for verifying wenlan changes at their real surfaces (daemon HTTP, CLI, MCP stdio). The handle file the…
Read the current Space-owned project Brief from Wenlan. With an optional topic, appends separately labeled related context from…
Save a memory to Wenlan in flow, or save something from this conversation as one note when the user asks for a note. Use…