Google's Agent Development Kit (ADK) launched with a simple pitch: a Python framework for building, orchestrating, and deploying agent systems that actually ships to production. It handles tool routing, multi-agent coordination, and state. What it doesn't ship with is email — and in 2026, an agent without an inbox can't sign up for anything, can't receive notifications, and can't talk back to a human. Let's fix that.
What ADK gives you out of the box
ADK models agents as Python classes with tools attached. The runtime handles tool selection via the LLM, executes the call, and feeds the result back. Multi-agent setups use the same primitive — one agent becomes another agent's tool. Lumbox slots into this model naturally.
Setup
pip install google-adk lumbox
import os
from google.adk.agents import Agent
from google.adk.tools import FunctionTool
from lumbox import Lumbox
lumbox = Lumbox(api_key=os.environ["LUMBOX_API_KEY"])
def create_inbox(purpose: str) -> dict:
"""Create a fresh email inbox for a specific task."""
inbox = lumbox.inboxes.create(display_name=purpose)
return {"inbox_id": inbox.id, "address": inbox.address}
def wait_for_otp(inbox_id: str, timeout: int = 120) -> str:
"""Block until a verification code arrives."""
return lumbox.inboxes.wait_for_otp(inbox_id, timeout=timeout).otp
def send_email(inbox_id: str, to: str, subject: str, body: str) -> str:
"""Send an email from the given Lumbox inbox."""
msg = lumbox.inboxes.send(inbox_id=inbox_id, to=to, subject=subject, text=body)
return f"sent {msg.id}"
email_tools = [
FunctionTool(create_inbox),
FunctionTool(wait_for_otp),
FunctionTool(send_email),
]
The signup agent
signup_agent = Agent(
name="signup_agent",
model="gemini-2.5-pro",
instruction="""
When asked to register, follow this pattern:
1. Call create_inbox with a short purpose string.
2. Submit the signup form with the returned address.
3. Call wait_for_otp with the inbox_id to retrieve the code.
4. Submit the code to complete verification.
""",
tools=email_tools + [browser_tool],
)
Multi-agent: one inbox coordinator, many workers
The cleanest pattern for bigger systems: a dedicated inbox coordinator agent owns all email operations, and worker agents call it as a sub-agent. This keeps inbox lifecycle logic in one place and lets workers focus on their domain.
Webhooks for real-time inbound
lumbox.webhooks.create(
url="https://my-adk-deployment.run.app/email-inbound",
events=["email.received"],
)
Your ADK runtime receives parsed emails (sender, subject, body, extracted OTP, extracted links, categorization) as structured JSON and routes to the waiting agent. Start with a free Lumbox key at lumbox.co.