small shell. long memory. Memory for AI coding agents that goes stale when your code does: AST-anchored, evidence-verified, local MCP server, zero network calls.
Limpet defines 6 tools with complete input schemas and descriptions. Naming follows verb_noun convention (recall, remember, map, affected, verify_queue, admin). Descriptions are substantive (50-200 chars typical), explaining WHAT and WHEN. However, parameter descriptions lack actionable constraints (no enums, ranges, or format specs). The 'admin' tool conflates multiple operations (status, export, import, ledger, full_index, forget, gc, prune_stale, reindex_all) into one tool, violates single-responsibility. Output schemas are not documented in the source. Error handling is present but generic (anyhow::Result wrapping). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY vs WRITE). Security: no secrets exposed as params, but no audit trail or permission gates visible.
Administrative operations: status, export, import, ledger, full_index, and memory management.
List files affected by recent changes (dirty files from the last sweep).
Get the symbol map (functions, classes, methods, imports, calls) for a file or symbol FQN.
Search memory by task description, optionally scoped to a working set of files, with token budget control and confidence scoring.
Store a new memory with optional anchors to code locations, evidence, links, and metadata.
Check the verification queue for anchors that need re-verification due to code changes.
admin tool conflates 9 distinct operations (status, export, import, ledger, full_index, forget, gc, prune_stale, reindex_all) into one tool. Violates single-responsibility principle. LLM must reason about which 'op' string to pass; no enum constraint prevents hallucinated operations.
Parameter descriptions lack actionable constraints. 'budget_tokens' has no range (default 1200, but min/max unknown). 'kind' in remember has no enum of valid categories. 'op' in admin has no enum of valid operations. LLMs cannot validate inputs without explicit constraints.
Output schemas not documented in source. Recall returns 'items' array with fields (id, kind, body, conf, source, status, anchors, flags, matched) but this structure is inferred from code, not declared in tool definition. LLMs cannot plan downstream calls without knowing return shape.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
No tool annotations despite clear risk levels. 'recall', 'affected', 'verify_queue', 'map' are READ_ONLY; 'remember', 'admin' are WRITE. MCP spec supports readOnlyHint and destructiveHint to guide agent planning. Annotations missing.
Error handling returns generic anyhow::Result. No recovery guidance. E.g., if 'target' in map tool is invalid, error message does not suggest alternatives or next steps. Violates recovery-guide pattern.