PluginBench
Skill
Review
Audit score 70

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
Prerequisites
  • claude-mem installed and configured
  • MCP tools available: search, timeline, get_observations
Claude Code
Cursor
Windsurf
Cline

How to use mem-search

  1. 1.Call search() with your query and optional filters (type, date range, project) to get an index of results with IDs and titles
  2. 2.Review the returned table and note relevant IDs
  3. 3.Use timeline() with an anchor ID to see context around interesting results
  4. 4.Select the most relevant IDs based on titles and timeline context
  5. 5.Call get_observations() with the filtered IDs to fetch full details in one batch request

Use cases

Good for
  • 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
Who it's for
  • 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

When should I use mem-search vs asking about the current conversation?

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?'

Why the 3-layer workflow instead of just fetching everything?

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).

Can I search across all projects or do I need to specify one?

You can search across all projects by omitting the project parameter, or filter to a specific project by including project="project-name".

What observation types can I filter by?

You can filter by obs_type: bugfix, feature, decision, discovery, or change. Combine multiple types with comma separation.

Should I fetch observations one at a time or in batches?

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 term
  • limit (number) - Max results, default 20, max 100
  • project (string) - Project name filter
  • type (string, optional) - "observations", "sessions", or "prompts"
  • obs_type (string, optional) - Comma-separated: bugfix, feature, decision, discovery, change
  • dateStart (string, optional) - YYYY-MM-DD or epoch ms
  • dateEnd (string, optional) - YYYY-MM-DD or epoch ms
  • offset (number, optional) - Skip N results
  • orderBy (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 around
  • query (string, optional) - Find anchor automatically if anchor not provided
  • depth_before (number, optional) - Items before anchor, default 5, max 20
  • depth_after (number, optional) - Items after anchor, default 5, max 20
  • project (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 fetch
  • orderBy (string, optional) - "date_desc" (default), "date_asc"
  • limit (number, optional) - Max observations to return
  • project (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.