Resources
What we are building, and what we have learned building it.
A new project cannot answer anything and cannot index anything, because it has no models. That is correct and it is also the least helpful possible starting state, so the interesting design question is what it tells you about itself.
A streamed turn that fails answers 200. It has to — the failure is a frame inside a body that had already started. Which means it appears in no access log, no 5xx count, and no HTTP-level alert you have built.
Replaying the whole transcript works until it doesn't. Then every later turn fails with "context length exceeded" — and it keeps failing, because the message that tipped it over is still in the history.
A client-side tool runs in your application's process, which is exactly the right place for it — until there is no application process. Then the same agent, with the same permissions, on the same account, simply cannot do the thing.
A user typed "close every berth for July", thought better of it, hit stop. A minute later they asked what time it was. They got both.
The first time someone reported this I did not believe it was a bug. A question, forty seconds of thinking, a train going into a tunnel, and the answer was gone — not delayed, gone, and they had been billed for it.
A scheduled agent run asked for permission to archive a record. Nobody was there. The turn stopped. The task reported status: "completed", runcount: 1, lasterror: null — which is byte-for-byte what a run that did the work reports.
