What durable engines are good at
Long-running processes that must survive a crash, a deploy or a week of waiting. Deterministic replay. Timers, signals, child workflows, fan-out. Visibility into where a workflow is. An activity that fails transiently and should be retried until the network cooperates. If your agent’s work is a multi-step process with state, that is exactly the problem they solve, and CTRLRun does not solve it.What they do not do
The sharp edge is the retry default. Retry until it succeeds is right for a read and wrong for a
refund, and the usual advice, make your activities idempotent, is exactly the work CTRLRun does
for you: an effect key per consequence, reserved atomically, enforced by the store rather than
by convention.
When to use both
Run the workflow in the engine, and decorate the activity that acts. The engine retries; the decorator refuses the retry that would double an effect, and turns a lost reply into anAMBIGUOUS record with a receipt rather than a silent second call. Nothing about the engine’s
replay changes: a replayed activity proposes the same action, hashes the same, and finds its
effect key already reserved.