A typed, async, resumable primitive for delegating tasks from AI agents to humans — with routing, notifications, verification, and callbacks built in. Open source.
from awaithumans import await_human
from pydantic import BaseModel
class Refund(BaseModel): amount: float; customer: str
class Decision(BaseModel): approved: bool
decision = await await_human(
task="Approve refund?",
payload_schema=Refund,
payload=Refund(amount=240, customer="cus_123"),
response_schema=Decision,
notify=["slack:#ops"],
timeout_seconds=3600,
)
if decision.approved: process_refund()Every agent in production hits the same three walls. Model improvement closes none of them — they are permanent. Building for these walls today is what separates real agent infrastructure from demos.
Agents can reason. They cannot be trusted to decide alone — consequence, liability, and accountability require a human signature. This wall gets higher as agents get more capable, not lower.
The world exists outside the model's context window. No amount of intelligence closes the gap between what the model knows and what's actually happening on the ground. Not a training problem — a physics problem.
Software 2.0 will be headless — agents navigating the internet autonomously. But the physical world wasn't built for agents and won't be rebuilt overnight. Until it catches up, agents need humans to be their hands.
Schemas drive the UI on every channel. The same task renders as a Slack modal, an email with action buttons, or a typed form in the dashboard — without you writing a single template.
Interactive messages with Block Kit modals. Reply in thread, completion is parsed by the verifier.
Action buttons inline. Click → confirmation page. Reply with natural language to complete.
Typed forms generated from your Zod / Pydantic schema. Audit trail and admin built in.
Time-to-first-task-delegated under 5 minutes is a hard acceptance test on every release. CI runs the quickstart on a fresh machine.