Blog

Build Resilient AI Agents with Restate and Google ADK

January 12, 2026

Restate Team

We're excited to announce that Restate now integrates with Google's Agent Development Kit (ADK), bringing durable execution and built-in resilience to your AI agents.

Google ADK provides a popular framework for building agentic AI applications. With Restate, you get automatic recovery from failures, persistent conversation history, and observable execution, without managing complex retry logic or external state stores.

💡 Useful links:

Why Restate + Google ADK?

AI agents are long-running processes that combine LLM calls with tools and external APIs. They suffer from the same challenges as any other backend system: API rate limits, network timeouts, service outages, and the need to maintain state across requests and time.

Restate makes your agent fault-tolerant by default. If your agent crashes mid-execution or an API call times out, Restate automatically recovers it and continues from where it left off. No progress lost, no duplicate work.

Getting Started

Add the Restate SDK to your ADK project:

uv add restate_sdk[serde]

Define your ADK agent and enable the Restate plugin:

agent = Agent(
  model="gemini-2.5-flash",
  name="weather_agent",
  instruction="You are a helpful agent that provides weather updates.",
  tools=[get_weather],
)

app = App(name=APP_NAME, root_agent=agent, plugins=[RestatePlugin()])
session_service = InMemorySessionService()

agent_service = restate.Service("WeatherAgent")

@agent_service.handler()
async def run(_ctx: restate.Context, req: Prompt) -> str | None:
  await get_or_create_session(session_service, APP_NAME, req.user_id, req.session_id)
  runner = Runner(app=app, session_service=session_service)
  events = runner.run_async(user_id=req.user_id, session_id=req.session_id, new_message=req.content)

  return await parse_response(events)

Invoke your agent and provide a user ID and session ID:

curl localhost:8080/WeatherAgent/run --json '{"content": "What is the weather like in San Francisco?", "user_id": "user-123", "session_id": "session-123"}'

Observe what your agent did in the Restate UI:

Restate UI showing weather agent run
Restate UI showing weather agent run

Link to full instructions

All you need for durable agents

Automatic Recovery from Failures

Restate logs every step your agent takes: LLM calls, steps within tool executions, state changes. If something fails, Restate replays the execution log to restore exactly where you were. Your agents become immune to rate limits, network outages, and service restarts.

Learn more

Stateful Agents with Virtual Objects

Build agents that remember. Restate's Virtual Objects let you create stateful agents keyed by user ID or session ID. Conversation history, user preferences, and agent state persist across interactions without external databases or caching layers:

Chat objects

The agent's state lives in Restate, queryable through the UI, and automatically managed with concurrency control to prevent race conditions.

Learn more

Human-in-the-Loop Workflows

Real-world agents often need human approval or input. Restate makes this straightforward with durable promises. Your agent can pause execution, wait for human feedback, and automatically resume, even if the service crashes while waiting:

# Create a durable promise for human approval
approval_id, approval_promise = ctx.awakeable(type_hint=str)

# Notify a moderator
await ctx.run_typed("notify moderator", notify_moderator, content=content, approval_id=approval_id)

# Suspend until resolved - crashes won't lose this state
return await approval_promise

Learn more

Observable by Default

See everything your agents do. Restate traces every LLM call, steps within tool executions, and state change. No instrumentation required. Just open the Restate UI to inspect running agents, debug issues, and understand execution patterns.

Restate UI showing weather agent retries
Restate UI shows how weather agent retries a tool call

Try It Out

Ready to build resilient agents with Google ADK? Check out our interactive tour and integration guide.

Do you like what we are doing? Star the project.

If you need help getting started, reach out to us on Discord or Slack.