Personal, local-first memory infrastructure for coding agents. Provides durable fact storage, budgeted recall, contradiction resolution, and guardrailed compaction with zero external dependencies.
Leptin demonstrates strong naming conventions (verb-noun patterns: remember, recall, compact, forget, restore, inspect, diet_report, record_feedback, self_tune) and comprehensive parameter schemas with type definitions and descriptions. All 9 tools have detailed descriptions (100-300+ chars) explaining WHAT, WHEN, and WHY. However, output schemas are entirely undocumented, no tool specifies what fields are returned, forcing LLMs to infer structure. Error handling guidance is absent; tools lack recovery hints or categorization (retryable vs fatal). Parameter descriptions are strong but some lack format constraints (e.g., 'query' in recall/inspect could specify length/pattern). No tool declares permissions or security implications despite write/reversible operations.
Run guardrailed compaction: decay-prune weak memories and merge duplicates. A recall guardrail re-checks the store afterwards and auto-rolls-back any prune that would hurt recall. Use dry_run to preview.
Memory-health readout for a window (session | 7d | all): is your memory staying correct and lean — contradictions resolved, stale facts flagged, nothing silently dropped — not just growing. Includes the audit + savings.
Soft-delete a memory by id or by query. Forgotten memories are quarantined (reversible), never hard-deleted, and can be restored.
Glass-box view of a memory by id or query: content, provenance, current strength, status, and full event history.
Retrieve what past-you knows — call this BEFORE acting on a project decision (package manager, framework, region, auth, conventions). What comes back is the CURRENT resolved truth: reversed decisions are already removed, so trust it over your own assumptions. Packed under a token budget (not a top-k dump).
No output schemas documented. Tools return results but LLMs cannot infer structure (fields, types, pagination). Forces agents to guess what data is available.
No error handling guidance. Tools lack recovery hints (e.g., 'If memory not found, try recall() with a broader query'). Errors will not guide LLM recovery.
No permission declarations. Tools modify state (remember, record_feedback, compact, self_tune) but do not declare required scopes or permission checks.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Close the loop on recalled memories: mark them 'useful' (it helped — reinforces, and reverses one prior harmful mark) or 'harmful' (it misled — down-weights; repeated harm also flags it for review). This is the only signal that proves a memory actually helped, so the store gets more relevant with use. Pass the memory_ids you acted on.
Save a durable fact, decision, or lesson the moment your human states it — so future-you doesn't re-learn it or act on the old version. If it contradicts something you stored before, the NEW truth wins automatically (the old one is kept, reversible). Use mtype='lesson' for a mistake you must never repeat (never forgotten); 'task' for ticket-scoped notes that fade. source_ref anchors it to a spec/ticket so it's flagged when that changes.
Restore a forgotten/quarantined memory back to active.
Self-tune the memory policy: replay this store's data under candidate configs and commit a change only if held-out evals prove a net win (more savings, no recall loss) — else leave it unchanged. Offline, zero LLM calls. Use dry_run to preview the proposed change.
Parameter 'query' in recall/inspect lacks format constraints. No length limit, pattern, or examples. LLMs may pass empty strings or extremely long queries.
forget/restore accept either memory_id OR query but do not document mutual exclusivity. LLMs may pass both, causing ambiguous behavior.