mem-search
thedotmack/claude-mem
Search persistent cross-session memory to find previous solutions and past work.
What is mem-search?
Searches claude-mem's memory database for past sessions, solutions, and decisions. Use when users ask about previous work ("did we solve this before?", "how did we do X last time?"). Follows a 3-layer workflow: search for IDs, filter with timeline context, then fetch full details only for relevant results.
- Search past observations, sessions, and prompts across all projects
- Filter results by type, date range, and observation category (bugfix, feature, decision, discovery, change)
- View timeline context around interesting results with surrounding items
- Batch fetch full observation details with narrative, facts, and concepts
- Support project-based filtering and multiple sort orders
How to install mem-search
npx skills add https://github.com/thedotmack/claude-mem --skill mem-search- claude-mem installed and configured
- MCP tools available: search, timeline, get_observations
How to use mem-search
- 1.Call search() with your query and optional filters (type, date range, project) to get an index of results with IDs and titles
- 2.Review the returned table and note relevant IDs
- 3.Use timeline() with an anchor ID to see context around interesting results
- 4.Select the most relevant IDs based on titles and timeline context
- 5.Call get_observations() with the filtered IDs to fetch full details in one batch request
Use cases
- User asks 'did we already fix this authentication issue?' - search for past auth solutions
- Finding how a previous feature was implemented - search and fetch relevant observations
- Understanding context around a past decision - use timeline to see surrounding work
- Locating bug fixes from last week - search with date range and bugfix filter
- Batch retrieving multiple related observations to understand a past project phase
- Developers working across multiple sessions on the same project
- Teams needing to reference previous solutions and decisions
- Users building on past work without re-solving known problems
mem-search FAQ
Use mem-search only for PREVIOUS sessions. For the current conversation, ask directly. mem-search is for 'did we solve this before?' not 'what did we just discuss?'
The workflow saves ~10x tokens by filtering before fetching. Search returns ~50-100 tokens per result, timeline adds context, then you fetch only relevant full observations (~500-1000 tokens each).
You can search across all projects by omitting the project parameter, or filter to a specific project by including project="project-name".
You can filter by obs_type: bugfix, feature, decision, discovery, or change. Combine multiple types with comma separation.
Always use get_observations() with multiple IDs in one call rather than fetching individually. This is faster and uses fewer tokens.
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.
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?"
3-Layer 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)
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")
Why This Workflow?
- Search index: ~50-100 tokens per result
- Full observation: ~500-1000 tokens each
- 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.
smart-explore
Token-optimized structural code search using tree-sitter AST parsing for efficient codebase exploration.
make-plan
Create detailed, phased implementation plans with documentation discovery before execution.
do
Execute phased implementation plans by orchestrating specialized subagents for each task.
timeline-report
Generate narrative reports analyzing a project's complete development history from claude-mem's persistent timeline.
claude-code-plugin-release
Automated semantic versioning and release workflow for Claude Code plugins with manifest sync, git tagging, and GitHub releases.
knowledge-agent
Build and query AI-powered knowledge bases from your observation history to create focused "brains" on specific topics.