The open-source memory engine for AI agents. Multiplicative scoring, a causal graph, lifecycle management, and active forgetting
Papez demonstrates solid tool design with complete schemas, clear descriptions, and thoughtful parameter organization. All 13 tools have descriptions (avg 150 chars) and input schemas with typed parameters. Naming follows verb_noun convention (memory_*, pin_*, delete_*, etc.). However, output schemas are not documented in the visible code, parameter descriptions vary in depth, and error handling guidance is minimal. No tool annotations (readOnlyHint/destructiveHint) are present despite clear risk classifications. The causal graph domain is well-represented, but LLM-facing descriptions could be more prescriptive about when to use each tool vs. alternatives.
Permanently delete a memory node and all its edges.
List all core memories, optionally filtered by category.
Record a correction: creates a new memory that supersedes an existing one. The old memory is kept (decayed in recall results), not deleted.
Explain a memory's score breakdown.
Recall memories using hybrid search (vector + keyword + graph spreading activation).
Filtered vector search by status, category, date, or entity. Pass an EMPTY query to enumerate by recency instead (no vector search, no embedder needed): with since/active_since this answers 'what's new/changed since <ts>' without knowing what to query for.
Output schemas not documented. Tools return results but LLMs cannot see field structure, forcing them to infer response shape. This breaks downstream tool chaining and wastes tokens on parsing.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are classified with Risk labels (READ_ONLY, WRITE, DESTRUCTIVE) in metadata but not exposed to LLM via schema annotations. LLMs cannot infer safety properties.
Destructive operations (delete_memory) lack confirmation/dry-run pattern. No guidance in description about irreversibility or recovery options. Agents may delete memories without safeguards.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | <=2025-11-25 | v2 |
Get graph statistics.
Store a new memory in the causal memory graph. Use `related` for writer-specified typed edges (each {id, type}); `related_to` is legacy and always creates caused_by edges. May return `possible_conflicts` — heuristic hints, not verified contradictions.
Traverse the memory graph from a starting node. Returns reachable nodes AND the edges of the induced subgraph among them (source/target/type/weight/created_by) — a superset of the BFS tree, so paths can be reconstructed.
Pin a memory to core status.
Promote a private memory to org visibility. Caller must own the node and belong to the target org.
Configure core memory category preferences.
Unpin a memory and re-evaluate core eligibility.
Error handling guidance missing. Tool descriptions do not explain what errors can occur, how to recover, or what to try next. E.g., memory_store mentions 'possible_conflicts' but does not explain how to handle them.
Parameter descriptions lack actionable constraints. E.g., 'edge_type' in memory_traverse accepts a list but does not enumerate valid types; 'k' in memory_recall has no min/max bounds; 'category' in set_core_preferences is free-form with no guidance.