Memory + navigation for coding agents

Your agent relearns your codebase from scratch — every session.

coldstart gives a coding agent a notebook it writes itself, so what one session figures out, the next already knows — plus a fast index to find the right file without three wrong reads. No embeddings, no API key: it runs on the model you already pay for.

Install → Read the blog MIT · Node 18+ · runs offline
agent — coldstart
$ coldstart find auth session cookie src/auth/service.ts 3/3 defines auth, session, cookie note [fresh] signs & verifies session cookies · login/logout entry src/middleware/session.ts 2/3 imports session, cookie src/routes/login.ts 2/3 defines auth · imports session $ coldstart gs src/auth/service.ts symbols signCookie L12 · verify L34 · rotate L61 callers verify ← middleware/session.ts, routes/login.ts imported by 4 files → read only the body you need
The notebook · written and kept by the agent

The second time a question comes up,
the answer is already written down.

Most knowledge bases rot because a human has to feed them. This one is written by the agent that just did the work, kept honest by the index, and recalled when a later task matches. You never touch it — and that's what keeps it from going stale.

1Written after a real task

By the agent that just figured it out.

The reasoner that solved something writes down what it learned — a file's purpose, a cross-file flow, a trap — with concrete citations, while the full context is still in hand. A write gate dedupes by concept, and concurrent agents never silently merge or lose a note.

File notefresh
src/models.py · Tile

Persists a map tile and its geometry. save() is the single write path — it stamps bbox from the geometry before insert, so callers must never set bbox by hand.

Part of the [[tile-save-lifecycle]] flow.

Anchors — the files this note rests on
src/models.py · Tile src/models.py · save
2Kept honest by a content hash

Freshness is checked, not hoped for.

Every anchor is stamped with a content hash. The background keeper re-checks it as the code moves — no one has to remember to. When the evidence drifts, the note flips to [evidence changed] automatically and is served as a labeled hypothesis to re-verify, never as fact.

File noteevidence changed
src/models.py · Tile

Persists a map tile and its geometry. save() is the single write path…

⚠ evidence changed: src/models.py — re-verify before relying on this note.
Anchors
src/models.py · Tile src/models.py · save
3Injected when it's relevant

It's in the agent's context — before it reads a line.

This is the part that isn't obvious: the next agent doesn't decide to go look. When a prompt touches something a note covers, a recall hook (Claude Code, Cursor, and Codex all fire one on prompt submit) matches it against the notebook and injects the note straight into the context — so the agent opens the task already holding what the last one learned.

Nothing matches? Nothing is injected — it stays silent. And mid-task, a fresh summary still rides along on every find, so the note surfaces even when the prompt didn't name it.

Prompt"why is bbox wrong after we save a tile?"
recall hook · fires on prompt submit — matches the notebook, injects the hit
File noteinjected into contextfresh
src/models.py · Tile

Persists a map tile and its geometry. save() is the single write path — it stamps bbox from the geometry before insert, so callers must never set bbox by hand.

Anchors
src/models.py · Tile src/models.py · save
agent starts here — no search, no wrong reads
For humans · coldstart kb viewWant to read what the agents have been keeping? One self-contained HTML file — no server.
file:///arches/.coldstart/notebook/index.html
coldstart notebook
arches
111 notes · 108 fresh
src
models.py
search.py
views
tile.py
map.py
api
File notefresh
src/models.py · Tile

Persists a map tile and its geometry. save() is the single write path — it stamps bbox from the geometry before insert.

Anchors
src/models.py · Tile src/models.py · save
Shared, it compounds

Commit the notebook to your repo and the whole team feeds one corpus. The append-only logs union-merge across branches and machines — no conflicts — so every teammate's agent both reads from and adds to the same notebook. Private by default; opt in with coldstart init --commit-notebook.

A knowledge base that grows as the repo gets worked — more context for the next agent, less effort re-deriving what's already known.

Every note stays anchored to the code, so the codebase remains the single source of truth — the notebook only remembers what was learned about it, and the index keeps the two in sync.

Bring your own semantics

No embeddings. On purpose.

Every consumer is already a frontier model — the best semantic reasoner in the loop. Pre-computing meaning at index time just duplicates that, worse and stale. So coldstart keeps what's cheap to keep exact, and leaves meaning to the reasoner holding the task.

Embedding-based code search

  • Freezes one interpretation of a file at index time, blind to the task.
  • A stale vector fails silently — a wrong answer that looks confident.
  • Returns a cosine score the agent has to trust or re-verify.
  • Needs an API key, a GPU, inference on every query.

coldstart

  • The agent judges relevance in context, against the actual goal.
  • A background keeper patches facts in milliseconds — the index never lies about the tree.
  • Returns checkable evidence — this term is defined here, imported there.
  • Runs on the agent you already pay for — deterministic, offline, no key.
No second bill

coldstart adds no inference of its own. The semantic layer is your Claude Code, Codex, or Cursor subscription — so there's no separate API key, no metered embeddings, nothing new to provision. Most code-search tools bill you twice: once for the agent, again for their own model. This one doesn't.

Supported languages

Parses 20+ languages. The notebook works on all of them.

Tree-sitter for the parsed set; content-hash freshness for the notebook, which means notes on a Swift repo are as trustworthy as notes on a TypeScript one.

TypeScriptJavaScriptJSX / TSX VueSvelteAstroAngularJS PythonRuby (Rails)GoRust JavaKotlinC#PHP (Laravel)C++ Groovy / GradleGraphQLYAMLTOMLXML.env
Blog

Engineering notes from building coldstart.

Longer pieces about the problem coldstart is built around: agents starting cold, repository orientation, and notes that stay tied to the code instead of becoming another stale document.

Cost

Where the tokens go in an agent session

Most of what a session bills for is not the answer it produced. It is the same context, re-sent on every turn.

Codebase memory

Why an index of your code cannot answer the same question twice

A graph makes each hop cheaper. It does not reduce the number of hops, and it is regenerated identical every time.

Get started

Two commands to warm the repo.

Works best with Claude Code, Codex, and Cursor — all get the fast CLI path and the notebook capture/recall hooks, wired automatically by init.

your-project
$ npm install -g @cstart/coldstart $ cd your-project $ coldstart init # coldstart.md + client wiring + notebook + hooks index warming in the background — your first lookup is instant.
Morty Proxy This is a proxified and sanitized view of the page, visit original site.