This session is sponsored by OpenProse. More on them below — they're also the reason we're here.
Dan Barrett built OpenProse — a framework that lets you write programs in structured English and run them with an AI agent like Claude Code. The description sounds either obvious or impossible depending on your priors. When I told him it sounded impossible, he said: “People were shocked that it works.”
So we installed it and built something live.
The project: a service that would show me tides, weather, sunrise, moonrise — everything I want to know before a walk along the coast. One command. A few minutes. It came back with an hourly tide chart for Montara (I picked a town I don’t actually live in), fog conditions, waxing crescent moon, the works.
Here’s what interested me about the architecture underneath.
Each OpenProse component has a requires block and an ensures block. Requires is what the component expects from its caller. Ensures is what it promises to produce. I said that looks like a function — domain and range. Dan said think more like a service. The distinction matters: when you have many components, an inversion-of-control container wires them together by matching ensures blocks to requires blocks. The same way Spring would wire Java components — except the whole thing is written in structured English and run by an LLM.
The Dijkstra objection comes up immediately: natural language is too ambiguous to be a programming language. Dan’s answer: we don’t know what’s possible until we walk the landscape. Plenty of people would have said nothing is possible with prose. That’s clearly not true. The question is just where the edges are — and you can only find those by trying.
The ensures block is effectively a postcondition. It’s what every sibling component can rely on. When I asked about extract method — you write one of these things, it grows, eventually you pull a piece out and name it — Dan said yes, all the time. Usually just by asking Claude to do exactly that.
The other clever piece: sub-agents pass pointers instead of data. Variable bindings are files. The pointers are file paths. When a sub-agent produces a giant context block — a full PDF analysis, a research output, a tide chart — it writes it to disk and hands back the path. The main thread stays clean. Context management, done at the file system level.
I’m building a Smalltalk VM from scratch right now — yes, literally writing a VM — and watching this I thought about how different it is to build a virtual machine when your primitives are LLM calls instead of machine instructions. My VM is 1000x faster. But the primitives here are so much larger that on the right problems, it’s a wash.
What’s next for OpenProse is interesting. Dan’s thesis is that the whole industry is moving toward declaring outcomes and letting agents figure out the path. Codex has a /goal feature. Anthropic just shipped something called Outcomes in their API. The pattern is: specify what you want to be true, not how to make it true. OpenProse is an early articulation of that idea at the framework level.
One of my many projects from the last 40 years is now actually possible. The genie just got smarter.
Dan is at @IRL_DanB on Twitter and dan@openprose.ai. OpenProse is open source — search it on GitHub and follow along. He loves feedback and means it.








