Build stateful agentsfrom simple components.
Tardigrade is a TypeScript framework for building modular agents around an immutable event log. Built on Effect TS.
bunx tardie initexport const researcher = actor({ name: "researcher", methods: agentMethods, components: [infer([ system("You are a friendly research assistant."), compaction({ fireRatio: 0.8, keepRatio: 0.5 }), budget([ codeMode([ filesPackage(), fetchPackage(), mcpPackage(), agentsPackage(), workspacePackage() ]), ], { authority: caller() }), ], { limit: 12 }), nativeOutput, ])]})How it works
Every event is written to a durable log. Each component folds those events into state, then derives a view and enabled transitions. The runtime executes those transitions and appends the results to the log until the turn is complete.
Let it crash.
Since all of an agent's state lives in a single log, Tardigrade agents are extremely durable and portable. The name comes from the nearly indestructible animals that survive extreme conditions by entering a dormant tun state.

Scalable.
Every agent can run as a durable object. Scale from a single agent to swarms of agents.
Native observability.
The durable log is also the trace. Inspect every message, model call, tool result, compaction, and handoff from the same ordered history that drives the agent.
- 01rootMessageReceived
audit deploy - 02rootToolCalled
agents.run - 03childMessageReceived
research auth - 04rootPermissionRequestDecided
read granted - 05childBudgetRequested
+2 calls - 06rootBudgetRequestDecided
grant 2 - 07childTurnCompleted
2 findings - 08rootToolReturned
researcher - 09rootTurnCompleted
verified
Self-host on your own stack.
Run the same actor on your own cloud with Celld or deploy it to Cloudflare.