How-to guides⌗
Each how-to is a recipe for one task. They assume you've read the Concepts (or are happy looking things up as you go).
-
Wire a non-idempotent upstream Wires, payments, one-shot side effects. The outbox pattern, end-to-end.
-
Configure reactors Enable, disable, scale, swap polling for event-driven.
-
Pick a storage backend SQLite, Postgres, AlloyDB, Bigtable, Spanner. Trade-offs and operating notes.
-
Add observability Structured logs, OTel spans, log-based metrics, the bundled dashboard.
-
Configure tenancy Single, trusted-multi-app, hard-multi-tenant — what each mode means today.
-
Cancel & timeout patterns
tape.cancel_run, gates withgate_timeout,tape.heartbeat, cooperative cancellation. -
Write a custom connector Implement
EffectConnector—dispatch,observe,compensate. -
Run the outbox dispatcher in any language
tape-outbox-ts,cmd/tape-outbox,dev.tape.cli.TapeOutbox— one dispatch loop, one safety contract, four languages. -
Fan the journal out (sinks)
LogSink/WebhookSink/PubSubSinkin every SDK — exactly-once-effective delivery with consumer-side dedup. -
Cross-SDK parity harness One scenario, four languages, identical journal projection on every PR.
How to read these⌗
Each how-to:
- Starts with what you want to accomplish.
- Gives the smallest code change that does it.
- Lists the gotchas that bite people in production.
- Links to the relevant concept page and reference page.
If you find yourself reading a how-to for context, switch to the concept page. If you find yourself reading a concept page for "which exact parameter," switch to the reference. The three are different modes of documentation, on purpose.
Don't see your task?⌗
- Check the FAQ — many "how do I" questions are one-liners.
- File an issue at vamsiramakrishnan/durable-agents describing what you wanted to do and what the docs didn't help with. That's the fastest way to make this section better.