mem-search
thedotmack/claude-mem
Search persistent cross-session memory to find past solutions and work.
What is mem-search?
Queries claude-mem's memory database to retrieve work from previous sessions. Use when users ask about prior solutions, past approaches, or historical context. Follows a layered workflow: search index → filter results → fetch full details → (rarely) retrieve raw tool output.
- Search memory by query, date range, project, and observation type (bugfix, feature, decision, discovery)
- Retrieve timeline context around specific results with configurable depth before/after
- Batch-fetch full observation details (title, narrative, facts, concepts, files) for filtered IDs
- Access raw tool input/output when summaries are insufficient
- Filter results by project name and observation type to reduce token usage
How to install mem-search
npx skills add https://github.com/thedotmack/claude-mem --skill mem-search- claude-mem installed and configured
- MCP server running with memory database access
- Project name (optional but recommended for filtering)
How to use mem-search
- 1.Call search() with your query, optional filters (date range, type, project), and limit to get an index of results with IDs and timestamps
- 2.Review the returned table of titles and decide which IDs are relevant
- 3.Call timeline() with an anchor ID to see context around interesting results, or skip to step 3 if you have your IDs
- 4.Call get_observations() with the filtered list of IDs to fetch full details in one batch request
- 5.Only call get_tool_uses() if the observation summaries lack necessary detail (exact diffs, command output, API responses)
Use cases
- User asks 'did we already solve this?' — search for prior solutions and fetch relevant observations
- Retrieve how a specific problem was solved in a previous session
- Find all bug fixes or feature work from a particular date range
- Get context around a discovery by viewing surrounding work chronologically
- Recover exact command output or API responses from past tool calls
- Developers working across multiple sessions on the same project
- Teams needing to reference prior solutions and decisions
- Anyone using claude-mem for persistent work history
mem-search FAQ
Use search() first to find candidate results by keyword, date, or type. Use timeline() to understand context around a specific result by viewing surrounding work chronologically.
Batch fetching uses one HTTP request instead of N, and observations are already summarized (~500–1000 tokens each). Raw tool bodies can be thousands of tokens, so filtering before fetching saves 10x tokens.
Only when observation summaries omit necessary detail — exact diffs, literal command output, or precise API responses. Start with search → timeline → get_observations; reach for raw tool I/O only if those layers don't answer the question.
You can search all projects by omitting the project parameter, or filter to a specific project by name.
bugfix, feature, decision, discovery, and change. Combine multiple types in obs_type as comma-separated values.
Full instructions (SKILL.md)
Source of truth, from thedotmack/claude-mem.
name: mem-search description: 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.
Memory Search
Search past work across all sessions. Simple workflow: search -> filter -> fetch -> (rarely) disclose raw tool I/O.
When to Use
Use when users ask about PREVIOUS sessions (not current conversation):
- "Did we already fix this?"
- "How did we solve X last time?"
- "What happened last week?"
Layered Workflow (ALWAYS Follow)
NEVER fetch full details without filtering first. 10x token savings.
Step 1: Search - Get Index with IDs
Use the search MCP tool:
search(query="authentication", limit=20, project="my-project")
Returns: Table with IDs, timestamps, types, titles (~50-100 tokens/result)
| ID | Time | T | Title | Read |
|----|------|---|-------|------|
| #11131 | 3:48 PM | 🟣 | Added JWT authentication | ~75 |
| #10942 | 2:15 PM | 🔴 | Fixed auth token expiration | ~50 |
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"
Step 2: Timeline - Get Context Around Interesting Results
Use the timeline MCP tool:
timeline(anchor=11131, depth_before=3, depth_after=3, project="my-project")
Or find anchor automatically from query:
timeline(query="authentication", depth_before=3, depth_after=3, project="my-project")
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 filter
Step 3: Fetch - Get Full Details ONLY for Filtered IDs
Review titles from Step 1 and context from Step 2. Pick relevant IDs. Discard the rest.
Use the get_observations MCP tool:
get_observations(ids=[11131, 10942])
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 filter
Returns: Complete observation objects with title, subtitle, narrative, facts, concepts, files (~500-1000 tokens each)
Step 4: Disclose Raw Tool I/O - Only When Step 3 Was Not Enough
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:
get_tool_uses(ids=["toolu_01ABC..."], project="my-project")
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) - Numerictool_usesids OR opaquetool_use_idstringslimit(number, optional) - Max rows to returnproject(string, optional) - Project name filtercontentSessionId(string, optional) - Restrict to one session
Returns: 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.
Examples
Find recent bug fixes:
search(query="bug", type="observations", obs_type="bugfix", limit=20, project="my-project")
Find what happened last week:
search(type="observations", dateStart="2025-11-11", limit=20, project="my-project")
Understand context around a discovery:
timeline(anchor=11131, depth_before=5, depth_after=5, project="my-project")
Batch fetch details:
get_observations(ids=[11131, 10942, 10855], orderBy="date_desc")
Recover the exact output of a command we ran last week:
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
Why This Workflow?
- Search index: ~50-100 tokens per result
- Full observation: ~500-1000 tokens each
- Raw tool body: up to 64 KB each — the layer you skip 95% of the time
- Batch fetch: 1 HTTP request vs N individual requests
- 10x token savings by filtering before fetching
Knowledge Agents
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.
Related skills
More from thedotmack/claude-mem and the wider catalog.

oh-my-issues
Cluster GitHub issues by root cause into plan-master issues and ship atomic fixes per cluster.

pathfinder
Map codebases into feature flowcharts, identify duplication, and propose unified architecture.

smart-explore
Token-optimized structural code search using tree-sitter AST parsing for efficient codebase exploration.

standup
Coordinate multi-branch consolidation via read-only git standup chat.

timeline-report
Generate narrative reports analyzing a project's complete development history from claude-mem's persistent timeline.

version-bump
Automated semantic versioning and release workflow for Claude Code plugins with multi-manifest sync and GitHub integration.