Notes on memory,
git history, and why
code is the way it is.

Field notes from building Spelunk in the open — what we learned, what we got wrong, and what we deleted along the way.

2026-06-29 · Beat 5 of a series

Memory your whole team shares

When one engineer's agents remember the why, that's useful. When the whole team's agents draw from the same memory, something else happens: one person's sharper convention quietly becomes everyone's default. The final beat of the why-layer series.

Read the post →
2026-06-26

Spelunk 0.9: the v1 release candidate

git tracks what changed. Spelunk remembers why. 0.9 is the release candidate for v1: a stable CLI we've been running on real work, now with cloud sign-in, two-way memory sync, and a stronger local code-search model so the why-layer follows you across machines and agents.

Read the post →
2026-06-22 · Beat 4 of a series

Memory shouldn't belong to your agent vendor

When your agent's memory lives inside one coding-agent vendor, switching agents means starting over. Why we made the memory a separate, callable layer that lives in your git history, not ours.

Read the post →
2026-06-15 · Beat 3 of a series

The features we deleted

We cut six CLI commands, drew a hard "no LLM in the CLI" line, dropped a whole backend we'd already built, and removed sources that produced more noise than signal. Why subtracting features was the work we're most confident was right.

Read the post →
2026-06-10 · Beat 2 of a series

Memory that travels with the repo: why we put it in git notes

Memory without provenance rots. Git history without intent is a wall of diffs. Here's why agent memory in Spelunk lives inside git notes, anchored to commits, with a supersede rule so the history of a decision is never lost.

Read the post →
2026-06-08 · Beat 1 of a series

"Why was this written?" the question agents can't answer

An AI agent can read what your code does in seconds. Ask it why the code is the way it is and the confidence doesn't change, but the ground underneath it does, because the reason was never in the code to begin with. First in a series on what we did about that gap.

Read the post →