NewIntroducing Integrations

Human-in-the-loop approval tools for AI agents in 2026

As of 2026-10-18, there are three kinds. Agent frameworks pause a tool call in your process until your code answers. Access and policy layers decide whether a call may run at all. Approval services hold the request, notify an approver and keep the record. Which one you need depends on who approves, where the provider key lives, and what has to be true after the approval.

What a human-in-the-loop approval tool does

A human-in-the-loop approval tool stops an AI agent's action before it runs, shows it to a person, and lets it run only if that person approves. The action is usually a tool call: a refund, an email, a file change, a database write.

The tools below differ on four things that matter more than the button. What exactly the human approves: the model's proposed arguments, a summary, a role, or the exact request that will be sent. Where the paused call waits: in your process, in your database, or in a hosted service. Who holds the provider's key when the approved call runs. And what is recorded once it has run.

Three kinds of tool

Approval switches in agent frameworks
LangGraph, the OpenAI Agents SDK, the Vercel AI SDK, the Claude Agent SDK, Mastra, Microsoft Agent Framework and the Cloudflare Agents SDK each ship a way to pause a tool call. The pause and the answer live in your application, and the approved tool runs in your process with your credentials. They are free, close to the code, and the right default when the person approving is the developer or the end user in the conversation.
Access and policy layers
Arcade, Composio, Permit.io and AWS Bedrock AgentCore Policy decide whether an agent may see or call a tool, and several of them hold the provider token. Their approval unit is usually access: an OAuth grant, a role, a permit or forbid rule. Check whether a person can approve one specific call with its arguments, and where that decision is enforced.
Approval and execution services
Hosted services that hold a request until an approver decides. Some return the decision to your code, which then makes the call. Anlyon also makes the call itself, with the key in its vault, so the approval is bound to the exact request that runs and the outcome is recorded against it.

What happened to HumanLayer's approvals API

HumanLayer built a human-in-the-loop approvals API for agents, with a require_approval decorator and a human_as_tool helper. In September 2025 the company moved to coding agents. A pull request titled "Clean up humanlayer sdk stuff, this is codelayer now" removed the SDK from the repository.

As of 2026-10-18, humanlayer.dev sells a multiplayer coding agent workspace, and the repository README reads: "public issues repo for humanlayer - the code here is pretty much all deprecated - you can try the rebuild of humanlayer at https://humanlayer.com". That is a pivot, not a shutdown. If you are moving off the earlier SDK, the HumanLayer comparison page maps each of its jobs.

Checked 2026-10-18 against humanlayer.dev and humanlayer/humanlayer README and Pull request 646.

HumanLayer alternative: each job the approvals API did, mapped

The same three questions, asked of each tool

Each cell summarises the tool's own documentation, with the page and the date under the row. Where we looked for something and did not find it, the cell says that and nothing stronger.

Human-in-the-loop approval tools for AI agents compared on what is approved, where the decision lives, and who holds the provider key
ToolWhat a human approvesWhere the paused call waitsWho holds the provider key
LangGraph interrupt() and LangChain HumanInTheLoopMiddlewareFrameworkThe tool call the model proposed. The middleware's decisions are approve, edit and reject, and edit changes the tool arguments before execution.In graph state saved by a checkpointer you configure. The graph waits until your code resumes it with Command(resume=...).

Your tool code, in your process. Credential custody was not found in these docs as of 2026-10-18.

Reviewer authentication, notifications and an audit record are left to your code in the examples.

Checked 2026-10-18 against LangChain human-in-the-loop and LangGraph interrupts.

OpenAI Agents SDK needsApprovalFrameworkOne tool call with the arguments the model proposed. The documented decisions are approve and reject, for one call or always.In a RunState your code serializes, stores and resumes. The docs tell you to authenticate the reviewer in your own app and not to take the reviewer's identity from the approval request body.

Function tools run in your process with your credentials. A hosted MCP tool in the Responses API can also require approval for each call.

Notifications, an audit record and a limit across runs were not found in these docs as of 2026-10-18.

Checked 2026-10-18 against Agents SDK (Python) human-in-the-loop and Agents SDK (JS) human-in-the-loop and Responses API MCP tool.

Vercel AI SDK toolApprovalFrameworkThe model's tool call. The answer carries approved and an optional reason, and the docs say the reason does not modify the tool's input.generateText and streamText do not pause. They return tool-approval-request parts, and your app adds a tool-approval-response to the messages for the next call.

Tools the AI SDK executes locally, in your process. Credential custody was not found in these docs as of 2026-10-18.

AI SDK 6 introduced needsApproval on tool(). The current docs mark it deprecated in favour of toolApproval on generateText, streamText or ToolLoopAgent.

Checked 2026-10-18 against AI SDK tools and tool calling and AI SDK 6 announcement.

