Governed memory substrate for AI agents — a local-first, SQLite-backed memory store with full-text search, semantic search, and markdown workspace integration
mem7 demonstrates solid tool design with complete schemas, clear descriptions, and thoughtful parameter organization. All 7 tools have documented input schemas with typed parameters and descriptions. Tool names follow verb_noun convention (memory_store, memory_recall, memory_search). Descriptions average ~150 chars and explain WHAT, WHEN, and WHY. However, output schemas are not explicitly documented in the source, and error handling lacks recovery guidance. The memory_search and memory_context tools show sophisticated parameter design (mode, include_neighbors, neighbor_radius) but descriptions could better explain when to use 'raw' vs 'natural' mode. No tool annotations (readOnlyHint/destructiveHint) are visible in the code.
Search memories and return structured JSON results for programmatic use by agent SDKs. Same search capabilities as memory_search but returns a JSON array of objects with key, value, tags, agent, updated fields instead of formatted markdown.
Delete memories by key or tags.
Read a file from the markdown workspace, optionally between from_line and to_line (1-indexed, inclusive). The path is relative to the workspace root.
List memory keys with metadata (without values). Useful for browsing what is stored.
Recall memories by key, tags, or agent. Returns matching entries sorted by most recent.
Full-text search over memories using BM25 ranking. Use mode='natural' for plain-English questions ; mode='raw' (default) if you want to write FTS5 operators yourself (prefix foo*, AND, OR, NOT). Set include_neighbors=true to also return memories adjacent to sequential keys (e.g. conversational turns).
Output schemas not documented in source code. LLMs cannot plan downstream tool calls or extract fields without knowing what memory_search, memory_recall, and memory_context return.
Error handling lacks recovery guidance. No indication of what LLM should do if a search returns no results, a key is not found, or TTL expiration occurs. Errors should guide next steps (e.g., 'Try memory_list to see available keys').
memory_get description is misleading. It says 'Read a file from the markdown workspace' but the tool is called memory_get and sits alongside memory_store/recall. Unclear whether this is a file system tool or a memory tool. Naming/description mismatch.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Store or update a memory entry. If a key already exists, it is updated (upsert).
memory_search 'mode' parameter description does not explain when to use 'raw' vs 'natural'. LLMs will guess. Should state: 'Use natural for plain-English questions from users; use raw only if you need FTS5 operators like prefix*, AND, OR, NOT.'
No tool annotations visible (readOnlyHint, destructiveHint, idempotentHint). memory_forget is destructive and should be marked. memory_store is idempotent (upsert). These hints help agents reason about safety and retry logic.