Persistent memory and session intelligence for Claude Code: auto-tracks mistakes, decisions, and context via hooks, and mines session history for patterns and recall.
Claude Engram exhibits significant definition quality gaps typical of early-stage community servers. While 16 tools are registered with schemas, most suffer from: (1) vague or missing parameter descriptions, (2) operation-enum patterns that obscure actual tool contracts, (3) missing output schema documentation, (4) descriptions that are either overly long (memory tool: >2000 chars) or generic (scope, context, convention tools), (5) lack of error guidance. The memory tool is a critical design anti-pattern: it conflates 21 sub-operations into a single tool with a massive enum, forcing the LLM to reason about which operation to invoke and which optional parameters apply, this violates the single-responsibility principle (pattern:tool). Tools like scope, context, convention, and session_mine declare only an 'operation' parameter with no description of valid values, making them essentially unusable without reading implementation code. No tools document output schemas. The server scores above 0 due to basic schema presence and some attempt at descriptions, but would be rejected in any production code review.
Audit multiple files for issues and code quality problems.
Check Claude Engram health. Returns: status, model, memory stats.
Context operations for managing session context and history.
Convention operations for managing code conventions and patterns.
Map dependencies and imports for a file or project.
Generate a summary of a file's contents and structure.
Find similar issues and patterns in the codebase.
memory tool conflates 21 sub-operations into a single tool with massive operation enum. Violates single-responsibility principle. LLM must reason about which operation to invoke, which optional parameters apply, and how they interact. Example: 'consolidate' operation only accepts 'tag' param; 'search' only accepts 'query', 'file_path', 'tags'; 'modify' only accepts 'memory_id', 'content', 'relevance'. This combinatorial explosion invites misuse.
scope, context, convention, session_mine tools declare only an 'operation' parameter with NO enum values, NO description of valid operations, and NO output schema. The inputSchema shows {"operation": {"type": "string", "description": "...operation to perform"}}, LLM cannot determine which operations exist or what they return. Makes tools unusable without reading implementation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 29 | 1.0.0+ | v1 |
Analyze the impact of proposed changes on a file.
Memory operations. Operations: remember, recall, forget, search, cleanup, consolidate, clusters, add_rule, list_rules, modify, delete, batch_delete, promote, recent, archive, restore, archive_search, archive_status, hybrid_search, embed_all, list_mistakes, acknowledge_mistake
RARELY NEEDED — the PreToolUse hook auto-runs this before every edit. Call manually only for an explicit impact check (past mistakes, loop risk, scope violations).
Scope guard for multi-file tasks. Operations for tracking file impact and dependencies.
Search the codebase for patterns, symbols, and references.
RARELY NEEDED — Stop/SessionEnd hooks handle teardown automatically. Just a summary recap; memories save without it.
Mine session history for patterns, decisions, and mistakes.
RARELY NEEDED — the SessionStart hook auto-loads context every session. Call only for an explicit deep re-load (full memories + checkpoints + decisions + health).
Work tracking. Operations: log_mistake, log_decision
No tool documents its output schema. The rubric requires: 'Document the output schema. LLMs need to know what fields to expect so they can plan downstream tool calls.' Without output documentation, LLM cannot chain tools or extract required IDs. Example: memory 'search' operation, does it return memory IDs, content, tags, relevance scores, timestamps? Unknown.
memory tool description is 2000+ characters (violates 10 - 1024 char baseline). Embeds dense inline docs for all 21 operations, causing token waste and burying critical info. Example: 'consolidate' description spans 5 sentences explaining a complex operation. Should be split into separate tools or moved to docs.
Parameter descriptions inconsistent and frequently missing. Examples: memory tool's 'dry_run' param has description but 'limit' is described as 'For search/recent: max results' without stating a valid range. deps_map 'symbol' param has minimal guidance ('Specific symbol to trace'). audit_batch 'min_severity' has no description of valid values (is it 'low|medium|high'?).
session_start and session_end descriptions include 'RARELY NEEDED' warnings, signaling fundamental design confusion. If these hooks auto-handle teardown and context reload, they should not be exposed as tools at all, or the hook behavior should be optional. Presence of these warnings suggests the tool contract is unclear even to the author.
No error handling guidance. Tools like audit_batch, impact_analyze, and find_similar_issues offer no hint about what errors are retryable, what partial failure means, or how to recover. Rubric requires: 'Error responses must tell the LLM what to do next.' None of these tools document expected failures.
Naming inconsistency and ambiguity. 'scout_search' is non-standard (should be 'search_codebase' or 'search_symbols'). 'session_mine' is vague, mine for what? Examples: session_mine, pre_edit_check, find_similar_issues lack verb_noun clarity. 'pre_edit_check' might be confused with 'check_edit' or 'validate_edit'.
memory tool's 'category' enum forces a closed taxonomy (discovery, priority, note, rule, mistake, context). No way for agents to extend or create custom categories. If a new category is needed, the tool signature must be updated. Constrains extensibility.
audit_batch accepts both 'file_paths' (array) and 'code' (string) with no clear guidance on which to use or whether both can be supplied together. Parameters are mutually exclusive but undocumented. Rubric: 'If parameters are mutually exclusive, state this in descriptions.'