Updates · October 13, 2026
We rewrote the control plane in TypeScript
The code that accepts your message and runs the bot was rewritten in a different language, and a bot's work is now stored instead of living in one machine's memory. The practical result is a computer that starts when work needs it and costs nothing while nobody is working.
The Python tree is deleted from our develop branch. The control plane, which accepts HTTP, stores tenant state, queues turns and runs the bot's model loop, is TypeScript now, and the behavior specs run under cucumber-js with TypeScript steps. There are 149 Gherkin feature files in the repository that describe it.
The reason for the move is pi-durable, published as @earendil-works/pi-durable. It writes each step of an agent's work to storage before anything shows it. A bot's session lives in S3 and a DynamoDB index, one session per bot per channel, so no machine owns it. When a second process opens a session it takes a higher fence number, and the first process's next write is refused. Only one owner can write.
That one property carried most of the work. On our development environment:
- A turn starts on a serverless worker, parks when the model first reaches for the computer, and the same session continues on the computer. The next turn starts on a serverless worker again.
- The computer stays up after a turn and polls for work, so a follow-up message skips the cold start. After 15 idle minutes it saves a snapshot and stops itself.
- We stopped a computer 20 seconds into a 90-second command. A replacement claimed the turn about 30 seconds later and the turn finished with the right answer.
- A computer is replaced after at most 50 minutes. One kept busy by a message every eight minutes served seven turns, drained at 3,004 seconds, and the next message started a fresh one.
- The files panel in the web app can list, open and edit files with the computer off. Edits wait in a pending-changes overlay and are applied when the computer next starts. That piece is merged and covered by specs. Its recorded live walkthrough is still to do.
Here is what this doesn't cover yet. Staging and production still run the Python control plane and move over when we promote develop. Computers in a customer's own AWS account use the earlier host path, without the handoff or the long-lived computer. The model cost of every call is recorded; the view that shows it is covered on the cost page.
The details are on two pages: durable sessions for how the handoff, the idle shutdown and recovery work, and cost transparency for what we record about cost and where that stops. Both end with a section of things we haven't built.