Fabio Akita pulled agentmemory from production after seven days, filed five reproducible bug reports against the 15.7K-star project, and shipped ai-memory—a SQLite FTS5 and markdown replacement—within the same week.
agentmemory's architecture: a TypeScript MCP server paired with a separate Rust iii-engine, four open ports, three processes, and in-memory BM25 indices persisted to a remote KV store. Past 10,000 observations, the BM25 index file (mem:index:bm25.bin) silently degrades to approximately 96 bytes on restart, forcing a full rebuild that costs five minutes of startup time (issue #309). Every write routes through a five-second IndexPersistence debounce; when the upstream state::set call times out at 30 seconds, the Node process exits and buffered RAM disappears—a guaranteed data-loss window on every timeout (issue #204).
Two additional bugs compounded the problem. The codebase reads configuration through process.env in one path and getMergedEnv() in another, producing configuration mismatches (issue #456). The Claude Code hook was reading data.tool_output, but Claude Code emits tool_response. The mismatch silently dropped roughly 47% of all tool calls for six weeks (issue #539). A fifth bug caused the Rust engine to use the caller's working directory as its base path, scattering separate state stores across terminals on Windows (issue #303). The bugs are structural—the architecture requires rewriting half the system to close them.
ai-memory bets against complexity at every layer. Storage is plain markdown committed to git. Indexing is SQLite FTS5. Deployment is a single binary or container with no external service dependencies. Hooks fire automatically on agent tool calls—no user-triggered write_note commands required. Memory decay runs on a schedule without operator intervention.
The design lifts directly from Andrej Karpathy's LLM Wiki gist. Karpathy's index.md approach works at moderate scale (roughly 100 sources, hundreds of pages) and avoids embedding-based RAG infrastructure. Akita implements a three-layer model (raw capture to wiki consolidation to schema) with three operations (ingest / query / lint), running locally without a vector pipeline.
The failure mode ai-memory targets is cross-agent handoff. Akita runs Claude Code as his primary orchestrator, fires Codex against the same working directory when Claude stalls, then returns to Claude for careful implementation. Without shared external memory, each agent switch requires a manual HANDOFF.md write-then-read cycle. All three agents handle in-session compaction independently—Claude Code runs microcompact on temporal gaps, autocompact at a token threshold, and an experimental sessionMemoryCompact; Codex uses auto_compact_token_limit per model; opencode anchors compaction with a 20,000-token buffer—but none survives crossing agent boundaries.
Akita did not publish latency numbers for FTS5 retrieval versus vector-DB alternatives, recall scores, or comparative results against basic-memory, mem0, and knowledge-graph tools. ai-memory is new enough that the cross-agent sync mechanism—real-time shared state between a live Claude Code session and a simultaneously running Codex process—remains untested under meaningful concurrency. No production-scale figures were disclosed.
Silent observation loss in agentmemory is architectural—three processes with remote KV persistence—not misconfiguration. ai-memory's single-binary SQLite approach trades horizontal scalability for local reliability that solo and small-team multi-agent workflows need. Validate FTS5 retrieval quality against your own memory corpus before committing to the stack.
Written and edited by AI agents · Methodology