Local-first RAG memory layer for Claude Code projects
Project Memory Tool has clear, well-structured tool definitions with complete input schemas and descriptions. All 4 tools are explicitly registered with proper JSON Schema. Naming follows verb_noun convention (memory_query, memory_search, memory_status, memory_reindex). Descriptions are substantive (100-150 chars) and explain WHEN to use each tool. However, output schemas are entirely undocumented, LLMs cannot predict response structure. Parameter descriptions are present but lack format constraints (e.g., top_k has no min/max bounds). Error handling is minimal; no recovery guidance or categorization. No tool annotations (readOnlyHint/destructiveHint) despite clear read/write distinction. Missing idempotency guarantees and per-item error reporting for batch-like operations.
Query the project memory for information about past decisions, architecture, tasks, or any documented context.
Trigger a reindex of the project memory. Use after significant documentation changes or when memory_status shows stale files.
Search project memory and return matching chunks with source locations. Use when you want relevant documentation without synthesis.
Return the current state of the project memory index.
Output schemas completely undocumented. LLMs cannot predict response structure (fields, types, nesting). memory_query returns {answer, sources} but this is inferred from code, not declared in tool schema. memory_search returns formatted text with embedded metadata but structure is opaque.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). memory_reindex is clearly destructive/write (modifies index state) but lacks destructiveHint. memory_query and memory_search are read-only but lack readOnlyHint. Agents cannot distinguish safe from risky operations.
Parameter constraints missing. top_k has no min/max bounds (unbounded integers risk timeouts or excessive results). synthesize and force are booleans with defaults but no guidance on consequences. No enum constraints or format patterns.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
Error handling provides no recovery guidance. If query fails (e.g., config not found, embedding service down), _do_query() will raise an exception. No try-catch, no categorization (retryable vs fatal), no actionable error messages for LLM.
No idempotency guarantees. memory_reindex with force=true re-embeds all files, if called twice in quick succession, could cause duplicate work or race conditions. No deduplication or idempotent key support.