Built for agentic apps
An agent that waits two days for a person is a line of code.
Not a wrapper around a model. An agent here is a principal with its own grants and only the tools you hand it, so it acts on exactly the data it was granted and nothing else. It runs inside a durable workflow: its answer streams into a page a token at a time, the people on the same record see each other, it parks on a person for as long as your policy says, and a crash between two of its calls charges nobody twice. And when a customer's procurement asks whether the AI can be switched off, the answer is yes, today: an operator turns it off while the app runs, generation and embedding separately, in seconds, from a control plane the app's own source cannot reach. Here that is a toggle. Anywhere else it is weeks of engineering across every call site, and the one you miss is the audit finding. And the switch has a dial beside it: the platform meters every model call and enforces hard daily budgets — tokens and dollars, per organisation, per app and per user — before the call leaves, fail-closed, set by the organisation's owner in the admin. Nobody wakes up to a $10,000 bill because an agent looped overnight; the eleventh call over the cap is refused and the app carries on without it. This is for the apps that are hard: realtime, long-running, human-in-the-loop.
How: agent declares it with a Principal and Roles; stream<T> streams its answer; a workflow state with subscribe … as parks the run on a person.
demo/agent-expenses/model/review.osy · verbatim/// PARKED ON A PERSON. Everything in this state is POLICY — who is asked, how they hear /// about it, how long they get — and it is all the app's. state Waiting { subscribe Answered(string text) as Submitter { Assignee = ExpenseReport.Where(r => r.Id == this.Item.EntityId).FirstOrDefault().Employee; Finished { Within = TimeSpan.FromDays(2); Unfinished { goto Failed; } } } on Answered(string text, Slot slot) { var reply = Auditor.Answer(this.Item, text);


















