Describe the problem/error/question
I am trying to use a Human-in-the-loop setup with an n8n chat agent and a Google Sheets tool. However, the agent is not calling the Google Sheets tool with chat HITL node, even after I tried adjusting the system prompt. Does anyone have an idea of how to implement this, or any suggestions for what I should look at in my current setup? Thank you in advance!
Please share your workflow
Share the output returned by the last node
the other tools that connect to the agent is working perfectly fine except the google sheet one that connect to HITL node
The agent isn’t calling that tool for three fixable reasons, and they compound.
-
Tool names with spaces and special characters. customer address checking, Append row in sheet in Google Sheets, and the Call ‘add_to_cart’ style names all hurt tool-calling. The model sees the node name as the tool name, and spaces plus quotes make it unreliable, especially on lighter models. Give every tool a clean, consistent name with no spaces or punctuation. Half your tools already do this (product_catalog_query, address_lookup), so match that: save_customer_address, confirm_address_with_customer, add_to_cart, view_cart, remove_from_cart.
-
The prompt never names the address-save or confirmation step. Your system prompt walks through address_lookup and shipping, but it never tells the agent to call the confirmation/save tool at all. Models call tools far more reliably when the prompt names each tool explicitly and gives always/never rules and an ordered checkout sequence. I rewrote that section below.
-
The model. Your active model is google/gemini-3-flash-preview on OpenRouter (your OpenAI and Gemini nodes aren’t connected to the agent, so they’re inert). Flash-tier models are weak at picking the right tool from a large set. Move to GPT-5 (not mini) or Sonnet 4.5/4.6. That alone usually fixes half of “the agent won’t call my tool.”
Two smaller things I noticed: your HITL message was {{ $tool.parameters.district }}, but the wrapped tool has no district field (it’s district_th), so the confirmation would render blank. I fixed it to show the full address. And once you’ve done the above, if the agent still won’t fire it, connect save_customer_address directly to the agent and drive the approval from the prompt as a fallback.
Here’s your workflow with the renames, the rewritten prompt, GPT-5 wired in, and the HITL message fixed. Import and reconnect your credentials:
Also, I see this is your first post…welcome!! @Theeranop_Laohade
Hi @Theeranop_Laohade
The only tool that never fires is the one sitting behind the human review wrapper, so the wrapper is where to look, not the agent’s reasoning. Open your last execution, click the chat model sub-node and read its input: that is the exact tool list the model received. If the Google Sheets tool is not in that list, the model never had the option to call it and no prompt will change that.
For a customer confirming their own address in the chat, the supported shape is two plain tools on the agent rather than the review wrapper:
- Chat node connected as a tool, Operation
Send and Wait for Response, Response Type Approval.
- Google Sheets tool connected straight to the agent.
The agent asks for confirmation with the first, and appends the row with the second once the customer approves. This needs the Chat Trigger on Response Mode “Using Response Nodes”, which you already have. Keep both tools on the main workflow: the Chat node does not work inside a sub-workflow, including a sub-workflow used as an agent tool, so the save cannot be moved into a Call n8n Workflow tool like your cart ones.
Chat | Nodes | n8n Docs