Local-first persistent memory for Claude Code. Semantic search, auto-embedding, team brain. Zero cloud dependency.
claude-brain provides 4 tools with complete input schemas and descriptions, but exhibits significant gaps in parameter documentation, output schema clarity, and error handling guidance. Tool names follow verb_noun convention (brain_search, brain_write, brain_read, brain_status), which is good. However, descriptions lack actionable context about when to use each tool vs. alternatives, and parameter descriptions are minimal. The brain_write tool accepts a 'category' enum but does not validate or document the constraint in the description. Output schemas are not formally documented, responses are inferred from code inspection. Error handling returns raw error dicts without recovery guidance (e.g., 'Brain not initialized' does not suggest the exact command to run). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present despite clear semantic differences (brain_write is destructive, brain_search is read-only).
Read a specific key from brain memory.
Semantic search across all brain memory collections. Use this to recall past decisions, learned patterns, project context, and session history.
Get brain health: entry count, vector count, collection stats.
Write a key-value entry to persistent brain memory. Use for decisions, learnings, patterns, and important context that should persist across sessions.
Output schemas not formally documented. Responses are inferred from code (e.g., brain_search returns {results: [...], total: int}; brain_write returns {status, key}). LLMs cannot plan downstream tool calls without knowing expected response structure.
Error responses lack recovery guidance. _check_init() returns raw error dicts like 'Brain not initialized. Run: claude-brain init...' but does not provide the exact command or next step the LLM should suggest to the user. Errors should categorize as retryable, user-fixable, or fatal.
Parameter descriptions are minimal or missing context. 'category' in brain_write lists allowed values ('general, project, decision, pattern, session') in the description but does not explain when to use each. 'priority' (1-10) lacks guidance on what priority levels mean or when to use high vs. low.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). brain_write is clearly destructive (modifies state), brain_search is read-only, and brain_read is idempotent. Annotations help LLMs reason about retry safety and side effects.
brain_search result limit (top_k default=5) is not enforced in code. The function sorts results but does not cap at top_k if more are available. Large result sets could exhaust context window. No pagination or next_cursor support.