FinalSay FinalSay

April 4, 2026 · FinalSay Team

Human-in-the-loop patterns for production agents

Callbacks, polling, timeouts: how to think about HITL when your agent cannot afford to block forever.

The failure mode is silent drift

In demos, humans answer instantly. In production, humans are in meetings, across time zones, and on flaky networks. If your agent blocks forever—or worse, assumes consent—you ship subtle, expensive mistakes.

Separate “waiting” from “deciding”

A solid HITL design keeps three ideas distinct:

  1. Request — what the agent needs and why it matters.
  2. Decision — the human’s answer, captured once, immutably for that request.
  3. Delivery — how the outcome reaches the runtime that asked, with explicit failure modes.

FinalSay is opinionated about (3): retries, backoff, and visibility when delivery is still pending.

MCP and HTTP

Whether you call the HTTP API directly or use tooling like MCP adapters, the contract is the same: one approval request, one resolution, explicit delivery. That keeps your agent code boring—in a good way. The reference FinalSay MCP server exposes create tools (request_human_approval and create_approval, equivalent) plus get_approval_result for polling—see the product docs’ MCP and n8n guides.

Explore the Integrations page and our documentation for concrete flows.

← All posts