The native Human-in-the-Loop approval flow for AI tools does not behave correctly in n8n 2.27.5.
I created a minimal workflow in which the Calculator AI Tool is protected by a Chat - Human Review node before being exposed to the AI Agent.
The intended topology is:
Calculator
|
| ai_tool
v
Chat - Human Review
|
| ai_tool
v
AI Agent
The AI Agent also uses a Chat Model:
Ollama Chat Model
|
| ai_languageModel
v
AI Agent
The main workflow is:
When chat message received
|
| main
v
AI Agent
|
| main
v
Chat - Send Message
In n8n 2.6.0, this setup works correctly.
In n8n 2.27.5, the AI Agent generates the Calculator tool call and the Human Review approval UI is shown. However, after clicking Approve, the wrapped Calculator tool is either not executed or its real result is not returned to the AI Agent.
The agent receives only the approval response, for example:
[
{
"data": {
"approved": true
}
}
]
Instead of receiving the real Calculator result:
40
Because the agent never receives the real tool result, it may retry the model/tool call until reaching the configured maximum number of iterations.
This appears to be a regression in the native Human Review tool wrapper or in the workflow resume behavior after approval.
To Reproduce
Start a self-hosted n8n instance using version 2.27.5.
Create a new workflow.
Add a When chat message received node.
Configure the Chat Trigger with:
Response Mode: Using Response Nodes
Connect the Chat Trigger to an AI Agent.
Connect an Ollama Chat Model to the ai_languageModel input of the AI Agent.
Add a Calculator AI Tool.
Add a Chat - Human Review node.
Connect the nodes using this exact topology:
Calculator
|
| ai_tool
v
Chat - Human Review
|
| ai_tool
v
AI Agent
Configure the Human Review node with:
Approval Type: Approve and Disapprove
Add a final Chat - Send Message node after the AI Agent.
Configure the final Chat node with:
Message: {{ $json.output }}
Configure the AI Agent with:
Max Iterations: 4
Return Intermediate Steps: enabled
Use this system message:
You are a minimal Human-in-the-Loop tool approval test agent.
When the user's message starts with `TEST:`:
1. Extract the arithmetic expression that follows `TEST:`.
2. Call the `Calculator` tool exactly once.
3. Do not calculate the expression yourself.
4. Do not invent, estimate, or assume a tool result.
5. Call only one tool at a time and wait for its actual result.
After an approved Calculator call with a valid result, respond exactly with:
TOOL_APPROVED | result=<real result>
If the tool execution is rejected, denied, or cancelled, do not call the Calculator again in the same turn.
Respond exactly with:
TOOL_DISAPPROVED | calculator was not executed.
If no real Calculator result is received, respond exactly with:
TOOL_FAILED | no real calculator result received.
For any other message, respond exactly with:
Send `TEST: <arithmetic expression>`.
Open the n8n chat and send:
TEST: 17+23
Confirm that the AI Agent generates a Calculator tool call similar to:
The problem appears to happen after the approval response is submitted.
The Human Review node returns the approval result as the tool observation:
{
"approved": true
}
However, the wrapped Calculator tool does not appear to run afterward, or its output is not forwarded back to the AI Agent.
Could you please confirm whether this is a known regression and whether there is a fix or supported workaround that preserves this exact topology?
Calculator -> Human Review -> AI Agent
I specifically need the Human Review node to remain between the AI Agent and the protected tool, rather than moving the approval step into the main workflow path.