Local-first long-term memory for AI agents: a plain Markdown vault plus a thin MCP server. Token-efficient, plug-and-play.
agentbrain presents a specialized memory management system with 8 tools covering query, read, ingest, profile, and vault management. Tool naming is clear and action-oriented (memory_* verb_noun pattern). Descriptions are detailed and context-aware, explaining not just WHAT but WHEN and HOW (10-300 chars, well above minimum). Input schemas are fully visible and properly typed with JSON Schema. However, output schemas are NOT documented, the code returns `str` with no specification of response structure, which forces LLMs to parse unstructured text. Tool parameters have good descriptions with constraints (e.g., top_k clamped 1-20, lesson <=30 lines), but lack explicit error handling guidance and recovery paths. Security is handled server-side (no credentials in params), and the composition is sound (each tool has one responsibility). The main gap is absent output documentation and missing error classification.
Find recurring patterns (cases/tags ingested >= min_repeat times within window_days) and write a promotion proposal to _consolidations/.
Add a verified, reusable lesson after duplicate checks and host authorization. Format: facts + applicable scenario + fix, <= 30 lines; source_summary <= 60 chars. Do not save guesses or conversation transcripts. Creates a new file only — never edits existing lessons; near-duplicates are flagged; credential-shaped content is refused automatically.
Health-check the vault: duplicates, stale, expired, untagged and low-confidence lessons. Writes a merge proposal to _consolidations/ that a human approves via `agentbrain apply`.
Read the owner's hard rules (Immutable) and soft preferences (Mutable-Hints). The profile is read-only; changes go through memory_suggest.
Search active lessons by concrete task/error keywords. mode='index' returns compact candidates without counting reads; mode='full' reads and counts full text. top_k is clamped to 1-20; tag optionally filters results. Expired/superseded lessons are excluded. No match? Retry once with broader keywords or the other language.
Output schemas undocumented. All 8 tools return `str` with no specification of response structure (JSON, plain text, markdown, error format). LLMs cannot parse outputs reliably or extract chaining IDs.
No error classification or recovery guidance. Descriptions mention constraints (e.g., 'expired content is labelled') but do not tell LLMs what to do on failure: is it retryable? user-fixable? fatal?
memory_ingest lacks dry-run or confirmation step. Description says 'credential-shaped content is refused automatically' but does not explain how rejection is signaled or how to proceed on validation failure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Read selected lessons in full; pass at most 10 unique ids. Active reads count once per id per call. Superseded ids point to replacements; expired content is labelled and does not increase usage.
Return compact vault utilization statistics: active, retired, read, unread, total reads and the most-read lessons.
The only agent-writable path toward hard rules (Immutable) and soft preferences (Mutable-Hints). Propose a change you observed with a one-line rule wording; it lands in Agent-Profile/_suggestions/ for the owner to review. The profile itself is never modified by agents.
memory_query and memory_read omit pagination guidance. memory_query returns top_k results but no next_cursor, total count, or next-page pattern documented. Large vaults may return incomplete data.
memory_lint and memory_distill return proposal paths ('_consolidations/') but do not document approval workflow or how the LLM should interpret success/failure.