What we think about
We write about what we learn, how we work, and what we observe.
58 posts found in architecture
Why we keep long-term memory outside the model
Long-term memory lives in plain files we can read, edit, and delete. It is not the most elegant choice. It is the one whose mistakes we can actually fix.
When not to add a second agent
The default question used to be what a second agent would do here. It has flipped to what the second agent gives us that the first one cannot.
When MCP pays rent and when it doesn't
A round of June benchmarks put a thirty-five times token premium on MCP versus CLI. The number changed how we decide which tool boundary deserves the cost.
Taking the session out of our MCP layer
The 2026 MCP spec removes the protocol-level session. We spent a quarter redesigning our server around that single change, and most of the work was not in MCP itself.
Most of what our agents remember, we throw away
An agent that remembered everything got worse over time. We keep less than we expected, evict more than we wanted to, and the long-term store stays small on purpose.
Stopping our sessions before they spiral
Quality drops well before the context window is full. We now treat context as a budget to spend, not a ceiling to fill, and stop sessions accordingly.
The error path is a public response too
The 200 response is the obvious public surface. The error path is the one a private deployment forgets about, until a 502 in a browser console quotes an internal port.
Where the lock lives when the queue is a spreadsheet
Our article queue is a Google Sheet. The first operation is claiming a row, not picking one. The order keeps two orchestrators from doing the same job twice.
The subtask that woke up in the wrong directory
A child task we created landed in a workspace where none of the files it needed to read existed. The fix was a single field. The lesson was about defaults.