mnemon demonstrates solid naming conventions (verb_noun pattern: memory_search, memory_save, memory_pin) and comprehensive descriptions (most 150-400 chars, well above 20-char floor). All 16 tools have descriptions. However, input schemas are partially visible but lack explicit type definitions in the provided source excerpt. Parameter descriptions are present but inconsistent in depth. Output schemas are documented in descriptions (e.g., memory_search returns JSON with doc_id, title, content, confidence, composite_score, recency_score, vector_similarity, created_at) but not formally in JSON Schema format. Error handling guidance is minimal, most tools lack recovery hints. Security considerations (source_key deduplication, correction_of supersession) are well-documented in memory_save but absent from others. Composition is strong: tools chain naturally (search → get → pin/promote). Overall: good naming and descriptions, but schema formalization and error guidance need work.
Check standing-tier memories for logical contradictions using NLI classifier.
Demote a memory from the standing tier back to the general vault.
Soft-delete a memory. Marked as invalidated but not physically removed.
Get a specific memory by its ID. Returns a JSON string. On hit: the full document fields (``id``, ``title``, ``content``, ``content_type``, ``confidence``, ``created_at``, ``updated_at``, ``pinned``, ``access_count``, etc.). On miss: ``{"error": "not_found", "id": <id>}``.
List all standing-tier memories (high-salience, always-recalled).
Pin an important memory to boost its confidence and prevent archival.
Minimal descriptions for 8 tools (memory_pin, memory_forget, memory_demote, memory_list_standing, memory_status, memory_sweep, memory_rebuild, profile_get). Descriptions under 100 chars lack context for LLM tool selection. E.g., 'Pin an important memory to boost its confidence and prevent archival' (11 words) does not explain WHEN to use this vs memory_promote, or what 'confidence' means operationally.
Output schemas documented in prose descriptions but not formalized as JSON Schema. LLMs cannot parse 'Returns a JSON string, a list of result objects' to extract field types. memory_search, memory_get, memory_timeline, memory_status lack explicit schema definitions.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Promote a memory to the capped standing tier. Standing-tier memories are injected into every recall context regardless of query similarity — they condition reasoning rather than answering it. Use sparingly: the cap is the contract (default 15, hard ceiling 20). Past ~20, the tier stops being salient and becomes noise again. Hook-sourced memories (auto-mirror, session_extractor) cannot be promoted — operator-explicit gesture only (Layer 4 composition). Coherence check (added 2026-05-27): after a successful promote, runs NLI bidirectional classification between the new member and each existing standing-tier member. If any pair classifies as ``contradiction`` or ``update``, the warning is surfaced in the return message — the operator can audit + demote either side. Warning-only, not blocking, per the 2026-05-22 audit which found that hard-rejecting on naive NLI hits would false-negative "value updated over time" patterns. Composes with [[mnemon-salience-tier-plan-260521]] invariant 6 (promotion is operator-approved, not auto).
Rebuild the vector search index from scratch (re-embed all memories).
Find memories semantically related to a given memory ID.
Save a new memory. Use this to explicitly store important information — decisions, preferences, observations, project context, or session handoffs. ``source_key`` is an optional stable caller-owned identity. When set, re-saving the same key updates in place (invalidate-prior + insert) instead of accumulating near-duplicates — used by the auto-mirror path, keyed to the local memory file's slug, so a memory edited several times in one session stays a single document. ``correction_of`` is an explicit operator gesture that THIS memory corrects/supersedes a prior one (by its document id). Inserts a ``'supersedes'`` relation so the chain is auditable, and skips the capture-attention auto-boost on the new save (the explicit gesture is canonical signal — automated recurrence detection would be redundant). Raises if the named id doesn't exist.
Search memories using hybrid BM25 + vector search with composite scoring. Primary entry point for finding relevant memories. Results are ranked by a composite of relevance, recency, and confidence. Returns a JSON string — a list of result objects, empty when nothing matches. Each object contains: ``doc_id``, ``title``, ``content``, ``content_type``, ``confidence``, ``composite_score``, ``recency_score``, ``vector_similarity``, ``created_at``. Score fields are floats. ``vector_similarity`` is the raw cosine similarity (0.0–1.0) from the vector store, preserved before RRF fusion; it is None for BM25-only matches and is the right signal for dedup (``composite_score`` is a weighted rank score, not a raw similarity).
Vault status: total documents, vectors, pinned, invalidated, by_type breakdown.
Identify stale memories eligible for archival based on age and access patterns.
Recent memories in reverse chronological order as a JSON list. Each item carries the full document shape (``id``, ``title``, ``content``, ``content_type``, ``confidence``, ``pinned``, ``created_at``, ``updated_at``, ``access_count``). Empty list when no matches.
Retrieve the operator's profile (preferences, settings, metadata).
Update the operator's profile with new preferences or metadata.
No error handling guidance. Tools like memory_get state 'On miss: {"error": "not_found", "id": <id>}' but do not guide the LLM on recovery (e.g., 'Try memory_search() to find the ID'). memory_promote warns on NLI contradictions but does not explain how to resolve them.
Parameter descriptions inconsistent in depth. memory_save documents source_key and correction_of with operational context (deduplication, supersession chain); memory_pin, memory_forget, memory_demote have no parameter descriptions at all (only 'Memory document ID to [action]').
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in source. memory_forget is reversible (soft-delete) but not marked; memory_rebuild is destructive but not annotated. Agents cannot infer safety properties without explicit hints.