From claude-mem
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 claudepluginhub zhp-owl/claude-mem --plugin claude-memThis skill uses the workspace's default tool permissions.
Search past work across all sessions. Simple workflow: search -> filter -> fetch.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
Search past work across all sessions. Simple workflow: search -> filter -> fetch.
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:
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"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 filterReview 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 filterReturns: Complete observation objects with title, subtitle, narrative, facts, concepts, files (~500-1000 tokens each)
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")
Smart-explore tools (smart_search, smart_outline, smart_unfold) use tree-sitter AST parsing. The following languages are supported out of the box.
JS, TS, Python, Go, Rust, Ruby, Java, C, C++, Kotlin, Swift, PHP, Elixir, Lua, Scala, Bash, Haskell, Zig, CSS, SCSS, TOML, YAML, SQL, Markdown
Markdown files get structure-aware parsing beyond generic tree-sitter:
#/##/### headings are extracted as nested symbols (sections contain subsections)code symbols with language annotationsmart_unfold on a heading returns the full section content (heading through all subsections until the next heading of equal or higher level).claude-mem.jsonAdd custom tree-sitter grammars for languages not in the bundled set. Place .claude-mem.json in the project root:
{
"grammars": {
"gleam": {
"package": "tree-sitter-gleam",
"extensions": [".gleam"]
},
"protobuf": {
"package": "tree-sitter-proto",
"extensions": [".proto"],
"query": ".claude-mem/queries/proto.scm"
}
}
}
Fields:
package (string, required) -- npm package name for the tree-sitter grammarextensions (array of strings, required) -- file extensions to associate with this languagequery (string, optional) -- path to a custom .scm query file for symbol extraction. If omitted, a generic query is used.Rules:
npm install tree-sitter-gleam)..claude-mem.json take effect on next worker restart.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.