Skip to content
Back to skills

Mem Search

ASecurity

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.

  • 96,877 stars
  • 0 votes
  • 0 copies
  • 24 views
  • Added December 19, 2025
ai-agentsapidatabase

Works with

  • api
  • mcp

Security analysis

A100/100

Pro scans all 15 files and shows the line behind each finding

Scanned September 20, 2026

npx -y skills add thedotmack/claude-mem --skill mem-search --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Mem Search?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Mem Search
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/thedotmack-mem-search/badge)](https://www.skillsdirectory.com/skills/thedotmack-mem-search)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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 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)

### 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) - Numeric `tool_uses` ids OR opaque `tool_use_id` strings
- `limit` (number, optional) - Max rows to return
- `project` (string, optional) - Project name filter
- `contentSessionId` (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.

Files in this skill

  • SKILL.md9.1 KB
  • operations/by-concept.md3.8 KB
  • operations/by-file.md3.7 KB
  • operations/by-type.md3.1 KB
  • operations/common-workflows.md6.7 KB
  • operations/formatting.md9.2 KB
  • operations/help.md4.3 KB
  • operations/observations.md4 KB
  • operations/prompts.md3.6 KB
  • operations/recent-context.md3.8 KB
  • operations/sessions.md3.5 KB
  • operations/timeline-by-query.md5.5 KB
  • operations/timeline.md4.6 KB
  • principles/anti-patterns.md5.4 KB
  • principles/progressive-disclosure.md3.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.