- A local awaithumans server running at
http://localhost:3001 - An operator account
- A Python script that creates a task and waits for your decision
- That decision flowing back into the script as a typed value
1. Install
[server] extra installs the FastAPI server, dashboard, and CLI alongside the SDK. The base awaithumans package is just the lightweight HTTP client.
2. Start the server
/setup?token=... URL, paste a password, and create your operator account. You’re now logged into the dashboard at http://localhost:3001.
awaithumans dev auto-generates the encryption key, admin token, and SQLite database in ./.awaithumans/. The CLI also writes ~/.awaithumans-dev.json so the SDK can auto-discover the server URL and bearer token — you don’t have to set env vars.3. Run your first task
4. Approve it
Click the “Review at” URL (or refreshhttp://localhost:3001). You’ll see a task on your queue. Click in, fill the form, hit Submit.
Within a second your script prints:
await_human() call blocked for as long as the human took to decide, then resumed with the typed RefundDecision instance.
What just happened
Add a notification channel
Right now the only place a human sees the task is the dashboard. Add Slack with one extra kwarg — the rest of the call is identical to the script above:notify=["email:approvals@acme.com"] — and has the same prerequisite: configure a transport (Resend or SMTP) on the server first. See Channels: Email.
Add AI verification
Have an LLM gut-check the human’s decision before it lands.Bring your own key. The verifier runs server-side, not in your agent process. That means your LLM provider API key must be exported on the awaithumans server’s environment (the same shell that ran
awaithumans dev), not the shell running your agent script. If you skip this step, the task fails with VERIFIER_API_KEY_MISSING at submit time.awaithumans dev (or in your .env), set the key for whichever provider you’ll use:
await_human call:
Next steps
Task lifecycle
The state machine your task moves through.
Idempotency
How the same key recovers the same task across crashes.
Temporal
Park a workflow for hours/days while waiting. Zero compute idle.
LangGraph
Interrupt-based HITL in a LangGraph node.