npx skills add ...
npx skills add thedotmack/claude-mem --skill mem-search
Search claude-mem's persistent cross-session memory database. Use when user asks "did we already solve this?", "how did we do X last time?", or needs work from previous sessions.
npx skills add thedotmack/claude-mem --skill mem-search
Search past work across all sessions. Simple workflow: search -> filter -> fetch -> (rarely) disclose raw tool I/O.
Use when users ask about PREVIOUS sessions (not current conversation):
NEVER fetch full details without filtering first. 10x token savings.
Use the search MCP tool:
Returns: Table with IDs, timestamps, types, titles (~50-100 tokens/result)
Parameters:
query (string) - Search termlimit (number) - Max results, default 20, max 100project (string) - Project name filtertype (string, optional) - "observations", "sessions", or "prompts"obs_type (string, optional) - Comma-separated: bugfix, feature, decision, discovery, changedateStart (string, optional) - YYYY-MM-DD or epoch msdateEnd (string, optional) - YYYY-MM-DD or epoch msoffset (number, optional) - Skip N resultsorderBy (string, optional) - "date_desc" (default), "date_asc", "relevance"Use the timeline MCP tool:
Or find anchor automatically from query:
Returns: depth_before + 1 + depth_after items in chronological order with observations, sessions, and prompts interleaved around the anchor.
Parameters:
anchor (number, optional) - Observation ID to center aroundquery (string, optional) - Find anchor automatically if anchor not provideddepth_before (number, optional) - Items before anchor, default 5, max 20depth_after (number, optional) - Items after anchor, default 5, max 20project (string) - Project name filterReview titles from Step 1 and context from Step 2. Pick relevant IDs. Discard the rest.
Use the get_observations MCP tool:
ALWAYS use get_observations for 2+ observations - single request vs N requests.
Parameters:
ids (array of numbers, required) - Observation IDs to fetchorderBy (string, optional) - "date_desc" (default), "date_asc"limit (number, optional) - Max observations to returnproject (string, optional) - Project name filterReturns: Complete observation objects with title, subtitle, narrative, facts, concepts, files (~500-1000 tokens each)
Observations are summaries. When the answer needs the literal bytes a tool
returned โ the exact diff, the exact command output, the exact API response โ
use the get_tool_uses MCP tool:
Do not start here. Raw tool bodies are unsummarized and can run to thousands of tokens each; that is the whole reason claude-mem compresses them into observations in the first place. Reach for this layer only after search / timeline / get_observations pointed you at specific tool calls.
Parameters:
ids (array, required) - Numeric tool_uses ids OR opaque tool_use_id stringslimit (number, optional) - Max rows to returnproject (string, optional) - Project name filtercontentSessionId (string, optional) - Restrict to one sessionReturns: The stored tool_input / tool_response for those calls, plus the
tool name, session ids, and the observation each was folded into. Payloads over
64 KB were truncated on write and carry a โฆ[truncated: N bytes] marker.
Find recent bug fixes:
Find what happened last week:
Understand context around a discovery:
Batch fetch details:
Recover the exact output of a command we ran last week:
Want synthesized answers instead of raw records? Use /knowledge-agent to build a queryable corpus from your observation history. The knowledge agent reads all matching observations and answers questions conversationally.
get_tool_uses(ids=["toolu_01ABC..."], project="my-project")search(query="bug", type="observations", obs_type="bugfix", limit=20, project="my-project")search(type="observations", dateStart="2025-11-11", limit=20, project="my-project")timeline(anchor=11131, depth_before=5, depth_after=5, project="my-project")get_observations(ids=[11131, 10942, 10855], orderBy="date_desc")search(query="migration failed", limit=20, project="my-project")
get_observations(ids=[11131]) # read the summary first
get_tool_uses(ids=["toolu_01ABC..."]) # only if the summary omitted the detail