A durable journal underneath your ADK agent⌗
Crash-survival, exactly-once-effective tool calls, and an explicit UNKNOWN
outcome — without changing one line of your ADK agent code.
Wire it in fifteen lines⌗
Tool bodies stay plain. Mark a tool with @tape.outbox_tool(...) and the
outbox reactor owns the dispatch — non-idempotent upstreams stop being a
footgun. → ADK on Tape
What you get⌗
-
Crash-survival
Every decision and effect is journaled. A crashed run reconstructs and continues. Confirmed effects are not re-executed — once is the contract.
-
Non-idempotent safety
Outbox + reconciliation makes
UNKNOWNa first-class outcome. Blind retry on a wire transfer is structurally impossible. -
Production on GCP
Cloud Run · GKE Autopilot · AlloyDB · Bigtable · Spanner · Pub/Sub · Secret Manager · OTel. One Typer CLI composes the whole topology.
-
Four SDKs, one wire
Python, Go, TypeScript, Java — identical surface, language-idiomatic shape. The CLI stays Python; your agent process can be any of the four.
-
Sharp primitives
Reactive KV with watch streams. Durable gates. Budgets as run state. Compensation registries. A reactor event bus.
-
Visible IaC
Terraform/OpenTofu modules + a Helm chart you can read, edit, and own. No black-box managed runtime — the substrate is yours.
Choose your entry point⌗
-
I want to build an agent
Start with the quickstart. Ten minutes to a recovering, observable agent on your laptop. Then read the ADK-on-Tape recipe.
-
I want to learn the model
The Concepts section is the mental model: journal, effects, reactors,
UNKNOWN, compensation, replay. Read these before you scale. -
I'm going to operate this
Stores, reactors, observability, tenancy. Then the deployment topology and the IAM cheat sheet.
-
I want the argument
The treatise is the why. It's long; it earns the read. The spec turns the argument into a system; the parity matrix names the trade-offs.
Three commands to production⌗
pip install -e tape/sdk/python # tape-py — SDK + ADK adapter
pip install -e tape/cli # tape — the standalone CLI
tape init treasury # scaffold a new project
cd treasury && tape dev # server + reactors + agent on sqlite
tape provision gcp --apply # render & apply Terraform on GCP
tape deploy gcp --target cloud-run
→ Quickstart walks through each command with what to expect.
Honest project status⌗
| Surface | Status |
|---|---|
| Python SDK + ADK adapter | Reference implementation |
| Go / TypeScript / Java SDKs | Wired client + smoke tests |
| Rust server | SQLite / Postgres / AlloyDB |
| Bigtable backend | Production-ready |
| Spanner backend | Experimental — gated |
| Hard multi-tenancy | Design-only — proto change pending |
| Continue-as-new, child workflows | Roadmap |
The roadmap and trade-offs are explicit on the parity matrix. When something doesn't exist yet, the docs say so.