Claude Agent SDK permissions and canUseToolFrameworkEach tool call Claude requests, by tool name and input. Your canUseTool callback can allow it, allow it with changed input, or deny it.In your process. The SDK checks hooks, deny rules, ask rules, the permission mode and allow rules first, then calls canUseTool. A deny rule blocks a tool even in bypassPermissions mode.

The tools run in your environment, with the credentials it holds. Credential custody was not found in these docs as of 2026-10-18.

Hooks can log calls and forward a permission prompt to Slack or email, which you wire up yourself.

Checked 2026-10-18 against Agent SDK permissions and Handle approvals and user input.

Mastra requireApprovalFrameworkA tool call before its execute function runs, with the model's arguments. You approve or decline it, optionally with a reason.In a snapshot in your storage provider. The docs note that the default in-memory store loses snapshots when the process exits.

Your tool code, in your process. Credential custody was not found in these docs as of 2026-10-18.

Reviewer identity and notifications were not found in these docs as of 2026-10-18.

Checked 2026-10-18 against Mastra agent approval.

Microsoft Agent Framework approval-required functionsFrameworkA function call by name and arguments, approved or rejected. By default a response is honoured only when it matches a pending request in the same session.The run completes with a request for input. Your code collects the decision and resumes the same session.

Your function code, in your process. Credential custody was not found in these docs as of 2026-10-18.

Notifications and an audit record were not found in these docs as of 2026-10-18.

Checked 2026-10-18 against Agent Framework tool approval.

Cloudflare Agents SDKFrameworkA tool call in a chat agent, through needsApproval, or a workflow step, through waitForApproval.In your own Durable Object or Workflow. The docs say pending approvals survive hibernation and a workflow wait can last months.

Your agent's code, with your credentials. Credential custody was not found in these docs as of 2026-10-18.

In the examples the approver is a value your code passes in. Authenticating it is left to you.

Checked 2026-10-18 against Agents human-in-the-loop and Chat agents API reference.

CrewAI human feedbackFrameworkThe output of a Flow method or a task's final answer, as free-text feedback that an LLM maps to an outcome you define. Approval of a specific tool call was not found in these docs as of 2026-10-18.By default it blocks for console input. An async provider raises a pending state, and your code resumes the flow with the feedback.

Your code, in your process. Credential custody was not found in these docs as of 2026-10-18.

A feedback history is kept on the flow. Notification senders are yours to write.

Checked 2026-10-18 against Human feedback in flows.

ArcadeAccess and policyThe end user approves an OAuth authorization. Contextual Access hooks can allow, deny or modify a call before it runs. A state that holds one call for a human decision was not found in Arcade's docs as of 2026-10-18.Arcade calls your server at three hook points: when tools are listed, before execution and after execution.

Arcade. Its blog says tokens are stored in an encrypted vault for each user that the model never touches, and in your own environment if you self-host.

Rate limits and execution logs are covered on our Arcade and Composio comparison page.

Checked 2026-10-18 against Contextual Access and Auth tool calling and Where are my tokens stored?.

ComposioAccess and policyThe enterprise page lists human-in-the-loop review policies. A docs page that says how they are configured was not found as of 2026-10-18. The catalog has a HITL toolkit that wraps a third-party service, HITL.sh.Before-execution modifiers run in your SDK and change the arguments. The HITL toolkit creates approval requests at HITL.sh that the agent then checks.

Composio. Its docs say that in the default cloud deployment Composio has custody of the credentials, and its enterprise page says it injects them into the outbound request.

Self-hosting and customer-managed keys are arranged with Composio's team.

Checked 2026-10-18 against Composio enterprise page and HITL toolkit and Token custody.

Permit.io Access Request MCPAccess and policyA role. An approved access request assigns the requested role. An approved operation assigns an _Approved_ role that grants operate, and the docs say your tool removes it after the action succeeds to make the approval one-time.In Permit. Your code calls permit.check(). Reviewers decide in Permit's embedded elements, through its API, or by an agent calling the approve tools.

Your tool makes the provider call. Holding provider keys was not found in these pages as of 2026-10-18.

The MCP server is open source, under the MIT licence.

Checked 2026-10-18 against Access Request MCP and permit-mcp repository.

AWS Bedrock AgentCore PolicyAccess and policyNo reviewer step is built in. Policies permit or forbid each call. A temporal policy can require an earlier approval call in the same session, such as approve_claim returning approved: true within the last hour, and that approval step is yours to build.At the AgentCore Gateway, which evaluates every request against Cedar or Dogwood policies. AWS announced general availability on 2026-03-03.

AgentCore Identity's token vault, which stores OAuth tokens and API keys encrypted with AWS KMS keys.

Temporal counts are per session. AWS's docs say starting a new session begins a new count.

