{"workflow":{"id":12504,"name":"Research topics using OpenRouter AI agents with Serper search and Jina AI reports","views":114,"recentViews":0,"totalViews":114,"createdAt":"2026-01-06T00:04:30.243Z","description":"## Who is this for\n\nThis workflow is designed for researchers, analysts, and knowledge workers who need to:\n- Gather comprehensive information on complex topics from multiple web sources\n- Get AI-synthesized insights rather than raw search results\n- Ensure factual accuracy with built-in hallucination detection\n- Automate research workflows that would otherwise take hours\n\nIt's ideal for animal advocacy researchers, campaign strategists investigating corporate practices, policy analysts tracking animal welfare legislation, and activists conducting due diligence on factory farms, testing labs, or agricultural companies.\n\n## What it does\n\nThis multi-agent research system orchestrates a complete research workflow:\n1. Accepts a research prompt via webhook or sub-workflow call\n2. Uses Serper API to perform multiple strategic web searches\n3. Extracts full content from discovered URLs using Jina AI reader\n4. Applies AI \"thinking\" tools for strategic analysis and planning\n5. Synthesizes findings into a coherent research report\n6. Verifies the report against retrieved documents to detect hallucinations\n7. Retries with corrections if fabricated content is detected\n8. Returns a verified, source-grounded research report\n\nThe workflow includes automatic retry logic if the AI doesn't use its tools properly or produces empty responses, ensuring reliable output.\n\n## How to set up\n\n1. Import the workflow into your n8n instance\n2. Configure the required API credentials:\n   - **OpenRouter API** for AI analysis (uses auto model selection)\n   - **Serper API** for web searches\n   - **Jina AI API** for content extraction\n3. Test with a simple research prompt\n4. Activate the workflow for production use\n\n### Example usage\n\nCall the workflow with a research prompt:\n```json\n{\n  \"prompt\": \"Research the current state of cage-free egg commitments among major food service companies, focusing on compliance deadlines and enforcement mechanisms\"\n}\n```\n\n## Requirements\n\n- OpenRouter API key\n- Serper API key (for Google search)\n- Jina AI API key (for web content extraction)\n- n8n instance with AI/Langchain nodes enabled\n\n## How to customize\n\n- **Adjust AI model**: Change the OpenRouter model from \"auto\" to a specific model for consistent behavior\n- **Modify temperature**: Lower temperature (0.2-0.4) for factual research, higher (0.6-0.8) for creative analysis\n- **Add source types**: Integrate additional research tools like academic databases or specialized APIs\n- **Change verification strictness**: Adjust the hallucination detection prompt for your accuracy requirements\n- **Extend retry logic**: Modify the retry conditions and maximum attempts based on your needs\n- **Add caching**: Implement caching for frequently researched topics to reduce API costs\n","workflow":{"id":"OwMONonmVWTLe9hS","meta":{"instanceId":"d0d0919ee2a246670c2a80cd2e44e3e0f7b3b2437f3e73af8501f9599a4a888b"},"name":"Research topics using AI agents with web search, verification, and report generation","tags":[],"nodes":[{"id":"0332ce76-4af7-42a3-b49b-588a792f3aec","name":"Read URL content in Jina AI","type":"n8n-nodes-base.jinaAiTool","position":[3264,4000],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","options":{},"requestOptions":{},"descriptionType":"manual","toolDescription":"**Web Content Extraction Tool**\n\nExtracts clean, readable text content from any web URL, removing ads, navigation, and formatting clutter.\n\n**Input:** Any valid web URL\n**Output:** Clean, structured text content from the page\n\n**Use When:** \n- Need full content from URLs found via Serper searches\n- Want to read articles, blog posts, or web pages thoroughly\n- Research requires detailed content analysis beyond search snippets\n\n**Best Practice:** Always use after Serper to get complete information from promising URLs."},"credentials":{"jinaAiApi":{"id":"6Grs8YZjZxafzxAm","name":"Jina AI account"}},"retryOnFail":true,"typeVersion":1},{"id":"77aa28be-5c93-4023-8e19-4dc87e8e2c06","name":"Think1","type":"@n8n/n8n-nodes-langchain.toolThink","position":[3392,4000],"parameters":{"description":"=**Strategic Reasoning Engine**\n\nProvides structured thinking space for complex analysis, planning, and decision-making. Maintains thought log across agent calls.\n\n**Use When:**\n- Breaking down complex multi-step tasks\n- Analyzing trade-offs between strategic options\n- Connecting insights from multiple sources\n- Planning next steps in agent workflow\n- Need to \"think out loud\" through problems\n\n**Best Practice:** Use at start of complex tasks and between major agent calls for continuity."},"typeVersion":1},{"id":"718b8f17-c7fb-4136-8105-a5b8a7f5d773","name":"OpenRouter Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[3136,4000],"parameters":{"model":"openrouter/auto","options":{}},"credentials":{"openRouterApi":{"id":"cbnNqQb9ek34wljs","name":"General Research Intelligence Agent"}},"typeVersion":1},{"id":"5e168b52-84bd-4bce-bdea-b6063f3d4f31","name":"Think Tool Analysis","type":"@n8n/n8n-nodes-langchain.toolThink","position":[4848,3488],"parameters":{"description":"=**Analysis Phase - Synthesize All Retrieved Texts**\n\nYour job: Analyze retrieved content to create strategic insights.\n\nRequired Analysis:\n1. Map findings to user query:\n   \"User asked about Prop 12 challenges\"\n   \n2. Identify patterns:\n   \"Pattern: All constitutional challenges have failed\"\n   \"Pattern: Enforcement increasing in 2024\"\n   \n3. Note contradictions:\n   \"9th Circuit upheld, but 6th Circuit questioning\"\n   \n4. Identify gaps:\n   \"No enforcement data after July 2024\"\n   \n5. Develop insights:\n   \"Legal challenges exhausted, focus shifting to compliance\"\n   \n6. Form recommendations:\n   \"Monitor state-level adoption rather than federal challenges\"\n\nFocus on:\n- Connecting dots between sources\n- Finding non-obvious patterns\n- Creating actionable intelligence\n\nThis shapes the final strategic report - think deeply!"},"typeVersion":1},{"id":"a7363f76-c780-4901-b2e8-834e5d8e3d2f","name":"Retry if Tools Not Used","type":"n8n-nodes-base.if","position":[4368,3264],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"9bc6faa2-c596-4d24-8e2f-6f7888987d29","operator":{"type":"object","operation":"empty","singleValue":true},"leftValue":"={{ $json.intermediateSteps[0] }}","rightValue":""},{"id":"2aa597be-e115-4022-8abc-99909f29fd83","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $runIndex }}","rightValue":4}]}},"typeVersion":2.2},{"id":"28ee2ca2-a438-4572-b7f1-84bbe4e6863c","name":"Retry if Response Empty1","type":"n8n-nodes-base.if","position":[5056,3264],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"9bc6faa2-c596-4d24-8e2f-6f7888987d29","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $json.output }}","rightValue":""},{"id":"2aa597be-e115-4022-8abc-99909f29fd83","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $runIndex }}","rightValue":4}]}},"typeVersion":2.2},{"id":"e701b64e-9a56-466e-abc4-28fedb9cd02d","name":"Auto Fallback3","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[4720,3488],"parameters":{"model":"openrouter/auto","options":{"temperature":0.6}},"credentials":{"openRouterApi":{"id":"cbnNqQb9ek34wljs","name":"General Research Intelligence Agent"}},"typeVersion":1},{"id":"d6903e54-39cc-496f-9c38-40a457c74f2d","name":"Serper API 2","type":"n8n-nodes-base.httpRequestTool","position":[3520,4000],"parameters":{"url":"https://google.serper.dev/search","method":"POST","options":{"batching":{"batch":{"batchSize":1}},"redirect":{"redirect":{}},"response":{"response":{"neverError":true,"fullResponse":true}}},"sendBody":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"q","value":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', `Plain text search query`, 'string') }}"}]},"genericAuthType":"httpHeaderAuth","toolDescription":"=Performs live Google searches and returns featured snippets, organic results, FAQs, maps, and more. Best for up-to-date information and broad query coverage."},"credentials":{"httpHeaderAuth":{"id":"PmK8h96T6iczF7fT","name":"Serper API"}},"typeVersion":4.3},{"id":"a0cc6087-161c-487f-ba2d-4cc3ab00eac3","name":"Semantic Scholar 2","type":"n8n-nodes-base.httpRequestTool","position":[3648,4000],"parameters":{"url":"https://api.semanticscholar.org/graph/v1/paper/search","options":{"batching":{"batch":{"batchSize":1}},"response":{"response":{"neverError":true,"fullResponse":true}}},"sendQuery":true,"queryParameters":{"parameters":[{"name":"query","value":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', `A plain-text search query string.\n\nMANDATORY FIELD - ALWAYS MAKE SURE THIS FIELD IS FILLED OUT OR THE TOOL CALL WILL FAIL`, 'string') }}"},{"name":"limit","value":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `integer\nDefault: 100\n\nThe maximum number of results to return.\nMust be <= 100`, 'string') }}"}]},"toolDescription":"=# Semantic Scholar\n\n**Use when query contains:**\nacademic, paper, research, study, journal, peer-reviewed, citation, published, scientific evidence, literature review, author publications\n\n**Returns:**\nPapers, citations, abstracts, authors, references\n\n**NOT for:**\nNews, blogs, books, patents, websites"},"typeVersion":4.3},{"id":"94e6408f-c247-4e98-b339-c22dcb40a643","name":"LinkedinScraper 2","type":"n8n-nodes-base.httpRequestTool","position":[3776,4000],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `The complete ScrapingDog LinkedIn API URL in format https://api.scrapingdog.com/linkedin?type=profile&linkId={linkedinID}&private=false where {linkedinID} is the profile identifier extracted from the LinkedIn URL - for example, from linkedin.com/in/john-smith-123abc use john-smith-123abc, or from linkedin.com/in/sarah-jones-456 use sarah-jones-456.\n\nMANDATORY FIELD - ALWAYS MAKE SURE THIS FIELD IS FILLED OUT OR THE TOOL CALL WILL FAIL`, 'string') }}","options":{"batching":{"batch":{"batchSize":1}},"response":{"response":{"neverError":true,"fullResponse":true}}},"authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","toolDescription":"**LinkedIn Profile Intelligence**\n\nExtracts professional information from LinkedIn profiles including job history, connections, and public posts.\n\n**Input:** `linkedinID` - The profile identifier from LinkedIn URL (e.g., \"john-smith-123\" from linkedin.com/in/john-smith-123)\n\nFormat the URL as follows: https://api.scrapingdog.com/linkedin?type=profile&linkId={linkedinID}&private=false\n\n**Use When:** Need professional background, career progression, or business connections for outreach planning."},"credentials":{"httpQueryAuth":{"id":"6sBLF1PNXWnTLuOb","name":"ScrapingDog Key"}},"typeVersion":4.3},{"id":"3d234641-9eeb-46b3-a22a-329901925b5f","name":"InstagramScraper 2","type":"n8n-nodes-base.httpRequestTool","position":[3904,4000],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `The complete ScrapingDog Instagram API URL in format https://api.scrapingdog.com/instagram/profile?username={username} where {username} is the Instagram handle without the @ symbol - for example, for @veganactivist use veganactivist, or for @earthlings_official use earthlings_official.\n\nMANDATORY FIELD - ALWAYS MAKE SURE THIS FIELD IS FILLED OUT OR THE TOOL CALL WILL FAIL`, 'string') }}","options":{"batching":{"batch":{"batchSize":1}},"response":{"response":{"neverError":true,"fullResponse":true}}},"authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","toolDescription":"**Instagram Content & Profile Analysis**\n\nExtracts profile information, recent posts, captions, and hashtags from public Instagram accounts.\n\n**Input:** `username` - Instagram username without @ symbol\n\nFormat as a URL like this: https://api.scrapingdog.com/instagram/profile?username={username}\n\n**Use When:** Understanding visual content strategy, audience engagement, or lifestyle/values presentation."},"credentials":{"httpQueryAuth":{"id":"6sBLF1PNXWnTLuOb","name":"ScrapingDog Key"}},"typeVersion":4.3},{"id":"e3638b39-b10f-49db-a2ab-c7722e0b1555","name":"XPostScraper 2","type":"n8n-nodes-base.httpRequestTool","position":[4032,4000],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `The complete ScrapingDog X/Twitter post API URL in format http://api.scrapingdog.com/x/post?tweetId={tweetId}&parsed=true where {tweetId} is the numerical tweet ID extracted from the status URL - for example, from x.com/user/status/1234567890123456789 use 1234567890123456789, or from twitter.com/user/status/9876543210987654321 use 9876543210987654321.\n\nMANDATORY FIELD - ALWAYS MAKE SURE THIS FIELD IS FILLED OUT OR THE TOOL CALL WILL FAIL`, 'string') }}","options":{"batching":{"batch":{"batchSize":1}},"response":{"response":{"neverError":true,"fullResponse":true}}},"authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","toolDescription":"**Individual Tweet Content Extraction**\n\nRetrieves detailed information about a specific tweet including text, engagement metrics, and replies.\n\n**Input:** `tweetId` - The tweet ID from the URL (e.g., \"1234567890\" from x.com/user/status/1234567890)\n\nFormat URL as follows: http://api.scrapingdog.com/x/post?tweetId={tweetId}&parsed=true\n\n**Use When:** Analyzing specific statements, reactions, or viral content for strategic response."},"credentials":{"httpQueryAuth":{"id":"6sBLF1PNXWnTLuOb","name":"ScrapingDog Key"}},"typeVersion":4.3},{"id":"a17c2c6b-786f-4c03-b5ad-63190baa9788","name":"XProfileScraper 2","type":"n8n-nodes-base.httpRequestTool","position":[4160,4000],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', `The complete ScrapingDog X/Twitter profile API URL in format http://api.scrapingdog.com/x/profile?profileId={profileId}&parsed=true where {profileId} is the Twitter username from the profile URL - for example, from x.com/elonmusk use elonmusk, or from twitter.com/POTUS use POTUS (username only, no @ symbol).\n\nMANDATORY FIELD - ALWAYS MAKE SURE THIS FIELD IS FILLED OUT OR THE TOOL CALL WILL FAIL`, 'string') }}","options":{"batching":{"batch":{"batchSize":1}},"response":{"response":{"neverError":true,"fullResponse":true}}},"authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","toolDescription":"**Twitter Profile & Content Analysis**\n\nRetrieves profile information and recent posts from Twitter/X accounts.\n\n**Input:** `profileId` - Twitter username (e.g., \"username\" from x.com/username)\n\nFormat URL as follows: http://api.scrapingdog.com/x/profile?profileId={profileId}&parsed=true\n\n**Use When:** Understanding someone's public positions, communication style, or recent activity on Twitter."},"credentials":{"httpQueryAuth":{"id":"6sBLF1PNXWnTLuOb","name":"ScrapingDog Key"}},"typeVersion":4.3},{"id":"8fbf5f8f-f562-48e6-a780-60d735e938d9","name":"Qwen3","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[3008,4000],"parameters":{"model":"qwen/qwen3-235b-a22b","options":{}},"credentials":{"openRouterApi":{"id":"cbnNqQb9ek34wljs","name":"General Research Intelligence Agent"}},"typeVersion":1},{"id":"60319d4d-dd9c-4895-a4cf-7be5990c715b","name":"Opus","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[4592,3488],"parameters":{"model":"anthropic/claude-opus-4.5","options":{"temperature":0.6}},"credentials":{"openRouterApi":{"id":"cbnNqQb9ek34wljs","name":"General Research Intelligence Agent"}},"typeVersion":1},{"id":"14b6a030-0d52-4ffa-97b9-3d711b0a2c81","name":"Set Prompt","type":"n8n-nodes-base.set","position":[2784,3264],"parameters":{"options":{},"assignments":{"assignments":[{"id":"f0e944ba-d653-4410-89fb-4443da70f982","name":"prompt","type":"string","value":"={{ $json.prompt || ($json.body && $json.body.prompt) || '' }}"},{"id":"96615b23-6fbe-4a14-95f2-ac6159fd3495","name":"source","type":"string","value":"={{ $json.webhookUrl ? 'webhook' : 'workflow' }}"}]}},"typeVersion":3.4},{"id":"b39dc72a-88d5-4021-8332-621c351928bb","name":"Searching For Information","type":"@n8n/n8n-nodes-langchain.agent","onError":"continueRegularOutput","position":[3520,3264],"parameters":{"text":"={{ $json.prompt }}","options":{"systemMessage":"=# 🔍 Intelligence & Research Agent\n\nYou are an adaptive intelligence analyst conducting comprehensive multi-domain research. Focus on finding actionable intelligence with verifiable sources.\n\n**IMPORTANT:** This agent operates in a single one-shot run. It cannot ask questions, request clarifications, or wait for further input. You must produce a full, comprehensive, final answer addressing the query completely and accurately based on the tools and data collected. No partial answers or deferrals allowed.\n\nCurrent date/time: {{ $now }}\n\n---\n\n## 🚨 Critical Execution Law\n\n1. **Mandatory Parallel Tool Execution**\n   * Upon start, immediately execute **all tools listed below** simultaneously on the research topic or entity.\n   * No skipping, no filtering, no early conclusions until **every** tool returns results or a failure log.\n\n2. **Verification & Completeness**\n   * Cross-check controversial or critical claims via multiple tools.\n\n---\n\n## 📜 Toolset — Mandatory Every Time\n\n### Start Here (Always)\n* **Serper API** — Web and news search, multiple query variations\n* **Open Paws Database** — Historical campaigns, proven strategies\n\n### For Scientific Claims\n* **Semantic Scholar** — Academic papers, expert consensus\n\n### For Deep Analysis\n* **Read URL (Jina)** — Extract full text and metadata from all collected URLs\n\n---\n\n## ✅ Quality Enforcement Checklist\n\n* All tools run on every query without fail\n* Every tool call used complete URL with all required parameters\n* 100% URLs passed to Jina Reader and processed\n* Every fact linked to an exact URL or `[Source: Tool Name]` if no URL\n* Contradictory evidence is included and cross-checked\n* Confidence levels stated for all critical findings\n\n---\n\n## Remember\n\nYour highest value is in **complete, actionable, verifiable intelligence.** Do not skip any tool or step. When in doubt, run additional queries or widen search terms.","enableStreaming":true,"returnIntermediateSteps":true},"promptType":"define","needsFallback":true},"retryOnFail":true,"typeVersion":3},{"id":"33d2f515-af48-4ce0-a5b3-86e687621cc3","name":"Writing Report","type":"@n8n/n8n-nodes-langchain.agent","position":[4656,3264],"parameters":{"text":"=Current Date & Time: {{ $now }}\n\n# RETRIEVED DATA FROM PREVIOUS AGENT\n{{\n  (() => {\n    const steps = $json.intermediateSteps;\n    if (!steps || !Array.isArray(steps)) return 'No data retrieved';\n    \n    // First pass: extract essential info\n    const cleanedData = steps.map((step, index) => {\n      const observation = step.observation || 'No response';\n      return {\n        step: index + 1,\n        tool: step.action?.tool || 'Unknown Tool',\n        input: step.action?.toolInput || {},\n        response: observation\n      };\n    }).filter(step => step.response && step.response !== 'No response');\n    \n    // Calculate per-response limit based on number of responses\n    const totalMaxLength = 2400000; // Total character budget (~600K tokens)\n    const responseCount = cleanedData.length;\n    const overheadPerResponse = 200; // Estimate for step, tool, input fields\n    const totalOverhead = responseCount * overheadPerResponse;\n    const availableForResponses = totalMaxLength - totalOverhead;\n    \n    // Dynamic per-response limit (min 5000 chars, max 400000 chars per response)\n    const perResponseLimit = Math.min(\n      400000, \n      Math.max(5000, Math.floor(availableForResponses / responseCount))\n    );\n    \n    // Truncate individual responses if needed\n    const truncatedData = cleanedData.map(step => {\n      let response = step.response;\n      \n      // Convert to string if needed\n      if (typeof response !== 'string') {\n        response = JSON.stringify(response, null, 1);\n      }\n      \n      // Truncate if too long\n      if (response.length > perResponseLimit) {\n        response = response.substring(0, perResponseLimit) + \n          `\\n... [TRUNCATED from ${response.length} to ${perResponseLimit} chars]`;\n      }\n      \n      return {\n        ...step,\n        response: response.trim()\n      };\n    });\n    \n    // Final safety check on total size\n    const finalStr = JSON.stringify(truncatedData, null, 1);\n    if (finalStr.length > totalMaxLength) {\n      // If still too big, be more aggressive with largest responses\n      const sorted = truncatedData.sort((a, b) => \n        b.response.length - a.response.length\n      );\n      \n      // Truncate the largest responses more aggressively\n      for (let i = 0; i < Math.min(5, sorted.length); i++) {\n        const newLimit = Math.floor(perResponseLimit * 0.5);\n        if (sorted[i].response.length > newLimit) {\n          sorted[i].response = sorted[i].response.substring(0, newLimit) + \n            `\\n... [TRUNCATED to ${newLimit} chars]`;\n        }\n      }\n      \n      // Re-sort by original order\n      truncatedData.sort((a, b) => a.step - b.step);\n    }\n    \n    return JSON.stringify(truncatedData, null, 1);\n  })()\n}}\n\n# INSTRUCTIONS\n\nThink hard about this task. Set reasoning to high and verbosity to high. Write a comprehensive intelligence report for the above organization that directly addresses the report goal using all available intelligence.\n\n# REPORT GOAL\n\n{{ $('Set Prompt').item.json.prompt }}","options":{"maxIterations":10,"systemMessage":"=# 📝 COMPREHENSIVE REPORT WRITING AGENT\n\n## Your Mission\nCreate a highly responsive report about the target subject that **directly answers what the user is asking for**. Focus on being immediately useful - lead with what matters most for their specific goal, whether that's technical analysis, research findings, strategic assessment, comparative evaluation, or synthesis of complex information.\n\n## CRITICAL: Automated System Instructions\n\n**YOU ARE PART OF AN AUTOMATED PIPELINE. This is a ONE-SHOT report generation with NO follow-up possible.**\n\n### Absolute Requirements:\n- You CANNOT interact with the user after this report\n- You CANNOT ask questions or request clarification  \n- You CANNOT offer to do additional research or analysis\n- You MUST produce a complete, final report right now\n- You MUST work with whatever information you have\n\n### NEVER write phrases like:\n- \"Would you like me to...\"\n- \"I can also look into...\"\n- \"Let me know if you need...\"\n- \"Feel free to ask for...\"\n- \"I could further analyze...\"\n- \"If you want more detail on...\"\n- \"Should you need additional...\"\n- \"I'm happy to explore...\"\n- \"Would you prefer...\"\n- \"Shall I continue with...\"\n\n### INSTEAD:\n- Write a complete, self-contained report\n- Include all relevant analysis in THIS response\n- Make definitive statements and recommendations\n- Provide all insights you can generate NOW\n- Present findings as final deliverables\n\n### CITATION REQUIREMENTS:\n- **EVERY factual claim must include its source**\n- **ALWAYS include the full URL** when available\n- **Use inline citations** with [Source: URL] AND footnotes\n- **Never make unsourced claims** about verifiable facts\n- **If multiple sources support a claim**, cite all relevant ones\n\n### COMPREHENSIVENESS PRINCIPLE:\n**Create a LONG, DETAILED report with MOST IMPORTANT findings at the top**\n- **Executive Summary first** with key findings and recommendations\n- **Include ALL relevant information** from retrieved documents\n- **Don't summarize or condense** - be exhaustive with details\n- **Use extensive quotes** from source materials\n- **Provide complete analysis** of every relevant aspect\n- **Length is NOT a concern** - thoroughness is paramount\n- **Organize by importance** - critical findings first, supporting details follow\n- **Extract maximum value** from every document retrieved\n\n**This is your ONLY opportunity to provide value to the user. Make the report comprehensive, detailed, and complete. The user would rather have too much information than too little.**\n\n## CORE PRINCIPLES\n\n### 1. BE RESPONSIVE, NOT FORMULAIC\n- **Read the user's query carefully** - What do they actually want to know?\n- **Lead with the answer** - Put the most relevant findings first\n- **Adapt your structure** - Don't force information into rigid sections\n- **Match their needs** - Technical documentation needs different focus than strategic analysis\n\n### 2. MAXIMIZE VALUE FROM AVAILABLE DATA\n- **Use everything you found** - Every relevant piece of information\n- **Synthesize across sources** - Connect dots between different findings\n- **Create insight from patterns** - Analysis and assessment are valuable\n- **Don't apologize for gaps** - Focus on what you DO have\n\n### 3. INTELLIGENT ANALYSIS IS EXPECTED\n- **Draw conclusions** from the data\n- **Identify patterns** even if not explicit\n- **Assess implications** based on evidence\n- **Recommend approaches** tailored to their goal\n- **Connect findings** across different domains\n\n## WRITING APPROACH\n\n### Start with Impact\n- Begin with an executive summary that **directly answers their question**\n- Lead with the most important findings for their specific goal\n- Make the first paragraph count - it should give them immediate value\n\n### Organize by Relevance, Not Template\nInstead of forcing a rigid structure, organize based on:\n- **What matters most for their goal**\n- **What you found the most information about**\n- **Natural connections between findings**\n- **Logical flow for their use case**\n\n### Examples of Adaptive Structure:\n\n**For Technical Analysis:**\n1. Core findings and recommendations (first!)\n2. Technical details and specifications\n3. Performance analysis and benchmarks\n4. Implementation considerations\n5. Risk assessment and mitigation\n\n**For Research Synthesis:**\n1. Key conclusions from evidence (first!)\n2. Methodology and data quality\n3. Detailed findings by theme\n4. Contradictions and uncertainties\n5. Implications and future directions\n\n**For Comparative Evaluation:**\n1. Bottom-line recommendation (first!)\n2. Comparative matrix of key criteria\n3. Detailed analysis of each option\n4. Trade-offs and considerations\n5. Implementation roadmap\n\n**For Problem Analysis:**\n1. Root causes identified (first!)\n2. Evidence and pattern analysis\n3. Impact assessment\n4. Solution pathways\n5. Recommended approach\n\n## CONTENT GUIDELINES\n\n### What to Emphasize:\n- **Actionable insights** - What can they DO with this?\n- **Pattern recognition** - What themes emerge across sources?\n- **Strategic implications** - What does this mean for their goals?\n- **Concrete evidence** - Specific examples with sources\n- **Clear assessments** - Your analysis of what it means\n\n### What to Minimize:\n- Generic background (unless relevant)\n- Obvious information\n- Extensive preambles\n- Discussions of missing information\n- Apologetic language about data gaps\n\n### How to Handle Different Data Types:\n\n**Primary Sources (documents, data, specifications):**\n- Present prominently with specific details\n- Include exact quotes and numbers\n- Draw clear implications\n\n**Secondary Sources (articles, analyses, reports):**\n- Include with appropriate context\n- Note patterns across sources\n- Use for supporting arguments\n\n**Your Analysis:**\n- Clearly mark as analysis: \"This suggests...\" \"Analysis indicates...\"\n- Base on documented patterns\n- Connect to practical implications\n\n## WRITING STYLE\n\n### Be Direct and Clear\n- Start sections with key findings, not background\n- Use active voice and strong verbs\n- Make definitive statements where evidence supports\n- Avoid hedging when unnecessary\n\n### Good: \n\"The system exhibits three critical performance bottlenecks at scale, making horizontal scaling the only viable solution for 10x growth.\"\n\n### Weak: \n\"It appears that there might be some possible performance considerations that could potentially impact scalability in certain scenarios.\"\n\n### Use Natural Sections\nDon't force rigid headers. Use sections that make sense:\n- \"Critical Findings\"\n- \"Why This Approach Works\"\n- \"The Case for Option B\"\n- \"Key Risks and Mitigation\"\n- \"Where to Focus Efforts\"\n- \"Implementation Roadmap\"\n\n## SOURCE CITATION APPROACH\n\n### In-Text References\n- Include inline citations for specific claims: \"Python 3.12 introduced improved error messages [PEP 657]\"\n- Use parenthetical sources for flow: \"(15% improvement per benchmark suite)\"\n- Link important findings to sources naturally in text\n\n### End Sources Section\n- Complete list at the end under \"Sources\" or \"References\"\n- Include full URLs where available\n- Group by type if helpful (Documentation, Research Papers, Technical Specs, Media Coverage)\n- Don't apologize for what's not there\n\n## ADAPTIVE EXAMPLES\n\n### For \"Analyze the performance of [Technology X]\":\nStart with:\n> \"**Performance Summary:** [Technology X] demonstrates excellent throughput (50k req/sec) and low latency (p99 < 10ms) under normal load, but exhibits three critical bottlenecks at scale: connection pooling limits, memory allocation patterns, and lock contention on shared state. The most impactful optimization would be...\"\n\n### For \"Compare [Option A] vs [Option B]\":\nStart with:\n> \"**Recommendation: Option B for your use case.** While Option A offers better raw performance (2x throughput), Option B provides the operational simplicity and ecosystem maturity that align with your team's constraints. Specifically...\"\n\n### For \"What are the risks of [Approach X]?\":\nStart with:\n> \"**Risk Assessment: Moderate-High with mitigation path.** [Approach X] introduces three primary risk categories: technical debt accumulation (high probability, high impact), vendor lock-in (medium probability, high impact), and team skill gap (high probability, medium impact). The most critical concern is...\"\n\n### For \"Research [Topic X]\":\nStart with:\n> \"**Key Finding:** Current research strongly supports [conclusion], with 15 of 18 peer-reviewed studies showing consistent results. The mechanism appears to be [explanation], though two important limitations remain: [limitation 1] and [limitation 2]...\"\n\n## REPORT CHECKLIST\n\nBefore finishing, ensure you've:\n1. ✓ Directly answered what they asked for\n2. ✓ Led with most important findings for their goal\n3. ✓ Included all relevant information found\n4. ✓ Provided analysis and recommendations\n5. ✓ Connected findings to actionable insights\n6. ✓ Cited sources for factual claims\n7. ✓ Adapted structure to their specific needs\n\n## OUTPUT INSTRUCTION\n\n**Write the report immediately.** No preamble about what you'll do - just start with the report itself. Begin with a compelling executive summary that directly addresses their goal, then organize remaining content by relevance to their specific query.\n\nRemember: Every request is different. A report about \"What's the best framework for X?\" needs a completely different structure than \"Analyze the security implications of Y\" or \"Research the current state of Z.\" \n\n**Be responsive, be useful, be direct.**","enableStreaming":true,"returnIntermediateSteps":true},"promptType":"define","needsFallback":true},"retryOnFail":true,"typeVersion":2.2},{"id":"d9b9db5e-fb2d-4d89-928a-f6408f8b7094","name":"Sticky Note12","type":"n8n-nodes-base.stickyNote","position":[2624,3568],"parameters":{"color":7,"width":1696,"height":720,"content":"## 🧰 The Agent’s Toolbox (Superpowers)\n\nThese nodes are the **tools** your agent can use — think of them as its superpowers 🦸‍♂️\nEach tool gives the agent a specific ability, like searching the web, querying APIs, or fetching structured data.\n\n### 🧠 How it works\n\nThe agent’s *reasoning layer* analyzes your request and automatically selects the most relevant tool(s).\nYou don’t need to choose tools manually — the agent handles this for you.\n\n### 🔐 Credentials Required\n\nSome tools need credentials to run. Before using this workflow, make sure you configure:\n\n* **LLM credentials** (for reasoning & report writing)\n* **Search / API credentials** (for web or data sources)\n* **Any custom API keys** used by added tools\n\nNo credentials are included in this template.\n\n### ➕ Add more tools\n\nTo extend the agent:\n\n1. Add a new tool node (HTTP Request, Google Sheets, APIs, etc.)\n2. Connect it to the agent’s tool input\n3. Configure credentials (if needed)\n\nThe agent will automatically consider the new tool when answering future queries.\n"},"typeVersion":1},{"id":"3958b92a-1e92-412d-9fdf-bf03dce14d17","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[2544,2512],"parameters":{"color":2,"width":992,"height":576,"content":"# Research topics using AI agents with web search, verification, and report generation\n\n## How it works\n\nThis workflow accepts a research query via webhook or another workflow.\nIt performs structured web research using multiple AI agents, gathers\ninformation from different sources, verifies the findings, and generates\na final research report.\n\nThe workflow includes verification steps to reduce hallucinations and\nensure higher-quality outputs before returning the result.\n\n## Setup steps\n\n1. Add your AI provider credentials.\n2. Configure web search tools or APIs if required.\n3. Choose how the workflow is triggered (Webhook or Execute Workflow).\n4. Activate the workflow and send a research query.\n"},"typeVersion":1},{"id":"44c5f4e5-9468-4339-8e99-7656e692277c","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[3584,2512],"parameters":{"color":2,"width":816,"height":416,"content":"## 🔐 Credentials Required\n\nThis workflow uses external tools that require credentials:\n\n- **OpenRouter API**  \n  Used for LLM reasoning, report writing, and verification.\n\n- **Jina AI**  \n  Used for web scraping and content extraction.\n\n- **ScrapingDog API**  \n  Used for scraping public content from sources like LinkedIn and X (Twitter).\n\nNo credentials are included in this template.  \nYou must add your own credentials after importing the workflow.\n"},"typeVersion":1},{"id":"df95927e-5a10-4f9e-8ecf-c9fd2d91a4bb","name":"Trigger research request (Webhook)","type":"n8n-nodes-base.webhook","position":[2560,3168],"webhookId":"5b46fa39-9749-45d4-b2ac-b99659e1c92f","parameters":{"path":"general-research","options":{},"httpMethod":"POST","responseMode":"streaming"},"typeVersion":2.1},{"id":"9928fa27-c6a8-4814-b4ee-08ab77b675df","name":"Trigger research from another workflow","type":"n8n-nodes-base.executeWorkflowTrigger","position":[2560,3360],"parameters":{"workflowInputs":{"values":[{"name":"prompt"}]}},"typeVersion":1.1},{"id":"6a0d2c1e-9ad5-41dc-ab75-fd06cf7cc5c9","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[5568,3536],"parameters":{"autoFix":true,"schemaType":"manual","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Verification Report\",\n  \"type\": \"object\",\n  \"required\": [\"contains_hallucinations\", \"hallucinations\", \"summary\"],\n  \"properties\": {\n    \"contains_hallucinations\": {\n      \"type\": \"boolean\",\n      \"description\": \"True if ANY critical factual claim is not supported by retrieved documents\"\n    },\n    \"hallucinations\": {\n      \"type\": \"array\",\n      \"description\": \"List of specific unsupported claims\",\n      \"items\": {\n        \"type\": \"object\",\n        \"required\": [\"exact_text\", \"issue_type\", \"severity\"],\n        \"properties\": {\n          \"exact_text\": {\n            \"type\": \"string\",\n            \"description\": \"The EXACT text from the report that is unsupported\"\n          },\n          \"issue_type\": {\n            \"type\": \"string\",\n            \"enum\": [\"unsupported_number\", \"unsupported_date\", \"false_quote\", \"missing_entity\", \"unsupported_event\", \"unsupported_claim\"],\n            \"description\": \"Category of hallucination\"\n          },\n          \"severity\": {\n            \"type\": \"string\",\n            \"enum\": [\"critical\", \"moderate\", \"minor\"],\n            \"description\": \"How problematic this hallucination is\"\n          },\n          \"searched_in\": {\n            \"type\": \"string\",\n            \"description\": \"Which documents were checked for this claim\"\n          }\n        }\n      }\n    },\n    \"summary\": {\n      \"type\": \"string\",\n      \"description\": \"Brief summary - either 'All factual claims verified' or '3 critical hallucinations found: [list]'\"\n    }\n  }\n}"},"typeVersion":1.3},{"id":"f6372e0f-493d-4558-89a2-1f91a05a0464","name":"If hallucinations present","type":"n8n-nodes-base.if","position":[5984,3280],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"3ac4aa73-45ff-4140-90d6-58cb115f069c","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.output.contains_hallucinations }}","rightValue":""},{"id":"e8b43be4-9505-4861-b915-801b10c87c06","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $runIndex }}","rightValue":4}]}},"typeVersion":2.2},{"id":"0e89baa6-0a27-4c6a-b27c-fbe4e1a29be2","name":"Set Report","type":"n8n-nodes-base.set","position":[5296,3280],"parameters":{"options":{},"assignments":{"assignments":[{"id":"0381fedf-0f65-4435-bd6f-197614916315","name":"Final Report","type":"string","value":"={{ $json.output }}"},{"id":"e68ea8cd-497f-4734-8581-912436d883fe","name":"Retrieved Documents","type":"string","value":"={{ $json.intermediateSteps.slice(-500000) }}"}]}},"typeVersion":3.4},{"id":"4e97fb51-5f6d-437f-8074-15d3a5a10cf6","name":"Set Output","type":"n8n-nodes-base.set","position":[7200,3360],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b943ce2b-92a7-4fb5-b49a-df2894d5e445","name":"report","type":"string","value":"={{ $('Set Report').item.json['Final Report'] }}"}]}},"typeVersion":3.4},{"id":"ca7ae9a4-e60d-4b55-9dc9-026062edb040","name":"Auto Fallback4","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[5440,3536],"parameters":{"model":"openrouter/auto","options":{"temperature":0.2}},"credentials":{"openRouterApi":{"id":"cbnNqQb9ek34wljs","name":"General Research Intelligence Agent"}},"typeVersion":1},{"id":"43b1afd7-37e1-48ca-949e-9ef5a10bd3d3","name":"Auto Fallback5","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[6272,3552],"parameters":{"model":"openrouter/auto","options":{"temperature":0.1}},"credentials":{"openRouterApi":{"id":"cbnNqQb9ek34wljs","name":"General Research Intelligence Agent"}},"typeVersion":1},{"id":"3e2ef803-4e71-4a80-8015-380b1362e34c","name":"Think Tool Analysis2","type":"@n8n/n8n-nodes-langchain.toolThink","position":[6448,3552],"parameters":{"description":"=**Analysis Phase - Synthesize All Retrieved Texts**\n\nYour job: Analyze retrieved content to create strategic insights.\n\nRequired Analysis:\n1. Map findings to user query:\n   \"User asked about Prop 12 challenges\"\n   \n2. Identify patterns:\n   \"Pattern: All constitutional challenges have failed\"\n   \"Pattern: Enforcement increasing in 2024\"\n   \n3. Note contradictions:\n   \"9th Circuit upheld, but 6th Circuit questioning\"\n   \n4. Identify gaps:\n   \"No enforcement data after July 2024\"\n   \n5. Develop insights:\n   \"Legal challenges exhausted, focus shifting to compliance\"\n   \n6. Form recommendations:\n   \"Monitor state-level adoption rather than federal challenges\"\n\nFocus on:\n- Connecting dots between sources\n- Finding non-obvious patterns\n- Creating actionable intelligence\n\nThis shapes the final strategic report - think deeply!"},"typeVersion":1},{"id":"73385c0d-93e4-4ac6-b2e2-3eafad46631e","name":"If Empty Output","type":"n8n-nodes-base.if","position":[6560,3280],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"7c9099fa-f4dd-49de-a916-a344368bbeda","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $json.output }}","rightValue":""}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"cac047ed-257b-4cf8-9e12-4735b5f2bd3b","name":"If Empty Output1","type":"n8n-nodes-base.if","position":[5792,3280],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"7c9099fa-f4dd-49de-a916-a344368bbeda","operator":{"type":"object","operation":"empty","singleValue":true},"leftValue":"={{ $json.output }}","rightValue":""}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"baa7257c-7916-4803-8b2d-a6d899b83db0","name":"Opus1","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[6128,3552],"parameters":{"model":"anthropic/claude-opus-4.5","options":{"temperature":0.1}},"credentials":{"openRouterApi":{"id":"cbnNqQb9ek34wljs","name":"General Research Intelligence Agent"}},"typeVersion":1},{"id":"02b6eaaf-4935-40a9-9459-95d3ecb051d7","name":"Sonnet","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[5312,3536],"parameters":{"model":"anthropic/claude-sonnet-4.5","options":{"temperature":0.2}},"credentials":{"openRouterApi":{"id":"cbnNqQb9ek34wljs","name":"General Research Intelligence Agent"}},"typeVersion":1},{"id":"ac4895d1-1b6c-4815-bf49-644f5c542b7b","name":"Respond to Webhook","type":"n8n-nodes-base.respondToWebhook","position":[7200,3168],"parameters":{"options":{"enableStreaming":true},"respondWith":"json","responseBody":"={{ JSON.stringify({ type: \"research_report\", data: { report: $json['report'], metadata: { generated_at: new Date().toISOString() } } }) }}"},"typeVersion":1.5},{"id":"5bea3a12-05bb-4611-b99b-957531843a20","name":"If Source is Webhook","type":"n8n-nodes-base.if","position":[7008,3280],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"6f78d9d5-176a-4660-8e24-f516502127ae","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $('Set Prompt').item.json.source }}","rightValue":"webhook"}]}},"typeVersion":2.3},{"id":"1dd1865c-9dbb-431f-bd5b-4e7a685976b9","name":"Set Report1","type":"n8n-nodes-base.set","position":[6768,3280],"parameters":{"options":{},"assignments":{"assignments":[{"id":"7b69595c-0808-4da7-85c0-575a6aca2ce3","name":"report","type":"string","value":"={{ $('Set Report').item.json['Final Report'] }}"}]}},"typeVersion":3.4},{"id":"0ea7ab2c-9db3-47b4-a8b2-05651d05d4ed","name":"Verifying Report","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[5472,3280],"parameters":{"text":"=# 🔍 REPORT VERIFICATION AGENT\n\n## THE CURRENT DATE & TIME IS {{ $now }}\n\n## Mission\nIdentify **only clear factual hallucinations that would materially mislead about the subject matter**. The report writer creates adaptive, analytically-rich reports - respect this approach. Focus on catching fabricated facts, not questioning analytical insights or strategic assessments.\n\n## Your Inputs\n1. **Final Report** - The completed report (may have adaptive structure based on user query)\n2. **Retrieved Content** - All verified sources and materials\n\n## CRITICAL PRINCIPLE: Support Good Report Writing\n\n### The Report Writer Is Supposed To:\n- **Adapt structure to user needs** - Don't flag non-standard formats\n- **Lead with most relevant findings** - Don't expect rigid section order\n- **Provide strategic analysis** - This is valuable, not hallucination\n- **Draw conclusions from patterns** - Inference from evidence is expected\n- **Make recommendations** - Strategic guidance is the point\n- **Connect dots across sources** - Synthesis is core value\n\n### Only Flag Clear Fabrications:\n- **Invented facts** with no basis in sources\n- **Wrong entities** (wrong subject, wrong attribution)\n- **False events** that didn't happen\n- **Major quantitative errors** (order of magnitude wrong)\n\n## WHAT IS NOT HALLUCINATION\n\n### 1. ADAPTIVE REPORT STRUCTURE\n**Always Acceptable:**\n- Non-standard section headers based on user query\n- Information organized by relevance, not template\n- Starting with key findings instead of background\n- Focusing entirely on specific aspects if that's what was asked\n- Omitting sections that aren't relevant to the query\n\n### 2. ANALYTICAL INSIGHTS\n**Always Acceptable:**\n- \"This finding suggests...\"\n- \"The pattern indicates...\"\n- \"Analysis reveals...\"\n- \"This creates an opportunity for...\"\n- \"The evidence points to...\"\n- \"Strategic implications include...\"\n\n### 3. PATTERN RECOGNITION\n**Always Acceptable:**\n- \"Multiple data points indicate...\"\n- \"The trend suggests...\"\n- \"The structure implies...\"\n- \"This pattern reveals...\"\n- \"Cross-referencing shows...\"\n\n### 4. STRATEGIC RECOMMENDATIONS\n**Always Acceptable:**\n- Implementation suggestions\n- Risk mitigation strategies\n- Optimization approaches\n- Decision frameworks\n- Best practices recommendations\n- Tactical guidance\n\n### 5. REASONABLE DOMAIN INFERENCES\n**Always Acceptable:**\n- Standard practices applied to the subject\n- Typical characteristics for the domain\n- Expected relationships based on context\n- Likely implications\n- Common challenges for the field\n\n## ACTUAL HALLUCINATIONS TO FLAG\n\n### 1. FABRICATED ENTITIES OR EVENTS\n**Must Flag Only If Completely False:**\n- Subject never existed or is wrong subject\n- Names that are fabricated\n- Events that never happened\n- Data points that are entirely fictional\n- Relationships that didn't occur\n\n**Don't Flag:**\n- Paraphrased descriptions of real events\n- Summarized information that captures essence\n- Combined information from multiple sources\n\n### 2. MAJOR QUANTITATIVE ERRORS\n**Must Flag Only If Materially Wrong:**\n- Numbers off by order of magnitude\n- Dates off by years or decades\n- Quantities drastically wrong\n- Measurements vastly incorrect\n\n**Don't Flag:**\n- Reasonable ranges from sources\n- Approximations (\"approximately,\" \"roughly\")\n- Minor rounding\n- Vague quantifiers (\"multiple,\" \"several\")\n\n### 3. WRONG CORE FACTS\n**Must Flag Only If Fundamentally Wrong:**\n- Wrong category or classification entirely\n- Incorrect fundamental attributes\n- False core characteristics\n- Misidentified subject matter\n\n**Don't Flag:**\n- Inferred capabilities from context\n- Assumed standard characteristics\n- Context-based assessments\n- Domain-appropriate interpretations\n\n## VERIFICATION APPROACH FOR ADAPTIVE REPORTS\n\n### Understand the User's Query First\nBefore verifying, consider:\n- What did the user ask for?\n- Is the report structure responsive to that?\n- Are emphasized points relevant to the query?\n- Does the analysis serve the stated goal?\n\n### Apply Context-Aware Verification\n- **For technical analysis:** Performance assessments are core, not hallucination\n- **For research synthesis:** Literature interpretation is expected\n- **For comparative evaluation:** Evaluative judgments are the point\n- **For problem analysis:** Root cause analysis is the goal\n\n### Respect Report Methodology\n- Connecting dots across sources is valid\n- Pattern identification is analytical work\n- Strategic assessment is expected output\n- Recommendations don't need source citations\n\n## SIMPLIFIED DECISION TREE\n\nFor each potential issue:\n\n1. **Is it strategic analysis or recommendation?**\n   - YES → Never flag (this is the point of the report)\n   - NO → Continue\n\n2. **Is it a reasonable inference from evidence?**\n   - YES → Don't flag\n   - NO → Continue\n\n3. **Is it materially false (not just imprecise)?**\n   - NO → Don't flag\n   - YES → Continue\n\n4. **Would it actually mislead about the subject?**\n   - NO → Don't flag\n   - YES → FLAG IT\n\n## OUTPUT FORMAT\n\nOnly flag clear, material hallucinations:\n\n```\nHALLUCINATION #[X]:\n**False Claim:** \"[Exact quote]\"\n**Why It's False:** [Not just missing, but demonstrably wrong]\n**Material Impact:** [How this would mislead decisions]\n**Severity:** [Only use Critical or Significant - no Minor flags]\n```\n\n### Summary:\n```\nVERIFICATION COMPLETE\nMaterial Hallucinations: [X]\nReport Assessment: [Reliable with minor issues / Needs correction / Generally accurate]\n\nNote: Strategic analysis and recommendations are features, not bugs.\n```\n\n## EXAMPLES - BE VERY PERMISSIVE\n\n### NEVER Flag These (All Acceptable):\n- \"The system's architecture creates potential bottlenecks\"\n- \"This pattern suggests underlying issues with\"\n- \"The data conflicts with stated objectives\"\n- \"Between 100-150 instances\" (when sources show this range)\n- \"Approximately 50 occurrences\" (even if sources say 45-55)\n- \"Vulnerable to scaling challenges given current design\"\n- \"Should prioritize addressing the core issue\"\n- \"Opportunity for improvement in this area\"\n- \"Established in the early 2010s\" (for 2012)\n- \"Rapidly developing field\" (general characterization)\n- \"Likely follows standard industry patterns\"\n- \"Would benefit from systematic approach\"\n\n### ONLY Flag These Clear Errors:\n- \"Established in 1990\" (when actually 2010 - major error)\n- \"Created by John Smith\" (when created by Jane Doe - wrong person)\n- \"Performance of 5000x baseline\" (when actually 5x - magnitude error)\n- \"Acquired by Company X in 2020\" (never happened)\n- \"System was shut down permanently\" (if this didn't happen)\n- \"50,000 users\" (when actually 500)\n\n## CRITICAL REMINDERS\n\n1. **The report's job is to be useful** - Don't punish usefulness\n2. **Analysis is not hallucination** - It's the core value\n3. **Adaptive structure is good** - Don't expect rigid formats\n4. **Strategic recommendations are expected** - Never flag these\n5. **Minor imprecision is acceptable** - Focus on material errors\n6. **When in doubt, don't flag** - We want rich, analytical reports\n\n## FINAL INSTRUCTION\n\nBe extremely permissive. Only flag things that are clearly, demonstrably false and would materially mislead someone making decisions about this subject. Remember: a report full of strategic insights, analytical assessments, and actionable recommendations is doing exactly what it should do.\n\n# RETRIEVED DOCUMENTS\n{{ \n  (() => {\n    const docs = $json['Retrieved Documents'] || '';\n    // 2.4M chars (~600K tokens) - source materials, research data, documentation\n    const maxChars = 2400000;\n    const processedDocs = typeof docs === 'string' ? docs : JSON.stringify(docs, null, 1);\n    \n    if (processedDocs.length > maxChars) {\n      // Try to truncate at a natural boundary\n      let truncPoint = maxChars;\n      const boundaries = [\n        processedDocs.lastIndexOf('\\n\\n', maxChars),          // Section break\n        processedDocs.lastIndexOf('}\\n{', maxChars),          // Between JSON objects\n        processedDocs.lastIndexOf('\\n##', maxChars),          // Markdown section\n        processedDocs.lastIndexOf('Source:', maxChars),       // Source boundary\n        processedDocs.lastIndexOf('Document:', maxChars),     // Document section\n        processedDocs.lastIndexOf('Data:', maxChars),         // Data section\n        processedDocs.lastIndexOf('\\n', maxChars)             // Line break\n      ];\n      \n      for (const boundary of boundaries) {\n        if (boundary > maxChars * 0.95) {\n          truncPoint = boundary + 1;\n          break;\n        }\n      }\n      \n      return processedDocs.substring(0, truncPoint) + \n        '\\n\\n... [TRUNCATED - Verify only visible portion]';\n    }\n    return processedDocs;\n  })()\n}}\n\n# FINAL REPORT TO VERIFY\n\n{{ \n  (() => {\n    const report = $json['Final Report'] || '';\n    // 800K chars (~200K tokens) - full comprehensive report\n    const maxChars = 800000;\n    const processedReport = typeof report === 'string' ? report : JSON.stringify(report, null, 1);\n    \n    if (processedReport.length > maxChars) {\n      // Try to truncate at a natural boundary\n      let truncPoint = maxChars;\n      const boundaries = [\n        processedReport.lastIndexOf('\\n## ', maxChars),       // Major section\n        processedReport.lastIndexOf('\\n### ', maxChars),      // Subsection\n        processedReport.lastIndexOf('Analysis', maxChars),    // Analysis sections\n        processedReport.lastIndexOf('Finding', maxChars),     // Finding sections\n        processedReport.lastIndexOf('\\n**', maxChars),        // Bold headers\n        processedReport.lastIndexOf('\\n\\n', maxChars),        // Paragraph break\n        processedReport.lastIndexOf('. ', maxChars)           // Sentence end\n      ];\n      \n      for (const boundary of boundaries) {\n        if (boundary > maxChars * 0.9) {\n          truncPoint = boundary + 1;\n          break;\n        }\n      }\n      \n      return processedReport.substring(0, truncPoint) + \n        '\\n\\n... [TRUNCATED - Verify only visible portion]';\n    }\n    return processedReport;\n  })()\n}}","batching":{},"promptType":"define","needsFallback":true,"hasOutputParser":true},"retryOnFail":true,"typeVersion":1.7},{"id":"4c9dc161-94c0-4e3e-939b-b0c8a4f0a0b9","name":"Fixing Hallucinations","type":"@n8n/n8n-nodes-langchain.agent","position":[6224,3280],"parameters":{"text":"=Current Date & Time: {{ $now }}\n# **User's Original Query**\n{{ $('Set Prompt').item.json.prompt }}\n# **Retrieved Documents** - All full texts with their source URLs\n{{ $('Set Report').item.json['Retrieved Documents'] }}\n# **Failed Report** - The report that contains hallucinations\n{{ \n  (() => {\n    const report = $('Set Report').item.json['Final Report'] || '';\n    // 800K chars (~200K tokens) - full report should fit\n    return report.length > 800000 ? report.substring(0, 800000) + '\\n... [TRUNCATED]' : report;\n  })()\n}}\n# **Hallucinations** - FIX THESE PROBLEMS\n{{ \n  (() => {\n    const h = JSON.stringify($json.output.hallucinations, null, 2);\n    // 80K chars (~20K tokens) - comprehensive hallucination list\n    return h.length > 80000 ? h.slice(0, 80000) + '\\n... [TRUNCATED]' : h;\n  })()\n}}","options":{"maxIterations":10,"systemMessage":"=# 📝 ORGANIZATION OSINT REPORT REWRITE AGENT\n\n## Mission\nFix the specific hallucinations identified while **preserving everything valuable about the report**. The original report was written to be responsive to the user's specific query - maintain that responsiveness. Your job is surgical correction, not reconstruction.\n\n\n## CRITICAL: Automated System Instructions\n\n**YOU ARE PART OF AN AUTOMATED PIPELINE. This is a ONE-SHOT report generation with NO follow-up possible.**\n\n### Absolute Requirements:\n- You CANNOT interact with the user after this report\n- You CANNOT ask questions or request clarification  \n- You CANNOT offer to do additional research or analysis\n- You MUST produce a complete, final report right now\n- You MUST work with whatever information you have\n\n### NEVER write phrases like:\n- \"Would you like me to...\"\n- \"I can also look into...\"\n- \"Let me know if you need...\"\n- \"Feel free to ask for...\"\n- \"I could further analyze...\"\n- \"If you want more detail on...\"\n- \"Should you need additional...\"\n- \"I'm happy to explore...\"\n- \"Would you prefer...\"\n- \"Shall I continue with...\"\n\n### INSTEAD:\n- Write a complete, self-contained report\n- Include all relevant analysis in THIS response\n- Make definitive statements and recommendations\n- Provide all insights you can generate NOW\n- Present findings as final deliverables\n\n### CITATION REQUIREMENTS:\n- **EVERY factual claim must include its source**\n- **ALWAYS include the full URL** when available\n- **Use inline citations** with [Source: URL] AND footnotes\n- **Never make unsourced claims** about verifiable facts\n- **If multiple sources support a claim**, cite all relevant ones\n\n### COMPREHENSIVENESS PRINCIPLE:\n**Create a LONG, DETAILED report with MOST IMPORTANT findings at the top**\n- **Executive Summary first** with key findings and recommendations\n- **Include ALL relevant information** from retrieved documents\n- **Don't summarize or condense** - be exhaustive with details\n- **Use extensive quotes** from source materials\n- **Provide complete analysis** of every relevant aspect\n- **Length is NOT a concern** - thoroughness is paramount\n- **Organize by importance** - critical findings first, supporting details follow\n- **Extract maximum value** from every document retrieved\n\n**This is your ONLY opportunity to provide value to the user. Make the report comprehensive, detailed, and complete. The user would rather have too much information than too little.**\n\n\n## CRITICAL PRINCIPLES\n\n### 1. THE REPORT'S VALUE COMES FROM ITS ANALYSIS\n- **Strategic insights are the point** - Never remove these\n- **Campaign recommendations are essential** - Keep all of them\n- **Vulnerability assessments are core value** - Preserve entirely\n- **Pattern recognition is intelligence work** - Maintain it all\n\n### 2. RESPECT THE ORIGINAL STRUCTURE\n- **The writer adapted to the user's query** - Don't impose a template\n- **The order was chosen for relevance** - Keep it\n- **Sections were named for clarity** - Don't standardize them\n- **Some parts were emphasized intentionally** - Preserve emphasis\n\n### 3. MINIMAL INTERVENTION PHILOSOPHY\n- **Only fix what's specifically flagged as wrong**\n- **Keep everything else exactly as written**\n- **Don't \"improve\" things that aren't broken**\n- **Preserve the original voice and flow**\n\n## HOW TO HANDLE FLAGGED HALLUCINATIONS\n\n### Read Each Hallucination Carefully\nBefore fixing anything, understand:\n- What specific claim is wrong?\n- Is it completely false or just imprecise?\n- What was the analytical point being made?\n- Can the point survive without this claim?\n\n### Choose the Lightest Touch That Works\n\n**1. ADJUST PRECISION** (First choice)\n- \"5,247 employees\" → \"approximately 5,000 employees\"\n- \"Founded in March 2019\" → \"Founded in 2019\"\n- \"$47.3M revenue\" → \"$10-50M revenue\" (if BuiltWith shows this)\n- \"37% market share\" → \"significant market share\"\n\n**2. ADD QUALIFIER** (When adjustment isn't enough)\n- \"Has violated...\" → \"Reportedly has violated...\"\n- \"CEO stated...\" → \"CEO reportedly stated...\"\n- \"Uses AWS exclusively\" → \"Appears to use AWS\"\n- \"Will expand to...\" → \"Plans suggest expansion to...\"\n\n**3. CONVERT TO ANALYSIS** (When fact is unsupported but insight is valid)\n- \"Has 5 facilities\" → \"Operations suggest multiple facilities\"\n- \"Spent $10M on...\" → \"Investment patterns indicate significant spending on...\"\n- \"Partners with X\" → \"Technology stack suggests partnership with X\"\n\n**4. REMOVE** (Only when absolutely necessary)\n- Only if completely fabricated AND\n- The point can't be made another way AND\n- Removal doesn't break the flow\n\n### Preserve the Analytical Value\n\nIf a hallucination supported a valid strategic point:\n- Find another way to make that point\n- Use available evidence differently\n- Reframe as assessment rather than fact\n- Keep the strategic conclusion even if the supporting fact changes\n\n## WHAT TO NEVER CHANGE\n\n### Protected Content - Don't Touch These:\n\n**Strategic Sections:**\n- Campaign recommendations\n- Vulnerability assessments\n- Pressure point analysis\n- Coalition opportunities\n- Messaging strategies\n- Tactical approaches\n\n**Analytical Content:**\n- \"This suggests...\"\n- \"Analysis indicates...\"\n- \"Pattern shows...\"\n- \"Evidence points to...\"\n- \"Strategic opportunity exists...\"\n- \"Campaign could leverage...\"\n\n**Structural Elements:**\n- The user-responsive organization\n- Section headers (even if non-standard)\n- Emphasis and priorities\n- Executive summary focus\n- Conclusion and recommendations\n\n**Qualitative Assessments:**\n- Market position evaluations\n- Competitive analysis\n- Risk assessments\n- Opportunity identification\n- Stakeholder mapping\n\n## PRACTICAL EXAMPLES\n\n### Hallucination: \"Company has 5,000 employees\"\n**If sources show 4,800:** Just leave it - close enough\n**If sources show \"large workforce\":** Change to \"large workforce\"\n**If sources show nothing:** Change to \"workforce size unclear from available data\"\n**If analyzing organizing potential:** Keep the analysis even if you modify the number\n\n### Hallucination: \"FDA issued warning in March 2023\"\n**If FDA issued warning in May 2023:** Adjust to \"FDA issued warning in 2023\"\n**If FDA issued violation, not warning:** Adjust to \"FDA issued violation in 2023\"\n**If no FDA action found:** Remove sentence but keep any analysis about regulatory pressure\n\n### Hallucination: \"Revenue of $47.3M\"\n**If BuiltWith shows $10-50M:** Change to \"$10-50M per BuiltWith\"\n**If sources suggest \"mid-market\":** Change to \"mid-market revenue tier\"\n**If no revenue data:** Remove number but keep analysis about financial position\n\n## REWRITE PROCESS\n\n1. **Read the full report first** - Understand its purpose and flow\n2. **Review what the user originally asked for** - Ensure fixes maintain responsiveness\n3. **Address only flagged hallucinations** - Don't fix what isn't broken\n4. **Use lightest touch possible** - Adjust > Qualify > Convert > Remove\n5. **Preserve all analysis** - This is the report's value\n6. **Maintain original structure** - It was adapted to user needs\n7. **Keep the same tone and voice** - Don't formalize informal writing\n\n## OUTPUT RULES\n\n### Start Immediately\n- No preamble about what you're doing\n- No explanation of changes made\n- Just output the corrected report\n\n### Maintain Everything Valuable\n- All strategic insights\n- All campaign recommendations  \n- All vulnerability assessments\n- All analytical frameworks\n- All actionable intelligence\n\n### Format Preservation\n- Keep the original section structure\n- Maintain the same headers\n- Preserve the emphasis patterns\n- Keep the same level of detail\n- Maintain source citation style\n\n## CRITICAL REMINDERS\n\n1. **You're a corrector, not a rewriter** - Minimal changes only\n2. **Analysis is sacred** - Never remove strategic insights\n3. **Structure was chosen for a reason** - Don't standardize it\n4. **The report answered a specific query** - Keep it responsive\n5. **Campaign value is paramount** - Preserve all actionable intelligence\n6. **When in doubt, keep it** - Better to leave marginal content than remove value\n\n## FINAL INSTRUCTION\n\nOutput the corrected report immediately. Fix ONLY the specific hallucinations identified. Preserve everything else exactly as written, including all analysis, recommendations, structure, and strategic insights. The goal is a report that's accurate but retains all its original intelligence value and responsiveness to the user's query.\n\nRemember: A report full of strategic insights, vulnerability analysis, and campaign recommendations is doing exactly what it should do. Your job is to fix factual errors while preserving all that value.","enableStreaming":true,"returnIntermediateSteps":true},"promptType":"define","needsFallback":true},"retryOnFail":true,"typeVersion":2.2},{"id":"bfb5436f-32ce-4b51-b379-c9013bd67d90","name":"Sticky Note13","type":"n8n-nodes-base.stickyNote","position":[4480,3632],"parameters":{"color":7,"width":688,"height":560,"content":"## ✍️ Writing Report Agent\n\nThis agent is responsible for transforming **raw research signals** into a **clear, structured, human-readable report**.\n\nAfter the research tools return their findings, the Writing Report Agent:\n\n* Analyzes and prioritizes the most relevant information\n* Synthesizes insights across multiple sources\n* Organizes content into logical sections\n* Writes the report in clean **Markdown format**\n\nThe goal of this agent is **clarity and usefulness**, not just summarization.\nIt focuses on:\n\n* Explaining *what the evidence suggests*\n* Connecting ideas across sources\n* Presenting information in a way that is easy to read and reuse\n\nThis agent does **not** assume correctness yet — its job is to produce the *best possible first draft* based on available information."},"typeVersion":1},{"id":"6ade15c0-2e2b-42f8-bede-8ab2b1a2491b","name":"Sticky Note14","type":"n8n-nodes-base.stickyNote","position":[5280,3712],"parameters":{"color":7,"width":752,"height":496,"content":"## 🔍 Verifying Report Agent\n\nThis agent acts as a **quality control and fact-checking layer**.\n\nOnce the initial report is written, the Verifying Report Agent:\n\n* Reviews claims made in the draft report\n* Checks for internal consistency and logical coherence\n* Evaluates whether conclusions are supported by the research inputs\n* Flags areas that appear weak, vague, or potentially unsupported\n\nRather than rewriting content immediately, this agent focuses on **analysis and diagnosis**:\n\n* What looks reliable?\n* What might be overstated?\n* What needs further scrutiny?\n\nThis separation of responsibilities helps ensure that verification is **objective**, rather than influenced by the writing process itself."},"typeVersion":1},{"id":"6696f952-aaf7-4d1e-b3b7-5bb8c5566e91","name":"Sticky Note15","type":"n8n-nodes-base.stickyNote","position":[6128,3712],"parameters":{"color":7,"width":912,"height":512,"content":"## 🧯 Fixing Hallucinations Agent\n\nThis agent is activated **only when issues are detected** during verification.\n\nIf the Verifying Report Agent identifies hallucinations, unsupported claims, or logical gaps, the Fixing Hallucinations Agent:\n\n* Revisits the original research inputs\n* Removes or corrects unsupported statements\n* Rewrites affected sections with more conservative, evidence-backed language\n* Ensures the final output aligns strictly with available information\n\nThe goal here is **risk reduction**, not creativity.\n\nThis agent prioritizes:\n\n* Accuracy over verbosity\n* Conservative phrasing when evidence is limited\n* Clear distinction between facts, interpretations, and uncertainty\n\nBy isolating hallucination handling into its own step, the workflow produces outputs that are **safer to trust and easier to audit**, especially for high-stakes research use cases.\n"},"typeVersion":1}],"active":false,"pinData":{"Trigger research request (Webhook)":[{"json":{"body":{"prompt":"What are the most effective corporate pressure campaign strategies used by animal advocacy organizations?"},"query":{},"params":{},"headers":{"host":"n8n.openpaws.ai","accept":"*/*","x-real-ip":"103.171.120.173","connection":"close","user-agent":"curl/8.7.1","content-type":"application/json","content-length":"119","x-forwarded-for":"103.171.120.173","x-forwarded-port":"443","x-forwarded-proto":"https"},"webhookUrl":"https://n8n.openpaws.ai/webhook-test/general-research","executionMode":"test"}}],"Trigger research from another workflow":[{"json":{"prompt":"test prompt"}}]},"settings":{"availableInMCP":false,"executionOrder":"v1"},"versionId":"9ed4a3f9-3bdf-409d-bd09-1733e4f3bd83","connections":{"Opus":{"ai_languageModel":[[{"node":"Writing Report","type":"ai_languageModel","index":0}]]},"Opus1":{"ai_languageModel":[[{"node":"Fixing Hallucinations","type":"ai_languageModel","index":0}]]},"Qwen3":{"ai_languageModel":[[{"node":"Searching For Information","type":"ai_languageModel","index":0}]]},"Sonnet":{"ai_languageModel":[[{"node":"Verifying Report","type":"ai_languageModel","index":0}]]},"Think1":{"ai_tool":[[{"node":"Searching For Information","type":"ai_tool","index":0}]]},"Set Prompt":{"main":[[{"node":"Searching For Information","type":"main","index":0}]]},"Set Report":{"main":[[{"node":"Verifying Report","type":"main","index":0}]]},"Set Report1":{"main":[[{"node":"If Source is Webhook","type":"main","index":0}]]},"Serper API 2":{"ai_tool":[[{"node":"Searching For Information","type":"ai_tool","index":0}]]},"Auto Fallback3":{"ai_languageModel":[[{"node":"Writing Report","type":"ai_languageModel","index":1}]]},"Auto Fallback4":{"ai_languageModel":[[{"node":"Verifying Report","type":"ai_languageModel","index":1},{"node":"Structured Output Parser","type":"ai_languageModel","index":0}]]},"Auto Fallback5":{"ai_languageModel":[[{"node":"Fixing Hallucinations","type":"ai_languageModel","index":1}]]},"Writing Report":{"main":[[{"node":"Retry if Response Empty1","type":"main","index":0}]]},"XPostScraper 2":{"ai_tool":[[{"node":"Searching For Information","type":"ai_tool","index":0}]]},"If Empty Output":{"main":[[{"node":"Set Report","type":"main","index":0},{"node":"Fixing Hallucinations","type":"main","index":0}],[{"node":"Set Report","type":"main","index":0}]]},"If Empty Output1":{"main":[[{"node":"Verifying Report","type":"main","index":0}],[{"node":"If hallucinations present","type":"main","index":0}]]},"Verifying Report":{"main":[[{"node":"If Empty Output1","type":"main","index":0}]]},"LinkedinScraper 2":{"ai_tool":[[{"node":"Searching For Information","type":"ai_tool","index":0}]]},"XProfileScraper 2":{"ai_tool":[[{"node":"Searching For Information","type":"ai_tool","index":0}]]},"InstagramScraper 2":{"ai_tool":[[{"node":"Searching For Information","type":"ai_tool","index":0}]]},"Semantic Scholar 2":{"ai_tool":[[{"node":"Searching For Information","type":"ai_tool","index":0}]]},"Think Tool Analysis":{"ai_tool":[[{"node":"Writing Report","type":"ai_tool","index":0}]]},"If Source is Webhook":{"main":[[{"node":"Respond to Webhook","type":"main","index":0}],[{"node":"Set Output","type":"main","index":0}]]},"Think Tool Analysis2":{"ai_tool":[[{"node":"Fixing Hallucinations","type":"ai_tool","index":0}]]},"Fixing Hallucinations":{"main":[[{"node":"If Empty Output","type":"main","index":0}]]},"OpenRouter Chat Model":{"ai_languageModel":[[{"node":"Searching For Information","type":"ai_languageModel","index":1}]]},"Retry if Tools Not Used":{"main":[[{"node":"Searching For Information","type":"main","index":0}],[{"node":"Writing Report","type":"main","index":0}]]},"Retry if Response Empty1":{"main":[[{"node":"Writing Report","type":"main","index":0}],[{"node":"Set Report","type":"main","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Verifying Report","type":"ai_outputParser","index":0}]]},"If hallucinations present":{"main":[[{"node":"Fixing Hallucinations","type":"main","index":0}],[{"node":"Set Report1","type":"main","index":0}]]},"Searching For Information":{"main":[[{"node":"Retry if Tools Not Used","type":"main","index":0}]]},"Read URL content in Jina AI":{"ai_tool":[[{"node":"Searching For Information","type":"ai_tool","index":0}]]},"Trigger research request (Webhook)":{"main":[[{"node":"Set Prompt","type":"main","index":0}]]},"Trigger research from another workflow":{"main":[[{"node":"Set Prompt","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":42,"nodeTypes":{"n8n-nodes-base.if":{"count":6},"n8n-nodes-base.set":{"count":4},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.jinaAiTool":{"count":1},"n8n-nodes-base.stickyNote":{"count":6},"@n8n/n8n-nodes-langchain.agent":{"count":3},"n8n-nodes-base.httpRequestTool":{"count":6},"n8n-nodes-base.respondToWebhook":{"count":1},"@n8n/n8n-nodes-langchain.chainLlm":{"count":1},"@n8n/n8n-nodes-langchain.toolThink":{"count":3},"n8n-nodes-base.executeWorkflowTrigger":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenRouter":{"count":8},"@n8n/n8n-nodes-langchain.outputParserStructured":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Open Paws","username":"openpaws","bio":"Open Paws is a nonprofit building open-source AI tools to accelerate animal advocacy. \n\nWe create machine learning models and automation workflows trained on real-world campaign data to help end industrial animal exploitation. \n\nAll tools are free, transparent, and designed for real-world impact.","verified":true,"links":["https://www.openpaws.ai/"],"avatar":"https://gravatar.com/avatar/c23bc104617a5a562fe9efe0dad98e78652efd6171b81a960cbbcdf236d09cc8?r=pg&d=retro&size=200"},"nodes":[{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":837,"icon":"fa:sign-out-alt","name":"n8n-nodes-base.executeWorkflowTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"When Executed by Another Workflow","color":"#ff6d5a"},"iconData":{"icon":"sign-out-alt","type":"icon"},"displayName":"Execute Workflow Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1123,"icon":"fa:link","name":"@n8n/n8n-nodes-langchain.chainLlm","codex":{"data":{"alias":["LangChain"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Chains","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Basic LLM Chain","color":"#909298"},"iconData":{"icon":"link","type":"icon"},"displayName":"Basic LLM Chain","typeVersion":2,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1179,"icon":"fa:code","name":"@n8n/n8n-nodes-langchain.outputParserStructured","codex":{"data":{"alias":["json","zod"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Output Parsers"]}}},"group":"[\"transform\"]","defaults":{"name":"Structured Output Parser"},"iconData":{"icon":"code","type":"icon"},"displayName":"Structured Output Parser","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1281,"icon":"file:openrouter.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenrouter/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenRouter Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjOTRBM0I4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAwIDI0IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5PcGVuUm91dGVyPC90aXRsZT48cGF0aCBkPSJNMTYuODA0IDEuOTU3bDcuMjIgNC4xMDV2LjA4N0wxNi43MyAxMC4yMWwuMDE3LTIuMTE3LS44MjEtLjAzYy0xLjA1OS0uMDI4LTEuNjExLjAwMi0yLjI2OC4xMS0xLjA2NC4xNzUtMi4wMzguNTc3LTMuMTQ3IDEuMzUyTDguMzQ1IDExLjAzYy0uMjg0LjE5NS0uNDk1LjMzNi0uNjguNDU1bC0uNTE1LjMyMi0uMzk3LjIzNC4zODUuMjMuNTMuMzM4Yy40NzYuMzE0IDEuMTcuNzk2IDIuNzAxIDEuODY2IDEuMTEuNzc1IDIuMDgzIDEuMTc3IDMuMTQ3IDEuMzUybC4zLjA0NWMuNjk0LjA5MSAxLjM3NS4wOTQgMi44MjUuMDMzbC4wMjItMi4xNTkgNy4yMiA0LjEwNXYuMDg3TDE2LjU4OSAyMmwuMDE0LTEuODYyLS42MzUuMDIyYy0xLjM4Ni4wNDItMi4xMzcuMDAyLTMuMTM4LS4xNjItMS42OTQtLjI4LTMuMjYtLjkyNi00Ljg4MS0yLjA1OWwtMi4xNTgtMS41YTIxLjk5NyAyMS45OTcgMCAwMC0uNzU1LS40OThsLS40NjctLjI4YTU1LjkyNyA1NS45MjcgMCAwMC0uNzYtLjQzQzIuOTA4IDE0LjczLjU2MyAxNC4xMTYgMCAxNC4xMTZWOS44ODhsLjE0LjAwNGMuNTY0LS4wMDcgMi45MS0uNjIyIDMuODA5LTEuMTI0bDEuMDE2LS41OC40MzgtLjI3NGMuNDI4LS4yOCAxLjA3Mi0uNzI2IDIuNjg2LTEuODUzIDEuNjIxLTEuMTMzIDMuMTg2LTEuNzggNC44ODEtMi4wNTkgMS4xNTItLjE5IDEuOTc0LS4yMTMgMy44MTQtLjEzOGwuMDItMS45MDd6Ij48L3BhdGg+PC9zdmc+Cg=="},"displayName":"OpenRouter Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1289,"icon":"fa:brain","name":"@n8n/n8n-nodes-langchain.toolThink","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolthink/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Tools"],"Tools":["Other Tools"]}}},"group":"[\"transform\"]","defaults":{"name":"Think"},"iconData":{"icon":"brain","type":"icon"},"displayName":"Think Tool","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":32,"name":"Market Research"},{"id":48,"name":"AI RAG"}],"image":[]}}