Blog

Notes from the build.

Deep dives into how the runtime actually works — the design decisions and the plumbing behind the product.

Engineering15 July 202512 min read

Models are feedforward. Brains are not.

A language model is a stateless function: unstructured in, structured out, one pass, no memory of the last one. Everything that makes an assistant feel like a colleague is wiring we added around it. Here's the whole shape, and why ours came out different.

Engineering22 July 202612 min read

Two brains, one voice.

A model smart enough to do the work is too slow to hold a conversation, and a model fast enough to hold a conversation is too dumb to do the work. Here's every decision we made to run both at once — without the caller ever hearing the seam.

Engineering2 July 20269 min read

Why we split skills into functions and guidance.

Skill folders nest scripts inside prose. We keep two libraries instead — executable functions and prose guidance, linked many-to-many — and it changes what an agent can reuse.

Engineering20 May 20269 min read

The conversation is not the work loop.

On the layer that sits between you and the agents doing the work — why most frameworks don't have one, and why Thinking Machines just argued they should.

Engineering9 April 20268 min read

Fork the conversation, or go in cold.

Every time one loop hands work to another, the same question comes up: how much should the worker know about the conversation it came from? We made it an explicit argument, at every layer.

Engineering17 March 202610 min read

There is no demonstration mode.

You can show our assistant how to do something by sharing your screen and talking through it. We never built a feature for that. It falls out of the abstractions, which is the whole argument.

Engineering26 February 20268 min read

Agents that pick up where they left off.

On the plumbing between the outer conversation and the inner working loops — and why a finished task doesn't have to end.

Engineering22 January 202611 min read

Execution is a coordinate, not a call.

Giving a model exec() takes an afternoon. Giving it somewhere to put things down, pick them back up, and try something risky without breaking what it already has — that took considerably longer.

Pick the workflow that's been eating your week.

Starter credits, no card. You'll have real work running before the end of the call.