Blocking Delay Tool for a Ai Agent LLM

Hi

I’m building an AI agent workflow where tool execution must strictly follow a sequential order—specifically:

  1. The AI agent triggers a Scraper tool to begin scraping data (which takes some time to complete).
  2. Then, I need to wait exactly 6 minutes before triggering the next tool.
  3. Only after the 6-minute wait, the agent should trigger a Task Status Check tool to get the result of the original scrape.

Problem

  • The agent is unable to perform a virtual delay between two tools**, even when I explicitly define this behavior in the system message. It seems to ignore the instruction to pause before moving to the next tool.
  • When I use a separate tool to enforce the delay**, the agent does not wait for the output of the delay tool. It simply marks the tool as “used” and immediately proceeds to execute the next tool, without respecting the intended wait time.

Workflow

{
“nodes”: [
{
“parameters”: {
“options”: {}
},
“type”: “@n8n/n8n-nodes-langchain.chatTrigger”,
“typeVersion”: 1.1,
“position”: [
0,
0
],
“id”: “be7596cd-b687-4ebd-a224-37c225425c54”,
“name”: “When chat message received”,
“webhookId”: “e0b093ec-967e-4e8d-8333-ddb45ca97b80”
},
{
“parameters”: {
“model”: {
“__rl”: true,
“mode”: “list”,
“value”: “gpt-4o-mini”
},
“options”: {}
},
“type”: “@n8n/n8n-nodes-langchain.lmChatOpenAi”,
“typeVersion”: 1.2,
“position”: [
-40,
260
],
“id”: “df3b7a78-aa06-4636-9865-2a95e2c8cd0d”,
“name”: “OpenAI Chat Model”,
“credentials”: {
“openAiApi”: {
“id”: “oHUluIpOKkXlIqH6”,
“name”: “OpenAi account”
}
}
},
{
“parameters”: {},
“type”: “@n8n/n8n-nodes-langchain.memoryBufferWindow”,
“typeVersion”: 1.3,
“position”: [
120,
260
],
“id”: “82a614ef-568b-447a-b965-db522c2ff3e7”,
“name”: “Simple Memory”
},
{
“parameters”: {
“description”: “=purpose: Gets statuses of the task_id that FT William Scraper Tool returns.\n\ninput schema: \n"task_id":\n"f12a08b1-fed4-49fb-be72-425df1ef9b47"\n\n”,
“workflowId”: {
“__rl”: true,
“value”: “A80g7TreSeL4na0U”,
“mode”: “list”,
“cachedResultName”: “Operations — Get task Status”
},
“workflowInputs”: {
“mappingMode”: “defineBelow”,
“value”: {
“task_id”: “={{ /n8n-auto-generated-fromAI-override/ $fromAI(‘task_id’, example:\n{\n\"task_id\":\n\"f12a08b1-fed4-49fb-be72-425df1ef9b47\"\n}, ‘string’) }}”
},
“matchingColumns”: [
“task_id”
],
“schema”: [
{
“id”: “task_id”,
“displayName”: “task_id”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“canBeUsedToMatch”: true,
“type”: “string”,
“removed”: false
}
],
“attemptToConvertTypes”: false,
“convertFieldsToString”: false
}
},
“type”: “@n8n/n8n-nodes-langchain.toolWorkflow”,
“typeVersion”: 2.2,
“position”: [
500,
260
],
“id”: “8a77ddaa-ddff-4f5f-b2f6-0f04e423db5a”,
“name”: “Get Task Status”
},
{
“parameters”: {
“description”: “- This tool activates the AI Agent "Scraper", which sends a scraping request to Ft William based on user-provided data.\n - It requires the following input fields:\n - "ein" (string)\n - "plan_name" (string)\n - "documents" (array: one or both of "5500", "SAR")\n - "sign_5500" (boolean)\n - This tool returns confirmation that the scraping request was triggered.”,
“workflowId”: {
“__rl”: true,
“value”: “MGGA46oG0jL2mAl9”,
“mode”: “list”,
“cachedResultName”: “Operations — Scraper”
},
“workflowInputs”: {
“mappingMode”: “defineBelow”,
“value”: {},
“matchingColumns”: ,
“schema”: [
{
“id”: “ein”,
“displayName”: “ein”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“canBeUsedToMatch”: true,
“type”: “string”,
“removed”: true
},
{
“id”: “plan_name”,
“displayName”: “plan_name”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“canBeUsedToMatch”: true,
“type”: “string”,
“removed”: true
},
{
“id”: “documents”,
“displayName”: “documents”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“canBeUsedToMatch”: true,
“type”: “array”,
“removed”: true
},
{
“id”: “sign_5500”,
“displayName”: “sign_5500”,
“required”: false,
“defaultMatch”: false,
“display”: true,
“canBeUsedToMatch”: true,
“type”: “boolean”,
“removed”: true
}
],
“attemptToConvertTypes”: false,
“convertFieldsToString”: false
}
},
“type”: “@n8n/n8n-nodes-langchain.toolWorkflow”,
“typeVersion”: 2.2,
“position”: [
300,
260
],
“id”: “70fc542f-abfc-499b-8bce-c7690e5d4c75”,
“name”: “Scraper”
},
{
“parameters”: {
“options”: {
“systemMessage”: “=name: Willy\ndescription: >\n You are Willy, an Orchestrator Agent responsible for managing the complete scraping and verification process of employee benefit plan documents (Form 5500 and SAR). Your job is to control other AI agents and tools in the correct order to ensure data is scraped and its status is properly retrieved.\n\n You must execute it step-by-step, following strict process logic, validation rules, and status transitions.\n\ntools:\n - name: Scraper Agent Tool\n description: >\n This tool activates the AI Agent "Scraper", which sends a scraping request to Ft William based on user-provided data.\n It requires the following input fields:\n - "ein" (string)\n - "plan_name" (string)\n - "documents" (array: one or both of "5500", "SAR")\n - "sign_5500" (boolean)\n This tool returns confirmation that the scraping request was triggered.\n\n - name: Get Task Status1\n description: >\n This tool is used to check the status of the web scraper task triggered by the Willy Agent.\n It must only be used after waiting at least 6 minutes following the completion of the Scraper Agent Tool.\n\nrules:\n - Step 1:\n description: >\n Trigger the "Scraper Agent Tool" with a valid input object.\n Wait until it finishes and returns an output.\n \n\n - Step 2:\n description: >\n Only after finishing Step 1 and get its final output, trigger the "Get Task Status1" tool to check the scraping task’s result.\n\noutput_requirements: >\n The only valid output from this workflow must come from the Get Task Status1 tool.\n\nenforcement:\n - Do not skip steps.\n - Do not modify the sequence.\n - Do not call any tool multiple times.\n - Do not guess or simulate outputs—always use the actual tool result.\n”
}
},
“type”: “@n8n/n8n-nodes-langchain.agent”,
“typeVersion”: 2,
“position”: [
260,
0
],
“id”: “6b234c09-74c9-4cb6-9623-fb831b89b61d”,
“name”: “Willy AI Agent”
}
],
“connections”: {
“When chat message received”: {
“main”: [
[
{
“node”: “Willy AI Agent”,
“type”: “main”,
“index”: 0
}
]
]
},
“OpenAI Chat Model”: {
“ai_languageModel”: [
[
{
“node”: “Willy AI Agent”,
“type”: “ai_languageModel”,
“index”: 0
}
]
]
},
“Simple Memory”: {
“ai_memory”: [
[
{
“node”: “Willy AI Agent”,
“type”: “ai_memory”,
“index”: 0
}
]
]
},
“Get Task Status”: {
“ai_tool”: [
[
{
“node”: “Willy AI Agent”,
“type”: “ai_tool”,
“index”: 0
}
]
]
},
“Scraper”: {
“ai_tool”: [
[
{
“node”: “Willy AI Agent”,
“type”: “ai_tool”,
“index”: 0
}
]
]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “eed34042b35968c8cd7b495d399304322844e764aac19edc0c0d383383415751”
}
}

Information on your n8n setup

self hosted

I tried to wait for 3 seconds with a simple code node and it appears to have worked for me. Check this out:

Thanks, I try the same but it did not worked.

It should do the waiting from the timer tool before trigger the “get task status” tool, but as you can see in the screenshot it goes arround all the tools and then start waiting

If the same setup hasn’t worked for you then it’s probably going to be about the system prompt and the way you instruct your agent to handle waiting. From what I can see from the screenshot, your setup isn’t all the different in terms of the nodes involved and the approach in general. The only thing left are instructions…

Seems like a lot to do in one node. How about just giving the first AI node the scrape prompt, then go back into n8n and use a Wait node where you can strictly enforce the wait time, after that you can run another AI node to review the scraped data?

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.