Contents
Dev Entries the_codebase_remembers_itself

The codebase remembers itself.

Continuum ingests its own documentation into its own memory, and Claude Code reaches it with two MCP tools. On 28 September the manifest seeded 208 entries from 128 sources, and Lightning extracted 1,557 facts from them in 19 minutes. A session pays for that knowledge only when it asks.

2026-09-28· 4 min read · Continuum Engine

Know thyself

A manifest decides what the memory takes.

Continuum ingests its own documentation so it can answer questions about itself. MEMORY.md is the manifest: the purpose, the laws of the context store, the project map and the rules, whole; the Purpose section of every project README and of every as-built unit; and the one-page account of the system as built. continuum context seed --manifest reads it. A source's path is its identity, so a file ingested again supersedes its earlier revision.

It never takes defects by id, the work queue, the hop-by-hop flows, the benchmarks, the experiments or the journal. Anything that describes an evaluation is refused in code, whatever the manifest says, because "a corpus holding the documents about its own evaluation scores them as gold."

The Purpose sections are written to be ingested. The operations library's names its subject in every sentence ("The operations library stops only the platform's own hosts…") where prose would say "it", since a fact pulled from one sentence has to stand alone, and the extraction lab checks every fact for a named subject.

Ground truth

Postgres holds the truth, and Qdrant and FalkorDB are rebuilt from it.

On 28 September the store was rebuilt from empty. The manifest seeded 208 entries from 128 sources in 4 seconds, one for each section with text in it. Lightning then read all 208 through the fact extraction workflow in 19 minutes, none failing: 1,557 facts, of which 1,540 are distinct statements.

Qdrant and FalkorDB are projections, copies of Postgres that a sweep can always rebuild. The reconcile sweep embedded and projected all 208 entries and 1,557 facts in 32 seconds. Beside them ClickHouse records what happened, the one store the others can't rebuild. Whoever shares the memory reads and writes it through one interface: every MCP client, every integration over the HTTP context API and ICortexClient, and every person on the team, through their tools and the Dashboard.

Ask me anything

Claude Code asks the memory through two MCP tools.

continuum-mcp is an installed .NET tool, registered in the repository's .mcp.json, so every Claude Code session in the engine starts with Continuum's MCP surface. Two of its tools read the memory:

  • context_recall returns "the facts nearest the query, ranked by ACT-R activation, with the ones that cleared the retrieval threshold first", each line with its activation and its similarity to the query.
  • context_search is a word-for-word search of the entries' text, or with no query, the most recent entries.
{
  "mcpServers": {
    "continuum": {
      "command": "continuum-mcp",
      "env": { "CONTINUUM_USER_ID": "…", "CONTINUUM_API_KEY": "…" }
    }
  }
}

Through Cortex, the route an MCP client takes, a recall took 17.6 ms at the median over 120 recalls on 27 September, against that day's earlier store of 3,358 facts. About 9 ms of it is embedding the query and searching Qdrant, and scoring the candidates by activation costs 13 ns each.

The retrieval path is designed to take candidates from full-text, semantic and graph neighbourhoods at once, then score them in one pass. The rebuilt store gave it its first evidence. For "What does the Gateway never do?", a full-text index over the facts matched 9 of the 1,557 and ranked the answer first, and the Dashboard's playground, fusing that list with the semantic one, ranked it first too.

Pay as you go

A session pays for what the memory knows only when it asks.

Retrieval is where the second kind of knowledge in the context budget goes, the kind only some sessions need. The always-on set is paid for on every turn of every session. A recall is paid for once, by the session that asked, for the facts it asked for: ten, in the benchmark's queries.

What changes daily stays out. The work queue, FINDINGS.md, is always on, so every session knows what to pick up next, and the memory never ingests it, since it is "status and the work queue, which change daily." A fact recalled from it would be yesterday's.

The kit: what moves knowledge out of the always-on set

The kit ships no memory. It ships the two hooks that make the budget's question cheap to act on, for any project and any MCP memory server.

  • readme-on-touch.mjs (PreToolUse on Read, Edit, Write and NotebookEdit) walks up from the file a tool touches to the nearest folder with a project marker (by default a .csproj, .fsproj, package.json, go.mod, pyproject.toml or Cargo.toml, skipping the project's own root) and injects that folder's README once per session, in 6,000 characters at most with a pointer to the rest. It is Continuum's project-readme.ps1, ported to Node.
  • context-budget.mjs names the three largest always-on files when the set passes its budget, 25,000 tokens by default, so the move happens before the set doubles.
  • rules/example.md is a rule scoped with paths:, which loads a large document only for the sessions that touch its files, as this site's animation guide now does.
node agent-tools/hooks/harness/install.mjs path/to/project
mkdir -p path/to/project/.claude/rules
cp agent-tools/hooks/harness/rules/example.md path/to/project/.claude/rules/migrations.md

Also in this set: Don't pay a frontier model to be a shell script, and Sessions that share a machine take leases.

← All Dev Entries