Push vs. Pull Agent Memory? Recall, a new open-source memory substrate for AI agents, introduces a push-based memory model where agents automatically check, update, and supersede facts without manual queries. The tool runs locally on SQLite, requires no cloud or server, and supports CLI, MCP, and TUI interfaces. It aims to give developers full control over agent memory with built-in provenance, confidence scoring, and rollback capabilities. The memory layer your agent just uses. It remembers, corrects itself, and recalls across sessions on its own. Local, free, and yours. Install install · Quickstart the-60-second-tour · Demo demo · Agents & MCP hook-up-your-agent · How it works how-it-works · Why Recall why-recall · Compare how-recall-compares · Teams one-graph-many-writers · Checker, Solver & Lattice beyond-memory-checker-solver-and-lattice · Docs /H-XX-D/recall-memory-substrate/blob/main/docs/README.md · Roadmap /H-XX-D/recall-memory-substrate/blob/main/ROADMAP.md Most agent memory is pull: a store you query. You ask, it returns the closest matches, and it is on you to notice when a fact has gone stale. Recall is push : the agent and the substrate run a loop together. It checks what it already knows before it acts, does the work, and writes back what it learned, superseding the old fact when something changes and surfacing the contradiction without being asked. No reminding it to save, no separate cloud service mining your transcript after the fact. Under the hood an LLM proposes a structured write, an admission firewall validates it, and the compiler returns only the relevant subgraph, ranked by evidence, fit to a word budget, all in local SQLite: no server, no account, no cloud. The memory is yours, and every fact still carries provenance, confidence, and a one-command undo. One installable Node.js tool: CLI, read-only TUI, MCP server, quiet maintenance daemon, strict write schema, semantic search, encrypted secrets side graph, and a reproducible benchmark harness. npm install -g github:H-XX-D/recall-memory-substrate Or use the installer script, which clones, builds, and links recall + recall-mcp : curl -fsSL https://raw.githubusercontent.com/H-XX-D/recall-memory-substrate/main/scripts/install.sh | bash Requires Node.js 24+. Recall uses Node's built-in SQLite, so there is no database server, no native build step, no account, and no network dependency. CI runs the core suite on Linux, macOS, and Windows, plus a readiness lane for MCP smoke, Python hooks/toolkit checks, public benchmarks, and installer validation. Upgrades, uninstall, and troubleshooting: Installation Guide /H-XX-D/recall-memory-substrate/blob/main/docs/11 INSTALLATION.md . The installer above already wires up any agent CLI it finds. To do it yourself or after installing a new agent , one idempotent command sets up the skill, the MCP server, the consult-Recall hook, and makes Recall the durable memory layer: recall claude sync Claude Code: skill + MCP + SessionStart hook; turns OFF native auto-memory recall codex sync OpenAI Codex: skill + MCP in config.toml + a Recall directive in AGENTS.md recall claude status confirm what's wired recall codex status for Codex Restart your agent and it's armed: it reads memory before relying on recollection and writes durable findings back on its own; you never tell it to "save." Both syncs back up your config before editing, are safe to re-run, and are reversible recall claude enable-auto-memory . Using a different MCP client? See hook up your agent hook-up-your-agent . recall version confirm the installed package version recall init create the local graph in ./.recall recall status store health, counts, config Memory enters as structured, schema-validated proposals. Normally your agent submits these over MCP see below hook-up-your-agent , but the same path works from the shell: recall admit --json decision.json validated, provenance-stamped, rollbackable It comes back as a compiled context packet, not a dump of the store: recall compile "prepare the auth service deploy" --words 220 objective: prepare the auth service deploy compiler state: - retrieval=fts5-bm25; query="prepare the auth service deploy"; selected cells=3; budget words=220 - health=beliefs:0, contradictions:0, stale or low trust:0, critical warnings:0 relevant memory: - Cap the Postgres pool at 20 connections: Staging fell over at 35 concurrent connections during the load test on June 3. Capped pool size at 20 in service config; raising it requires a load test sign-off. decision:07fbbfd9-… risks: - Auth tokens expire but never rotate: Access tokens have 24h expiry but no rotation path; a leaked token stays valid until expiry. risk:1cb991a1-… tasks: - Add a smoke check for the new rate limiter: The rate limiter shipped behind a flag; nobody has verified the 429 path end to end. task:8bddbb07-… expansion handles: - 07fbbfd9-… 1cb991a1-… 8bddbb07-… A packet holds ranked evidence, open risks and tasks, contradiction warnings when they exist, and expansion handles for drilling into any cell, all under a hard word budget. You can browse the graph at any time: recall tui read-only terminal dashboard recall search "rate limiter" FTS5 + BM25 lexical search recall semantic "token rotation" semantic search hash or real embeddings Every cell also carries an effective confidence next to the author's immutable stated confidence. It is recomputed on every read from incoming supports, challenges, and the writer's contradiction record. Write one contradiction and the number moves: before: the pool-cap decision stands alone decision:6eba1114… state=active/conf:0.7/eff:0.7/… after: one cell contradicts it nothing deleted, no model ran decision:6eba1114… state=active/conf:0.7/eff:0.29 challenged /… Challenged cells sink in ranking, supported cells hold, and writers with a record of overconfidence get discounted. All of it is deterministic and runs offline. Runtime state stays local and is git-ignored by default: .recall/recall.sqlite3 primary graph .recall/secrets.sqlite3 encrypted secrets side graph Back up or move a graph with the portable archive path: recall export recall-export.json recall import --json recall-export.json --db .recall/restored.sqlite3 Undo a bad write through the rollback journal: recall rollback list recall rollback show