blog · loose threads

Notes from the loom.

Short pieces on what we are building, and the decisions underneath it.

essay

Sessions are the real artifact

A commit tells you what changed. It never tells you what was tried at 2am and abandoned, which constraint made the obvious approach impossible, or why the retry has a comment that says "do not touch".

That knowledge lives in agent sessions, and agent sessions are the least durable thing in modern engineering. They sit in a JSONL file under a mangled path, or inside a SQLite blob, until someone clears their cache. We treat them like terminal scrollback. They are closer to lab notebooks.

3 min · by the motif team
engineering

Handoff, not copy-paste

The obvious way to move a session between agents is to summarize it and paste the summary into the next tool. We tried that first. It fails in a specific, annoying way: the new agent believes the summary, not the history, and confidently re-litigates decisions the old session already settled.

So we write the target's native format instead. For Codex that means emitting a real rollout file, pinned against a captured fixture from a specific Codex release, and inserting the thread into Codex's own state database so it appears in the resume picker. codex resume then treats it as its own past, because at that point it is.

4 min · engineering note
position

Self-hosting is a feature, not a compromise

Ask an engineering team whether they would upload their agent sessions to somebody else's server, and watch the pause. Sessions carry source, credentials that slipped into a paste, customer names, and the internal argument about whether to ship.

So there is no Motif cloud to opt out of. You run the server; it is one process and one SQLite file behind a reverse proxy. Redaction runs on the developer's machine before upload, with ten high-precision patterns on by default. The only outbound call the product can make is to the model provider you configure for memory, and that is off unless you turn it on.

3 min · position
notes

Reading three tools that never meant to be read

Claude Code writes a JSONL DAG that has to be linearized by parent pointers. Codex writes dated rollout files. Cursor keeps chats in a live SQLite database that is usually locked, under a key namespace with no schema guarantees.

None of these are APIs, and none of them promised to stay stable. The defense is boring and effective: open read-only, tolerate schema drift, pin against captured fixtures, run the tests on Linux, macOS and Windows, and keep each reader small enough that one person can fix it in an afternoon when a release moves the furniture.

4 min · engineering note

pl. i · iv · fragments of the same weave

← back to the pattern