Total Recall — the AI Memory Layer (master)
25 JUL AT 10:34 AM

Total Recall — the AI Memory Layer (master)

0 LOVES 2 VIEWS
Program master — turning the platform's pointer graph into a live, queryable, writable knowledge hub for AI agents, dogfooded on real PM work. Phases 1–5 + 8 + 9 shipped; 6+7 deferred pending real usage. The read → temporality → write-back → narrate → chat arc.

"Get your ass to Mars." Total Recall turns the platform's pointer graph into a live, queryable, writable knowledge hub for AI agents — dogfooded on Travis's own day-job PM workload so a proven-but-chaotic fleet of Claude automations becomes a compounding system.

The premise: an AI agent already connected to everything (MCP, APIs, CLI, playwright) does the work of ~5 people at roughly 85% quality and 75% human effort — but it makes assumptions, mistakes, misses, and forgets. The model is not the bottleneck; the memory structure is. A directory of ever-growing cross-referencing markdown files has no entity resolution, no temporality, no relationships, and no write-back. This program replaces that with the graph the platform already is.

The problem — four structural failures

The merge-into-markdown workflow is the exact anti-pattern the platform's pointer architecture was designed to eliminate. Four failures, each with a symptom and a root cause:

Failure Symptom Cause
No entity resolution Assumptions The same project exists as a Jira key, a Confluence page, a filename, an email thread — nothing says they are one thing.
No temporality Mistakes Files are snapshots; no current-vs-superseded marker; stale facts get served confidently.
No relationships Misses Decision in email, rationale in Teams, impact in Jira — the links are severed by flattening to files.
No write-back Forgetting Merge-into-markdown is copy-based composition → facts duplicate, copies diverge, session conclusions evaporate.

The insight: the platform already is a graph — atoms, ordered pointer joins, polymorphic content blocks, forward traversal, backlinks, subgraph JSON, an MCP server, an agent-orchestration schema. The gap is not architecture; it is a thin query/write surface and one missing primitive (temporality).

The arc — read → temporality → write-back → narrate → chat

Read before write, additive before behavioral, everything after the MVP gated on its answer. Phase 4 was deliberately sequenced ahead of write-back: the staleness structure must exist before writing turns on, or write-back's first act files a fresh fact next to a stale one.

  • Phase 1 — Read surface (GraphQL over MCP). ✅ Shipped. The agent reads the graph in one round-trip instead of 4–29 schema-guessing SQL hops.
  • Phase 2 — Retrieval depth + entity resolution (+ 2b web search surfaces, 2c Flutter). ✅ Shipped. Ranked typo-tolerant search, trigger-fresh index, find-and-traverse.
  • Phase 3 — Post-embed primitive (+ 3b Flutter parity). ✅ Shipped. A post can embed another post as a first-class block.
  • Phase 4 — Temporality: the Assertion / supersede primitive. ✅ Shipped. A fact carries valid-from/valid-to; anti-rot becomes schema, not discipline.
  • Phase 5 — Write-back — the mutation boundary, and its full family: 5a delete-consistency · 5b Studio authoring · 5c grounding-lifecycle · 5d cross-surface rollout · 5e Flutter 409. ✅ The whole write path, shipped.
  • Phase 6 — Protocol + strangler migration. ⏸ Deferred pending real usage — no platform work left.
  • Phase 7 — Write-back agents (the 100x layer). ⏸ Deferred with 6; gated on the success metric.
  • Phase 8 — Narrative order + correction (the human repair surface). ✅ Shipped. The agent surfaces; the human fixes.
  • Phase 9 — One agent, two-way via any post's chat. ✅ Slice 1 shipped (BoBit); the standalone-terminal case is a deferred second slice.

Key decisions

The load-bearing rulings that shaped the build — each settled with the operator and propagated through the phase docs.

The temporality primitive was going to auto-supersede: a new contradicting fact would set the prior's valid-to. The ACCUMULATE ruling (2026-07-17) reversed that — a create never auto-supersedes. Contradictions coexist and are flagged; supersession is an explicit, separate act (and always an edge, never a delete). The graph knows what was true and simply stops presenting it as current. Anti-rot becomes schema, not discipline.

Every element of a fact — subject, object, source, across all 9 governed predicates — must resolve to a block or the visible post. Nothing is hidden from an editor-or-higher. This is enforced at the Phase 5 mutation boundary (operator, 2026-07-14), not as a schema NOT-NULL — so the agent literally cannot file an ungrounded, unattributable fact. It is the honest answer to the "assumptions" failure: a claim you can't point at isn't a claim.

An architectural ruling that reversed earlier decisions (2026-07-15): internal/authz is an exception, not a precedent — the memory-layer invariants are duplicated per module, not extracted to a shared package. When the write-back agent graduates onto the orchestration cluster, the skill engine enforces the grounding invariant in its own module (it already owns its ent queries), rather than importing a shared enforcer. Divergence is the goal; a single shared copy would couple modules that are meant to evolve apart.

The agent never gets cleanup capability, by design. Its one history verb is create-with-supersedes; it can add a correcting fact, but it cannot close, retract, or merge — those are the human's repair surface (Phase 8). This asymmetry is now route-layer-enforced: agent keys get a 401 on close/retract/merge, re-ratified after review. The agent proposes history; the human edits it. It surfaces the mess; it does not get to quietly tidy it away.

The holy-grail question is "did the miss rate on real work drop?" Phases 6 + 7 — the migration and the write-back-agent 100x layer — are deferred and gated on that metric (operator, 2026-07-20). The platform work is done; what remains needs weeks of real usage to baseline. The open call recorded for later: (a) a numeric miss-rate before/after, or (b) drop the number and judge qualitatively — did the agent get handed a stale or duplicate fact? Either way it is safe because it is gated: the agent only writes at scale once the structure is proven to reduce misses.

The argument a bolt-on graph loses: real multi-tool memory (Outlook, Teams, Jira, Confluence, …) forces a bolt-on temporal graph into an ontology explosion, fragile cross-tool resolution, and a sync treadmill. This hub inverts it — ~6 general-purpose primitives that compose (via blocks + assertions) into arbitrarily rich or thin representations, agent-chosen per source. A Confluence page becomes a post of text + a weblink; a Teams line maybe one assertion. Cross-tool resolution is about/sameAs assertions pointing at one canonical post, done by the in-context agent with provenance + confidence, human-correctable in Studio. "Map, not territory" means the agent decides how much territory to bring in and at what fidelity — no forced replica, no treadmill. Vector embeddings stay deferred (on-appliance + sqlite-vec only, if ever).

Where it stands

Shipped + deployed to dogfood: the read surface (P1), retrieval + entity resolution (P2/2b/2c), the post-embed primitive (P3/3b), temporality (P4), the entire write-back family (P5 + 5a–5e), the human repair surface (P8), and agent chat Slice 1 (P9 — BoBit, reachable from any post's chat). That is the whole platform: an agent can read the graph in one hop, search it, embed posts, file grounded temporal facts it cannot fake, and a human can reorder and correct the history it proposes.

Deferred, by decision, pending real usage: Phase 6 (protocol + strangler migration of one real project) and Phase 7 (the write-back-agent 100x layer, gated on the miss-rate metric), plus Phase 9's standalone-terminal slice. These are captured in the running list, not lost — they return with weeks of real work behind them, not with more speculative build. This master + the phase posts are the as-built record.

Claude Anthropic
← Back to Total Recall