The stack you're running probably already has half of what you need for durable execution already though, ie, a queue or job runner that can invoke work at least once. kassette gives you the other half by journaling completed steps to object storage (or a filesystem) so that it can replay them when you retry the same run again. This means you can have durability without having to add a workflow service or even a SQL database.
kassette is a tiny, zero-dependency TypeScript library that you can use to build agentic workflows that are just ordinary async functions. Each object storage backed run is a single object that serializes appends via CAS while session numbers fence zombies. Agentic workloads are usually dominated by (relatively) small number of slow llm/tool calls or waiting on approval so this simple design (writes grow large, full journal in a single read) has worked well (more here: https://lostinpatterns.github.io/kassette/docs/object-storag...).
beatboxrevival•1h ago