Guides

How an AI agent gets a person’s approval

Human in the loop: let your agent pause for a decision, then carry on with the answer.

What “human in the loop” means

Some steps shouldn’t be taken by an AI agent alone: spending money, sending something to a customer, booking a visit, changing a record. Human in the loop means the agent stops at that step, asks a person, and continues only with their answer. The answer can be a yes or no, but often it’s more: a date, a choice, a document, a photo, or a question back.

The hard part isn’t pausing. It’s reaching the right person, giving them a clear way to answer, and getting the answer back to the agent as data it can use.

Three ways to do it

Which one fits depends on who decides.

ApproachWho answersGood for
Ask in the chat: a confirmation, MCP elicitation or an MCP AppThe person using the AI chatChecking with the user before the agent acts for them
A review inbox for your team: tools like gotoHuman or Zapier Human in the LoopReviewers in your own team, with an accountChecking what the agent produced before it goes out
Reach the person who decides: TaskrizAnyone: a manager, a customer, a contractor, a supplierDecisions that belong to someone outside the chat, often outside your business

The rest of this guide shows the third way, with Taskriz.

Step by step with Taskriz

1. Connect your agent

Use the Taskriz MCP server (https://www.taskriz.com/mcp) from Claude, ChatGPT, Microsoft 365 Copilot, Cursor or VS Code, or the Taskriz API from your own code. Get Taskriz shows how for each app; the free plan is enough to start.

2. Ask for the approval

From an AI app, ask in plain words. The agent designs the request, checks it and sends it:

“Ask Priya Shah (priya@example.com) to approve Northside Joinery’s quote for the Level 3 fit-out: $18,400 ex GST, delivered by Fri 20 Nov. Give her Approve and Ask a Question, and a box for a note.”

From your own code, send the request with the API. Its payload is the screen the person sees: the facts, a box for a note, the main action and a plain alternative.

| note |
note := TextViewMorph new placeholder: 'A note for the team (optional)'.
ScreenMorph new title: 'Approve Quote';
  addMorph: (LabelMorph new text: 'Northside Joinery has quoted for the Level 3 fit-out: $18,400 ex GST, delivered by Fri 20 Nov.');
  addMorph: (ListMorph new style: #insetGrouped; addMorph: note; yourself);
  addMorph: (ButtonMorph new label: 'Approve'; onClick: [Taskriz current reply: #{ #decision -> 'approve'. #note -> note value }]);
  addMorph: (ButtonMorph new label: 'Ask a Question'; style: #plain; onClick: [Taskriz current reply: #{ #decision -> 'question'. #note -> note value }]);
  yourself
curl -X POST https://api.taskriz.com/v1/send \
  -H 'authorization: Bearer <access_token>' -H 'content-type: application/json' \
  -d @- <<'JSON'
{
  "to": ["<connectionId>"],
  "kind": "ui",
  "correlationId": "quote-1182",
  "subject": "Approve the Level 3 joinery quote",
  "summary": "Northside Joinery · $18,400 ex GST · delivery Fri 20 Nov",
  "payload": "| note | note := TextViewMorph new placeholder: 'A note for the team (optional)'. ScreenMorph new title: 'Approve Quote'; addMorph: (LabelMorph new text: 'Northside Joinery has quoted for the Level 3 fit-out: $18,400 ex GST, delivered by Fri 20 Nov.'); addMorph: (ListMorph new style: #insetGrouped; addMorph: note; yourself); addMorph: (ButtonMorph new label: 'Approve'; onClick: [Taskriz current reply: #{ #decision -> 'approve'. #note -> note value }]); addMorph: (ButtonMorph new label: 'Ask a Question'; style: #plain; onClick: [Taskriz current reply: #{ #decision -> 'question'. #note -> note value }]); yourself"
}
JSON
# → 202 {"messageId": "01K…", "recipients": 1}

The person is notified in the Taskriz app, by email or by text message. Someone without an account opens it from the link, with no app and no account needed.

3. Wait for the answer

The answer comes back as an event on the same correlationId, with the data the button sent:

curl https://api.taskriz.com/v1/events -H 'authorization: Bearer <access_token>'
# → {"events": [{"id": "01K…", "kind": "reply", "correlationId": "quote-1182",
#                "reply": {"decision": "approve", "note": "Go ahead, but confirm delivery before the 20th."}, …}]}
curl -X POST https://api.taskriz.com/v1/events/ack \
  -H 'authorization: Bearer <access_token>' -H 'content-type: application/json' \
  -d '{"ids": ["01K…"]}'

An AI app reads it with the get_replies tool. Your own code can fetch events as above, keep a WebSocket open, or have Taskriz post them to its web address. See Developers for each.

4. Carry on

Act on the decision: place the order, tell the supplier to go ahead, or answer the question. To follow up, send the next request on the same correlationId, and the person sees it in the same conversation.

Designing an approval people answer quickly

The guide for Agents has the principles, every building block and more worked examples.

Consent and privacy

Requests are sealed so only the devices of the person you ask can open them, and the emails and texts that tell them about it never include what was asked. People choose who can reach them, and can decline or stop a business at any time. See Security.

Questions

Is “human in the loop” the same as asking the user in the chat?

Only when the person who decides is the one using the chat. Often the decision belongs to someone else: a manager, a customer, a contractor. Then the agent has to reach that person where they are.

Does the person need an account or an app?

No. They answer from the link in an email or text message, with no app and no account. Anyone who answers often can install the Taskriz app to answer faster.

How does my agent get the answer?

With the MCP server, the agent reads replies with get_replies. With the API, it fetches events from /v1/events, keeps a WebSocket open, or has Taskriz post them to its web address.

Can the person say no?

Yes. They can choose any answer the request offers, decline the invitation, or stop your business reaching them. Respect it: tell the person you’re helping rather than trying another way.

Next: For Agents, designing requests people answer in seconds; or Developers, the API, the plugins and the MCP tools.