Human-in-the-loop approval workflows
Pause agents for human approve/reject on risky tools (spend, delete, send), with timeouts, escalations, and audit trails.
At a glance — Oct 2026
Updated 2026-10-27 · forward this page: /jtbds/hitl-approval-workflows#briefScores as of 2026-09-14 (43 days old; Depot marks scores stale after 30 days). The pick is still Depot's current editorial pick; it has not been re-reviewed since. Prices below carry their own dates.
- Depot Pick
- Temporal Cloud · 8.18/10 for this job (curated estimate, high confidence)
Workflow durability + signals. Confidence: high for Temporal patterns; productized HITL UIs vary.
- Runner-up
- Inngest · 8.08/10
Scores higher than the pick on: Price / performance, Developer & agent DX, Lock-in risk (higher = worse).
- When not to use the pick
- Notification-only approval UX (Knock/Courier) without durable state, or Inngest wait-for-event fits better.
- Lock-in / migration
- Runner-up Inngest has lower stored lock-in risk (4.2 vs 5, 0–10, higher = more lock-in).
- Sourced price (no comparable unit)
Pick: no sourced price in this job's unit (no_sourced_price).
No cheapest SKU (no_comparable_unit_for_job). No price was invented.
- Free option
- No free resource lists this job. A cheap paid SKU is not a free option.
- Failure modes to watch
- Confirmation skip: Gate those tool names on an approval id recorded before the call. A missing approval is a failure even if the downstream tool returns success.
- Identity confusion: Bind every tool call to a user or tenant id. Refuse the call if that id changed mid-task. For a public bot, the operator owns the words the bot shows.
- Non-determinism: Run the task more than once and compare the end state, not a single transcript. Record the trial count next to any success rate you cite.
- Over-refusal: Log refusals separately from successes. Review a sample against the written policy. Do not treat a refusal as a pass, and do not weaken a safety check to raise the pass rate.
- Policy conflict: If cited sources contradict each other, return the conflict and the URLs. Do not pick a winner silently.
- Prompt injection: Compare each tool call to the original user task. If the call only makes sense given text that arrived from a fetched page, file, or message, stop and ask. Record which source the instruction came from. This catalog does not store payloads or attack steps.
Cite: Agent Provider Depot, Depot Pick for hitl-approval-workflows: temporal-cloud, scores as of 2026-09-14. Agents: GET /api/decide?jtbd=hitl-approval-workflows
Temporal Cloud
Workflow durability + signals. Confidence: high for Temporal patterns; productized HITL UIs vary.
Pricing (directional): As of 2026-10-21 (temporal.io/pricing and docs.temporal.io/cloud/pricing, fetched 2026-10-21): Durable execution for long-running agent workflows. Developer plan is Pay-As-You-Go with no base monthly fee ('No base fee - 10% of Usage Spend')…
Lock-in risk: higher = more lock-in (worse). Overall already inverts this dimension.
Default durable orchestration for serious long-running agents. Inngest/Trigger.dev for lighter DX.
Quote for Human-in-the-loop approval workflows
Depot Pick stays Temporal Cloud. Prices below are sourced SKU rows only (as of 2026-10-27). Input and output are not blended. GET /api/quote?jtbd=hitl-approval-workflows
Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null.
Sourced price unavailable for the Depot Pick. No row in the pricing index.
4 of 5 candidates have no sourced price row. 5 are excluded from the Matching price comparison (none). no comparable sourced unit for this job; chat input $/1M and other units were not borrowed
Runners-up
Inngest
Best DX default for durable agent workflows in TypeScript/Python. Temporal when you need harder multi-lang…
Knock
Best agent-native notification fabric (toolkit + human-in-the-loop). Courier remains Depot orchestration…
Courier
Use when your agent/product notifies across many channels with preferences. Skip if you only send email.
Hatchet
Temporal/Inngest peer for agent task orchestration. Prefer Temporal for serious durability; Inngest for TS…
When NOT to use the top pick
Notification-only approval UX (Knock/Courier) without durable state, or Inngest wait-for-event fits better.
Full ranking (score table)
Ranked with this JTBD's weights. Scores are curated estimates unless marked otherwise. Agents: prefer /api/decide then this table for tie-breaks.
| # | Provider | Overall | Fit | $/perf | Latency | DX | As of |
|---|---|---|---|---|---|---|---|
| 1 | Knock | 8.2 | 9.0 | 7.2 | 8.6 | 9.0 | 2026-09-14 |
| 2 | Temporal CloudDepot Pick | 8.2 | 9.0 | 6.8 | 9.2 | 7.2 | 2026-09-14 |
| 3 | Courier | 8.1 | 8.8 | 7.2 | 8.6 | 9.0 | 2026-09-14 |
| 4 | Inngest | 8.1 | 8.2 | 8.0 | 8.4 | 9.0 | 2026-09-14 |
| 5 | Hatchet | 8.1 | 8.2 | 7.8 | 8.4 | 8.6 | 2026-09-14 |
Score methodology for this job
Workflow durability + signals. Confidence: high for Temporal patterns; productized HITL UIs vary.
capabilityFit: 20%pricePerformance: 12%latencyReliability: 28%developerDx: 14%privacyPosture: 8%lockInRisk: 8%maturity: 10%