Install⌗
Tape has a fast path and a granular path. Use the fast path unless you only want one specific SDK.
Fast path — clone + one command⌗
git clone https://github.com/vamsiramakrishnan/durable-agents && cd durable-agents
./setup.sh # mise + rust/python/node/go/java/just + build server + install SDKs
make doctor # tick/cross diagnostic — verifies everything's healthy
make quickstart-all # the same 20-line scenario in all four SDKs
./setup.sh installs mise (a tool-version manager)
and then everything pinned in
.mise.toml.
After it finishes, make doctor runs a tick/cross check across the toolchain,
the server binary, the SDK install, and a live BeginRun/EndRun round-trip
against the server.
Pass --minimal for the "just the core" path (Rust + Python + just):
Zero-setup path — Codespaces / devcontainer⌗
Open in GitHub Codespaces — the .devcontainer/devcontainer.json in
the repo provisions a ready-to-go environment with every toolchain
pre-installed. make doctor runs on first attach. Then make
quickstart-all or make demo works immediately.
The same config works locally in VS Code's Dev Containers extension or any Codespaces-compatible IDE.
Binary install — curl … | sh⌗
Once a release is tagged, the prebuilt tape-server binary plus the Python
CLI install via:
This drops tape-server into ~/.local/bin/ and pip-installs tape-py +
tape-cli. Pin a version with sh -s -- --version v0.1.0; skip the server
with --no-server; skip the CLI with --no-cli.
Until the first release is cut, the script prints a clear "build from source" message and exits gracefully — it doesn't fail silently.
Granular path — one SDK at a time⌗
If you already have a Tape server running somewhere and only want to wire one language's agent against it:
pip install tape-py # the SDK (or from a clone: pip install -e tape/sdk/python)
pip install tape-cli # the Typer CLI (or: pip install -e tape/cli)
The SDK is import tape. The CLI is tape <command>. Verify with
tape --version and python -c "import tape; print(tape.__version__)".
Why -e editable installs?
From a clone, editable installs let you git pull upgrades without
re-running pip install. PyPI installs lock to a published version.
The SDK ships ESM with TypeScript type definitions (src/index.ts).
Includes the tape-outbox-ts binary
for the outbox dispatcher.
Pub/Sub and Cloud Tasks are gated behind build tags (pubsub and
cloudtasks) so the default build pulls no GCP deps. The
cmd/tape-outbox package is the daemon
CLI.
<dependency>
<groupId>dev.tape</groupId>
<artifactId>tape</artifactId>
<version>0.1.0</version>
</dependency>
dev.tape.adk.TapePlugin + dev.tape.adk.TapeSessionService wire Tape
into a Google ADK (Java)
Runner — see ADK on Tape. The ADK dependency is
provided-scope so non-ADK callers aren't forced to pull it in.
The server⌗
Local development uses one of three modes:
make serve— runs the locally-builttape-serverbinary in the foreground. Default: SQLite file at./tape.db.make docker-up—docker compose upwith Postgres + thetape-serverimage. Production-shaped local stack.tape dev— the Python CLI runstape-serverfor you (native ifcargoor atape-serverbinary is onPATH; otherwise Docker).
For tests and demos, the SDKs spawn tape-server --store memory themselves.
Verify⌗
Two distinct doctor commands:
make doctor— repo-scoped. Toolchain + server binary + server reachability + Python SDK round-trip. Run after./setup.sh.tape doctor— project-scoped (aftertape init <project>). Checks the project's local environment plus optional GCP access (gcloud, ADC, Cloud Run / Pub/Sub bindings).
If make doctor is green, you're ready for the
quickstart.
Updating⌗
git pull
./setup.sh --skip-build # picks up any new tool versions
make build # rebuild the server + every SDK
Or, after pip install tape-py / npm install tape-ts / etc., upgrade the
language package the usual way (pip install -U tape-py, npm update
tape-ts, go get -u, bump the Maven version).
When new schema fields land in tape.proto, the server migrates on startup
— but the SDK and the server should be on matching minor versions. tape
doctor warns when they drift.
Where things live⌗
durable-agents/
├─ tape/sdk/python/ the Python SDK (tape-py)
├─ tape/sdk/{ts,go,java} the other-language SDKs
├─ tape/cli/ the Typer CLI (tape)
├─ tape/server/ the Rust server (tape-server)
├─ tape/proto/ the wire protocol (tape.v1.*)
├─ tape/deploy/ Terraform + Helm + manifests
├─ tape/examples/ end-to-end examples
└─ examples/ 20-line quickstarts (one per language)