Every action happens once. Every decision replays. Every agent stays inside the permissions you gave it.
The hard part isn't getting an agent to do something. It's knowing what happens after you let it.
Will it do the same thing twice after a retry? Did it make that decision because you told it to, or because the model guessed? If something goes wrong tomorrow, can you reproduce exactly what happened?
When the answers are unclear, agents stay in demo mode. Or a human sits in the loop.
Three constructs introduce AI — a fuzzy ~"…" match, summarize(…), and typed leaf calls. Every other line is deterministic, and the compiler classifies each one before it runs.
You can't prove a program that's hidden inside a prompt. So expresso™ makes the agent a real program, one the compiler can read, classify, and prove.
Plain rules: when someone says X, do Y. Deterministic by default.
Every line is classified before it runs: deterministic, or dependent on AI.
Exactly-once, on a journal that replays bit-for-bit through any crash.
Retries, crashes, and reconnects never execute an action twice.
Re-run any session exactly as it happened. The recording is the log.
Agents cannot express actions you never granted. Anything else won't compile.
Send a real incident. Kill the process mid-action. Restart it. The redelivered event becomes a visible no-op, and the replay comes back identical.
Brookfield & Co built a close agent in Coffee. It joins the client's books, categorizes every transaction, flags what looks off, reconciles the bank feed, and drafts the report, then waits for a partner to sign off. Every step replays, and nothing runs twice.
expresso serve a program and it's a webhook-driven service. Events in, real actions out, on a journal that survives crashes.
npm install https://expresso.meetcoffee.dev/expresso-lang.tgz