Universal memory layer for LLMs with semantic, episodic, and working memory support
Mnesis demonstrates solid tool design with clear naming conventions (verb_noun pattern: memory_write, memory_read, etc.) and comprehensive parameter schemas. All 10 tools have descriptions and typed input schemas. However, descriptions vary significantly in quality, some are detailed (memory_write at ~280 chars with format requirements), others are terse (memory_bootstrap at ~60 chars). Output schemas are not explicitly documented in the source code provided, forcing inference. Error handling guidance is minimal; tools lack recovery hints for common failure modes. Parameter validation rules are mentioned in descriptions but not enforced via schema constraints (e.g., confidence_score 0-1 is documented but not constrained in JSON Schema). The server follows composition patterns well (single responsibility per tool, clear chaining via IDs), but lacks idempotency guarantees and confirmation patterns for destructive operations (memory_delete, memory_update).
Get a structured Markdown snapshot of the user's memory (max 800 tokens). context: optional explicit hint ("development" | "personal" | "business" | "casual") query: when provided, adaptive router classifies domain automatically ("code" | "business" | "personal" | "casual") and injects routed categories. Call this at the START of every conversation, silently. Internalize the snapshot — never quote it back to the user.
List unresolved memory conflicts captured during writes. Returns entries with: - memory_a (existing memory) - memory_b (candidate memory content) - similarity_score - detected_at
Standard bootstrap alias for adapters. Reads initial memory context.
Soft-delete a memory (sets status=archived). Never physically deleted. Always recoverable from the Memory Browser.
Signal which memories were actually useful in this conversation. Increases importance_score by 0.05 and reference_count by 1 for each ID. Marks the current session as ended.
Output schemas not documented in source code. Tools return structured data (e.g., memory_read returns list of {id, content, category, level, importance_score, tags, source_llm}) but LLMs cannot see the schema to plan downstream calls or extract fields reliably.
memory_bootstrap description is only 60 chars ('Standard bootstrap alias for adapters. Reads initial memory context.'), below the 10-200 char LLM-optimized range. Lacks context on when/why to call it vs context_snapshot.
Destructive operations (memory_delete, memory_update) lack confirmation or dry-run patterns. memory_delete is soft-delete (reversible) but memory_update is permanent, no guidance on recovery or undo.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Return a contextual subgraph around one memory. Args: - start_memory_id: memory UUID - depth: traversal depth (default 2, max 5) Returns JSON: { "start_memory_id": "...", "depth": 2, "nodes": [{"id","content_preview","category","level"}], "edges": [{"id","source","target","type","score"}] }
List memories with optional filters. Sorted by importance_score DESC. Returns metadata + first 100 chars of content. category: "identity" | "preferences" | "skills" | "relationships" | "projects" | "history" | "working" level: "semantic" | "episodic" | "working"
Search for memories semantically relevant to the query. context: "development" | "personal" | "creative" | "business" — boosts memories whose tags match this context (×1.3 on final score). Returns: list of {id, content, category, level, importance_score, tags, source_llm}
Update an existing memory. Archives the previous version automatically. Recalculates the embedding. Sets importance_score to max(current, 0.6).
Write a new memory to Mnesis. level: "semantic" (lasting facts) | "episodic" (past events) | "working" (next 72h) category: "identity" | "preferences" | "skills" | "relationships" | "projects" | "history" | "working" privacy: "public" | "sensitive" | "private" confidence_score: 0–1. Semantic memories with confidence < 0.85 go to pending_review. MANDATORY format: third-person declarative. "{name} prefers..." not "I prefer..." Length: 20–1000 characters, under 128 tokens.
Parameter constraints documented in descriptions but not enforced in JSON Schema. E.g., confidence_score described as '0-1' and 'Semantic memories with confidence < 0.85 go to pending_review' but no minimum/maximum in schema. LLMs cannot parse these rules from text alone.
No error handling guidance in tool descriptions. Tools lack recovery hints (e.g., 'If memory not found, try memory_read() with a partial query'). Agents cannot self-correct on failures.