Checked 2026-10-18 against AgentCore Policy and Temporal policies and General availability.

gotoHumanApproval serviceA review form you design, where a reviewer can edit the content before approving. Holding a named tool call was not described on its site as of 2026-10-18.In gotoHuman's hosted inbox, with optional email and Slack notifications. The result returns to your agent or workflow, which acts on it.

Your agent makes the provider call. Credential custody was not found on its site as of 2026-10-18.

SDKs for TypeScript and Python, an HTTP API and an MCP server.

Checked 2026-10-18 against gotohuman.com.

HITL.shApproval serviceA request your agent or workflow creates, answered in a mobile app or by email.In HITL.sh's hosted service. Your code reads the decision and acts on it.

Your code makes the provider call. Credential custody was not found on its site as of 2026-10-18.

Priced per request, with a free tier.

Checked 2026-10-18 against hitl.sh.

AnlyonApproval and execution serviceOne exact request. The approval is bound to a SHA-256 digest of the request, target, versions, preconditions and expiry, and Anlyon recomputes it before dispatch and refuses on any difference. An approver approves or denies with a note and cannot edit the request.In Anlyon, for actions routed through it. Approval requests notify over Slack, email, Discord or a webhook. The decision happens in the dashboard or through the API.

Anlyon, in a write-only vault, and Anlyon makes the call, for actions routed through it. The local approvals.gate() wrapper is the exception: your process keeps the key and runs the function.

Adds one limit shared by every agent, session and key in an environment, reserved before dispatch, and a receipt with a grade.

An absence in a vendor's public docs is not proof the vendor lacks the feature. If a row has gone stale, tell us at support@anlyon.com and we will fix it.

How to choose

Who approves?
If it is the developer or the user in the conversation, a framework switch is enough and costs nothing. If it is someone else, you need reviewer authentication, a notification, and a decision recorded against the request. The frameworks leave those to your code.
Where does the provider key live?
With a framework switch, the approved tool runs in your process, so whatever reaches that process can reach the key. Arcade, Composio and AgentCore hold tokens on your behalf. Anlyon holds the key and makes the call for actions routed through it.
What exactly is approved?
A proposed tool call, a role, a session rule, or the exact request that will be sent. A role or a session rule approves more than one call. Edit-then-approve, which LangChain's middleware and the Claude Agent SDK offer, changes the arguments between review and run, so decide which one you want.
What happens after the approval?
If the approved call times out, does something resend it? Does a second agent with a fresh session get a fresh allowance? None of the framework switches answer those, by design. Check how your choice records the outcome.

Where Anlyon is weaker than these

A hosted dependency, not a library
Every framework above runs in your process at no cost. Anlyon is a hosted API with an account. If a local pause is all you need, use your framework's switch.
No editing before approval
An approver approves or denies with a note. A changed request is a new request with its own approval. If your reviewers fix arguments in place, a framework that supports edit fits better.
No approve-by-reply
Slack, email, Discord and webhooks tell an approver something is waiting. The decision happens in the dashboard or through the API.
No sign-in for your end users
Anlyon connects a workspace's own accounts. It has no sign-in flow for each of your end users. Arcade and Composio, in the table above, hold each user's token for you.
No approver groups, no SOC 2, no self-hosting
Any workspace member can decide an approval today. There are no approver groups. There is no self-hosting and no SSO, it is not SOC 2 certified, and it is built and run by one person.

Questions

What is the best human-in-the-loop approval tool for AI agents in 2026?
It depends on who approves and where the key lives. When the developer or the user in the conversation approves, use your framework's switch: LangGraph interrupt(), OpenAI Agents SDK needsApproval, Vercel AI SDK toolApproval or Claude Agent SDK canUseTool. When a second person approves, several agents share a limit, or the agent must not hold the key, use a service that holds the request. Anlyon also makes the approved call and records a graded receipt.
What happened to HumanLayer?
As of 2026-10-18, humanlayer.dev sells a multiplayer coding agent workspace. Its approvals SDK was removed from the repository in September 2025, and the README says the code there is pretty much all deprecated. That is a pivot to coding agents, not a shutdown.
Does a framework approval switch keep my API keys away from the agent?
Not by itself. In the framework docs we read on 2026-10-18, the approved tool runs in your process with your credentials, and credential custody was not found. Keeping the key out of the agent's process needs a service that holds it and makes the call.
Is AWS Bedrock AgentCore Policy a human approval tool?
It is a policy layer. As of 2026-10-18 its policies permit or forbid each call at the AgentCore Gateway. A temporal policy can require an earlier approval call in the same session, and the human step behind that call is yours to build.

Related

Free tier, no credit card. One command if you use Claude or Cursor.

$ claude mcp add anlyon -- npx -y @anlyonhq/mcp-server