Skip to main content
That’s the whole product. One function call in your agent code; a real human in the loop on the other side, reviewing through Slack, email, or a web dashboard. Your agent waits — durably, idempotently — until they decide. awaithumans demo — an agent creates a task, a human reviews it, the agent resumes with the typed response The awaithumans dashboard — pending tasks queued for human review

Why

Agents are great at probabilistic tasks. They’re terrible at three things:
  1. Judgment — when the right answer isn’t in any prompt, only a domain expert knows.
  2. System uncertainty — when an upstream API just stopped responding and nobody knows whether the payment actually went through.
  3. Embodiment — when the task needs hands in the physical world.
These don’t go away with bigger models. Every production agent system needs a human-in-the-loop layer eventually. awaithumans is the primitive.

What you get

  • One function in Python and TypeScript: await_human() / awaitHuman().
  • Channels: deliver tasks to humans via Slack, email, or a built-in web dashboard.
  • Adapters for durable execution: Temporal, LangGraph. Workflows park while waiting; survive restarts.
  • Verification: optional AI quality-check + NL parsing layer (Claude / OpenAI / Gemini / Azure).
  • Routing: assign tasks to specific people, pools, or roles.
  • Self-host in one command: awaithumans dev for development, docker compose up for production.
  • Apache 2.0 across the SDK, server, dashboard, adapters, and channels. Free forever for self-hosted use, with an explicit patent grant.

Five-minute test

Open the URL it prints, create your operator account, then run the quickstart. First task in five minutes.

Where to next

Quickstart

Get a task delivered to your dashboard in five minutes.

Concepts

Mental model: task lifecycle, the four buckets, idempotency.

Temporal adapter

Durable workflows that pause for hours or days while waiting.

LangGraph adapter

Interrupt-based human-in-the-loop in a LangGraph node.