The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "router-agent",
"nodes": [
{
"parameters": {
"public": true,
"initialMessages": "Hi there! My name is NOVA. How can I assist you today?",
"options": {
"allowFileUploads": true,
"title": "NOVA - Networked Orchestration of Virtual Agents"
}
},
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"typeVersion": 1.1,
"position": [
-1920,
-2440
],
"id": "1674d06f-ce12-4c0f-933b-665bd277fc30",
"name": "When chat message received"
},
{
"parameters": {
"promptType": "define",
"text": "={{ $json.body.conversationHistory && $json.body.conversationHistory.length > 0 ? 'Previous conversation context:\\n' + $json.body.conversationHistory.map(msg => (msg.role === 'user' ? 'User: ' : 'Assistant: ') + msg.content).join('\\n') + '\\n\\nCurrent request:\\n' + $json.body.chatInput : $json.body.chatInput }}",
"options": {
"systemMessage": "You are a specialized AI assistant that serves as a routing agent for a system of 25 specialized AI agents. Your primary responsibility is to analyze user requests, determine which specialized agent would be most appropriate to handle the request, and provide the agent ID along with a brief explanation of why that agent is the best fit.\n\n## HANDLING TOOL INQUIRIES\n\nWhen users ask \"what tools do you have?\" or similar questions about capabilities:\n- Reference the comprehensive system of 25 specialized agents documented below\n- Explain that you can route them to agents for knowledge management, development, media tools, AI automation, and monitoring\n- Offer to help route them to the most appropriate specialized agent for their specific needs\n\n## CRITICAL: Service Name Recognition\n\n**WHEN A REQUEST EXPLICITLY MENTIONS A SERVICE NAME**, always route to that service's agent immediately. DO NOT ask for clarification when the service is clearly identified:\n\n- **Blinko mentions** \u2192 blinko-agent (e.g., \"do i have any notes in blinko?\", \"show me my blinko notes\", \"create a blinko note\")\n- **TriliumNext mentions** \u2192 triliumnext-agent\n- **BookStack mentions** \u2192 bookstack-agent\n- **Gitea mentions** \u2192 gitea-agent\n- **Forgejo mentions** \u2192 forgejo-agent\n- **YouTube mentions** \u2192 youtube-agent\n- **OBS mentions** \u2192 obs-agent\n- **REAPER mentions** \u2192 reaper-agent or reaper-qa-agent\n\n**Rule**: If the user explicitly names a service/platform that has a dedicated agent, route there immediately without clarification.\n\n## Your Core Responsibilities\n\n1. Accurately analyze the content and intent of user requests\n2. Match requests to the most appropriate specialized agent based on domain expertise and capabilities\n3. Return a clear decision with the selected agent ID and brief reasoning\n4. Handle ambiguous requests by asking clarifying questions\n\n## Specialized Agent Directory\n\nYou have access to the following specialized agents, each with specific domains and capabilities:\n\n### Knowledge Management & Note-Taking Agents\n\n1. **TriliumNext Notes Agent** (ID: `triliumnext-agent`)\n - Manages hierarchical notes in TriliumNext Notes application\n - Capabilities: search, create, update, delete notes with hierarchical organization\n - Best for: Users working with TriliumNext Notes for personal knowledge management\n\n2. **Blinko Agent** (ID: `blinko-agent`)\n - Manages notes in the Blinko note service\n - Capabilities: create/update flash notes and regular notes, search, retrieve daily reviews\n - Best for: Quick note-taking, daily reviews, and sharing notes\n\n3. **BookStack Agent** (ID: `bookstack-agent`)\n - Interfaces with BookStack knowledge base\n - Capabilities: search and retrieve information from BookStack documentation\n - Best for: Finding and understanding information in organizational documentation\n\n4. **Memos Agent** (ID: `memos-agent`)\n - Works with Memos note-taking application\n - Capabilities: search existing memos, create new ones\n - Best for: Managing bite-sized notes and quick information capture\n\n5. **Outline Agent** (ID: `outline-agent`)\n - Manages Outline knowledge base platform\n - Capabilities: document management, collection organization, comment handling\n - Best for: Team documentation, wiki management, and collaborative knowledge bases\n\n6. **SiYuan Agent** (ID: `siyuan-agent`)\n - Interfaces with SiYuan Note knowledge base\n - Capabilities: browse notebooks, search information, create/edit content, manage files\n - Best for: Users with SiYuan Note for knowledge management and organization\n\n7. **Karakeep Agent** (ID: `karakee-agent`)\n - Helps manage digital content through Karakeep\n - Capabilities: search bookmarks, manage lists, tag management, add bookmarks\n - Best for: Organizing bookmarks, notes, and digital content collections\n\n8. **Paperless Agent** (ID: `paperless-agent`)\n - Works with Paperless-NGX document management system\n - Capabilities: search, retrieve, manage documents, create/manage tags\n - Best for: Digital document management and organization\n\n9. **OnlyOffice Agent** (ID: `onlyoffice-agent`)\n - Integrated with ONLYOFFICE DocSpace\n - Capabilities: manage rooms, folders, files, user access\n - Best for: Document collaboration and management in ONLYOFFICE\n\n### Development & Repository Management Agents\n\n10. **CLI Server Agent** (ID: `cli-server-agent`)\n - Provides secure command-line execution capabilities\n - Capabilities: execute whitelisted commands, verify security rules\n - Best for: System operations requiring command-line access\n\n11. **Forgejo Agent** (ID: `forgejo-agent`)\n - Manages Forgejo repositories\n - Capabilities: view/manage repos, branches, commits, files, issues, PRs\n - Best for: Forgejo repository management tasks\n\n12. **Gitea Agent** (ID: `gitea-agent`)\n - Manages Gitea repositories\n - Capabilities: user/repo/branch management, file operations, issues, PRs\n - Best for: Gitea repository management tasks\n\n13. **System Search Agent** (ID: `system-search-agent`)\n - Searches for files and folders across Linux file systems\n - Capabilities: search with patterns, filter with Unix-style matching\n - Best for: Finding files and organizing digital content on Linux\n\n### Media & Creative Tools Agents\n\n14. **Ableton Copilot** (ID: `ableton-copilot`)\n - Assists with music production in Ableton Live\n - Capabilities: helps with production techniques, sound design, composition\n - Best for: Musicians and producers using Ableton Live\n\n15. **OBS Agent** (ID: `obs-agent`)\n - Controls OBS Studio through WebSocket protocol\n - Capabilities: manages scenes, sources, streaming, recording, audio settings\n - Best for: Streamers and content creators using OBS Studio\n\n16. **Reaper Agent** (ID: `reaper-agent`)\n - Controls REAPER digital audio workstation\n - Capabilities: create projects/tracks, add MIDI notes, get project info\n - Best for: Direct music creation and manipulation in REAPER\n\n17. **Reaper QA Agent** (ID: `reaper-qa-agent`)\n - Provides information about REAPER projects\n - Capabilities: find and parse REAPER projects to answer questions\n - Best for: Understanding and analyzing existing REAPER projects\n\n18. **YouTube Agent** (ID: `youtube-agent`)\n - Extracts and processes transcripts from YouTube videos\n - Capabilities: retrieve transcripts with/without timestamps, analyze video content\n - Best for: Understanding video content without watching, content summarization, research\n\n### AI & Automation Agents\n\n19. **Flowise Agent** (ID: `flowise-agent`)\n - Connects to Flowise chatflows and assistants\n - Capabilities: list available chatflows, send inputs to chatflows\n - Best for: Leveraging custom AI workflows created in Flowise\n\n20. **Langfuse Agent** (ID: `langfuse-agent`)\n - Accesses managed prompts from Langfuse\n - Capabilities: list available prompts, retrieve and compile specific prompts\n - Best for: Using professionally designed prompts from Langfuse\n\n21. **Puppeteer Agent** (ID: `puppeteer-agent`)\n - Provides browser automation capabilities\n - Capabilities: navigate websites, take screenshots, interact with elements\n - Best for: Web automation, scraping, and testing\n\n22. **RAGFlow Agent** (ID: `ragflow-agent`)\n - Document-grounded retrieval-augmented generation system\n - Capabilities: retrieve and summarize factual, citation-supported content\n - Best for: Knowledge retrieval with precise citations and source tracking\n\n23. **Fetch Agent** (ID: `fetch-agent`)\n - Retrieves and processes web content in various formats\n - Capabilities: fetch HTML, JSON, plain text, and Markdown from URLs\n - Best for: Web content retrieval, API data fetching, content analysis\n\n### Monitoring & Home Automation Agents\n\n24. **Home Assistant Agent** (ID: `home-assistant-agent`)\n - Controls smart home devices through Home Assistant\n - Capabilities: query device states, control devices, troubleshoot automations\n - Best for: Smart home management and control\n\n25. **Prometheus Agent** (ID: `prometheus-agent`)\n - Queries and analyzes metrics from Prometheus monitoring systems\n - Capabilities: run queries, analyze metrics, troubleshoot performance\n - Best for: System monitoring, performance analysis, and troubleshooting\n\n## Decision-Making Framework\n\nWhen analyzing a user request, follow this process:\n\n1. **Identify the domain**: Determine which general category the request falls into:\n - Knowledge/Note Management\n - Development/Repository Management\n - Media/Creative Tools\n - AI/Automation\n - Monitoring/Home Automation\n\n2. **Identify specific tools or platforms**: Look for mentions of specific applications, platforms, or services that match with specialized agents\n\n3. **Analyze capabilities needed**: Determine what operations or functions the user is trying to perform\n\n4. **Match to specialized agent**: Select the agent with the closest domain match and required capabilities\n\n5. **Resolve ambiguity**: If multiple agents could handle the request or if the request is unclear, identify the most likely agent but note alternative options\n\n## CRITICAL: Conversation Context Handling\n\n**ALWAYS CHECK CONVERSATION HISTORY FIRST**: When conversation history is provided, analyze it to understand:\n- What specialized agent(s) were previously used\n- What domain/platform the conversation was focused on\n- Whether the current request is a follow-up or continuation\n\n**Follow-up Question Rules**:\n- **Repository questions after repo discussions**: If previous messages involved repositories (Gitea, Forgejo), route follow-ups like \"anything with X in the name?\" to the same repository agent\n- **Note/document searches after knowledge base queries**: If previous context involved searching notes/documents, continue with the same knowledge agent\n- **Media requests after media discussions**: If previous context involved media tools, continue with the same media agent\n\n**Examples of contextual follow-ups**:\n- After Gitea discussion: \"do you see any repos with hetzner in the name?\" \u2192 gitea-agent\n- After BookStack search: \"anything about databases?\" \u2192 bookstack-agent\n- After YouTube transcript: \"summarize the key points\" \u2192 youtube-agent\n\n**DO NOT** send contextual follow-up questions to clarification-needed unless they are genuinely ambiguous across different domains.\n\n## Response Format\n\nFor clear requests that map to a specific agent, respond with:\n\n```\nSELECTED AGENT: [agent_id]\nREASON: [Brief explanation of why this agent is the best match for the request]\nUSER_MESSAGE: [Repeat the user's exact original message here]\n```\n\nFor ambiguous requests requiring clarification, respond with:\n\n```\nCLARIFICATION NEEDED\nPOSSIBLE AGENTS: [list of potential agent_ids]\nQUESTION: [Specific question to help determine the correct agent]\nUSER_MESSAGE: [Repeat the user's exact original message here]\n```\n\nIMPORTANT: Always include the USER_MESSAGE field with the user's exact original message in your response. This is critical for proper routing.\n\n## Examples\n\nExample 1:\nUser: \"I need to search for documents about project X in my knowledge base\"\nResponse:\n```\nSELECTED AGENT: outline-agent\nREASON: The request involves searching for documents in a knowledge base, which is a core capability of the Outline Agent. The reference to \"project X\" suggests organizational documentation, which Outline specializes in managing.\nUSER_MESSAGE: I need to search for documents about project X in my knowledge base\n```\n\nExample 2:\nUser: \"Help me control my smart lights in the living room\"\nResponse:\n```\nSELECTED AGENT: home-assistant-agent\nREASON: The request involves controlling smart home devices (lights), which is a primary function of the Home Assistant Agent.\nUSER_MESSAGE: Help me control my smart lights in the living room\n```\n\nExample 3:\nUser: \"I want to create a new note about my meeting\"\nResponse:\n```\nCLARIFICATION NEEDED\nPOSSIBLE AGENTS: blinko-agent, memos-agent, triliumnext-agent, siyuan-agent\nQUESTION: Which note-taking application are you using? Options include Blinko, Memos, TriliumNext Notes, or SiYuan Note.\nUSER_MESSAGE: I want to create a new note about my meeting\n```\n\nExample 4:\nUser: \"Get the transcript from this YouTube video: https://www.youtube.com/watch?v=dQw4w9WgXcQ\"\nResponse:\n```\nSELECTED AGENT: youtube-agent\nREASON: The request involves extracting a transcript from a YouTube video, which is the primary function of the YouTube Agent.\nUSER_MESSAGE: Get the transcript from this YouTube video: https://www.youtube.com/watch?v=dQw4w9WgXcQ\n```\n\nExample 5:\nUser: \"Retrieve the content from this website for me\"\nResponse:\n```\nSELECTED AGENT: fetch-agent\nREASON: The request involves retrieving content from a website, which is the core capability of the Fetch Agent.\nUSER_MESSAGE: Retrieve the content from this website for me\n```\n\nExample 6:\nUser: \"do i have any notes in blinko?\"\nResponse:\n```\nSELECTED AGENT: blinko-agent\nREASON: The request specifically mentions Blinko and asks about notes, which is directly handled by the Blinko Agent that manages notes in the Blinko note service.\nUSER_MESSAGE: do i have any notes in blinko?\n```\n\nExample 7:\nUser: \"show me my blinko notes\"\nResponse:\n```\nSELECTED AGENT: blinko-agent\nREASON: The request explicitly asks for Blinko notes, which is the primary function of the Blinko Agent.\nUSER_MESSAGE: show me my blinko notes\n```\n\nRemember, your primary goal is to route the user to the most appropriate specialized agent based on their request. Provide clear, concise reasoning for your selection to help users understand why a particular agent is best suited to assist them. Always include the original user message in your response using the USER_MESSAGE field.\n## CRITICAL: Preserve Tool Results Exactly\n\n**NEVER modify, correct, or \"fix\" the content returned by MCP tools when displaying it to the user.** This includes:\n\n- **Do NOT fix perceived typos** in content returned by tools\n- **Do NOT rephrase or rewrite** content from tool results\n- **Do NOT add formatting** that wasn't in the original content\n- **Do NOT \"improve\" grammar or wording** in tool results\n- **Always preserve the exact text** as returned by the MCP tools\n\nWhen displaying information from tools, show it exactly as it appears in the tool results. Your role is to present the information, not to edit or improve it. The user expects to see their actual data, not your interpretation of it."
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.9,
"position": [
-1560,
-2180
],
"id": "cc28784e-2bf3-46d6-a136-274216a076fc",
"name": "AI Agent"
},
{
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
-1620,
-1980
],
"id": "424aad90-7ce5-4c69-a0ce-5b1e800ee1a2",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "ableton-copilot",
"operator": {
"type": "string",
"operation": "equals"
},
"id": "c237b982-c900-4525-8eeb-b02ab39f980c"
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "1c1ab39a-d5b7-4719-aec6-f57bcc26c92f",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "blinko-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "bc1c2592-cda7-432f-af7c-010f859a4ca1",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "bookstack-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "faa89375-a0ac-4f84-9c11-0797e0da53f2",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "cli-server-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "cd06e72a-76b0-424e-987c-bc11ad37517a",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "flowise-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "cab0b253-9ac6-4adc-896d-c713061db0b9",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "forgejo-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "0214372d-ac3a-4543-a821-8ca1efff2f2e",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "gitea-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "5b81bca5-bfda-4430-9c91-dfaf2473ceb3",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "home-assistant-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "e726884a-0027-4baa-b891-1a7c43c9ecbc",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "karakee-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "74ed2959-91ff-48d4-a9a6-24e434899c55",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "langfuse-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "e22da3bb-82e2-44ae-a07d-16ef3f8e2de3",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "memos-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "2f4ecfba-4e21-4b30-a13d-c4b006dd81eb",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "obs-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "46660559-8bc6-4ddf-a428-0cec003265b5",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "onlyoffice-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "0a84de92-1cd6-4b4a-ac90-53f031e60b2a",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "outline-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "dbf5ad76-fff8-48d1-a833-7b6a1bc63e3e",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "paperless-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "e55cf453-07d1-46ac-8376-700f828696f4",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "prometheus-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "a11649fa-4325-4294-b370-d8476a128189",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "puppeteer-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "8f7c3e58-9373-42e6-b102-609bdc03c320",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "ragflow-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "8c8501c9-1b67-477b-b79d-fdf209a5e2b9",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "reaper-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "7744f7b3-f024-4cef-b8c0-ca86935ea228",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "reaper-qa-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "e95b0043-252b-4dce-8835-63f2bc2920c2",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "siyuan-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "3ffb2eae-399a-4683-a25e-205031972d53",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "system-search-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "fa06ef70-f374-4bf3-9656-3e0c638a5d93",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "triliumnext-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "f5a9af83-b3bc-4f04-b3ef-4ad3fd418a78",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "clarification-needed",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "b6c36f63-506b-4819-96a2-a00cd8cee8ff",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "youtube-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "8b3e65b8-7731-4d0c-909e-4d7eb9345989",
"leftValue": "={{ $json.selectedAgent }}",
"rightValue": "fetch-agent",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
}
]
},
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
-980,
-2660
],
"id": "3ea2546b-3a63-471f-a4ce-563a9573787f",
"name": "Route to Agent"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "U9kHToGdtVOOUQ8i",
"mode": "list",
"cachedResultName": "ableton-copilot"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "reason",
"displayName": "reason",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "originalMessage",
"displayName": "originalMessage",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "selectedAgent",
"displayName": "selectedAgent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "aiResponse",
"displayName": "aiResponse",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatHistory",
"displayName": "chatHistory",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "array",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
-760,
-4680
],
"id": "2c327a01-da22-4815-b962-f3ae8282ccd2",
"name": "ableton-copilot"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "663BL5mOEEA9PAk9",
"mode": "list",
"cachedResultName": "blinko"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "reason",
"displayName": "reason",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "originalMessage",
"displayName": "originalMessage",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "selectedAgent",
"displayName": "selectedAgent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "aiResponse",
"displayName": "aiResponse",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatHistory",
"displayName": "chatHistory",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "array",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
-760,
-4480
],
"id": "f8102c28-7768-4aa2-85fb-e3944c9e4c5d",
"name": "blinko-agent"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "YywcuhJHx7Ib4PPg",
"mode": "list",
"cachedResultName": "bookstack"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "reason",
"displayName": "reason",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "selectedAgent",
"displayName": "selectedAgent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatHistory",
"displayName": "chatHistory",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "array",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
-760,
-4280
],
"id": "b9dad33e-c768-438c-ab5f-c60b9d413cab",
"name": "bookstack-agent"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "lWYJFMtOecosM5BG",
"mode": "list",
"cachedResultName": "cli-server"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "reason",
"displayName": "reason",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "selectedAgent",
"displayName": "selectedAgent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatHistory",
"displayName": "chatHistory",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "array",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
-760,
-4080
],
"id": "f548a1e8-68ca-4c19-b316-cf1035d3f104",
"name": "cli-server-agent"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "vPFfIsP04dA0RGKf",
"mode": "list",
"cachedResultName": "flowise"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "reason",
"displayName": "reason",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "selectedAgent",
"displayName": "selectedAgent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatHistory",
"displayName": "chatHistory",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "array",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
-760,
-3880
],
"id": "ca3b65df-d0fd-442c-88c2-3834aa2c7f91",
"name": "flowise-agent"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "VLjppbVnWLSsvera",
"mode": "list",
"cachedResultName": "forgejo-agent"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "reason",
"displayName": "reason",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "selectedAgent",
"displayName": "selectedAgent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatHistory",
"displayName": "chatHistory",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "array",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
-760,
-2680
],
"id": "a66a4f12-051e-4a2f-8efc-219cd4c3f1b5",
"name": "forgejo-agent"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "JfoZIBPKeCFP11n2",
"mode": "list",
"cachedResultName": "gitea-agent"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "reason",
"displayName": "reason",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "selectedAgent",
"displayName": "selectedAgent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatHistory",
"displayName": "chatHistory",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "array",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
-760,
-3680
],
"id": "b0b5fc55-eb8d-44df-9999-78404394c564",
"name": "gitea-agent"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "IRoM12q6Bmj6ZOEf",
"mode": "list",
"cachedResultName": "home-assistant"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "reason",
"displayName": "reason",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "selectedAgent",
"displayName": "selectedAgent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatHistory",
"displayName": "chatHistory",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "array",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
-760,
-3480
],
"id": "3ecb43cb-adac-41b4-aa28-5cff620a8dd5",
"name": "home-assistant-agent"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "wPNCVPV49N1UHZXp",
"mode": "list",
"cachedResultName": "langfuse-server"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "reason",
"displayName": "reason",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "selectedAgent",
"displayName": "selectedAgent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatHistory",
"displayName": "chatHistory",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "array",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
-760,
-3080
],
"id": "1e6d24ef-b06c-476c-b58d-320640dedc72",
"name": "langfuse-agent"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "WSmgeNYwSiJ2Xiq7",
"mode": "list",
"cachedResultName": "memos-mcp"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "reason",
"displayName": "reason",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "selectedAgent",
"displayName": "selectedAgent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatHistory",
"displayName": "chatHistory",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "array",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
-760,
-2880
],
"id": "1a91f55f-f8d3-4f93-a7e2-ee6588fc5288",
"name": "memos-agent"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "Z3gZAj9TvyJ3TCEj",
"mode": "list",
"cachedResultName": "obs-server"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "reason",
"displayName": "reason",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "selectedAgent",
"displayName": "selectedAgent",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string",
"removed": false
},
{
"id": "chatHistory",
"displayName": "chatHistory",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "array",
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
-760,
-2480
],
"id": "042a390a-3a3b-42f9-b98c-4adadb7b1572",
"name": "obs-agent"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "R7Mrgn6n1JLX5REW",
"mode": "list",
"cachedResultName": "onlyoffice-docspace"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [
{
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
openAiApi
About this workflow
router-agent. Uses chatTrigger, agent, lmChatOpenAi, executeWorkflow. Chat trigger; 59 nodes.
Source: https://github.com/dujonwalker/project-nova/blob/1cfff76201b1f929687d3d0b2e93aa82f4633418/n8n-workflows/router_agent.json — original creator credit. Request a take-down →