durable_app⌗
The wiring entrypoint — pass an ADK agent, get back a configured (App, Runner) pair.
import tape
from tape.adk import durable_app
app, runner = durable_app(
name="treasury",
agent=root_agent,
budget=tape.Budget(usd_cap=50, token_cap=2_000_000),
)
tape.adk.durable.durable_app
⌗
durable_app(*, name: str, agent: Any, tape_url: Optional[str] = None, budget: Optional[Any] = None, resumable: bool = True, check_cancellation: bool = True, app_kwargs: Optional[dict] = None, runner_kwargs: Optional[dict] = None) -> Tuple[Any, Any]
Return (App, Runner) for an ADK agent backed by Tape.
The agent's tool bodies stay plain. Pass @tape.effect(...) decorators on
tools whose UNKNOWN you want resolved or whose forward action needs an
inverse; pass @tape.outbox_tool(...) for non-idempotent upstreams that must
be journaled-first, dispatched-by-reactor.
Related⌗
- The
(App, Runner)pair is whatrunner.run_async(...)consumes; see ADK's Runner docs for the call shape. - For non-idempotent tools, prefer
@tape.outbox_tool.