<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jangwook Kim</title>
    <description>The latest articles on Forem by Jangwook Kim (@jangwook_kim_e31e7291ad98).</description>
    <link>https://forem.com/jangwook_kim_e31e7291ad98</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1909290%2F60a8c15f-b2b5-4189-8578-78b8ab78900b.jpg</url>
      <title>Forem: Jangwook Kim</title>
      <link>https://forem.com/jangwook_kim_e31e7291ad98</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jangwook_kim_e31e7291ad98"/>
    <language>en</language>
    <item>
      <title>Taskade Review 2026: The AI-Powered Productivity Platform Where Agents Actually Do the Work</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Tue, 07 Apr 2026 06:56:53 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/taskade-review-2026-the-ai-powered-productivity-platform-where-agents-actually-do-the-work-3a6m</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/taskade-review-2026-the-ai-powered-productivity-platform-where-agents-actually-do-the-work-3a6m</guid>
      <description>&lt;h1&gt;
  
  
  Taskade Review 2026: The AI-Powered Productivity Platform Where Agents Actually Do the Work
&lt;/h1&gt;

&lt;p&gt;Every productivity platform in 2026 has an AI feature. Notion has AI blocks. ClickUp has AI writing. Monday has AI automations. But most of these are bolt-on features — a chatbot here, a text generator there. They assist. They do not act.&lt;/p&gt;

&lt;p&gt;Taskade takes a different approach. Instead of adding AI as a feature layer on top of a project management tool, Taskade built AI agents as first-class citizens of the platform. These agents can create tasks, update projects, trigger automations, and coordinate with each other across your workspace. They remember context between sessions. They learn from your documents. And as of early 2026, they can build entire web applications from a single prompt through a feature called Genesis.&lt;/p&gt;

&lt;p&gt;The question is whether this agent-first architecture translates into real productivity gains, or if it is mostly a marketing angle wrapped around the same task-and-board interface everyone else offers.&lt;/p&gt;

&lt;p&gt;We evaluated Taskade at Effloow as part of our content operations stack — specifically to see whether its AI agents could handle recurring editorial workflows alongside tools we already use. This review covers what Taskade does well, where it falls short, who should seriously consider it, and whether the pricing justifies the feature set.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; This article contains affiliate links. If you sign up for Taskade through our links, Effloow may earn a commission at no extra cost to you. See our &lt;a href="https://www.effloow.com/affiliate-disclosure" rel="noopener noreferrer"&gt;affiliate disclosure&lt;/a&gt; for details. Our recommendations are based on our own evaluation — we only recommend tools we have personally tested.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Is Taskade?
&lt;/h2&gt;

&lt;p&gt;Taskade is an AI-powered workspace for teams that combines project management, document collaboration, and AI agent capabilities in a single platform. It was founded in 2017 and has steadily evolved from a simple task management app into what the company now describes as a platform where teams "build and run AI apps, agents, and workflows."&lt;/p&gt;

&lt;p&gt;The platform is available on Web, macOS, Windows, Linux, iOS, Android, and browser extensions — essentially every surface a productivity tool needs to cover.&lt;/p&gt;

&lt;p&gt;What sets Taskade apart from competitors in 2026 is the depth of its AI integration. While most productivity tools added AI features after the ChatGPT wave, Taskade restructured its entire product around three pillars:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt; — Projects and databases that store structured data with custom fields and multiple views&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligence&lt;/strong&gt; — AI Agents v2 with custom tools, persistent memory, and access to 11+ models from OpenAI, Anthropic, and Google&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution&lt;/strong&gt; — Automations connecting 100+ external integrations with branching logic&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These three pillars feed into each other. Projects store data. Agents reason about that data and take action. Automations execute those actions at scale. It is the kind of architecture that sounds good on a product page — and in our testing, it actually works closer to that vision than you might expect.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Features: What Taskade Actually Does
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Project Management and Views
&lt;/h3&gt;

&lt;p&gt;At its core, Taskade is a project management tool. You create workspaces, organize them into folders, and build projects inside those folders. Each project supports eight different views of the same data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;List&lt;/strong&gt; — Classic task list with subtasks and due dates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Board&lt;/strong&gt; — Kanban-style columns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calendar&lt;/strong&gt; — Date-based view for scheduling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Table&lt;/strong&gt; — Spreadsheet-like with custom fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mind Map&lt;/strong&gt; — Visual brainstorming with connected nodes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gantt&lt;/strong&gt; — Timeline view for project planning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Org Chart&lt;/strong&gt; — Hierarchical structure visualization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeline&lt;/strong&gt; — Chronological project view&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This multi-view approach is genuinely useful. You can plan a content calendar in Calendar view, manage the production pipeline in Board view, and track individual article progress in Table view — all from the same underlying data. If you have used Notion databases with multiple views, the concept is similar, though Taskade's mind map and org chart views add visual options that Notion does not offer natively.&lt;/p&gt;

&lt;p&gt;Real-time collaboration is built in. Multiple team members can edit the same project simultaneously with cursor tracking and presence indicators. Taskade also includes a built-in video calling feature — a small but practical addition that eliminates the need to switch to Zoom or Google Meet for quick syncs.&lt;/p&gt;

&lt;p&gt;The access control system has seven tiers, ranging from view-only to full admin permissions. For teams managing client projects or working with external contractors, this granularity matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Agents: The Core Differentiator
&lt;/h3&gt;

&lt;p&gt;This is where Taskade separates from the pack. AI agents in Taskade are not chatbots that sit in a sidebar and answer questions. They are autonomous digital teammates that can reason through problems, execute multi-step workflows, and take real action inside your workspace.&lt;/p&gt;

&lt;p&gt;&lt;a href="/images/articles/taskade-review/diagram-agent-workflow.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/articles/taskade-review/diagram-agent-workflow.png" alt="Taskade AI agent workflow architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each agent comes with access to &lt;strong&gt;22+ built-in tools&lt;/strong&gt; and can be extended with custom tool definitions and slash commands. Agents can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and update tasks and projects&lt;/li&gt;
&lt;li&gt;Send emails and notifications&lt;/li&gt;
&lt;li&gt;Trigger automations and workflows&lt;/li&gt;
&lt;li&gt;Search and analyze documents in your workspace&lt;/li&gt;
&lt;li&gt;Integrate with 100+ external services&lt;/li&gt;
&lt;li&gt;Coordinate with other agents in multi-agent teams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;Agent Builder&lt;/strong&gt; lets you create custom agents trained on your specific data. You upload documents, connect data sources, and define the agent's role, personality, and capabilities. The agent then inherits what Taskade calls &lt;strong&gt;Workspace DNA&lt;/strong&gt; — an understanding of your organizational context, terminology, and processes.&lt;/p&gt;

&lt;p&gt;What makes this meaningful is &lt;strong&gt;persistent memory&lt;/strong&gt;. When you have a conversation with a Taskade agent, that conversation is saved with full context. The next time you interact with the agent, it remembers what you discussed, what decisions were made, and what actions were taken. This eliminates the "starting from scratch" problem that plagues most AI chat interfaces.&lt;/p&gt;

&lt;p&gt;For teams that coordinate multiple AI agents, Taskade supports &lt;strong&gt;multi-agent orchestration&lt;/strong&gt; — assigning specialized agents to different roles (research, writing, project management) and letting them collaborate on complex workflows. If you are running a content operation, this is the kind of thing that turns a 3-hour research process into a 30-minute review.&lt;/p&gt;

&lt;p&gt;If the concept of AI agents working autonomously on business tasks sounds familiar, it is because this is the direction the entire industry is heading. We wrote about &lt;a href="https://www.effloow.com/articles/how-we-built-company-with-14-ai-agents" rel="noopener noreferrer"&gt;how we built a company run by 14 AI agents&lt;/a&gt; — the core idea of agents doing real work, not just suggesting, is central to how we operate at Effloow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment options&lt;/strong&gt; add flexibility. Agents can operate internally within your workspace, or you can deploy them externally — as embedded chatbots on your website, public-facing assistants, or customer support bots with branded interfaces. This turns Taskade from a productivity tool into a lightweight AI deployment platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Genesis: The No-Code App Builder
&lt;/h3&gt;

&lt;p&gt;Genesis is Taskade's boldest feature and one that no competitor in the productivity space currently matches. It is a no-code AI app builder that transforms natural language prompts into complete, deployable web applications — typically within 2 to 15 minutes.&lt;/p&gt;

&lt;p&gt;This is not code generation. Genesis creates what Taskade calls "living systems" — applications with responsive UIs, structured databases, embedded AI agents, and automated workflows. You describe what you need, select your preferred AI model, and Genesis builds it.&lt;/p&gt;

&lt;p&gt;The categories of apps you can build include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Client portals&lt;/strong&gt; with project tracking and file sharing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CRM systems&lt;/strong&gt; with pipeline management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Booking and scheduling apps&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive learning platforms&lt;/strong&gt; with AI tutors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invoice generators&lt;/strong&gt; and expense trackers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Landing pages&lt;/strong&gt; and marketing sites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI chatbots&lt;/strong&gt; with context-aware responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each app gets an instant live URL upon completion. Business plan subscribers can connect custom domains and apply white-label branding. Published Genesis apps run without consuming AI credits, which means your production applications can serve unlimited users at no additional cost beyond your subscription.&lt;/p&gt;

&lt;p&gt;This is a significant development in the &lt;a href="https://www.effloow.com/articles/what-is-vibe-coding-developer-trend-2026" rel="noopener noreferrer"&gt;vibe coding&lt;/a&gt; movement — the idea that you describe software in plain language rather than writing code. While standalone tools like Bolt.new and Lovable generate code files that still need deployment, Genesis produces running applications with built-in data management and AI capabilities.&lt;/p&gt;

&lt;p&gt;The practical limitation is complexity. Genesis works well for internal tools, simple client-facing apps, and prototypes. For applications requiring custom backend logic, complex integrations, or high-traffic scalability, you will still need a developer. But for the 80% of business tools that are fundamentally forms, dashboards, and workflows, Genesis is surprisingly capable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow Automation
&lt;/h3&gt;

&lt;p&gt;Taskade offers 104 automation actions with conditional branching and looping. Automations can be triggered by events (a task status change, a form submission, a schedule, or a webhook), and they can interact with 100+ external services including Slack, HubSpot, Stripe, GitHub, Discord, and Microsoft Teams.&lt;/p&gt;

&lt;p&gt;The automation builder is visual and relatively intuitive. You define trigger conditions, add action steps, and set up branching logic for different scenarios. For teams already using &lt;a href="https://www.effloow.com/articles/zapier-vs-make-vs-n8n-automation-comparison-2026" rel="noopener noreferrer"&gt;Zapier, Make, or n8n&lt;/a&gt; for workflow automation, Taskade's native automations can replace some of those external workflows — particularly the ones that involve data already living inside Taskade.&lt;/p&gt;

&lt;p&gt;Where this connects to the broader platform is through AI agents. An automation can trigger an agent, which can reason about the data, make a decision, and trigger another automation. This creates feedback loops that are difficult to replicate with traditional trigger-action automation tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Model Access
&lt;/h3&gt;

&lt;p&gt;Taskade provides access to &lt;strong&gt;11+ frontier AI models&lt;/strong&gt; from three providers: OpenAI (GPT-4 and later), Anthropic (Claude), and Google (Gemini). You can select different models per agent, which means you can assign Claude for nuanced writing tasks, GPT-4 for code generation, and Gemini for research — all within the same workspace.&lt;/p&gt;

&lt;p&gt;This multi-model approach is a significant advantage over tools locked into a single AI provider. If you are comparing &lt;a href="https://www.effloow.com/articles/gemini-code-assist-vs-github-copilot-vs-cursor-2026" rel="noopener noreferrer"&gt;AI coding tools&lt;/a&gt; or AI writing assistants, having model choice built into your productivity platform saves you from maintaining separate subscriptions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Taskade Pricing Breakdown: What You Actually Pay
&lt;/h2&gt;

&lt;p&gt;Taskade's pricing model is one of its strongest selling points. While most productivity tools charge per seat — which gets expensive fast as your team grows — Taskade uses &lt;strong&gt;flat team pricing&lt;/strong&gt; on its most popular plans.&lt;/p&gt;

&lt;p&gt;&lt;a href="/images/articles/taskade-review/chart-pricing-tiers.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/articles/taskade-review/chart-pricing-tiers.png" alt="Taskade pricing tiers comparison chart"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Monthly&lt;/th&gt;
&lt;th&gt;Annual (per month)&lt;/th&gt;
&lt;th&gt;Users Included&lt;/th&gt;
&lt;th&gt;AI Credits/Month&lt;/th&gt;
&lt;th&gt;Agents&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3,000 (one-time)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Starter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$8&lt;/td&gt;
&lt;td&gt;$6&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$20&lt;/td&gt;
&lt;td&gt;$16&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;50,000&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Business&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;td&gt;$40&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;150,000&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: &lt;a href="https://www.taskade.com/pricing" rel="noopener noreferrer"&gt;taskade.com/pricing&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Math That Matters
&lt;/h3&gt;

&lt;p&gt;The Pro plan at $16/month (billed annually) for up to 10 users is where the value proposition gets interesting. That is $1.60 per user per month. Compare that to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Notion AI&lt;/strong&gt;: $10/user/month for AI features on top of the base plan&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ClickUp AI&lt;/strong&gt;: $5/user/month add-on, plus base plan costs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monday AI&lt;/strong&gt;: Available on Pro plan at $12/seat/month minimum&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a team of 10, Taskade Pro costs $16/month total. Notion with AI would cost approximately $100-200/month depending on the base plan. ClickUp with AI would be at least $170/month. The savings are substantial, especially for small teams and startups where every dollar of runway matters.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Business plan&lt;/strong&gt; at $40/month for unlimited users is remarkable for growing companies. Once your team exceeds 10 people, the per-user cost decreases with every new member.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Credits: What They Cover
&lt;/h3&gt;

&lt;p&gt;AI credits are consumed when agents perform actions, generate content, or process requests. The Free plan's 3,000 credits are one-time (not monthly), which is enough to evaluate the platform but not enough for ongoing use. The Pro plan's 50,000 monthly credits support approximately 50 app generations or equivalent agent interactions — sufficient for most small team use cases.&lt;/p&gt;

&lt;p&gt;Crucially, published Genesis apps do not consume credits. This means you can build and deploy internal tools or client-facing apps without worrying about ongoing AI costs for end users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Features by Plan
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom domains and branding&lt;/strong&gt;: Business and Enterprise only&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100+ integrations&lt;/strong&gt;: Pro and above&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unlimited automations&lt;/strong&gt;: Pro and above&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced admin controls&lt;/strong&gt;: Business and above&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSO and compliance&lt;/strong&gt;: Enterprise&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Taskade vs Notion AI: The Comparison Everyone Wants
&lt;/h2&gt;

&lt;p&gt;This is the comparison most people searching for a Taskade review actually want. Both platforms combine project management with AI features, but they serve fundamentally different use cases.&lt;/p&gt;

&lt;p&gt;&lt;a href="/images/articles/taskade-review/comparison-taskade-vs-notion.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/articles/taskade-review/comparison-taskade-vs-notion.png" alt="Taskade vs Notion AI feature comparison"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Taskade&lt;/th&gt;
&lt;th&gt;Notion AI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Custom autonomous agents with 22+ tools, multi-agent teams&lt;/td&gt;
&lt;td&gt;AI writing assistant and Q&amp;amp;A — no autonomous agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flat team pricing ($16/mo for 10 users)&lt;/td&gt;
&lt;td&gt;Per-seat ($10-20/user/month)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;App building&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Genesis no-code builder with instant deployment&lt;/td&gt;
&lt;td&gt;No equivalent feature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;104 native actions, 100+ integrations&lt;/td&gt;
&lt;td&gt;Requires Zapier or Make for automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI models&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;11+ models from OpenAI, Anthropic, Google&lt;/td&gt;
&lt;td&gt;Anthropic-powered only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic structured data with custom fields&lt;/td&gt;
&lt;td&gt;Full relational databases with formulas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Good for tasks, limited for deep wikis&lt;/td&gt;
&lt;td&gt;Industry-leading wiki and documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Video calls&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in native video&lt;/td&gt;
&lt;td&gt;No native video&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Offline support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Better offline capabilities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mobile app&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Functional but commonly noted as clunky&lt;/td&gt;
&lt;td&gt;More polished mobile experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Templates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1,000+ built-in templates&lt;/td&gt;
&lt;td&gt;Community-driven template library&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  When to Choose Taskade
&lt;/h3&gt;

&lt;p&gt;Choose Taskade if you want AI agents that &lt;em&gt;do&lt;/em&gt; things — not just write or answer questions. If your workflow involves recurring automations, if you need to build internal tools without a developer, or if flat team pricing matters for your budget. Taskade is the action-oriented choice.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to Choose Notion
&lt;/h3&gt;

&lt;p&gt;Choose Notion if your primary need is documentation, knowledge management, or relational databases. Notion's wiki capabilities, database formulas, and overall polish are still ahead of Taskade for content-heavy, documentation-first teams.&lt;/p&gt;

&lt;p&gt;For a deeper comparison of AI-powered documentation tools, see our &lt;a href="https://www.effloow.com/articles/notion-ai-custom-agents-developer-guide-2026" rel="noopener noreferrer"&gt;Notion AI custom agents developer guide&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Taskade vs ClickUp, Monday, and Asana
&lt;/h2&gt;

&lt;p&gt;Beyond the Notion comparison, here is how Taskade stacks up against the traditional project management platforms:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Taskade&lt;/th&gt;
&lt;th&gt;ClickUp&lt;/th&gt;
&lt;th&gt;Monday&lt;/th&gt;
&lt;th&gt;Asana&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Autonomous, custom-built&lt;/td&gt;
&lt;td&gt;ClickUp Brain (assistant)&lt;/td&gt;
&lt;td&gt;Monday AI (assistant)&lt;/td&gt;
&lt;td&gt;Asana Intelligence (assistant)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Price (10 users)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$16/mo total&lt;/td&gt;
&lt;td&gt;$170+/mo&lt;/td&gt;
&lt;td&gt;$120+/mo&lt;/td&gt;
&lt;td&gt;$130+/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;App builder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Genesis (no-code)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;104 actions, native&lt;/td&gt;
&lt;td&gt;Advanced, mature&lt;/td&gt;
&lt;td&gt;Visual builder&lt;/td&gt;
&lt;td&gt;Rules-based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Video calls&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;td&gt;None native&lt;/td&gt;
&lt;td&gt;None native&lt;/td&gt;
&lt;td&gt;None native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gantt charts&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Included all plans&lt;/td&gt;
&lt;td&gt;Paid plans&lt;/td&gt;
&lt;td&gt;Paid plans&lt;/td&gt;
&lt;td&gt;Premium+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low-Medium&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Taskade wins decisively on price and AI depth. ClickUp wins on project management maturity and advanced feature set. Monday wins on ease of use for non-technical teams. Asana wins on enterprise workflow management.&lt;/p&gt;

&lt;p&gt;The honest take: if your team's primary need is traditional project management at scale — resource allocation, workload management, complex dependencies — ClickUp or Asana are more mature choices. If you want a lighter, AI-first workspace where agents and automations do the heavy lifting, Taskade is the stronger pick.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who Should Use Taskade?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ideal Users
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Small teams (2-10 people)&lt;/strong&gt; who need project management + AI without paying per-seat enterprise prices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solopreneurs and freelancers&lt;/strong&gt; who want AI agents handling recurring workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Startups&lt;/strong&gt; building internal tools quickly with Genesis instead of hiring developers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content teams&lt;/strong&gt; using AI agents for research, drafting, and editorial workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agencies&lt;/strong&gt; managing multiple client projects with embedded AI chatbots&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote teams&lt;/strong&gt; who benefit from built-in video calls and real-time collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Who Should Look Elsewhere
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise teams&lt;/strong&gt; needing advanced compliance, audit trails, and deeply customizable permissions (consider Asana or Monday Enterprise)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation-first teams&lt;/strong&gt; where wiki quality matters more than AI agents (choose Notion)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer teams&lt;/strong&gt; needing issue tracking, CI/CD integration, and code review workflows (use Linear, Jira, or GitHub Projects)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teams already invested&lt;/strong&gt; in a mature PM tool with extensive integrations and custom workflows they do not want to rebuild&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Taskade Pros and Cons: The Honest Assessment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI agents that actually work&lt;/strong&gt; — Not chatbots, but autonomous teammates with persistent memory, custom tools, and multi-agent coordination&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flat team pricing&lt;/strong&gt; — $16/month for 10 users is genuinely exceptional value in the productivity space&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Genesis app builder&lt;/strong&gt; — Building deployable web apps from prompts is a unique capability no direct competitor offers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-model AI access&lt;/strong&gt; — Choice of 11+ models from OpenAI, Anthropic, and Google within a single platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All-in-one workspace&lt;/strong&gt; — Project management, docs, AI agents, video calls, and automation in a single tool&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8 project views&lt;/strong&gt; — Including mind map and org chart that most competitors lack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1,000+ templates&lt;/strong&gt; — Extensive library for fast project setup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-platform&lt;/strong&gt; — Available on every major platform including Linux and browser extensions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mobile app needs improvement&lt;/strong&gt; — Commonly reported as clunky compared to Notion or ClickUp mobile apps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database features are basic&lt;/strong&gt; — No relational databases, formulas, or the depth of Notion databases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline support is limited&lt;/strong&gt; — Not ideal for teams frequently working without internet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smaller ecosystem&lt;/strong&gt; — Fewer community integrations and third-party extensions compared to Notion or ClickUp&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation depth&lt;/strong&gt; — Wiki and knowledge base capabilities are functional but not best-in-class&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Genesis limitations&lt;/strong&gt; — While impressive for simple apps, complex applications still require real development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free plan is restrictive&lt;/strong&gt; — 3,000 one-time credits and 1 agent are barely enough to evaluate the AI features properly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relatively younger platform&lt;/strong&gt; — Less battle-tested at enterprise scale compared to established PM tools&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Is Taskade Worth It in 2026?
&lt;/h2&gt;

&lt;p&gt;For the right team, Taskade offers the best value proposition in the AI productivity space right now. The combination of autonomous AI agents, flat team pricing, and a no-code app builder creates a package that no single competitor matches.&lt;/p&gt;

&lt;p&gt;The platform is not perfect. The mobile experience needs work, the database features lag behind Notion, and enterprise teams with complex compliance requirements should look at more established options. But for small-to-medium teams that want AI to do real work — not just generate text — Taskade is worth serious evaluation.&lt;/p&gt;

&lt;p&gt;The 50% lifetime recurring affiliate commission also signals something about the product: Taskade is confident enough in its retention to pay partners half of every subscription payment, forever. That level of commission only makes financial sense when users stick around.&lt;/p&gt;

&lt;p&gt;If you are building a team of &lt;a href="https://www.effloow.com/articles/how-we-built-company-with-14-ai-agents" rel="noopener noreferrer"&gt;AI agents for your business&lt;/a&gt;, Taskade is one of the most accessible entry points. You do not need to set up infrastructure, write code, or stitch together multiple tools. The agents, the workspace, and the automation layer are all in one place.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Taskade free?
&lt;/h3&gt;

&lt;p&gt;Yes. Taskade offers a Free plan with 3,000 one-time AI credits, 1 AI agent, and 3 live Genesis apps. It is enough to explore the interface and basic features, but you will need a paid plan for meaningful AI usage.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much does Taskade cost per user?
&lt;/h3&gt;

&lt;p&gt;Taskade uses flat team pricing, not per-user pricing. The Pro plan costs $16/month (billed annually) for up to 10 users — that is $1.60 per user. The Business plan costs $40/month for unlimited users. Source: &lt;a href="https://www.taskade.com/pricing" rel="noopener noreferrer"&gt;taskade.com/pricing&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Taskade safe and secure?
&lt;/h3&gt;

&lt;p&gt;Taskade offers standard cloud security practices. Enterprise plans include SSO integration and advanced admin controls. SOC 2 compliance is referenced for enterprise customers. For most small-to-medium teams, the security posture is adequate, though organizations with strict compliance requirements should contact Taskade's sales team for detailed security documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Taskade Genesis?
&lt;/h3&gt;

&lt;p&gt;Genesis is Taskade's no-code AI app builder. You describe the application you want in plain language, and Genesis builds a complete web application with a responsive UI, structured database, embedded AI agents, and automated workflows — typically within 2 to 15 minutes. Published apps get instant live URLs and do not consume AI credits.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does Taskade compare to Notion?
&lt;/h3&gt;

&lt;p&gt;Taskade wins on AI agents (autonomous vs. assistant-only), pricing (flat vs. per-seat), and app building (Genesis vs. nothing). Notion wins on databases (relational vs. basic), documentation (industry-leading wiki), and mobile experience. Choose Taskade for AI-first action; choose Notion for documentation-first knowledge management.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Taskade replace ClickUp?
&lt;/h3&gt;

&lt;p&gt;For small teams focused on AI-powered workflows, yes. Taskade covers task management, collaboration, and automation at a fraction of the cost. For large teams needing advanced project management features — resource allocation, workload management, custom dashboards, time tracking — ClickUp remains more capable.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are Taskade AI agents?
&lt;/h3&gt;

&lt;p&gt;Taskade AI agents are autonomous digital teammates that can reason through problems, execute multi-step workflows, and take real action within your workspace. They come with 22+ built-in tools, persistent memory across conversations, and can be customized with your own data and tool definitions. Unlike simple chatbots, they create tasks, update projects, send emails, and coordinate with other agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  What AI models does Taskade use?
&lt;/h3&gt;

&lt;p&gt;Taskade provides access to 11+ AI models from OpenAI (GPT-4 and newer), Anthropic (Claude), and Google (Gemini). You can select different models per agent, allowing you to match model strengths to specific tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I create a custom AI agent in Taskade?
&lt;/h3&gt;

&lt;p&gt;Use the Agent Builder: define your agent's role and personality, upload relevant documents or connect data sources for training, configure built-in and custom tools, and deploy. The agent inherits Workspace DNA — your organizational context and terminology — automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Taskade work offline?
&lt;/h3&gt;

&lt;p&gt;Taskade has limited offline support through its desktop and mobile apps. You can view and edit existing content offline, but AI features and real-time collaboration require an internet connection. If offline access is critical for your workflow, Notion currently offers a more robust offline experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I build apps with Taskade?
&lt;/h3&gt;

&lt;p&gt;Yes, through Genesis. You can build CRM systems, client portals, booking apps, dashboards, chatbots, landing pages, and more — all from natural language prompts. Published apps receive instant live URLs and serve unlimited users without consuming your AI credits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Taskade good for remote teams?
&lt;/h3&gt;

&lt;p&gt;Yes. Built-in video calls, real-time collaboration, cursor tracking, and presence indicators make Taskade well-suited for remote work. The AI agents can handle async workflows — summarizing conversations, updating project statuses, and routing tasks — which reduces the coordination overhead that remote teams typically face.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Verdict
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Rating: 4.2 / 5&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Taskade is the most ambitious productivity platform in 2026. No other tool in this category offers autonomous AI agents, a no-code app builder, multi-model AI access, and flat team pricing in a single package. The vision is clear: a workspace where AI agents are teammates, not features.&lt;/p&gt;

&lt;p&gt;The execution is not flawless. Mobile needs work, databases are basic, and the platform is still maturing compared to decade-old incumbents. But for teams that want to move fast, build tools without developers, and let AI agents handle the repetitive work — Taskade is the best option available at this price point.&lt;/p&gt;

&lt;p&gt;Start with the Free plan to explore the interface. When you are ready for real AI agent workflows, the Pro plan at $16/month for your entire team is where the value kicks in.&lt;/p&gt;

</description>
      <category>taskade</category>
      <category>productivity</category>
      <category>ai</category>
      <category>review</category>
    </item>
    <item>
      <title>Self-Hosting LLMs vs Cloud APIs: Cost, Performance &amp; Privacy Compared (2026)</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Tue, 07 Apr 2026 06:56:52 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/self-hosting-llms-vs-cloud-apis-cost-performance-privacy-compared-2026-1k09</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/self-hosting-llms-vs-cloud-apis-cost-performance-privacy-compared-2026-1k09</guid>
      <description>&lt;h1&gt;
  
  
  Self-Hosting LLMs vs Cloud APIs: Cost, Performance &amp;amp; Privacy Compared (2026)
&lt;/h1&gt;

&lt;p&gt;The question used to be simple: can you even run a useful LLM locally? In 2026, the answer is definitively yes. Open-weight models like Llama 3.3, Qwen 3, DeepSeek R1, and Mistral Large rival proprietary models on many benchmarks. Consumer GPUs have enough VRAM to run 70B-parameter models. Tools like Ollama make local inference as easy as pulling a Docker image.&lt;/p&gt;

&lt;p&gt;But "can" and "should" are different questions. Cloud APIs from OpenAI, Anthropic, and Google keep getting cheaper, faster, and more capable. The real decision in 2026 is not about possibility — it is about economics, performance requirements, and privacy constraints.&lt;/p&gt;

&lt;p&gt;This guide breaks down the actual numbers. No hand-waving, no vendor hype — just a practical cost-per-token comparison, hardware requirements, and a framework for deciding which approach fits your workload.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are building with AI coding tools specifically, our &lt;a href="https://www.effloow.com/articles/best-ai-coding-agents-2026" rel="noopener noreferrer"&gt;comparison of the best AI coding agents&lt;/a&gt; covers which agents use local vs cloud inference under the hood.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How Cloud API Pricing Works in 2026
&lt;/h2&gt;

&lt;p&gt;Cloud LLM providers charge per token — typically quoted per million input tokens and per million output tokens. The spread between models is enormous, so "cloud API pricing" is not one number.&lt;/p&gt;

&lt;h3&gt;
  
  
  Current Pricing Snapshot
&lt;/h3&gt;

&lt;p&gt;Prices below are per 1 million tokens as listed on official pricing pages. These change frequently — always verify before making infrastructure decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAI (as of April 2026):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Input (per 1M tokens)&lt;/th&gt;
&lt;th&gt;Output (per 1M tokens)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4.1&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$8.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4.1 mini&lt;/td&gt;
&lt;td&gt;$0.40&lt;/td&gt;
&lt;td&gt;$1.60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4.1 nano&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$0.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5&lt;/td&gt;
&lt;td&gt;$1.25&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;o3&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$8.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;o3-mini&lt;/td&gt;
&lt;td&gt;$1.10&lt;/td&gt;
&lt;td&gt;$4.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;o4-mini&lt;/td&gt;
&lt;td&gt;$1.10&lt;/td&gt;
&lt;td&gt;$4.40&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Anthropic (as of April 2026):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Input (per 1M tokens)&lt;/th&gt;
&lt;th&gt;Output (per 1M tokens)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 4.5&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 4.6&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4.6&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;$25.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both providers offer significant discounts through caching and batching. Anthropic's prompt caching reduces input costs by roughly 90% for repeated context. Their Batch API cuts all token costs by 50% for non-real-time workloads. Combined, these optimizations can reduce effective costs by up to 95% for the right use cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The takeaway:&lt;/strong&gt; If you are making occasional API calls or processing under 2 million tokens per day, cloud APIs are almost certainly cheaper than any self-hosted setup. You pay nothing when idle.&lt;/p&gt;




&lt;h2&gt;
  
  
  The True Cost of Self-Hosting
&lt;/h2&gt;

&lt;p&gt;Self-hosting sounds free after you buy the hardware. It is not. The real cost includes hardware amortization, electricity, cooling, maintenance time, and opportunity cost. Here is what the numbers actually look like.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hardware Requirements by Model Size
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model Size&lt;/th&gt;
&lt;th&gt;Minimum VRAM (Q4 Quantized)&lt;/th&gt;
&lt;th&gt;Recommended GPU&lt;/th&gt;
&lt;th&gt;[ESTIMATED] GPU Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;7–8B parameters&lt;/td&gt;
&lt;td&gt;6 GB&lt;/td&gt;
&lt;td&gt;RTX 4060 Ti (16 GB)&lt;/td&gt;
&lt;td&gt;$400–$500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13B parameters&lt;/td&gt;
&lt;td&gt;10 GB&lt;/td&gt;
&lt;td&gt;RTX 4070 Ti (16 GB)&lt;/td&gt;
&lt;td&gt;$700–$800&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30–34B parameters&lt;/td&gt;
&lt;td&gt;20 GB&lt;/td&gt;
&lt;td&gt;RTX 4090 (24 GB)&lt;/td&gt;
&lt;td&gt;$1,600–$2,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;70B parameters&lt;/td&gt;
&lt;td&gt;40 GB&lt;/td&gt;
&lt;td&gt;2× RTX 4090 or RTX 5090 (32 GB)&lt;/td&gt;
&lt;td&gt;$2,000–$4,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;70B parameters (FP16)&lt;/td&gt;
&lt;td&gt;140 GB&lt;/td&gt;
&lt;td&gt;2× A100 (80 GB)&lt;/td&gt;
&lt;td&gt;$20,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;405B parameters&lt;/td&gt;
&lt;td&gt;200+ GB&lt;/td&gt;
&lt;td&gt;4× A100 or 8× RTX 4090&lt;/td&gt;
&lt;td&gt;$50,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The RTX 5090, released in January 2025, adds 32 GB of GDDR7 memory with 1.79 TB/s bandwidth — a meaningful upgrade over the RTX 4090's 24 GB and 1.01 TB/s. It delivers roughly 213 tokens/second on 8B models (67% faster than the RTX 4090's 128 tok/s). But at $2,000–$3,800 with limited availability, it is not always easy to buy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Running Costs
&lt;/h3&gt;

&lt;p&gt;Electricity is often underestimated. A single RTX 4090 under sustained inference load draws 350–450W. At the US average of $0.16/kWh:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;24/7 operation:&lt;/strong&gt; ~$40–$55 per month per GPU&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8 hours/day operation:&lt;/strong&gt; ~$13–$18 per month per GPU&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add $5–$15/month for cooling overhead in most setups. For a dual-GPU rig running 70B models around the clock, expect $90–$130/month in electricity alone.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amortized Cost Per Token
&lt;/h3&gt;

&lt;p&gt;Here is where the math gets interesting. Assuming a 3-year hardware amortization:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;Hardware Cost&lt;/th&gt;
&lt;th&gt;Monthly Amortization&lt;/th&gt;
&lt;th&gt;Monthly Electricity&lt;/th&gt;
&lt;th&gt;Throughput&lt;/th&gt;
&lt;th&gt;Effective Cost per 1M Tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RTX 4090 + 8B model (Q4)&lt;/td&gt;
&lt;td&gt;$1,800&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;td&gt;$45&lt;/td&gt;
&lt;td&gt;~330M tokens/day&lt;/td&gt;
&lt;td&gt;~$0.009&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RTX 5090 + 30B model (Q4)&lt;/td&gt;
&lt;td&gt;$3,000&lt;/td&gt;
&lt;td&gt;$83&lt;/td&gt;
&lt;td&gt;$55&lt;/td&gt;
&lt;td&gt;~160M tokens/day&lt;/td&gt;
&lt;td&gt;~$0.028&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2× RTX 4090 + 70B model (Q4)&lt;/td&gt;
&lt;td&gt;$3,600&lt;/td&gt;
&lt;td&gt;$100&lt;/td&gt;
&lt;td&gt;$90&lt;/td&gt;
&lt;td&gt;~80M tokens/day&lt;/td&gt;
&lt;td&gt;~$0.079&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Compare that to GPT-4.1 mini at $0.40/$1.60 per million tokens, or Claude Haiku 4.5 at $1.00/$5.00. On raw per-token cost at scale, self-hosting wins — but only if your GPUs are actually busy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hidden cost of idle hardware:&lt;/strong&gt; If your workload averages 1 million tokens per day on a rig capable of 300 million, you are paying $95/month in fixed costs for a workload that would cost $1–$5/month on a cloud API.&lt;/p&gt;




&lt;h2&gt;
  
  
  Self-Hosting Tools: Ollama vs vLLM vs llama.cpp
&lt;/h2&gt;

&lt;p&gt;Three tools dominate the self-hosting landscape in 2026. Each targets a different use case.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ollama — The Developer's Default
&lt;/h3&gt;

&lt;p&gt;Ollama wraps llama.cpp in a Go-based server with a Docker-like experience. One command pulls and runs models with an OpenAI-compatible API endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Development, prototyping, personal use, privacy-focused workflows, air-gapped environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero-configuration setup — &lt;code&gt;ollama run llama3.3&lt;/code&gt; and you are running&lt;/li&gt;
&lt;li&gt;Automatic quantization and GPU detection&lt;/li&gt;
&lt;li&gt;OpenAI-compatible API (drop-in replacement in most SDKs)&lt;/li&gt;
&lt;li&gt;The 0.17 series (early 2026) added cloud model offloading, web search, multimodal support, streaming tool calls, and thinking models&lt;/li&gt;
&lt;li&gt;Native tool calling support for external API integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Caps at ~4 concurrent requests by default&lt;/li&gt;
&lt;li&gt;~62 tok/s on Llama 3.1 8B (Q4_K_M quantization)&lt;/li&gt;
&lt;li&gt;Not designed for production-scale multi-user serving&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  vLLM — The Production Choice
&lt;/h3&gt;

&lt;p&gt;vLLM's PagedAttention engine manages GPU memory like an operating system manages RAM — paging model weights in and out to maximize throughput under concurrent load.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Production APIs, multi-user serving, high-throughput batch processing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continuous batching aggregates concurrent requests into unified GPU operations&lt;/li&gt;
&lt;li&gt;~485 total tok/s across 10 concurrent requests on Llama 3.1 8B — 16× more throughput than Ollama under load&lt;/li&gt;
&lt;li&gt;Over 35× the request throughput (RPS) compared to llama.cpp at peak load&lt;/li&gt;
&lt;li&gt;Speculative decoding support for faster generation&lt;/li&gt;
&lt;li&gt;OpenAI-compatible serving endpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More complex setup than Ollama&lt;/li&gt;
&lt;li&gt;Requires NVIDIA GPUs (no CPU-only mode)&lt;/li&gt;
&lt;li&gt;Higher minimum memory overhead&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  llama.cpp — The Embedded Option
&lt;/h3&gt;

&lt;p&gt;The pure C/C++ inference engine with no external dependencies. It runs everywhere — from data center GPUs to Android phones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Embedded applications, edge deployment, mobile devices, maximum hardware compatibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs on CPU, Apple Silicon, NVIDIA, AMD, and mobile devices&lt;/li&gt;
&lt;li&gt;Smallest footprint of the three&lt;/li&gt;
&lt;li&gt;4-bit quantization enables Llama 3.2 3B on standard Android devices&lt;/li&gt;
&lt;li&gt;Direct library embedding into native applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No built-in serving layer (you add your own HTTP server)&lt;/li&gt;
&lt;li&gt;Lower throughput than vLLM under concurrent load&lt;/li&gt;
&lt;li&gt;More manual configuration required&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quick Decision Matrix
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Recommended Tool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Developer testing locally&lt;/td&gt;
&lt;td&gt;Ollama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team staging server&lt;/td&gt;
&lt;td&gt;llama.cpp or Ollama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production user-facing API&lt;/td&gt;
&lt;td&gt;vLLM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile/embedded deployment&lt;/td&gt;
&lt;td&gt;llama.cpp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Privacy-first personal assistant&lt;/td&gt;
&lt;td&gt;Ollama&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;For context on how these tools connect to the broader AI tooling ecosystem, see our guide to &lt;a href="https://www.effloow.com/articles/mcp-model-context-protocol-explained-2026" rel="noopener noreferrer"&gt;MCP (Model Context Protocol)&lt;/a&gt; — the emerging standard for how AI tools integrate with external services.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Performance: Latency, Throughput, and Quality
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Latency
&lt;/h3&gt;

&lt;p&gt;Cloud APIs add network round-trip time — typically 50–200ms before the first token, depending on your location and the provider's infrastructure. Self-hosted models on local hardware start generating in 10–50ms.&lt;/p&gt;

&lt;p&gt;For interactive applications where time-to-first-token matters (chat interfaces, code completion, real-time suggestions), local inference has a structural advantage. For batch processing or async workloads, the latency difference is irrelevant.&lt;/p&gt;

&lt;h3&gt;
  
  
  Throughput
&lt;/h3&gt;

&lt;p&gt;Single-user throughput is comparable. A self-hosted 8B model on an RTX 4090 generates ~128 tokens/second — faster than most cloud API streaming responses.&lt;/p&gt;

&lt;p&gt;Multi-user throughput is where cloud APIs pull ahead. OpenAI and Anthropic run inference on massive GPU clusters with load balancing, auto-scaling, and request queuing. Replicating that with self-hosted infrastructure requires significant engineering investment in vLLM configuration, load balancing, and GPU fleet management.&lt;/p&gt;

&lt;h3&gt;
  
  
  Model Quality
&lt;/h3&gt;

&lt;p&gt;This is the elephant in the room. The best open-weight models in 2026 (Llama 3.3 405B, DeepSeek R1, Qwen 3 235B) are competitive with GPT-4.1 and Claude Sonnet on many benchmarks. But frontier models — GPT-5, Claude Opus 4.6, Gemini Ultra — still lead on complex reasoning, long-context tasks, and instruction following.&lt;/p&gt;

&lt;p&gt;If your use case requires frontier-level intelligence, cloud APIs are your only option. If a 70B or 8B model handles your workload well, self-hosting becomes viable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Privacy and Compliance
&lt;/h2&gt;

&lt;p&gt;This is often the strongest argument for self-hosting — and sometimes the only argument that matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  When Self-Hosting Is Required
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Regulated industries:&lt;/strong&gt; Healthcare (HIPAA), finance (SOX, PCI-DSS), and government (FedRAMP) may require that patient data, financial records, or classified information never leave your infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data residency:&lt;/strong&gt; Some jurisdictions require data processing to occur within national borders. Self-hosting on local infrastructure guarantees compliance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped environments:&lt;/strong&gt; Military, critical infrastructure, and some enterprise environments operate without internet access. Cloud APIs are not an option.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive sensitivity:&lt;/strong&gt; If your prompts contain proprietary algorithms, trade secrets, or competitive intelligence, sending them to a third-party API introduces risk — even with data processing agreements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cloud API Privacy Guarantees
&lt;/h3&gt;

&lt;p&gt;Both OpenAI and Anthropic now offer enterprise tiers with zero-data-retention policies, SOC 2 Type II compliance, and contractual guarantees that API inputs are not used for training. For many organizations, these guarantees are sufficient.&lt;/p&gt;

&lt;p&gt;The risk calculus is: do you trust a contractual guarantee, or do you need physical control? The answer depends on your threat model, not on technology.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Our article on &lt;a href="https://www.effloow.com/articles/what-is-vibe-coding-guide-2026" rel="noopener noreferrer"&gt;what vibe coding is&lt;/a&gt; explores how AI-first development workflows handle the security implications of AI-generated code — a related concern when deciding where your AI inference runs.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Hybrid Approach: Best of Both Worlds
&lt;/h2&gt;

&lt;p&gt;The most cost-effective architecture in 2026 for many teams is hybrid: self-host for predictable baseline load, route to cloud APIs for overflow and frontier model access.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Baseline traffic&lt;/strong&gt; (predictable, high-volume, latency-sensitive) routes to self-hosted models via Ollama or vLLM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overflow traffic&lt;/strong&gt; (demand spikes beyond local GPU capacity) routes to cloud APIs automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontier model requests&lt;/strong&gt; (tasks requiring GPT-5 or Claude Opus-level reasoning) always route to cloud APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy-sensitive requests&lt;/strong&gt; (containing PII, regulated data, or trade secrets) always route to self-hosted models.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Implementation Pattern
&lt;/h3&gt;

&lt;p&gt;An OpenAI-compatible router sits in front of both your local vLLM instance and cloud API endpoints. Since Ollama, vLLM, and most cloud providers all expose OpenAI-compatible APIs, your application code does not need to change — the router handles model selection based on request metadata, load, and policy rules.&lt;/p&gt;

&lt;p&gt;One fintech company reported cutting monthly AI spend from $47,000 to $8,000 (83% reduction) by moving predictable workloads to self-hosted infrastructure while keeping frontier model access through cloud APIs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Decision Framework: When to Self-Host vs Use Cloud APIs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use Cloud APIs When:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Your token volume is under 2 million per day&lt;/li&gt;
&lt;li&gt;You need frontier model capabilities (GPT-5, Claude Opus)&lt;/li&gt;
&lt;li&gt;Your team lacks GPU infrastructure expertise&lt;/li&gt;
&lt;li&gt;Your workload is bursty and unpredictable&lt;/li&gt;
&lt;li&gt;You want to iterate on models without hardware commitments&lt;/li&gt;
&lt;li&gt;Time-to-production matters more than per-token cost&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Self-Host When:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Your token volume exceeds 10 million per day consistently&lt;/li&gt;
&lt;li&gt;Privacy or compliance requirements mandate on-premise processing&lt;/li&gt;
&lt;li&gt;Latency to first token is critical (sub-50ms)&lt;/li&gt;
&lt;li&gt;You run an air-gapped or restricted network environment&lt;/li&gt;
&lt;li&gt;A 7B–70B open-weight model meets your quality requirements&lt;/li&gt;
&lt;li&gt;You have (or can hire) infrastructure expertise to maintain the setup&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Go Hybrid When:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You process 3–10 million tokens per day with variable load&lt;/li&gt;
&lt;li&gt;You need both frontier models and privacy guarantees&lt;/li&gt;
&lt;li&gt;You want cost optimization without sacrificing capability&lt;/li&gt;
&lt;li&gt;You are building a product that serves multiple use cases with different requirements&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Break-Even Analysis
&lt;/h2&gt;

&lt;p&gt;The break-even point depends heavily on which cloud model you are replacing and which local model you are running. Here are representative scenarios:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Daily Volume&lt;/th&gt;
&lt;th&gt;Cloud Cost/Month&lt;/th&gt;
&lt;th&gt;Self-Host Cost/Month&lt;/th&gt;
&lt;th&gt;Break-Even&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Replace GPT-4.1 mini with local 8B&lt;/td&gt;
&lt;td&gt;5M tokens/day&lt;/td&gt;
&lt;td&gt;~$300&lt;/td&gt;
&lt;td&gt;~$95 (RTX 4090)&lt;/td&gt;
&lt;td&gt;Month 8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replace Claude Haiku with local 8B&lt;/td&gt;
&lt;td&gt;5M tokens/day&lt;/td&gt;
&lt;td&gt;~$450&lt;/td&gt;
&lt;td&gt;~$95 (RTX 4090)&lt;/td&gt;
&lt;td&gt;Month 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replace GPT-4.1 with local 70B&lt;/td&gt;
&lt;td&gt;10M tokens/day&lt;/td&gt;
&lt;td&gt;~$1,500&lt;/td&gt;
&lt;td&gt;~$190 (2× RTX 4090)&lt;/td&gt;
&lt;td&gt;Month 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replace Claude Sonnet with local 70B&lt;/td&gt;
&lt;td&gt;10M tokens/day&lt;/td&gt;
&lt;td&gt;~$2,700&lt;/td&gt;
&lt;td&gt;~$190 (2× RTX 4090)&lt;/td&gt;
&lt;td&gt;Month 2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;[ESTIMATED] These figures assume sustained daily volumes and standard (non-cached, non-batched) cloud API pricing. Real-world costs vary based on input/output token ratios, caching utilization, and hardware availability.&lt;/p&gt;

&lt;p&gt;For medium-usage teams processing 3–5 million tokens per day, local deployment on consumer hardware typically reaches break-even against cloud API pricing in roughly 3–8 months, depending on which cloud model you are replacing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started: Practical First Steps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you are exploring self-hosting for the first time:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Ollama (&lt;code&gt;curl -fsSL https://ollama.com/install.sh | sh&lt;/code&gt;) and run a small model (&lt;code&gt;ollama run llama3.2&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Test it against your actual workload — not benchmarks, your real prompts.&lt;/li&gt;
&lt;li&gt;Compare output quality honestly against the cloud model you are considering replacing.&lt;/li&gt;
&lt;li&gt;If quality is acceptable, measure your actual daily token volume for a week.&lt;/li&gt;
&lt;li&gt;Run the break-even math with your numbers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;If you are scaling to production:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deploy vLLM with your chosen model on GPU infrastructure.&lt;/li&gt;
&lt;li&gt;Set up an OpenAI-compatible routing layer.&lt;/li&gt;
&lt;li&gt;Start with cloud-only, then gradually shift predictable traffic to self-hosted.&lt;/li&gt;
&lt;li&gt;Monitor quality, latency, and cost continuously.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are using AI tools in your development workflow, our guide on &lt;a href="https://www.effloow.com/articles/how-to-use-claude-code-guide-2026" rel="noopener noreferrer"&gt;how to use Claude Code&lt;/a&gt; covers practical workflows for AI-assisted coding — whether the models run locally or in the cloud.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Self-hosting LLMs in 2026 is mature, practical, and cost-effective — at the right scale. The tools are production-ready. The models are capable. The hardware is accessible.&lt;/p&gt;

&lt;p&gt;But cloud APIs are also better and cheaper than ever. The 4.5/4.6 generation of Claude models represents a 67% cost reduction over previous generations. OpenAI's GPT-4.1 nano costs $0.10 per million input tokens. At low to moderate volumes, cloud APIs win on total cost of ownership because you never pay for idle hardware.&lt;/p&gt;

&lt;p&gt;The right answer for most teams in 2026 is not "self-host everything" or "use cloud for everything." It is a deliberate hybrid architecture that routes each request to the most cost-effective and appropriate inference backend based on volume, quality requirements, privacy constraints, and latency needs.&lt;/p&gt;

&lt;p&gt;Start with cloud APIs. Measure your actual usage. When the numbers justify it — and only then — add self-hosted infrastructure for your predictable, high-volume workloads. Keep cloud access for frontier models and demand spikes. That is the architecture that optimizes for cost, capability, and flexibility simultaneously.&lt;/p&gt;

</description>
      <category>llm</category>
      <category>ai</category>
      <category>selfhosted</category>
      <category>devops</category>
    </item>
    <item>
      <title>Best AI Testing Tools 2026: Developer Guide to Automated QA</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Tue, 07 Apr 2026 06:56:50 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/best-ai-testing-tools-2026-developer-guide-to-automated-qa-2fa2</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/best-ai-testing-tools-2026-developer-guide-to-automated-qa-2fa2</guid>
      <description>&lt;h1&gt;
  
  
  Best AI Testing Tools 2026: Developer Guide to Automated QA
&lt;/h1&gt;

&lt;p&gt;Software testing is changing faster than any other part of the development workflow. In 2024, "AI testing" mostly meant auto-generated unit tests and flaky Selenium scripts patched with retry logic. In 2026, we have agentic testers that navigate your application autonomously, self-healing tests that survive UI redesigns without human intervention, and AI-powered visual validation that catches regressions the human eye would miss.&lt;/p&gt;

&lt;p&gt;The shift matters because traditional test automation has a well-known scaling problem: as your application grows, test maintenance costs grow faster. Teams end up spending more time fixing broken tests than writing new features. Self-healing tests and agentic QA directly attack this problem by reducing the maintenance burden — sometimes dramatically.&lt;/p&gt;

&lt;p&gt;This guide compares the leading AI testing tools available in 2026, focusing on what developers actually care about: how well the AI works, how it fits into CI/CD pipelines, and whether it actually reduces the time you spend on QA. No affiliate links — just a practical comparison based on publicly available features and documentation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For related tooling comparisons, see our guide to the &lt;a href="https://www.effloow.com/best-ai-code-review-tools-2026" rel="noopener noreferrer"&gt;best AI code review tools in 2026&lt;/a&gt; and our comprehensive &lt;a href="https://www.effloow.com/best-ai-coding-agents-2026" rel="noopener noreferrer"&gt;AI coding agents comparison&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Changed in AI Testing for 2026
&lt;/h2&gt;

&lt;p&gt;Before diving into individual tools, it helps to understand the three major shifts that define AI testing in 2026:&lt;/p&gt;

&lt;h3&gt;
  
  
  Agentic Testing
&lt;/h3&gt;

&lt;p&gt;Instead of recording test scripts step-by-step, agentic testers accept natural language goals — like "verify a user can complete checkout" — and figure out the navigation path themselves. This is fundamentally different from traditional record-and-playback automation because the AI adapts to UI changes without brittle selectors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Self-Healing Tests
&lt;/h3&gt;

&lt;p&gt;Self-healing goes beyond simple locator fallbacks. Modern tools use multi-attribute element tracking, visual recognition, and semantic understanding to maintain test stability even when the DOM structure changes significantly. The best implementations distinguish between intentional UI changes (which should update the test) and bugs (which should fail the test).&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP and IDE Integration
&lt;/h3&gt;

&lt;p&gt;Several tools now support Model Context Protocol (MCP) servers, embedding testing capabilities directly into your IDE and AI coding assistant. This means you can generate, run, and debug tests without leaving your editor — a significant workflow improvement. For more on MCP, see our &lt;a href="https://www.effloow.com/mcp-model-context-protocol-explained-2026" rel="noopener noreferrer"&gt;MCP explainer&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Contenders
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Primary Strength&lt;/th&gt;
&lt;th&gt;Self-Healing&lt;/th&gt;
&lt;th&gt;Free Tier&lt;/th&gt;
&lt;th&gt;Starting Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TestSprite&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Autonomous agentic testing&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;150 credits/mo&lt;/td&gt;
&lt;td&gt;$19/mo (Starter)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mabl&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Enterprise self-healing QA&lt;/td&gt;
&lt;td&gt;Yes (Adaptive Auto-Healing)&lt;/td&gt;
&lt;td&gt;14-day trial&lt;/td&gt;
&lt;td&gt;Custom pricing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qase AIDEN&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI test management + generation&lt;/td&gt;
&lt;td&gt;Via agentic mode&lt;/td&gt;
&lt;td&gt;Included in paid plans&lt;/td&gt;
&lt;td&gt;Credit-based ($0.40/credit overage)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Katalon&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All-in-one test platform&lt;/td&gt;
&lt;td&gt;AI-assisted&lt;/td&gt;
&lt;td&gt;Free plan available&lt;/td&gt;
&lt;td&gt;From $84/mo (new customer promo)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Applitools&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Visual AI regression testing&lt;/td&gt;
&lt;td&gt;N/A (visual focus)&lt;/td&gt;
&lt;td&gt;100 checkpoints/mo&lt;/td&gt;
&lt;td&gt;Custom pricing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  TestSprite
&lt;/h2&gt;

&lt;p&gt;TestSprite is a pure agentic testing platform — it generates, executes, and analyzes test cases without manual scripting. You point it at your application, and the AI handles the rest: crawling your UI, identifying test scenarios, running tests across browsers, and classifying failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;TestSprite's AI agent reads your application's UI, generates test cases covering user journeys, then executes them in the cloud. When tests fail, the platform classifies failures into categories — broken dependency, slow page load, application bug, or selector change — and suggests specific fixes. It also supports scheduled re-verification to catch regressions continuously.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One-click full-stack coverage&lt;/strong&gt; — Simultaneously generates frontend and backend tests from a single entry point. No manual test case writing required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Server integration&lt;/strong&gt; — TestSprite offers an MCP server that plugs directly into your IDE and coding assistant. It reads your product requirements, analyzes your codebase, and generates tests within your development workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligent failure classification&lt;/strong&gt; — Rather than just reporting "test failed," TestSprite categorizes failures and suggests fixes. This reduces triage time significantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual test editor&lt;/strong&gt; — Edit test interactions through a visual interface. Useful for non-technical team members who need to adjust test flows without touching code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduled monitoring&lt;/strong&gt; — Automatically re-runs tests on a schedule to detect regressions between deployments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free&lt;/strong&gt;: 150 credits/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Starter&lt;/strong&gt;: $19/month (400 credits)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standard&lt;/strong&gt;: $69/month (1,600 credits)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise&lt;/strong&gt;: Custom pricing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Credits are consumed per test action, but TestSprite does not publish a detailed credit-per-action breakdown. This makes cost prediction difficult before you start using the platform — request a demo to understand credit consumption for your specific test volume.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;p&gt;Teams building with AI coding tools (like &lt;a href="https://www.effloow.com/how-to-use-claude-code-guide-2026" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; or &lt;a href="https://www.effloow.com/what-is-vibe-coding-guide-2026" rel="noopener noreferrer"&gt;vibe coding workflows&lt;/a&gt;) who want automated test coverage without writing test scripts. The MCP integration makes it particularly appealing for developers already using AI coding assistants.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mabl
&lt;/h2&gt;

&lt;p&gt;Mabl is the most established AI-native testing platform in this category. It combines browser-based test recording with AI-powered auto-healing, making it a strong choice for teams that need enterprise reliability and deep CI/CD integration. Mabl covers web, mobile, and API testing from a single platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;You create tests by recording browser interactions or writing them in Mabl's low-code editor. Once created, Mabl's AI continuously monitors tests and automatically heals them when UI changes break selectors. The platform uses multiple ML models to track elements across attributes — not just a single ID or class name — so tests survive refactors that would break traditional Selenium scripts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Adaptive Auto-Healing&lt;/strong&gt; — Mabl's headline feature. It uses a combination of machine learning and GenAI to autonomously update tests when UI elements change. The platform claims to reduce test maintenance by up to 85%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-model AI approach&lt;/strong&gt; — Combines traditional ML element tracking with GenAI visual element identification. This hybrid approach handles scenarios where DOM locators are scarce or unreliable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Vectorization&lt;/strong&gt; — Creates semantic embeddings across all test assets, enabling discovery of duplicate tests, coverage gaps, and Test Impact Analysis. This is useful for large test suites where teams lose track of what is already covered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unified platform&lt;/strong&gt; — Web, mobile, API, and accessibility testing in one tool. Reduces the need to stitch together multiple testing services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native CI/CD integration&lt;/strong&gt; — Integrates with GitHub Actions, Jenkins, CircleCI, GitLab CI, Azure DevOps, and other major CI/CD platforms out of the box.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Mabl uses custom pricing — you need to request a quote. There is a 14-day free trial to evaluate the platform. Based on public reports, Mabl is positioned as an enterprise tool and pricing reflects that: expect it to cost significantly more than TestSprite or Katalon's entry plans.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;p&gt;Mid-to-large engineering teams with existing test suites that suffer from maintenance overhead. Mabl is particularly strong when you need to maintain hundreds of UI tests across frequent releases and want the AI to handle the breakage automatically. If your team already does browser-based test recording but spends too much time fixing broken selectors, Mabl directly addresses that pain point.&lt;/p&gt;




&lt;h2&gt;
  
  
  Qase AIDEN
&lt;/h2&gt;

&lt;p&gt;Qase is primarily a test management platform — think of it as the Jira of QA. AIDEN is Qase's AI layer that adds test generation, automated conversion, and agentic execution on top of the management features. This combination is unique: instead of being a standalone AI testing tool, AIDEN enhances your existing test management workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;AIDEN operates in several modes. In Agentic Mode, you describe a goal in natural language — "Verify a user can purchase shoes on our marketplace" — and AIDEN breaks it into actionable steps, executes them against your application, takes screenshots at each step, and generates test code in your preferred language. For existing manual test cases, AIDEN reviews them for automation readiness, highlights missing data or unclear steps, and converts them to automated scripts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agentic Mode&lt;/strong&gt; — Natural language to automated test execution. AIDEN interprets your goal, navigates the application, and provides visual feedback (screenshots) for every action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart test conversion&lt;/strong&gt; — Reviews manual test cases and converts them to automated scripts. For parameterized tests, AIDEN identifies the data structure, extracts input combinations, and generates individual execution instances automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canvas UI testing&lt;/strong&gt; — AIDEN now supports Canvas-based UIs, interpreting visual elements within HTML canvas just like standard DOM elements. This opens up testing for complex visual applications (diagram editors, design tools, games) that traditional automation tools cannot handle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Server integration&lt;/strong&gt; — Qase offers an MCP server that connects AI assistants to your testing system, bringing test generation into the development workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built into all paid plans&lt;/strong&gt; — No separate purchase required. AIDEN credits are included in every Qase paid subscription.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;AIDEN is available on all Qase paid plans via a credit system. Each plan includes a monthly credit allowance. Overage credits cost $0.40 each. Credits do not roll over. You can set a monthly spending cap to prevent unexpected charges.&lt;/p&gt;

&lt;p&gt;Qase's Startup plan includes 500 AIDEN credits per month. Business and Enterprise credit allocations vary — check Qase's pricing page for current details.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;p&gt;Teams that need both test management and AI-powered test generation in one platform. If your organization already tracks test cases manually and wants to automate them gradually, Qase + AIDEN provides a smoother migration path than adopting a standalone AI testing tool. The Canvas UI testing support also makes it a strong pick for teams building visual applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Katalon
&lt;/h2&gt;

&lt;p&gt;Katalon is an all-in-one test automation platform that bridges the gap between no-code test recording and full scripting. It covers web, mobile, desktop, and API testing — making it the broadest platform in this comparison. Katalon has added AI features (branded as TrueTest) to its established automation capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;Katalon provides both a low-code recorder and a full scripting IDE (based on Groovy/Java). Tests can be created visually, then extended with code when needed. TrueTest, Katalon's AI feature, records real user interactions in production to generate regression tests automatically — an approach that ensures your tests reflect actual user behavior rather than imagined scenarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TrueTest AI regression testing&lt;/strong&gt; — Uses AI to observe real user sessions and generate automated test scripts from them. This produces tests that cover actual user paths rather than developer assumptions about how the application is used.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual-mode authoring&lt;/strong&gt; — Start with no-code recording, then drop into code when you need more control. This makes Katalon accessible to QA engineers who don't code heavily while still supporting developers who want full scripting power.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-platform coverage&lt;/strong&gt; — Web, mobile, desktop, and API testing from one tool. Few competitors match this breadth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI visual testing&lt;/strong&gt; — Built-in visual regression testing powered by AI, though less sophisticated than Applitools' dedicated visual AI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-healing via StealthMode&lt;/strong&gt; — Katalon's AI-powered element locator strategy attempts to identify elements through multiple attributes. Not as advanced as Mabl's auto-healing, but functional for routine UI changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free&lt;/strong&gt;: Basic automation for individuals/small teams&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Premium&lt;/strong&gt;: $84/month per user (billed annually at $1,000/year promo for new customers; regular price $229/month)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ultimate&lt;/strong&gt;: Custom pricing for enterprise features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Katalon's pricing is per-user, which can add up quickly for larger teams. The free plan is genuinely useful for small projects or learning the platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;p&gt;Teams that want a single platform covering all testing types (web, mobile, API, desktop) and prefer a gradual transition from manual to automated testing. Katalon is the most pragmatic choice if you need broad coverage without committing to a specialized AI-first tool. The TrueTest feature is particularly valuable for teams that want to generate tests from real user behavior rather than writing them from scratch.&lt;/p&gt;




&lt;h2&gt;
  
  
  Applitools
&lt;/h2&gt;

&lt;p&gt;Applitools takes a different approach from every other tool on this list: it focuses exclusively on visual testing. Rather than generating or healing functional test scripts, Applitools uses Visual AI to detect visual regressions — layout shifts, missing elements, color changes, responsive breakdowns — that functional tests typically miss entirely.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;Applitools integrates with your existing test framework (Selenium, Cypress, Playwright, Appium, or any major automation tool). You add visual checkpoints to your tests, and Applitools' AI compares screenshots against baselines. The Visual AI mimics human perception: it ignores irrelevant pixel-level differences (like anti-aliasing) while catching meaningful visual changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visual AI engine&lt;/strong&gt; — Applitools' core technology. It understands visual intent rather than comparing pixels. This dramatically reduces false positives compared to traditional screenshot diffing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ultrafast Grid&lt;/strong&gt; — Parallelized cross-browser and cross-device rendering. Run visual tests across dozens of browser/viewport combinations without maintaining separate browser farms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autonomous testing&lt;/strong&gt; — Applitools Autonomous combines visual and functional testing with AI-driven test creation, expanding beyond pure visual regression.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Root Cause Analysis&lt;/strong&gt; — AI-powered analysis that identifies the underlying cause of visual differences (CSS change, DOM structure change, content change), helping developers fix issues faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework agnostic&lt;/strong&gt; — Works with Selenium, Cypress, Playwright, Appium, Storybook, and more. It layers on top of whatever automation framework you already use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free&lt;/strong&gt;: 100 visual checkpoints/month (permanently free)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paid tiers&lt;/strong&gt;: Custom pricing based on test units. Contact Applitools for quotes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pricing uses a "test unit" model. In Autonomous mode, monthly active tests count against units; in Eyes mode, pages count against units. Test units are interchangeable between products.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;p&gt;Teams that already have functional test automation but keep getting bitten by visual regressions — broken layouts, missing CSS, responsive issues. Applitools doesn't replace your existing test framework; it augments it with a visual safety net. Particularly valuable for design-heavy applications, component libraries, and teams practicing &lt;a href="https://www.effloow.com/what-is-vibe-coding-guide-2026" rel="noopener noreferrer"&gt;vibe coding&lt;/a&gt; where rapid UI changes need continuous visual validation.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Choose: Decision Framework
&lt;/h2&gt;

&lt;p&gt;The "best" tool depends on your specific situation. Here is a practical decision framework:&lt;/p&gt;

&lt;h3&gt;
  
  
  You have no existing test automation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Start with TestSprite or Qase AIDEN.&lt;/strong&gt; Both offer agentic approaches that generate tests from scratch without requiring you to write scripts. TestSprite is more autonomous (point-and-generate), while Qase AIDEN gives you better test management infrastructure alongside the AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  You have existing tests that keep breaking
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose Mabl.&lt;/strong&gt; Its Adaptive Auto-Healing is purpose-built for this problem. Mabl's multi-model AI approach to element tracking is the most sophisticated self-healing implementation available. If your team spends more time maintaining tests than writing features, Mabl pays for itself in maintenance reduction.&lt;/p&gt;

&lt;h3&gt;
  
  
  You need to cover web, mobile, API, and desktop
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose Katalon.&lt;/strong&gt; No other tool on this list matches its breadth of platform coverage. The TrueTest feature for generating tests from real user behavior is a bonus. Katalon is the pragmatic choice when you need one tool that does everything adequately rather than one tool that does one thing exceptionally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your functional tests pass but users report visual bugs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Add Applitools&lt;/strong&gt; to your existing test suite. It layers on top of whatever framework you use and catches the category of bugs that functional assertions miss entirely. The free tier with 100 checkpoints/month is enough to evaluate whether visual AI testing catches real issues for your application.&lt;/p&gt;

&lt;h3&gt;
  
  
  You are building with AI coding tools and want testing in your IDE
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;TestSprite or Qase AIDEN&lt;/strong&gt; with MCP integration. Both offer MCP servers that plug testing into your development workflow alongside your &lt;a href="https://www.effloow.com/best-ai-coding-agents-2026" rel="noopener noreferrer"&gt;AI coding agent&lt;/a&gt;. This is particularly relevant for developers using &lt;a href="https://www.effloow.com/how-to-use-claude-code-guide-2026" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; or similar tools where the IDE is the primary working environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  CI/CD Integration Comparison
&lt;/h2&gt;

&lt;p&gt;All five tools integrate with major CI/CD platforms, but the depth varies:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;GitHub Actions&lt;/th&gt;
&lt;th&gt;Jenkins&lt;/th&gt;
&lt;th&gt;GitLab CI&lt;/th&gt;
&lt;th&gt;Azure DevOps&lt;/th&gt;
&lt;th&gt;API/CLI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TestSprite&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;REST API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mabl&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;CLI + API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qase AIDEN&lt;/td&gt;
&lt;td&gt;Via API&lt;/td&gt;
&lt;td&gt;Via API&lt;/td&gt;
&lt;td&gt;Via API&lt;/td&gt;
&lt;td&gt;Via API&lt;/td&gt;
&lt;td&gt;REST API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Katalon&lt;/td&gt;
&lt;td&gt;Plugin&lt;/td&gt;
&lt;td&gt;Plugin&lt;/td&gt;
&lt;td&gt;Plugin&lt;/td&gt;
&lt;td&gt;Plugin&lt;/td&gt;
&lt;td&gt;CLI (katalon)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applitools&lt;/td&gt;
&lt;td&gt;SDK-based&lt;/td&gt;
&lt;td&gt;SDK-based&lt;/td&gt;
&lt;td&gt;SDK-based&lt;/td&gt;
&lt;td&gt;SDK-based&lt;/td&gt;
&lt;td&gt;Eyes SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mabl has the deepest native CI/CD integration — it was designed as a CI/CD-first platform. Applitools integrates at the SDK level through your existing test framework, which means CI/CD integration depends on your underlying automation tool. TestSprite and Qase focus more on API-driven integration.&lt;/p&gt;




&lt;h2&gt;
  
  
  Self-Healing: How the Approaches Differ
&lt;/h2&gt;

&lt;p&gt;Self-healing is a headline feature for several tools, but implementations vary significantly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mabl&lt;/strong&gt; uses multi-attribute element tracking combined with GenAI visual identification. It maintains a history of how elements change over time and uses that context to make healing decisions. This is the most mature implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TestSprite&lt;/strong&gt; takes an agentic approach — rather than healing fixed scripts, it regenerates test paths autonomously. When the UI changes, TestSprite re-navigates the application rather than patching selectors. This is a fundamentally different philosophy: instead of healing the old test, it creates a new path to the same goal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Katalon&lt;/strong&gt; offers StealthMode locator strategies that try multiple element identification approaches, but this is closer to "resilient locators" than true self-healing. It works for routine changes but may struggle with significant UI refactors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qase AIDEN&lt;/strong&gt; handles UI changes through its agentic mode — like TestSprite, it navigates based on goals rather than fixed element paths. The distinction is that AIDEN is more focused on test generation and management, while TestSprite is built specifically for autonomous execution.&lt;/p&gt;




&lt;h2&gt;
  
  
  What AI Testing Tools Cannot Do (Yet)
&lt;/h2&gt;

&lt;p&gt;These tools are impressive, but it is important to understand their limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complex business logic validation&lt;/strong&gt; — AI testers excel at UI navigation and visual checks but struggle with deeply contextual business rules. A test that verifies "order total includes the correct tax rate for the user's jurisdiction after applying a coupon with a minimum spend requirement" still needs human-authored assertions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance testing at scale&lt;/strong&gt; — While some tools offer basic performance checks (page load times, response times), none replace dedicated performance testing tools for load testing or stress testing scenarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security testing&lt;/strong&gt; — AI testing tools focus on functional and visual correctness. They are not substitutes for security scanning tools, penetration testing, or SAST/DAST analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge cases from domain expertise&lt;/strong&gt; — The AI generates tests based on observable UI patterns. It cannot know about edge cases that require domain expertise ("what happens when a user's subscription expires mid-checkout during a timezone transition?"). These still need manual test design.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;If you are new to AI-powered testing, here is a practical starting path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pick one tool and one application.&lt;/strong&gt; Do not try to evaluate all five tools simultaneously. Choose the one that best matches your primary pain point from the decision framework above.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start with a critical user journey.&lt;/strong&gt; Choose your application's most important flow (signup, checkout, core feature) and use the AI tool to generate tests for that flow. This gives you a concrete baseline for evaluating the tool's accuracy and usefulness.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integrate with CI/CD early.&lt;/strong&gt; The value of AI testing compounds when tests run automatically on every push. Set up the CI/CD integration in your first week, not after you have a full test suite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compare AI-generated tests against your existing tests.&lt;/strong&gt; If you have manual test cases, compare what the AI generates against what your team wrote. Where the AI misses things, you learn the tool's limitations. Where the AI catches things your team missed, you find immediate value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Measure maintenance time, not just coverage.&lt;/strong&gt; The primary value proposition of AI testing is reduced maintenance, not higher coverage numbers. Track how many tests break per release and how long they take to fix — that is the metric that determines ROI.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For teams already using AI in other parts of the development workflow — &lt;a href="https://www.effloow.com/best-ai-coding-agents-2026" rel="noopener noreferrer"&gt;AI coding agents&lt;/a&gt;, &lt;a href="https://www.effloow.com/best-ai-code-review-tools-2026" rel="noopener noreferrer"&gt;AI code review&lt;/a&gt;, &lt;a href="https://www.effloow.com/cursor-vs-windsurf-vs-github-copilot-2026" rel="noopener noreferrer"&gt;AI-first IDEs&lt;/a&gt; — adding AI testing is the logical next step toward a fully AI-augmented development pipeline.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;AI testing tools in 2026 have moved well beyond the experimental phase. TestSprite and Qase AIDEN represent the agentic future — tools that generate and execute tests autonomously from natural language goals. Mabl leads in self-healing reliability for teams with established test suites. Katalon provides the broadest platform coverage for teams that need one tool to rule them all. And Applitools remains unmatched for visual regression testing.&lt;/p&gt;

&lt;p&gt;The common thread across all these tools: they reduce the maintenance burden that makes traditional test automation unsustainable at scale. Whether you are starting from zero or drowning in flaky tests, the right AI testing tool can fundamentally change your team's relationship with QA.&lt;/p&gt;

&lt;p&gt;Choose based on your biggest pain point, start with a focused evaluation, and measure maintenance reduction — not just test count. That is how you find real value in AI-powered testing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>automation</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Build Your First Multi-Agent System with OpenAI Agents SDK — Step-by-Step Python Tutorial (2026)</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Sun, 05 Apr 2026 15:06:29 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/build-your-first-multi-agent-system-with-openai-agents-sdk-step-by-step-python-tutorial-2026-2n79</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/build-your-first-multi-agent-system-with-openai-agents-sdk-step-by-step-python-tutorial-2026-2n79</guid>
      <description>&lt;h1&gt;
  
  
  Build Your First Multi-Agent System with OpenAI Agents SDK — Step-by-Step Python Tutorial (2026)
&lt;/h1&gt;

&lt;p&gt;You have heard the buzz around AI agents. You have probably built a single-agent chatbot. But real-world automation needs &lt;strong&gt;multiple agents working together&lt;/strong&gt; — one to research, one to write, one to review and catch mistakes.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;OpenAI Agents SDK&lt;/strong&gt; makes this surprisingly straightforward. In this tutorial, you will build a complete multi-agent content pipeline: a Research Agent gathers information, a Writer Agent drafts content, and a Reviewer Agent validates quality with guardrails. All orchestrated through handoffs, running in under 100 lines of core logic.&lt;/p&gt;

&lt;p&gt;By the end, you will understand every building block — Agent, Runner, Handoff, and Guardrails — and have a working system you can adapt to your own projects.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What you will build:&lt;/strong&gt; A three-agent content pipeline where agents hand off work to each other automatically. The Research Agent finds information, the Writer Agent creates a draft, and the Reviewer Agent enforces quality standards using guardrails.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Is the OpenAI Agents SDK?
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;OpenAI Agents SDK&lt;/strong&gt; is an open-source Python framework for building multi-agent AI systems. Originally developed as a successor to the experimental Swarm library, it provides production-ready primitives for creating agents that can use tools, delegate work to each other, and enforce safety checks — all with minimal boilerplate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key characteristics:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python (3.10+)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Current version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.13.4 (April 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLM support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI models natively, 100+ models via LiteLLM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core primitives&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent, Runner, Handoff, Guardrails, Tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Install size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lightweight — Pydantic and Requests as main dependencies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Unlike heavier frameworks that require you to learn complex graph abstractions, the OpenAI Agents SDK keeps things Pythonic. You define agents as objects, wire them together with handoffs, and run them with a single &lt;code&gt;Runner.run()&lt;/code&gt; call.&lt;/p&gt;

&lt;p&gt;If you have worked with the &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;LangGraph framework&lt;/a&gt; (covered in our previous tutorial), the Agents SDK takes a different philosophy: less explicit graph construction, more implicit orchestration through handoffs and tool calls.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before we start building, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.10 or higher&lt;/strong&gt; (the SDK requires 3.10+, supports up to 3.14)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An OpenAI API key&lt;/strong&gt; with access to GPT-4o or later models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic Python knowledge&lt;/strong&gt; — functions, classes, async/await&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A terminal&lt;/strong&gt; and a code editor&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;Create a project directory and set up a virtual environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;multi-agent-pipeline &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;multi-agent-pipeline
python &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate  &lt;span class="c"&gt;# On Windows: venv\Scripts\activate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the SDK with a pinned version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;openai-agents&lt;span class="o"&gt;==&lt;/span&gt;0.13.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a &lt;code&gt;requirements.txt&lt;/code&gt; for reproducibility:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openai-agents==0.13.4
pydantic&amp;gt;=2.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  API Key Setup
&lt;/h3&gt;

&lt;p&gt;Set your OpenAI API key as an environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sk-your-key-here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or create a &lt;code&gt;.env&lt;/code&gt; file (never commit this to version control):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OPENAI_API_KEY=sk-your-key-here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cost note:&lt;/strong&gt; This tutorial uses &lt;code&gt;gpt-4o-mini&lt;/code&gt; for most agents to keep costs low. A full pipeline run typically consumes 3,000–8,000 tokens. At current pricing (approximately $0.15 per 1M input tokens and $0.60 per 1M output tokens for gpt-4o-mini), each run costs well under $0.01. We break down real costs in the cost analysis section below.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Core Concepts: Agent, Runner, Handoff, Guardrails
&lt;/h2&gt;

&lt;p&gt;Before writing code, let us understand the four building blocks. These are the only concepts you need to build sophisticated multi-agent systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent
&lt;/h3&gt;

&lt;p&gt;An &lt;strong&gt;Agent&lt;/strong&gt; is an LLM equipped with instructions and tools. Think of it as a specialized worker with a clear job description.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;

&lt;span class="n"&gt;research_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a research specialist. Find accurate, up-to-date information on any topic.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;name&lt;/code&gt; — Human-readable identifier&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;instructions&lt;/code&gt; — The system prompt that defines the agent's behavior&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;model&lt;/code&gt; — Which LLM to use&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tools&lt;/code&gt; — Functions the agent can call&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;handoffs&lt;/code&gt; — Other agents it can delegate to&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;output_type&lt;/code&gt; — Pydantic model for structured output&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Runner
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Runner&lt;/strong&gt; executes agents. It manages the agent loop: call the LLM, process tool calls, handle handoffs, and repeat until the agent produces a final output.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_sync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What is retrieval-augmented generation?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;final_output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three execution modes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Use case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Runner.run()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Async execution (recommended for production)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Runner.run_sync()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Synchronous wrapper (simpler for scripts)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Runner.run_streamed()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Async with streaming events&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Handoff
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;Handoff&lt;/strong&gt; lets one agent delegate work to another. Under the hood, handoffs appear as tools to the LLM — when the triage agent decides to hand off to the writer, it calls a &lt;code&gt;transfer_to_writer_agent&lt;/code&gt; tool.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;triage_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Triage Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Route research requests to the Research Agent, writing tasks to the Writer Agent.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;handoffs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Guardrails
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Guardrails&lt;/strong&gt; validate inputs and outputs. They can run in parallel with agent execution (for speed) or block execution until validation passes (for safety).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;input_guardrail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GuardrailFunctionOutput&lt;/span&gt;

&lt;span class="nd"&gt;@input_guardrail&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_topic_safety&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Validate the input before the agent processes it
&lt;/span&gt;    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;  &lt;span class="c1"&gt;# Your validation logic
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;GuardrailFunctionOutput&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;output_info&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;safe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;tripwire_triggered&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Project Structure
&lt;/h2&gt;

&lt;p&gt;Here is what we are building:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;multi-agent-pipeline/
├── requirements.txt
├── agents/
│   ├── __init__.py
│   ├── research_agent.py
│   ├── writer_agent.py
│   └── reviewer_agent.py
├── tools/
│   ├── __init__.py
│   └── search_tools.py
├── guardrails/
│   ├── __init__.py
│   └── quality_checks.py
├── main.py
└── run_pipeline.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let us build each piece step by step.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building Agent #1: The Research Agent
&lt;/h2&gt;

&lt;p&gt;The Research Agent's job is to gather information on a given topic. We will give it a web search tool and structured output so downstream agents get clean data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Define the Output Schema
&lt;/h3&gt;

&lt;p&gt;First, define what the Research Agent should return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# agents/research_agent.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;function_tool&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ResearchResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Structured output from the Research Agent.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The researched topic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A 2-3 paragraph summary of findings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;key_facts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5-8 key facts discovered&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sources_note&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Note about information sources and currency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create the Search Tool
&lt;/h3&gt;

&lt;p&gt;The Research Agent needs a tool to search for information. Here we create a simulated search tool — in production, you would connect this to a real search API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# tools/search_tools.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;function_tool&lt;/span&gt;


&lt;span class="nd"&gt;@function_tool&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;web_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Search the web for information on a given query.

    Args:
        query: The search query to look up.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# In production, connect to a real search API (Brave, Serper, Tavily, etc.)
&lt;/span&gt;    &lt;span class="c1"&gt;# For this tutorial, the agent will use its training knowledge
&lt;/span&gt;    &lt;span class="c1"&gt;# and note that results should be verified.
&lt;/span&gt;    &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Search results for: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Note: In production, this would return real search results. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The agent should use its knowledge and clearly mark any claims &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;that need verification.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nd"&gt;@function_tool&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;save_research_notes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;notes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Save research notes for a topic.

    Args:
        topic: The topic being researched.
        notes: The research notes to save.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# In production, persist to a database or file
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research notes saved for topic: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Assemble the Research Agent
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# agents/research_agent.py (continued)
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;tools.search_tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;web_search&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;save_research_notes&lt;/span&gt;

&lt;span class="n"&gt;research_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You are an expert research analyst. Your job is to gather
accurate, comprehensive information on any given topic.

Rules:
- Search for the topic using the web_search tool
- Compile findings into a structured format
- Include 5-8 key facts with specific details
- Note the currency and reliability of information
- If you cannot verify a claim, mark it as [UNVERIFIED]
- Never fabricate statistics or quotes&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;web_search&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;save_research_notes&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;output_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ResearchResult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Test It Standalone
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_sync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research the current state of multi-agent AI systems in 2026&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Topic: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;final_output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summary: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;final_output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;fact&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;final_output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;key_facts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  • &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fact&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Using &lt;code&gt;output_type=ResearchResult&lt;/code&gt; forces the agent to return a Pydantic model instead of free text. This is critical for multi-agent pipelines — downstream agents receive predictable, typed data instead of parsing unstructured strings. The SDK handles JSON schema generation and validation automatically.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Building Agent #2: The Writer Agent
&lt;/h2&gt;

&lt;p&gt;The Writer Agent takes research output and produces a well-structured draft. It receives the Research Agent's structured output as its input context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Define the Writer Output
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# agents/writer_agent.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;WriterOutput&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Structured output from the Writer Agent.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Article title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The full article draft in markdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;word_count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Approximate word count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sections&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List of section headings used&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Assemble the Writer Agent
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# agents/writer_agent.py (continued)
&lt;/span&gt;
&lt;span class="n"&gt;writer_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Writer Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You are a skilled technical writer. Your job is to take
research findings and produce a well-structured, engaging article draft.

Rules:
- Write in a clear, practical tone suitable for developers
- Use markdown formatting with proper headings (##, ###)
- Include code examples where relevant
- Target 800-1200 words for the draft
- Structure: Introduction → Main Sections → Practical Takeaways → Conclusion
- Never fabricate quotes, statistics, or case studies
- If the research notes something as [UNVERIFIED], keep that marker&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;output_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;WriterOutput&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the Writer Agent has no tools — it is a pure text generation agent. Not every agent needs tools. The Writer focuses entirely on transforming structured research into polished prose.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building Agent #3: The Reviewer Agent with Guardrails
&lt;/h2&gt;

&lt;p&gt;The Reviewer Agent is our quality gate. It checks the draft for accuracy, completeness, and quality issues. This is where guardrails shine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Define Quality Check Guardrails
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# guardrails/quality_checks.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;output_guardrail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GuardrailFunctionOutput&lt;/span&gt;


&lt;span class="nd"&gt;@output_guardrail&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_no_fabrication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Check that the output does not contain fabricated data markers.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;draft_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;draft&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;hasattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;draft&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;fabrication_markers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;according to a study&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# vague attribution without source
&lt;/span&gt;        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research shows that 99%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# suspicious round statistics
&lt;/span&gt;        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;as John Smith, CEO&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# likely fabricated quotes
&lt;/span&gt;    &lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;issues&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;marker&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;fabrication_markers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;marker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;draft_text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="n"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Potential fabrication detected: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;marker&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;GuardrailFunctionOutput&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;output_info&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;issues&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;passed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;tripwire_triggered&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nd"&gt;@output_guardrail&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_minimum_length&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Ensure the draft meets minimum word count.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;draft_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;draft&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;hasattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;draft&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;word_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;draft_text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;GuardrailFunctionOutput&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;output_info&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;word_count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;word_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;minimum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;tripwire_triggered&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;word_count&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Define the Review Output
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# agents/reviewer_agent.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;guardrails.quality_checks&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;check_no_fabrication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;check_minimum_length&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ReviewResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Structured output from the Reviewer Agent.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;approved&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Whether the draft passes review&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Quality score from 1-10&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;feedback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List of feedback items&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;final_draft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The approved or revised draft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Assemble the Reviewer Agent
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# agents/reviewer_agent.py (continued)
&lt;/span&gt;
&lt;span class="n"&gt;reviewer_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reviewer Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You are a meticulous content reviewer and editor. Your job
is to evaluate article drafts for quality, accuracy, and completeness.

Review checklist:
1. Factual accuracy — flag any claims that seem unsupported
2. Structure — verify logical flow and proper headings
3. Completeness — ensure the topic is covered adequately
4. Tone — confirm it matches a practical, developer-friendly style
5. No fabrication — reject any invented statistics, quotes, or case studies

Scoring guide:
- 8-10: Approve with minor notes
- 5-7: Needs revision, provide specific feedback
- 1-4: Reject, major issues found

If approved, return the draft as-is in final_draft.
If revisions are needed, apply them yourself and return the improved version.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;output_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ReviewResult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;output_guardrails&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;check_no_fabrication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;check_minimum_length&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Output guardrails run &lt;strong&gt;after&lt;/strong&gt; the agent produces its result but &lt;strong&gt;before&lt;/strong&gt; it is returned to your code. If a guardrail trips, the SDK raises &lt;code&gt;OutputGuardrailTripwireTriggered&lt;/code&gt;, giving you a chance to handle the failure programmatically. This is different from input guardrails, which can run in parallel with the agent for lower latency.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Orchestrating Multi-Agent Handoffs
&lt;/h2&gt;

&lt;p&gt;Now we connect all three agents. There are two patterns for this, and we will show both.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 1: Handoffs (Delegation Chain)
&lt;/h3&gt;

&lt;p&gt;With handoffs, each agent delegates to the next. The Research Agent hands off to the Writer, who hands off to the Reviewer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# main.py — Handoff pattern
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;handoff&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents.research_agent&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ResearchResult&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents.writer_agent&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;writer_agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents.reviewer_agent&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;reviewer_agent&lt;/span&gt;


&lt;span class="c1"&gt;# Wire up handoffs: Research → Writer → Reviewer
&lt;/span&gt;&lt;span class="n"&gt;research_agent_with_handoff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instructions&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;

After completing your research, hand off to the Writer Agent
with your findings so they can draft the article.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;handoffs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;writer_agent_with_handoff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Writer Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instructions&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;

After completing the draft, hand off to the Reviewer Agent
for quality review.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;handoffs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;reviewer_agent&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_with_handoffs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Run the full pipeline using the handoff pattern.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_sync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;research_agent_with_handoff&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research and produce an article about: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_turns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Final agent: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;last_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Output: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;final_output&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Pattern 2: Agents as Tools (Orchestrator)
&lt;/h3&gt;

&lt;p&gt;With the orchestrator pattern, a manager agent calls specialist agents as tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# main.py — Orchestrator pattern
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;


&lt;span class="n"&gt;orchestrator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content Pipeline Orchestrator&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You manage a content production pipeline. For any topic:

1. First, use the research tool to gather information
2. Then, use the writing tool to produce a draft from the research
3. Finally, use the review tool to check quality

Pass the full output from each step to the next tool.
Return the final reviewed draft to the user.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;as_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;tool_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research_topic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tool_description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research a topic and return structured findings with key facts.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;as_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;tool_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;write_draft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tool_description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write an article draft based on provided research findings.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;reviewer_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;as_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;tool_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;review_draft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tool_description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review an article draft for quality, accuracy, and completeness.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_with_orchestrator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Run the full pipeline using the orchestrator pattern.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_sync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;orchestrator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Produce a reviewed article about: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_turns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Output: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;final_output&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Which Pattern Should You Use?
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Handoffs&lt;/th&gt;
&lt;th&gt;Agents as Tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Each agent decides when to hand off&lt;/td&gt;
&lt;td&gt;Orchestrator controls flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Visibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Active agent changes mid-run&lt;/td&gt;
&lt;td&gt;Orchestrator sees all outputs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Linear pipelines, customer service routing&lt;/td&gt;
&lt;td&gt;Complex coordination, parallel tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Guardrails&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Input on first agent, output on last&lt;/td&gt;
&lt;td&gt;Can apply at orchestrator level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Debugging&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Follow the handoff chain&lt;/td&gt;
&lt;td&gt;Check orchestrator's tool calls&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For our content pipeline, the &lt;strong&gt;orchestrator pattern&lt;/strong&gt; gives more control since we want to pass structured data between steps. The &lt;strong&gt;handoff pattern&lt;/strong&gt; works better for conversational routing where you do not know the path in advance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Putting It All Together: The Run Script
&lt;/h2&gt;

&lt;p&gt;Here is the complete pipeline using the orchestrator pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# run_pipeline.py
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;function_tool&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;


&lt;span class="c1"&gt;# ── Output Schemas ──────────────────────────────
&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ResearchResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The researched topic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2-3 paragraph summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;key_facts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5-8 key facts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ReviewResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;approved&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;
    &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ge&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;le&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;feedback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;final_draft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;


&lt;span class="c1"&gt;# ── Tools ───────────────────────────────────────
&lt;/span&gt;
&lt;span class="nd"&gt;@function_tool&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;web_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Search the web for current information.

    Args:
        query: The search query.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Results for &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;: Use your knowledge and mark unverified claims.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="c1"&gt;# ── Agents ──────────────────────────────────────
&lt;/span&gt;
&lt;span class="n"&gt;research_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a research specialist. Use web_search to find information. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Return structured findings with key facts. Mark anything unverified.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;web_search&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;output_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ResearchResult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;writer_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Writer Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a technical writer. Take research findings and write a clear, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;well-structured article in markdown. Target 800-1200 words. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Never fabricate data.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;reviewer_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reviewer Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a content reviewer. Check the draft for accuracy, structure, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;and quality. Score 1-10. If score &amp;gt;= 7, approve. Return the final draft.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;output_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ReviewResult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# ── Orchestrator ────────────────────────────────
&lt;/span&gt;
&lt;span class="n"&gt;orchestrator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Pipeline Orchestrator&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You manage a content pipeline. For any topic:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1. Call research_topic to gather information&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2. Call write_draft with the research results&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3. Call review_draft with the written draft&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Return the reviewer&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s final output to the user.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;as_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;tool_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research_topic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tool_description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research a topic thoroughly.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;as_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;tool_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;write_draft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tool_description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write an article from research findings.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;reviewer_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;as_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;tool_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;review_draft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tool_description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review and score an article draft.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="c1"&gt;# ── Run ─────────────────────────────────────────
&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;topic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How multi-agent AI systems are changing software development in 2026&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Starting pipeline for: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;orchestrator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Produce a reviewed article about: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Pipeline complete!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Final output:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;final_output&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Token usage: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raw_responses&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raw_responses&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;N/A&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python run_pipeline.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the orchestrator call each agent in sequence, producing a researched, written, and reviewed article.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real Cost Breakdown
&lt;/h2&gt;

&lt;p&gt;One of the most common questions about multi-agent systems: &lt;strong&gt;how much does it cost to run?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is a realistic breakdown for our three-agent pipeline using &lt;code&gt;gpt-4o-mini&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;Input Tokens (est.)&lt;/th&gt;
&lt;th&gt;Output Tokens (est.)&lt;/th&gt;
&lt;th&gt;Cost per Run&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Research Agent&lt;/td&gt;
&lt;td&gt;~1,500&lt;/td&gt;
&lt;td&gt;~800&lt;/td&gt;
&lt;td&gt;~$0.0007&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Writer Agent&lt;/td&gt;
&lt;td&gt;~2,000&lt;/td&gt;
&lt;td&gt;~1,500&lt;/td&gt;
&lt;td&gt;~$0.0012&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reviewer Agent&lt;/td&gt;
&lt;td&gt;~2,500&lt;/td&gt;
&lt;td&gt;~600&lt;/td&gt;
&lt;td&gt;~$0.0008&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Orchestrator overhead&lt;/td&gt;
&lt;td&gt;~1,000&lt;/td&gt;
&lt;td&gt;~500&lt;/td&gt;
&lt;td&gt;~$0.0005&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~7,000&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~3,400&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$0.003&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; These are estimates based on gpt-4o-mini pricing as of April 2026 (~$0.15/1M input, ~$0.60/1M output tokens). Actual costs vary by prompt length and output verbosity. Always check &lt;a href="https://openai.com/api/pricing/" rel="noopener noreferrer"&gt;OpenAI's pricing page&lt;/a&gt; for current rates before production use.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Scaling the math:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100 articles/day: ~$0.30/day&lt;/li&gt;
&lt;li&gt;1,000 articles/day: ~$3.00/day&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you switch to &lt;code&gt;gpt-4o&lt;/code&gt; for higher quality output, costs increase roughly 15–20x. A common pattern: use &lt;code&gt;gpt-4o-mini&lt;/code&gt; for research and writing, &lt;code&gt;gpt-4o&lt;/code&gt; for the reviewer agent where quality judgment matters most.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reducing Costs Further
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cache research results&lt;/strong&gt; — Skip the Research Agent for previously researched topics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use structured outputs&lt;/strong&gt; — Pydantic models reduce wasted tokens on formatting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set &lt;code&gt;max_turns&lt;/code&gt;&lt;/strong&gt; — Prevent agents from looping excessively&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;gpt-4o-mini&lt;/code&gt; by default&lt;/strong&gt; — Only upgrade models where quality is critical&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  OpenAI Agents SDK vs LangGraph vs CrewAI — When to Use Which
&lt;/h2&gt;

&lt;p&gt;If you are evaluating agent frameworks, here is how they compare:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;OpenAI Agents SDK&lt;/th&gt;
&lt;th&gt;LangGraph&lt;/th&gt;
&lt;th&gt;CrewAI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Philosophy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Minimal, Pythonic&lt;/td&gt;
&lt;td&gt;Graph-based, explicit&lt;/td&gt;
&lt;td&gt;Role-based, high-level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium-High&lt;/td&gt;
&lt;td&gt;Low-Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-agent pattern&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Handoffs + tools&lt;/td&gt;
&lt;td&gt;State graphs + nodes&lt;/td&gt;
&lt;td&gt;Crews + tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Structured output&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native Pydantic&lt;/td&gt;
&lt;td&gt;Via output parsers&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Guardrails&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in (input/output)&lt;/td&gt;
&lt;td&gt;Custom nodes&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLM support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI native, 100+ via LiteLLM&lt;/td&gt;
&lt;td&gt;Any LLM via LangChain&lt;/td&gt;
&lt;td&gt;Multiple providers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Context object&lt;/td&gt;
&lt;td&gt;Explicit state graph&lt;/td&gt;
&lt;td&gt;Shared memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Streaming&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI-first teams, rapid prototyping&lt;/td&gt;
&lt;td&gt;Complex workflows with branching&lt;/td&gt;
&lt;td&gt;Team simulations, role-play agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Production readiness&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Choose OpenAI Agents SDK when:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You primarily use OpenAI models&lt;/li&gt;
&lt;li&gt;You want the fastest path from prototype to production&lt;/li&gt;
&lt;li&gt;Your workflow is a pipeline or triage pattern&lt;/li&gt;
&lt;li&gt;You need built-in guardrails without extra dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose LangGraph when:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Your workflow has complex branching and cycles&lt;/li&gt;
&lt;li&gt;You need fine-grained control over state transitions&lt;/li&gt;
&lt;li&gt;You want explicit, visual workflow graphs&lt;/li&gt;
&lt;li&gt;You are already in the LangChain ecosystem&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We covered LangGraph in depth in our &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;LangGraph step-by-step tutorial&lt;/a&gt; — if you want to compare both frameworks hands-on, work through both tutorials with the same project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choose CrewAI when:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You think in terms of team roles and collaboration&lt;/li&gt;
&lt;li&gt;You want the highest-level abstraction&lt;/li&gt;
&lt;li&gt;Your use case is research, analysis, or content generation&lt;/li&gt;
&lt;li&gt;You prefer convention over configuration&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Advanced Patterns Worth Knowing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Dynamic Instructions
&lt;/h3&gt;

&lt;p&gt;Agent behavior can adapt at runtime:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;RunContextWrapper&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dynamic_instructions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RunContextWrapper&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;user_tier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tier&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;free&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user_tier&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Provide detailed, in-depth analysis with code examples.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Provide a concise summary suitable for beginners.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="n"&gt;adaptive_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Adaptive Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dynamic_instructions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Parallel Agent Execution
&lt;/h3&gt;

&lt;p&gt;Run independent agents simultaneously with &lt;code&gt;asyncio.gather&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;


&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parallel_research&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;
    &lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;Runner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;topic&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;topics&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Agent Cloning
&lt;/h3&gt;

&lt;p&gt;Create agent variants without duplicating configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;formal_writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Formal Writer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write in a formal, academic tone. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;casual_writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Casual Writer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write in a casual, conversational tone. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Common Pitfalls and How to Avoid Them
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pitfall&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agents looping infinitely&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;max_turns&lt;/code&gt; on &lt;code&gt;Runner.run()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vague handoff behavior&lt;/td&gt;
&lt;td&gt;Write explicit handoff instructions in the agent's prompt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unstructured data between agents&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;output_type&lt;/code&gt; with Pydantic models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High costs from GPT-4o&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;gpt-4o-mini&lt;/code&gt; for most agents, upgrade selectively&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Guardrail false positives&lt;/td&gt;
&lt;td&gt;Test guardrails independently before integrating&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lost context in handoffs&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;input_filter&lt;/code&gt; on handoffs to control what the next agent sees&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the OpenAI Agents SDK?
&lt;/h3&gt;

&lt;p&gt;The OpenAI Agents SDK is an open-source Python framework for building single-agent and multi-agent AI systems. It provides primitives for agent creation, tool use, inter-agent handoffs, and input/output guardrails. It is the production successor to OpenAI's experimental Swarm library.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I install the OpenAI Agents SDK?
&lt;/h3&gt;

&lt;p&gt;Install it via pip: &lt;code&gt;pip install openai-agents==0.13.4&lt;/code&gt;. The SDK requires Python 3.10 or higher. Set your &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; environment variable before running any agent code.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between handoffs and agents-as-tools?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Handoffs&lt;/strong&gt; transfer control entirely — the receiving agent becomes the active agent and responds directly. &lt;strong&gt;Agents-as-tools&lt;/strong&gt; keeps the orchestrator in control — specialist agents run as tool calls and return results to the orchestrator. Use handoffs for routing, agents-as-tools for coordination.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use non-OpenAI models with the Agents SDK?
&lt;/h3&gt;

&lt;p&gt;Yes. The SDK supports over 100 LLMs through LiteLLM integration. You can use Anthropic, Google, Mistral, and local models — though OpenAI models have the most native support.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much does it cost to run a multi-agent pipeline?
&lt;/h3&gt;

&lt;p&gt;With &lt;code&gt;gpt-4o-mini&lt;/code&gt;, a three-agent pipeline typically costs under $0.01 per run. See our cost breakdown for detailed estimates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the OpenAI Agents SDK a replacement for Swarm?
&lt;/h3&gt;

&lt;p&gt;Yes. The Agents SDK is the production-ready evolution of OpenAI's experimental Swarm library. It adds structured outputs, guardrails, streaming, and MCP tool support that Swarm did not have.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do guardrails work in the OpenAI Agents SDK?
&lt;/h3&gt;

&lt;p&gt;Input guardrails validate user input before or in parallel with the first agent. Output guardrails check the final agent's response. If a guardrail triggers its tripwire, the SDK raises an exception that you can catch and handle. Tool guardrails can also validate individual function calls.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to Build Next
&lt;/h2&gt;

&lt;p&gt;You now have a working multi-agent pipeline. Here are some directions to take it further:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add real search tools&lt;/strong&gt; — Connect to Brave Search, Serper, or Tavily for live web data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Combine with RAG&lt;/strong&gt; — Use &lt;a href="https://dev.to/articles/build-rag-app-python-llamaindex-tutorial-2026"&gt;retrieval-augmented generation&lt;/a&gt; to ground your agents in your own documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add MCP tools&lt;/strong&gt; — The SDK has built-in &lt;a href="https://openai.github.io/openai-agents-python/tools/" rel="noopener noreferrer"&gt;MCP server support&lt;/a&gt; for connecting to external services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build a UI&lt;/strong&gt; — Wrap the pipeline in a Streamlit or Gradio interface&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explore vibe coding tools&lt;/strong&gt; — Use &lt;a href="https://dev.to/articles/vibe-coding-tools-compared-bolt-lovable-replit-v0-2026"&gt;AI app builders&lt;/a&gt; to create a frontend for your agent pipeline&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are exploring the broader AI development ecosystem, check out our guide to &lt;a href="https://dev.to/articles/free-ai-coding-tools-zero-dollar-stack-2026"&gt;free AI coding tools&lt;/a&gt; and see how tools like &lt;a href="https://dev.to/articles/claude-code-advanced-workflow-subagents-commands-multi-session"&gt;Claude Code&lt;/a&gt; approach multi-agent patterns differently with subagents and commands.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;The OpenAI Agents SDK makes multi-agent systems accessible without requiring deep framework expertise. The core pattern is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Define agents&lt;/strong&gt; with clear instructions and tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect them&lt;/strong&gt; via handoffs or the orchestrator pattern&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add guardrails&lt;/strong&gt; to enforce quality and safety&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run with the Runner&lt;/strong&gt; and let the SDK handle orchestration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The hardest part is not the code — it is designing clear agent boundaries and instructions. Spend your time there, and the SDK handles the rest.&lt;/p&gt;

&lt;p&gt;All code from this tutorial is available in the project structure above. Clone it, swap in your own tools and prompts, and start building.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is part of Effloow's &lt;a href="https://dev.to/tags/multi-agent"&gt;AI Agent Tutorial series&lt;/a&gt;. We build and test every framework we write about — see how we run &lt;a href="https://dev.to/articles/how-we-built-company-with-14-ai-agents"&gt;our own company with 16 AI agents&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Some links in this article may be affiliate links. We only recommend tools we have actually tested. See our &lt;a href="https://dev.to/affiliate-disclosure"&gt;affiliate disclosure&lt;/a&gt; for details.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article may contain affiliate links to products or services we recommend. If you purchase through these links, we may earn a small commission at no extra cost to you. This helps support Effloow and allows us to continue creating free, high-quality content. See our &lt;a href="https://dev.to/affiliate-disclosure"&gt;affiliate disclosure&lt;/a&gt; for full details.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>openai</category>
      <category>python</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Notion AI for Developers — Custom Agents &amp; Workspace Automation Guide 2026</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Sun, 05 Apr 2026 15:05:52 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/notion-ai-for-developers-custom-agents-workspace-automation-guide-2026-4and</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/notion-ai-for-developers-custom-agents-workspace-automation-guide-2026-4and</guid>
      <description>&lt;h1&gt;
  
  
  Notion AI for Developers — Custom Agents &amp;amp; Workspace Automation Guide 2026
&lt;/h1&gt;

&lt;p&gt;Most Notion AI guides teach you to summarize meeting notes. This one teaches you to build autonomous agents that triage your bugs, run your standups, and keep your developer docs alive — without you opening the app.&lt;/p&gt;

&lt;p&gt;On February 24, 2026, Notion shipped Custom Agents in version 3.3. They are not chatbots. They are autonomous workers that run on triggers — scheduled times, Slack messages, database changes, email arrivals — and execute multi-step workflows using your workspace data. Over 21,000 Custom Agents were built during the beta alone.&lt;/p&gt;

&lt;p&gt;This guide is for developers who already use Notion as a workspace but have not explored what Custom Agents and MCP integration mean for engineering workflows. By the end, you will have a working Custom Agent, understand how to connect Notion to your developer tools via MCP, and know exactly where Notion AI fits (and does not fit) in a modern dev stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Affiliate Disclosure:&lt;/strong&gt; This article contains affiliate links to Notion. If you sign up through our links, we may earn a commission at no extra cost to you. See our &lt;a href="https://dev.to/affiliate-disclosure"&gt;affiliate disclosure&lt;/a&gt; for details.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Notion AI in 2026?
&lt;/h2&gt;

&lt;p&gt;Notion AI is no longer just an inline writing assistant. In 2026, it is a platform with three distinct layers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;th&gt;Available On&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Writing &amp;amp; Editing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Summarize, translate, rewrite, generate text inline&lt;/td&gt;
&lt;td&gt;All plans (limited trial on Free/Plus)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Personal Agent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-step tasks triggered by your prompts — research, draft docs, update databases&lt;/td&gt;
&lt;td&gt;Business &amp;amp; Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Custom Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Autonomous agents that run on triggers without human prompting, 24/7&lt;/td&gt;
&lt;td&gt;Business &amp;amp; Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The jump from Personal Agent to Custom Agents is the one that matters for developers. Personal Agent responds when you ask it something. Custom Agents act on their own based on triggers you define — a database row changing, a Slack message appearing, a scheduled time arriving.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Changed in Notion 3.3 (February 2026)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom Agents launch&lt;/strong&gt;: Build autonomous agents using plain language descriptions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-model support&lt;/strong&gt;: Choose between Claude, GPT, and Gemini — or let Notion auto-select the best model per request&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP integration&lt;/strong&gt;: Connect agents to external developer tools like Linear, Figma, and custom MCP servers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack integration&lt;/strong&gt;: Agents can monitor channels, respond to messages, and post updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion Mail and Calendar&lt;/strong&gt;: Agents handle email triage and meeting scheduling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise controls&lt;/strong&gt;: Granular permissions, full audit logging, prompt injection guardrails&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Developers Should Care About Custom Agents
&lt;/h2&gt;

&lt;p&gt;If you are running a development team, you have recurring tasks that eat hours every week but follow predictable patterns. Custom Agents eliminate them.&lt;/p&gt;

&lt;p&gt;Here is the shift: traditional Notion automation (button clicks, simple database automations) required you to define rigid if-then rules. Custom Agents understand context. You describe the job in plain language, and they figure out the steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means in practice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Slack message saying "the checkout page is broken on mobile" gets triaged, tagged with priority, assigned to the right engineer, and logged in your bug database — by an agent, not a human&lt;/li&gt;
&lt;li&gt;Your daily standup summary compiles itself from task updates across your sprint database every morning at 9 AM&lt;/li&gt;
&lt;li&gt;New pull request descriptions get cross-referenced with your architecture docs and flagged if they touch sensitive systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not hypothetical. Notion themselves use Custom Agents internally for exactly these kinds of workflows, as documented in their &lt;a href="https://www.notion.com/blog/how-notion-uses-custom-agents" rel="noopener noreferrer"&gt;blog post on how Notion uses Custom Agents&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you are already using &lt;a href="https://dev.to/articles/build-multi-agent-ai-crewai-python-tutorial-2026"&gt;multi-agent systems like CrewAI&lt;/a&gt; or &lt;a href="https://dev.to/articles/n8n-self-hosted-ai-workflow-automation-guide-2026"&gt;workflow automation tools like n8n&lt;/a&gt;, Custom Agents fill a different gap: they live where your team's knowledge already is — inside Notion — and they require zero code to set up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started: Plans, Setup, and Enabling AI Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Which Plan Do You Need?
&lt;/h3&gt;

&lt;p&gt;Custom Agents require a &lt;strong&gt;Business&lt;/strong&gt; or &lt;strong&gt;Enterprise&lt;/strong&gt; plan. Here is the current pricing breakdown:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Monthly (per member)&lt;/th&gt;
&lt;th&gt;Annual (per member)&lt;/th&gt;
&lt;th&gt;AI Features&lt;/th&gt;
&lt;th&gt;Custom Agents&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Limited trial&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$12&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;td&gt;Limited trial&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Business&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$20&lt;/td&gt;
&lt;td&gt;$18&lt;/td&gt;
&lt;td&gt;Full AI access&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Full AI + zero data retention&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Pricing sourced from &lt;a href="https://www.notion.com/pricing" rel="noopener noreferrer"&gt;notion.com/pricing&lt;/a&gt; as of April 2026.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important pricing change for 2026&lt;/strong&gt;: Notion AI is now bundled into Business and Enterprise plans. Free and Plus users get a limited trial of core AI features (chat, generate, autofill, translate) but cannot access Custom Agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom Agents Credit System
&lt;/h3&gt;

&lt;p&gt;Custom Agents are free to try through &lt;strong&gt;May 3, 2026&lt;/strong&gt;. Starting May 4, 2026, they use &lt;strong&gt;Notion Credits&lt;/strong&gt; — a usage-based system available as an add-on for Business and Enterprise plans.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;$10 per 1,000 credits&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Credits are shared across the workspace&lt;/li&gt;
&lt;li&gt;Credits reset monthly (unused credits do not roll over)&lt;/li&gt;
&lt;li&gt;Workspace admins purchase credits matching team needs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a dev team running 3-5 agents with daily triggers, expect to use roughly 500-2,000 credits per month depending on complexity. Simple Q&amp;amp;A agents consume fewer credits than multi-step workflow agents that read databases and post to Slack.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enabling AI Features
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings &amp;amp; members&lt;/strong&gt; → &lt;strong&gt;Plans&lt;/strong&gt; and confirm you are on Business or Enterprise&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Settings &amp;amp; members&lt;/strong&gt; → &lt;strong&gt;AI&lt;/strong&gt; and ensure AI features are enabled for your workspace&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Agents&lt;/strong&gt; section appears in your left sidebar once AI is active&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Building Your First Custom Agent — Step by Step
&lt;/h2&gt;

&lt;p&gt;Let us build a practical agent: a &lt;strong&gt;Bug Triage Agent&lt;/strong&gt; that monitors a Slack channel, creates entries in a bugs database, assigns priority, and notifies the right engineer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create the Agent
&lt;/h3&gt;

&lt;p&gt;Open the &lt;strong&gt;Agents&lt;/strong&gt; section in your sidebar and click the &lt;code&gt;+&lt;/code&gt; icon. You have three options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Create with AI Chat&lt;/strong&gt; — Describe what you want in natural language. Notion generates draft instructions, triggers, and access settings. This is the fastest path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create from Template&lt;/strong&gt; — Pick a pre-built template and customize it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create from Scratch&lt;/strong&gt; — Start with a blank instructions field. Best if you know exactly what you want.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For our Bug Triage Agent, choose &lt;strong&gt;Create with AI Chat&lt;/strong&gt; and enter:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I want an agent that monitors our #bugs Slack channel. When someone reports a bug, it should create a new entry in our Bugs database with the reporter's name, a summary of the issue, and an initial priority (P1 for anything mentioning 'production' or 'outage', P2 for everything else). Tag the entry with the current sprint."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notion AI will generate a draft configuration. Review and refine it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Configure Triggers
&lt;/h3&gt;

&lt;p&gt;Go to &lt;strong&gt;Settings → Triggers&lt;/strong&gt; on your agent page. For our bug triage agent, add a Slack trigger:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger type&lt;/strong&gt;: Message posted to channel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Channel&lt;/strong&gt;: #bugs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope&lt;/strong&gt;: All messages (not just mentions)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other available triggers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Trigger Type&lt;/th&gt;
&lt;th&gt;Examples&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recurring schedule&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Daily at 9 AM, weekly on Monday, monthly on the 1st&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Slack events&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Message posted, emoji reaction, thread started, agent mentioned&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Notion events&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Page added to database, page updated, comment added, agent @mentioned&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You can combine multiple triggers on a single agent. A standup agent might run on a daily schedule &lt;em&gt;and&lt;/em&gt; when someone @mentions it in a comment asking for an on-demand update.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Private Slack messages and Slack grid are not currently supported as triggers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Set Data Access
&lt;/h3&gt;

&lt;p&gt;Under &lt;strong&gt;Tools and Access&lt;/strong&gt;, configure what your agent can read:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add your &lt;strong&gt;Bugs database&lt;/strong&gt; — the agent needs write access to create entries&lt;/li&gt;
&lt;li&gt;Add your &lt;strong&gt;Sprint tracking database&lt;/strong&gt; — so it can tag entries with the current sprint&lt;/li&gt;
&lt;li&gt;Add your &lt;strong&gt;Team roster page&lt;/strong&gt; — so it knows which engineer handles which area&lt;/li&gt;
&lt;li&gt;Optionally enable &lt;strong&gt;Web access&lt;/strong&gt; if the agent should look up external references&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keep access minimal. An agent that can access everything in your workspace is slower and harder to debug than one scoped to exactly the pages it needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Write Clear Instructions
&lt;/h3&gt;

&lt;p&gt;The instructions field is where you define your agent's behavior. Good instructions follow this pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Job
Triage bug reports from the #bugs Slack channel.

## When Triggered
1. Read the new Slack message
2. Extract: reporter name, bug description, affected area
3. Check if a similar bug already exists in the Bugs database
4. If duplicate: reply in the Slack thread linking the existing entry
5. If new: create a Bugs database entry with:
   - Title: one-line summary of the bug
   - Reporter: extracted from Slack message
   - Priority: P1 if message mentions "production", "outage", "down", or "critical"; P2 otherwise
   - Sprint: current sprint from Sprint Tracking database
   - Status: "New"
6. Reply in the Slack thread confirming the bug was logged, with a link to the database entry

## Rules
- Never change the priority of existing bugs
- If unclear whether something is a bug or a feature request, tag as "Needs Triage" and assign to the team lead
- Always reply in the Slack thread, never as a new message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Choose Your Model
&lt;/h3&gt;

&lt;p&gt;Under &lt;strong&gt;Settings → Model&lt;/strong&gt;, select from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto&lt;/strong&gt; (recommended) — Notion selects the best model per request&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude&lt;/strong&gt; — Strong at reasoning and following complex instructions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT&lt;/strong&gt; — Good general-purpose performance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini&lt;/strong&gt; — Alternative option&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most developer workflows, &lt;strong&gt;Auto&lt;/strong&gt; is the right choice. The model selection affects credit consumption — more capable models may use slightly more credits per run.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Test in Chat
&lt;/h3&gt;

&lt;p&gt;Use the &lt;strong&gt;Chat tab&lt;/strong&gt; to test your agent before it goes live. Send a simulated bug report:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The checkout page is throwing a 500 error on mobile Safari. Users can't complete purchases. This started after the last deploy."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Check whether the agent correctly identifies this as P1 (it mentions a production-affecting issue), extracts the right details, and would create the correct database entry. Iterate on your instructions based on the results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7: Set Permissions
&lt;/h3&gt;

&lt;p&gt;Configure who can manage your agent:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission Level&lt;/th&gt;
&lt;th&gt;What They Can Do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Full Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Edit instructions, triggers, settings; view activity logs; run the agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Can Edit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Modify instructions and configuration; review activity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Can View and Interact&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Run and chat with the agent; view settings (read-only)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Users without explicit access may still trigger agents configured to respond to events in channels they can access (like Slack messages in a public channel).&lt;/p&gt;




&lt;h2&gt;
  
  
  MCP Integration — Connecting Notion to Developer Tools
&lt;/h2&gt;

&lt;p&gt;Model Context Protocol (MCP) is the bridge between Notion AI and your external developer tools. It is an open standard that lets AI assistants interact with external services, and Notion has built a hosted MCP server for it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Notion MCP?
&lt;/h3&gt;

&lt;p&gt;Notion MCP is a hosted server at &lt;code&gt;mcp.notion.com/mcp&lt;/code&gt; that gives AI tools secure, OAuth-based access to your Notion workspace. It works in two directions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;External AI tools → Notion&lt;/strong&gt;: Tools like Claude Code, Cursor, VS Code, and ChatGPT can read and write to your Notion pages through MCP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion Custom Agents → External tools&lt;/strong&gt;: Your Custom Agents can connect to Linear, Figma, HubSpot, and any custom MCP server&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For developers, the second direction is where it gets interesting. If you have already explored &lt;a href="https://dev.to/articles/top-mcp-servers-developer-guide-2026"&gt;MCP servers in your development workflow&lt;/a&gt;, Notion's MCP support means your workspace data becomes accessible to your entire AI toolchain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up Notion MCP with Claude Code
&lt;/h3&gt;

&lt;p&gt;If you use &lt;a href="https://dev.to/articles/claude-code-advanced-workflow-subagents-commands-multi-session"&gt;Claude Code for your development workflow&lt;/a&gt;, connecting it to Notion takes one command. Notion MCP is a remote server — no local installation required:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Claude Code, add Notion as an MCP connection using the public URL: &lt;code&gt;https://mcp.notion.com/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Authenticate with OAuth when prompted — one-click approval&lt;/li&gt;
&lt;li&gt;Claude Code can now read your Notion pages, search content, create new pages, and update databases&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Having Claude Code pull architecture docs from Notion while writing code&lt;/li&gt;
&lt;li&gt;Automatically generating PRDs or tech specs and pushing them to Notion&lt;/li&gt;
&lt;li&gt;Searching your team's knowledge base from the terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Connecting Custom Agents to External MCP Servers
&lt;/h3&gt;

&lt;p&gt;Custom Agents can connect to any MCP-compatible service. Current first-party integrations include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linear&lt;/strong&gt; — Sync issues, create tickets, update statuses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Figma&lt;/strong&gt; — Pull design specs, reference components&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HubSpot&lt;/strong&gt; — Access CRM data for customer-facing agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom MCP servers&lt;/strong&gt; — Connect to any service that implements the MCP protocol&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To add an MCP connection to your Custom Agent, go to &lt;strong&gt;Tools and Access&lt;/strong&gt; in the agent settings and add the MCP server URL. Your workspace admin must approve the connection before the agent can use it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Practical MCP Workflow: Notion + Linear
&lt;/h3&gt;

&lt;p&gt;Here is a concrete workflow that combines Notion Custom Agents with Linear via MCP:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Developer creates a tech spec page in Notion&lt;/li&gt;
&lt;li&gt;A Custom Agent monitors the Tech Specs database for new entries&lt;/li&gt;
&lt;li&gt;When a spec is marked "Approved", the agent:

&lt;ul&gt;
&lt;li&gt;Creates a Linear project with tasks derived from the spec's implementation steps&lt;/li&gt;
&lt;li&gt;Links the Linear project back to the Notion spec page&lt;/li&gt;
&lt;li&gt;Posts a summary in the #engineering Slack channel&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This bridges the gap between where decisions happen (Notion) and where code work gets tracked (Linear) — without anyone manually copying information between tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  5 Developer Workflow Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Automated Sprint Standup
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Trigger&lt;/strong&gt;: Daily at 9:00 AM, Monday through Friday&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it does&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reads all tasks updated in the last 24 hours from your Sprint database&lt;/li&gt;
&lt;li&gt;Groups updates by assignee&lt;/li&gt;
&lt;li&gt;Compiles a standup summary with: what was completed, what is in progress, what is blocked&lt;/li&gt;
&lt;li&gt;Posts the summary to #engineering in Slack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it works&lt;/strong&gt;: Async standups save 15-30 minutes per day for a team of 5. The agent captures changes from the database, so nobody has to write an update — the work they already logged &lt;em&gt;is&lt;/em&gt; the update.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Code Documentation Keeper
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Trigger&lt;/strong&gt;: Page updated in Architecture Docs database&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it does&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detects when a documented API endpoint or service has not been updated in 30+ days&lt;/li&gt;
&lt;li&gt;Cross-references with recent sprint tasks to check if related code was changed&lt;/li&gt;
&lt;li&gt;Flags outdated docs by adding a "Needs Review" tag and assigning the last editor&lt;/li&gt;
&lt;li&gt;Posts a weekly digest of stale docs to #engineering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it works&lt;/strong&gt;: Documentation rot is the default in most teams. This agent does not write the docs for you — it just makes sure you know which ones are outdated.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Slack Bug Triage (Full Version)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Trigger&lt;/strong&gt;: Message posted in #bugs Slack channel&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it does&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parses the bug report for severity signals (production, outage, data loss)&lt;/li&gt;
&lt;li&gt;Checks for duplicate entries in the Bugs database&lt;/li&gt;
&lt;li&gt;Creates a structured bug entry with auto-assigned priority&lt;/li&gt;
&lt;li&gt;Routes to the on-call engineer based on the affected area&lt;/li&gt;
&lt;li&gt;Replies in the Slack thread with a link to the bug entry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it works&lt;/strong&gt;: The gap between "someone reported a bug in Slack" and "it is in the tracker" is where bugs get lost. This agent closes that gap in seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Knowledge Base Q&amp;amp;A
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Trigger&lt;/strong&gt;: Agent @mentioned in Slack or Notion comment&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it does&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Searches across your team's Notion workspace for relevant information&lt;/li&gt;
&lt;li&gt;Synthesizes an answer from multiple pages&lt;/li&gt;
&lt;li&gt;Cites sources with direct links to the Notion pages&lt;/li&gt;
&lt;li&gt;If no answer is found, flags it for the team lead to document&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it works&lt;/strong&gt;: "Where is the doc for X?" is one of the most common Slack messages in any engineering team. This agent answers it instantly or identifies gaps in your documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. PR-to-Spec Reconciliation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Trigger&lt;/strong&gt;: Page added to "Completed PRs" database (populated via Linear/GitHub integration)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it does&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Looks up the original tech spec or ticket for the PR&lt;/li&gt;
&lt;li&gt;Compares what was spec'd against what was built (based on the PR description)&lt;/li&gt;
&lt;li&gt;Flags discrepancies for review&lt;/li&gt;
&lt;li&gt;Updates the spec page with an "Implemented" tag and implementation date&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it works&lt;/strong&gt;: Specs and reality diverge. This agent keeps your documentation honest by checking implementations against plans.&lt;/p&gt;




&lt;h2&gt;
  
  
  Notion AI vs ClickUp AI vs Linear AI — Developer Team Comparison
&lt;/h2&gt;

&lt;p&gt;If you are choosing a workspace tool for your dev team, here is how the AI capabilities stack up:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Notion AI&lt;/th&gt;
&lt;th&gt;ClickUp AI (Brain)&lt;/th&gt;
&lt;th&gt;Linear&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Custom Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes — autonomous, trigger-based&lt;/td&gt;
&lt;td&gt;AI agents available&lt;/td&gt;
&lt;td&gt;No autonomous agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Trigger types&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Schedule, Slack, database, email, calendar&lt;/td&gt;
&lt;td&gt;Task-based automation&lt;/td&gt;
&lt;td&gt;GitHub-based automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native MCP server + external MCP connections&lt;/td&gt;
&lt;td&gt;No MCP&lt;/td&gt;
&lt;td&gt;No MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model choice&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Claude, GPT, Gemini (or Auto)&lt;/td&gt;
&lt;td&gt;ClickUp's proprietary AI&lt;/td&gt;
&lt;td&gt;Built-in AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Developer focus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flexible — requires setup&lt;/td&gt;
&lt;td&gt;Project management oriented&lt;/td&gt;
&lt;td&gt;Engineering-native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API for AI features&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Notion API with views, databases, MCP&lt;/td&gt;
&lt;td&gt;ClickUp API&lt;/td&gt;
&lt;td&gt;Linear API + GraphQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Included in Business ($18/user/mo annual) + credits&lt;/td&gt;
&lt;td&gt;$9/user/mo add-on + 1,500 credits/mo&lt;/td&gt;
&lt;td&gt;Included in paid plans&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Documentation, specs, knowledge management&lt;/td&gt;
&lt;td&gt;Broad project management&lt;/td&gt;
&lt;td&gt;Issue tracking, sprint cycles&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  When to Choose Each
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose Notion AI if&lt;/strong&gt;: Your team already lives in Notion for docs, specs, and knowledge management, and you want agents that operate directly on that knowledge. The MCP integration makes it the most extensible option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose ClickUp AI if&lt;/strong&gt;: You need AI tightly integrated with a full project management suite — task creation, timeline views, dashboards — and your workflows are more operational than technical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Linear if&lt;/strong&gt;: You want the cleanest engineering workflow with deep GitHub/GitLab integration and you prefer automation through code (webhooks, API) rather than no-code agents. Linear does not have custom autonomous agents, but its simplicity is the point.&lt;/p&gt;

&lt;p&gt;For many dev teams, the answer is "Linear for sprint work + Notion for everything else." Notion AI Custom Agents handle the knowledge and documentation layer, while Linear handles the engineering execution layer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Advanced: Notion API + AI for Custom Integrations
&lt;/h2&gt;

&lt;p&gt;Custom Agents cover most no-code use cases, but developers can also build programmatic integrations using the Notion API. This is useful when you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bidirectional sync between Notion and your own systems&lt;/li&gt;
&lt;li&gt;Custom data transformations before writing to Notion&lt;/li&gt;
&lt;li&gt;Integration with internal tools that do not support MCP&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Notion API Overview
&lt;/h3&gt;

&lt;p&gt;The Notion API provides endpoints for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pages&lt;/strong&gt;: Create, read, update page content and properties&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Databases&lt;/strong&gt;: Query, create entries, update properties&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blocks&lt;/strong&gt;: Manipulate page content at the block level&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt;: Full-text search across the workspace&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Users&lt;/strong&gt;: List workspace members&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comments&lt;/strong&gt;: Read and create comments on pages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Combining API + Custom Agents
&lt;/h3&gt;

&lt;p&gt;A powerful pattern: use the Notion API to populate databases from your CI/CD pipeline, then let Custom Agents react to those database changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example: Deployment Tracker&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# In your CI/CD pipeline (GitHub Actions, etc.)
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;NOTION_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-integration-token&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;DATABASE_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-deployments-database-id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;log_deployment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Log a deployment to Notion — a Custom Agent reacts to new entries.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.notion.com/v1/pages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NOTION_API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Notion-Version&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2022-06-28&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;database_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DATABASE_ID&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;}}]},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Version&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rich_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;}}]},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Environment&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;select&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;select&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Deployed At&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;start&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-04-05T08:00:00Z&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Called from your deploy script
&lt;/span&gt;&lt;span class="nf"&gt;log_deployment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api-gateway&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;v2.4.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;production&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then create a Custom Agent with a &lt;strong&gt;Notion trigger&lt;/strong&gt; (page added to Deployments database) that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Posts a deployment summary to #releases in Slack&lt;/li&gt;
&lt;li&gt;If the deployment status is "failed", creates a P1 incident in your Bugs database&lt;/li&gt;
&lt;li&gt;Updates a "Last Deployed" field on the corresponding Service page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This pattern — &lt;strong&gt;API writes data in, Custom Agents react and distribute&lt;/strong&gt; — gives you the best of both worlds: programmatic control over data ingestion and no-code automation for the response workflows.&lt;/p&gt;

&lt;p&gt;If you are building more complex AI workflows that go beyond what Notion agents offer, consider tools like &lt;a href="https://dev.to/articles/dify-self-hosted-docker-ai-workflow-guide-2026"&gt;Dify&lt;/a&gt; for visual AI workflow building or &lt;a href="https://dev.to/articles/n8n-self-hosted-ai-workflow-automation-guide-2026"&gt;n8n&lt;/a&gt; for general-purpose workflow automation. &lt;a href="https://dev.to/articles/gamma-ai-review-presentation-builder-guide-2026"&gt;AI presentation tools like Gamma&lt;/a&gt; can also complement your Notion workspace by turning specs and project data into polished slide decks. Each tool fills a different layer of the stack.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security, Permissions, and Enterprise Controls
&lt;/h2&gt;

&lt;p&gt;Custom Agents handle your workspace data, so security controls matter — especially in regulated environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Permission Model
&lt;/h3&gt;

&lt;p&gt;Workspace admins control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Who can create agents&lt;/strong&gt;: Restrict agent creation to specific roles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What agents can access&lt;/strong&gt;: Each agent has explicit page and database access grants&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Which MCP connections are approved&lt;/strong&gt;: Admin must approve external MCP server connections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model selection&lt;/strong&gt;: Enterprise plans can restrict which AI models agents use&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Audit and Transparency
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every agent run is logged&lt;/strong&gt; in the Activity tab — including the trigger, each action taken, and any errors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Changes are reversible&lt;/strong&gt; — you can see exactly what the agent modified and undo it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version history&lt;/strong&gt; tracks all configuration changes (who modified the agent, when, and what changed)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prompt Injection Guardrails
&lt;/h3&gt;

&lt;p&gt;Notion includes built-in detection for prompt injection attempts — when content an agent reads contains hidden instructions trying to manipulate its behavior. This is relevant for agents that process external input (Slack messages, emails, user-submitted content).&lt;/p&gt;

&lt;p&gt;For Enterprise plans, &lt;strong&gt;zero data retention&lt;/strong&gt; is available — your workspace data is not stored by the LLM providers processing agent requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer-Specific Security Considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Scope agent access to the minimum required pages — an agent that triages bugs should not be able to read HR documents&lt;/li&gt;
&lt;li&gt;Review the Activity tab after enabling a new agent to verify it behaves as expected&lt;/li&gt;
&lt;li&gt;Use the Chat tab to test edge cases (malformed inputs, unusual requests) before enabling triggers&lt;/li&gt;
&lt;li&gt;For agents that interact with external MCP servers, ensure those servers follow your organization's security policies&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Pricing Breakdown for Developer Teams
&lt;/h2&gt;

&lt;p&gt;Here is what Notion AI costs for a typical 10-person developer team:&lt;/p&gt;

&lt;h3&gt;
  
  
  Business Plan (Recommended for Most Teams)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Monthly Cost&lt;/th&gt;
&lt;th&gt;Annual Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Business plan (10 seats)&lt;/td&gt;
&lt;td&gt;$200/mo&lt;/td&gt;
&lt;td&gt;$180/mo ($2,160/yr)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom Agent credits (est. 2,000/mo)&lt;/td&gt;
&lt;td&gt;$20/mo&lt;/td&gt;
&lt;td&gt;$20/mo ($240/yr)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$220/mo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$200/mo ($2,400/yr)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What You Get
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Full AI features for all 10 members (Personal Agent, inline AI, meeting notes)&lt;/li&gt;
&lt;li&gt;Custom Agents with shared credit pool&lt;/li&gt;
&lt;li&gt;SAML SSO, advanced permissions, private teamspaces&lt;/li&gt;
&lt;li&gt;90-day version history, bulk export&lt;/li&gt;
&lt;li&gt;MCP integration with external tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Enterprise Plan
&lt;/h3&gt;

&lt;p&gt;For teams needing zero data retention, advanced compliance, dedicated support, and higher credit volumes, Enterprise pricing is custom — contact Notion's sales team.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is It Worth It?
&lt;/h3&gt;

&lt;p&gt;Compare the cost against the engineering time saved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;15 minutes saved per day on standups × 10 engineers × 22 work days = &lt;strong&gt;55 hours/month&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;5 minutes per bug triage × 20 bugs/week = &lt;strong&gt;~7 hours/month&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Documentation maintenance: &lt;strong&gt;5-10 hours/month&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At $200/month, if Custom Agents save even 20 hours of engineering time, the ROI is clear. The question is whether Notion is already your team's workspace — if it is, the marginal cost of adding agents is low.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can I use Custom Agents on the Free or Plus plan?
&lt;/h3&gt;

&lt;p&gt;No. Custom Agents require a Business or Enterprise plan. Free and Plus plans include limited AI trial features (chat, generate, autofill, translate) but not Custom Agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many Custom Agents can I create?
&lt;/h3&gt;

&lt;p&gt;There is no hard limit on the number of agents. The constraint is credits — each agent run consumes credits based on the complexity of the task and the model used.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Custom Agents modify data outside of Notion?
&lt;/h3&gt;

&lt;p&gt;Yes, through MCP connections. An agent connected to Linear via MCP can create issues in Linear. An agent connected to Slack can post messages. However, all external connections must be approved by a workspace admin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there an API for managing Custom Agents programmatically?
&lt;/h3&gt;

&lt;p&gt;As of April 2026, Custom Agents are managed through the Notion UI. The Notion API supports pages, databases, blocks, and comments, but there is no public API endpoint for creating or configuring Custom Agents directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use my own LLM with Custom Agents?
&lt;/h3&gt;

&lt;p&gt;Not directly. Custom Agents support Claude, GPT, and Gemini through Notion's built-in model selection. You cannot point an agent at a self-hosted model. If you need custom model support, consider &lt;a href="https://dev.to/articles/dify-self-hosted-docker-ai-workflow-guide-2026"&gt;Dify&lt;/a&gt; or building a workflow with &lt;a href="https://dev.to/articles/n8n-self-hosted-ai-workflow-automation-guide-2026"&gt;n8n&lt;/a&gt; that calls your own models.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do Notion Custom Agents compare to building agents with CrewAI or LangGraph?
&lt;/h3&gt;

&lt;p&gt;Different layers entirely. &lt;a href="https://dev.to/articles/build-multi-agent-ai-crewai-python-tutorial-2026"&gt;CrewAI&lt;/a&gt; and LangGraph are Python frameworks for building custom multi-agent systems from scratch — full control, full complexity. Notion Custom Agents are no-code, workspace-integrated agents for automating recurring work. Use Notion agents for workflow automation within your workspace; use CrewAI/LangGraph for custom AI applications with complex reasoning chains.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens when a Custom Agent fails?
&lt;/h3&gt;

&lt;p&gt;Failed runs are logged in the Activity tab with the trigger event, the agent's reasoning at each step, and the specific error. You can provide feedback on failed runs and iterate on your instructions to prevent future failures.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started Today
&lt;/h2&gt;

&lt;p&gt;Custom Agents are free to try through May 3, 2026. If your team is on a Business or Enterprise plan, there is no reason not to experiment now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start here:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build one simple agent — the Knowledge Base Q&amp;amp;A agent is the quickest win&lt;/li&gt;
&lt;li&gt;Test it thoroughly in the Chat tab before enabling triggers&lt;/li&gt;
&lt;li&gt;Monitor the Activity tab for the first week&lt;/li&gt;
&lt;li&gt;Iterate on instructions based on real results&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agents that work best are scoped narrowly. Do not build one agent that does everything — build five agents that each do one thing well.&lt;/p&gt;

&lt;p&gt;For the broader picture of how AI agents fit into a real production environment, read &lt;a href="https://dev.to/articles/how-we-built-company-with-14-ai-agents"&gt;how we built a company powered by 14 AI agents&lt;/a&gt;. The principles — scoped responsibilities, clear communication channels, human oversight — apply whether you are running agents in Paperclip, CrewAI, or Notion.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Last updated: April 5, 2026. Pricing and feature availability verified against &lt;a href="https://www.notion.com/pricing" rel="noopener noreferrer"&gt;notion.com/pricing&lt;/a&gt; and &lt;a href="https://www.notion.com/releases/2026-02-24" rel="noopener noreferrer"&gt;Notion release notes&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>notion</category>
      <category>ai</category>
      <category>automation</category>
      <category>mcp</category>
    </item>
    <item>
      <title>How to Self-Host Dify with Docker — Complete AI Workflow Guide 2026</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Sun, 05 Apr 2026 15:05:16 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/how-to-self-host-dify-with-docker-complete-ai-workflow-guide-2026-9c3</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/how-to-self-host-dify-with-docker-complete-ai-workflow-guide-2026-9c3</guid>
      <description>&lt;h1&gt;
  
  
  How to Self-Host Dify with Docker — Complete AI Workflow Guide 2026
&lt;/h1&gt;

&lt;p&gt;Dify Cloud's Team plan costs $159 per month. That is $1,908 per year for a platform you could run on a $5 VPS.&lt;/p&gt;

&lt;p&gt;Dify is an open-source AI workflow platform with 136,000+ GitHub stars. It combines a visual workflow builder, RAG pipeline, agent capabilities, and model management into a single self-hostable package. Think of it as n8n or Make.com, but purpose-built for AI — and you own the entire stack.&lt;/p&gt;

&lt;p&gt;This guide walks you through self-hosting Dify with Docker Compose, from first &lt;code&gt;git clone&lt;/code&gt; to a working RAG chatbot and multi-step AI workflow. We will also connect Ollama for fully offline, private AI inference. No API keys required for the local LLM path.&lt;/p&gt;

&lt;p&gt;By the end, you will have a production-capable Dify instance running on your own hardware, a working chatbot that answers questions from your documents, and enough context to decide whether Dify fits your project.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Dify?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Dify&lt;/strong&gt; is an open-source platform for building AI applications using a visual interface. Instead of writing Python scripts to chain LLM calls together, you drag and drop nodes on a canvas to build workflows — then deploy them as APIs or chatbots with a single click.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub stars&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;136,000+ (as of April 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Current version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1.10.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dify Open Source License (based on Apache 2.0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLM support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI, Anthropic, Google, Ollama, 100+ providers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core features&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Workflow builder, RAG pipeline, Agent mode, Prompt IDE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Docker Compose (self-hosted) or Dify Cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What makes Dify different from writing code
&lt;/h3&gt;

&lt;p&gt;If you have used frameworks like &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;LangGraph&lt;/a&gt; or &lt;a href="https://dev.to/articles/build-multi-agent-ai-crewai-python-tutorial-2026"&gt;CrewAI&lt;/a&gt;, you know the pattern: install the SDK, write Python classes for each agent, manage state, handle errors, deploy somewhere. It works, but the iteration cycle is slow. Change a prompt? Redeploy. Add a step? Refactor code.&lt;/p&gt;

&lt;p&gt;Dify's visual canvas lets you build the same pipelines without writing code for the orchestration layer. You still write code where it matters — custom tools, data transformations, API integrations — but the workflow logic is visual and instantly editable.&lt;/p&gt;

&lt;p&gt;This is not "no-code for people who cannot code." It is a productivity tool for developers who want faster iteration on AI workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Dify includes out of the box
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Workflow Builder:&lt;/strong&gt; Visual canvas for multi-step AI pipelines. Supports branching, loops, conditionals, and parallel execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RAG Pipeline:&lt;/strong&gt; Built-in document ingestion with chunking, embedding, and vector search. Upload PDFs, Markdown, or plain text and query them immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Mode:&lt;/strong&gt; Define agents with tools (web search, code execution, API calls) that reason and act autonomously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt IDE:&lt;/strong&gt; Compare model responses side by side. Test different prompts against the same input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model Management:&lt;/strong&gt; Connect any LLM provider — or run local models through Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Backend:&lt;/strong&gt; Every app you build gets an API endpoint automatically. No separate deployment needed.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Self-Host Dify? The Cost Breakdown
&lt;/h2&gt;

&lt;p&gt;The financial argument for self-hosting is straightforward. Here is what Dify Cloud costs versus running your own instance:&lt;/p&gt;

&lt;h3&gt;
  
  
  Dify Cloud pricing (as of April 2026)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Monthly price&lt;/th&gt;
&lt;th&gt;Message credits&lt;/th&gt;
&lt;th&gt;Team members&lt;/th&gt;
&lt;th&gt;Knowledge storage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sandbox&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;50 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Professional&lt;/td&gt;
&lt;td&gt;$59/month&lt;/td&gt;
&lt;td&gt;5,000/month&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;5 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team&lt;/td&gt;
&lt;td&gt;$159/month&lt;/td&gt;
&lt;td&gt;10,000/month&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;20 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: &lt;a href="https://dify.ai/pricing" rel="noopener noreferrer"&gt;dify.ai/pricing&lt;/a&gt; — prices verified April 2026.&lt;/p&gt;

&lt;h3&gt;
  
  
  Self-hosted cost
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Monthly cost&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VPS (Hetzner CX22 or similar)&lt;/td&gt;
&lt;td&gt;~$5/month&lt;/td&gt;
&lt;td&gt;2 vCPU, 4 GB RAM, 40 GB SSD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain + SSL&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Let's Encrypt is free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM inference (Ollama, local)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Runs on the same VPS for small models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM inference (API, optional)&lt;/td&gt;
&lt;td&gt;Pay-per-use&lt;/td&gt;
&lt;td&gt;Only if you want GPT-4, Claude, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$5/month&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$60/year&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Annual savings vs Dify Cloud Team: $1,908 - $60 = $1,848.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The catch: you handle your own updates, backups, and troubleshooting. If that sounds like work you would rather avoid, &lt;a href="https://cloud.dify.ai" rel="noopener noreferrer"&gt;Dify Cloud&lt;/a&gt; is a legitimate option — especially for the Sandbox tier, which is free and good enough for experimentation.&lt;/p&gt;

&lt;p&gt;For everyone else who prefers owning their infrastructure — as we discussed in our guide to &lt;a href="https://dev.to/articles/self-host-dev-stack-under-20-dollars-month"&gt;self-hosting your dev stack for under $20/month&lt;/a&gt; — let us set this up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before starting, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A server or local machine&lt;/strong&gt; with at least 2 CPU cores and 4 GB RAM

&lt;ul&gt;
&lt;li&gt;Local: macOS 10.14+, Linux, or Windows with WSL 2&lt;/li&gt;
&lt;li&gt;VPS: Any provider works. We use &lt;a href="https://dev.to/articles/hetzner-cloud-ai-gpu-server-guide-2026"&gt;Hetzner&lt;/a&gt; for the price-to-performance ratio.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Docker&lt;/strong&gt; installed (Docker Desktop on Mac/Windows, or Docker Engine on Linux)&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Docker Compose&lt;/strong&gt; v2 (ships with Docker Desktop; install separately on Linux if needed)&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Git&lt;/strong&gt; for cloning the repository&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;A domain name&lt;/strong&gt; (optional, but recommended for production with SSL)&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Verify your setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;span class="c"&gt;# Expected: Docker version 27.x or newer&lt;/span&gt;

docker compose version
&lt;span class="c"&gt;# Expected: Docker Compose version v2.x&lt;/span&gt;

git &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;span class="c"&gt;# Expected: git version 2.x&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If any of these commands fail, install the missing tool before continuing. Docker's official installation guides cover every platform.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step-by-Step: Docker Compose Setup
&lt;/h2&gt;

&lt;p&gt;This is the core of the guide. We will go from zero to a running Dify instance in about 10 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Clone the Dify repository
&lt;/h3&gt;

&lt;p&gt;Clone the latest stable release:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--branch&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://api.github.com/repos/langgenius/dify/releases/latest | jq &lt;span class="nt"&gt;-r&lt;/span&gt; .tag_name&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; https://github.com/langgenius/dify.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command automatically fetches the tag for the latest release instead of cloning the unstable &lt;code&gt;main&lt;/code&gt; branch. At the time of writing, that is &lt;code&gt;v1.10.1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you do not have &lt;code&gt;jq&lt;/code&gt; installed, you can clone a specific version directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--branch&lt;/span&gt; v1.10.1 https://github.com/langgenius/dify.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Navigate to the Docker directory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;dify/docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This directory contains the &lt;code&gt;docker-compose.yaml&lt;/code&gt; and the environment template.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Configure environment variables
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The default &lt;code&gt;.env&lt;/code&gt; works out of the box for local development. For production, you should change these values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Open .env in your editor&lt;/span&gt;
nano .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Critical settings to review:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Security: Generate a unique secret key
SECRET_KEY=sk-your-unique-random-string-here

# Database password (change from default)
DB_PASSWORD=your-secure-database-password

# Redis password
REDIS_PASSWORD=your-secure-redis-password

# If using a custom domain with separate subdomains for frontend/backend:
# COOKIE_DOMAIN=yourdomain.com
# NEXT_PUBLIC_COOKIE_DOMAIN=1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generate a secure secret key with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl rand &lt;span class="nt"&gt;-base64&lt;/span&gt; 42
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Start Dify
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pulls all required images and starts the services. The first run downloads several gigabytes of Docker images — give it a few minutes on a typical connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Verify all services are running
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see these services in a "running" state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;api&lt;/strong&gt; — Dify backend API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;worker&lt;/strong&gt; — Background task processor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;worker_beat&lt;/strong&gt; — Scheduled task manager&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;web&lt;/strong&gt; — Frontend application&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;plugin_daemon&lt;/strong&gt; — Plugin execution environment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nginx&lt;/strong&gt; — Reverse proxy (ports 80/443)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;db&lt;/strong&gt; — PostgreSQL database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;redis&lt;/strong&gt; — Redis cache&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;weaviate&lt;/strong&gt; — Vector database for RAG&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sandbox&lt;/strong&gt; — Code execution sandbox&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ssrf_proxy&lt;/strong&gt; — Security proxy for outbound requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any service shows as "restarting" or "exited," check its logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose logs &amp;lt;service-name&amp;gt; &lt;span class="nt"&gt;--tail&lt;/span&gt; 50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6: Complete initial setup
&lt;/h3&gt;

&lt;p&gt;Open your browser and navigate to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local:&lt;/strong&gt; &lt;code&gt;http://localhost/install&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPS:&lt;/strong&gt; &lt;code&gt;http://your-server-ip/install&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Create your admin account. This is the first user and will have full access to all workspace settings.&lt;/p&gt;

&lt;p&gt;After setup, access the main interface at &lt;code&gt;http://localhost&lt;/code&gt; (or your server IP). You should see the Dify dashboard — a clean interface with options to create chatbots, workflows, and agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Connecting Ollama for Local LLMs
&lt;/h2&gt;

&lt;p&gt;This is where self-hosting gets interesting. Instead of paying per API call to OpenAI or Anthropic, you can run open-source models locally through Ollama — completely free and fully private.&lt;/p&gt;

&lt;p&gt;If you have not set up Ollama yet, our &lt;a href="https://dev.to/articles/ollama-open-webui-self-hosting-guide-2026"&gt;Ollama + Open WebUI self-hosting guide&lt;/a&gt; covers installation in detail. Here is the quick version for Dify integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install Ollama
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS or Linux&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://ollama.com/install.sh | sh

&lt;span class="c"&gt;# Pull a capable model&lt;/span&gt;
ollama pull llama3.1:8b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a VPS with limited RAM, start with smaller models:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Lightweight option for 4GB RAM VPS&lt;/span&gt;
ollama pull qwen2.5:3b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configure Dify to use Ollama
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Log into your Dify instance.&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Settings → Model Provider&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Find &lt;strong&gt;Ollama&lt;/strong&gt; in the provider list and click &lt;strong&gt;Add&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Configure the connection:&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model Name&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;llama3.1:8b&lt;/code&gt; (or whichever model you pulled)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Base URL&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;http://host.docker.internal:11434&lt;/code&gt; (Mac/Windows) or &lt;code&gt;http://172.17.0.1:11434&lt;/code&gt; (Linux)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model Type&lt;/td&gt;
&lt;td&gt;LLM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Important for Linux users:&lt;/strong&gt; Docker containers cannot reach &lt;code&gt;localhost&lt;/code&gt; on the host machine. Use the Docker bridge IP (&lt;code&gt;172.17.0.1&lt;/code&gt;) or set &lt;code&gt;OLLAMA_HOST=0.0.0.0&lt;/code&gt; in your Ollama configuration and use your server's IP.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&gt; and test the connection.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Verify the connection
&lt;/h3&gt;

&lt;p&gt;After adding Ollama, go to &lt;strong&gt;Settings → Model Provider&lt;/strong&gt; and you should see your Ollama models listed. Try sending a test message in a new chatbot app — the response should come from your local model with zero API cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choosing the right model
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;RAM needed&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Qwen 2.5 3B&lt;/td&gt;
&lt;td&gt;3 GB&lt;/td&gt;
&lt;td&gt;Basic chat, small VPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.1 8B&lt;/td&gt;
&lt;td&gt;6 GB&lt;/td&gt;
&lt;td&gt;General use, good quality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 12B&lt;/td&gt;
&lt;td&gt;10 GB&lt;/td&gt;
&lt;td&gt;Strong reasoning, coding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.1 70B&lt;/td&gt;
&lt;td&gt;48 GB&lt;/td&gt;
&lt;td&gt;Near-frontier quality&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you want to explore more local model options, our &lt;a href="https://dev.to/articles/gemma-4-local-setup-ollama-open-webui-guide-2026"&gt;Gemma 4 local setup guide&lt;/a&gt; and the &lt;a href="https://dev.to/articles/docker-model-runner-vs-ollama-local-ai-deployment-2026"&gt;Docker Model Runner vs Ollama comparison&lt;/a&gt; cover model selection in depth.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building Your First RAG Chatbot in Dify
&lt;/h2&gt;

&lt;p&gt;RAG (Retrieval-Augmented Generation) is the killer feature for most Dify users. You upload your documents, and the chatbot answers questions using your data instead of hallucinating.&lt;/p&gt;

&lt;p&gt;If you want to understand RAG fundamentals in depth, our &lt;a href="https://dev.to/articles/build-rag-app-python-llamaindex-tutorial-2026"&gt;RAG tutorial with LlamaIndex&lt;/a&gt; explains the concepts thoroughly. Here we will build one using Dify's visual interface — no code required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create a Knowledge Base
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Knowledge&lt;/strong&gt; in the left sidebar.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Knowledge&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Name it something descriptive (e.g., "Product Documentation").&lt;/li&gt;
&lt;li&gt;Upload your documents — Dify supports PDF, Markdown, TXT, HTML, DOCX, and CSV.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 2: Configure chunking and indexing
&lt;/h3&gt;

&lt;p&gt;Dify offers two indexing modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;High Quality:&lt;/strong&gt; Uses an embedding model to create vector representations. Better retrieval accuracy, but requires an embedding model (OpenAI's &lt;code&gt;text-embedding-3-small&lt;/code&gt; or a local alternative).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Economical:&lt;/strong&gt; Uses keyword-based indexing. No embedding model needed, but lower retrieval quality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most use cases, choose &lt;strong&gt;High Quality&lt;/strong&gt;. If you are running Ollama, you can use a local embedding model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull nomic-embed-text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then configure it in Dify's model settings as an embedding provider.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Create a chatbot app
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Studio&lt;/strong&gt; → &lt;strong&gt;Create App&lt;/strong&gt; → &lt;strong&gt;Chatbot&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Name your app.&lt;/li&gt;
&lt;li&gt;In the app configuration:

&lt;ul&gt;
&lt;li&gt;Set the &lt;strong&gt;Model&lt;/strong&gt; to your preferred LLM (Ollama local or an API provider).&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Context&lt;/strong&gt;, click &lt;strong&gt;Add&lt;/strong&gt; and select your Knowledge Base.&lt;/li&gt;
&lt;li&gt;Write a system prompt:
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a helpful assistant that answers questions based on the provided context. 
If the context does not contain the answer, say so honestly. 
Do not make up information.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Test your chatbot
&lt;/h3&gt;

&lt;p&gt;Use the &lt;strong&gt;Debug and Preview&lt;/strong&gt; panel on the right to ask questions about your uploaded documents. Dify shows which document chunks were retrieved, so you can verify the answers are grounded in your data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Publish and share
&lt;/h3&gt;

&lt;p&gt;Click &lt;strong&gt;Publish&lt;/strong&gt; to make your chatbot available. Dify gives you multiple deployment options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web app URL&lt;/strong&gt; — A hosted chat interface anyone can access&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API endpoint&lt;/strong&gt; — Integrate into your own application&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embed code&lt;/strong&gt; — Drop a chat widget into any website&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each app gets its own API key. You can rate-limit access and monitor usage from the dashboard.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building an AI Workflow (Multi-Step Agent Pipeline)
&lt;/h2&gt;

&lt;p&gt;Beyond simple chatbots, Dify's workflow builder lets you create multi-step AI pipelines — similar to what you would build with &lt;a href="https://dev.to/articles/build-multi-agent-ai-crewai-python-tutorial-2026"&gt;CrewAI&lt;/a&gt; or &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;LangGraph&lt;/a&gt;, but visually.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: Content Research and Writing Pipeline
&lt;/h3&gt;

&lt;p&gt;Let us build a workflow that takes a topic, researches it, writes an article, and reviews the output.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: Create a new workflow
&lt;/h4&gt;

&lt;p&gt;Go to &lt;strong&gt;Studio&lt;/strong&gt; → &lt;strong&gt;Create App&lt;/strong&gt; → &lt;strong&gt;Workflow&lt;/strong&gt;. You will see a canvas with a &lt;strong&gt;Start&lt;/strong&gt; node.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Add the research step
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;+&lt;/strong&gt; after the Start node.&lt;/li&gt;
&lt;li&gt;Add an &lt;strong&gt;LLM&lt;/strong&gt; node.&lt;/li&gt;
&lt;li&gt;Configure it:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; "Researcher"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Your preferred LLM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a research analyst. Given the topic "{{topic}}", provide:
1. Key facts and statistics
2. Current trends
3. Common misconceptions
4. Three unique angles for an article

Be concise and factual. Cite sources where possible.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 3: Add the writing step
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Add another &lt;strong&gt;LLM&lt;/strong&gt; node after the Researcher.&lt;/li&gt;
&lt;li&gt;Configure it:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; "Writer"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Your preferred LLM (can be different from the researcher)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a technical writer. Using the research below, write a 500-word article section.

Research:
{{researcher_output}}

Write in a practical, builder-oriented tone. Include specific examples and actionable advice.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 4: Add the review step
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Add a final &lt;strong&gt;LLM&lt;/strong&gt; node.&lt;/li&gt;
&lt;li&gt;Configure it:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; "Reviewer"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Review this article section for:
1. Factual accuracy
2. Clarity and readability
3. Actionable value for the reader

Article:
{{writer_output}}

Provide specific suggestions for improvement, then output the final revised version.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 5: Run and iterate
&lt;/h4&gt;

&lt;p&gt;Click &lt;strong&gt;Run&lt;/strong&gt; to execute the entire pipeline. Dify shows the output of each node, so you can see exactly what the Researcher found, what the Writer produced, and what the Reviewer changed.&lt;/p&gt;

&lt;p&gt;This is the same three-agent pattern we built in code with &lt;a href="https://dev.to/articles/build-multi-agent-ai-crewai-python-tutorial-2026"&gt;CrewAI&lt;/a&gt; — but built in 5 minutes instead of 50 lines of Python. The trade-off is flexibility: complex logic, custom tools, and programmatic control are easier in code. Simple-to-moderate workflows are faster in Dify's visual builder.&lt;/p&gt;

&lt;h3&gt;
  
  
  More workflow features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Conditional branching:&lt;/strong&gt; Route data through different paths based on LLM output or variable values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code nodes:&lt;/strong&gt; Write Python or JavaScript for custom transformations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP request nodes:&lt;/strong&gt; Call external APIs mid-workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge retrieval nodes:&lt;/strong&gt; Pull RAG context at any point in the pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variable aggregator:&lt;/strong&gt; Combine outputs from parallel branches.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Dify vs Flowise vs Langflow — Comparison
&lt;/h2&gt;

&lt;p&gt;If you are evaluating self-hosted AI workflow platforms, these three are the main contenders. Here is how they compare:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Dify&lt;/th&gt;
&lt;th&gt;Flowise&lt;/th&gt;
&lt;th&gt;Langflow&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub stars&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;136K+&lt;/td&gt;
&lt;td&gt;36K+&lt;/td&gt;
&lt;td&gt;52K+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python + TypeScript&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Visual builder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, full canvas&lt;/td&gt;
&lt;td&gt;Yes, node-based&lt;/td&gt;
&lt;td&gt;Yes, node-based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Built-in RAG&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, complete pipeline&lt;/td&gt;
&lt;td&gt;Yes, via components&lt;/td&gt;
&lt;td&gt;Yes, via components&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, native&lt;/td&gt;
&lt;td&gt;Yes, via LangChain&lt;/td&gt;
&lt;td&gt;Yes, native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Built-in chat UI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, publishable apps&lt;/td&gt;
&lt;td&gt;Yes, embedded chat&lt;/td&gt;
&lt;td&gt;Yes, playground&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plugin system&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (plugin daemon)&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Community components&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-user / teams&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, workspace-based&lt;/td&gt;
&lt;td&gt;Basic auth&lt;/td&gt;
&lt;td&gt;Basic auth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API generation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic for all apps&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model providers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100+ via native integration&lt;/td&gt;
&lt;td&gt;Via LangChain&lt;/td&gt;
&lt;td&gt;Via LangChain/direct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prompt IDE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, with comparison&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Self-host complexity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Docker Compose (11 services)&lt;/td&gt;
&lt;td&gt;Docker Compose (1-2 services)&lt;/td&gt;
&lt;td&gt;Docker Compose (1-2 services)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resource requirements&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4 GB+ RAM&lt;/td&gt;
&lt;td&gt;1-2 GB RAM&lt;/td&gt;
&lt;td&gt;2 GB RAM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Production AI apps with teams&lt;/td&gt;
&lt;td&gt;Quick LangChain prototypes&lt;/td&gt;
&lt;td&gt;Flexible AI pipelines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache 2.0 (modified)&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  When to choose Dify
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You need multi-user workspace management with roles and permissions.&lt;/li&gt;
&lt;li&gt;You want built-in RAG without configuring vector databases separately.&lt;/li&gt;
&lt;li&gt;You are building customer-facing AI applications that need publishable UIs and APIs.&lt;/li&gt;
&lt;li&gt;You want a Prompt IDE for systematic prompt engineering.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to choose Flowise
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You want the lightest possible self-hosted option (runs on 1 GB RAM).&lt;/li&gt;
&lt;li&gt;You are already deep in the LangChain ecosystem.&lt;/li&gt;
&lt;li&gt;You need a quick prototype, not a production platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to choose Langflow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You want the most flexible node-based builder.&lt;/li&gt;
&lt;li&gt;You prefer Python-based customization.&lt;/li&gt;
&lt;li&gt;You want community-contributed components.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For automation workflows that are not AI-specific (connecting SaaS tools, triggering actions, processing data), consider &lt;a href="https://dev.to/articles/zapier-vs-make-vs-n8n-automation-comparison-2026"&gt;n8n, Zapier, or Make&lt;/a&gt; instead — they are better suited for general automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Production Tips
&lt;/h2&gt;

&lt;p&gt;Running Dify locally for testing is one thing. Running it reliably for a team or customer-facing application requires a few additional steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reverse proxy with SSL
&lt;/h3&gt;

&lt;p&gt;For production, put Dify behind a reverse proxy with HTTPS. Here is a minimal Caddy configuration (Caddy handles SSL automatically via Let's Encrypt):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;dify.yourdomain.com&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;reverse_proxy&lt;/span&gt; &lt;span class="nf"&gt;localhost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or with Nginx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;dify.yourdomain.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="n"&gt;/etc/letsencrypt/live/dify.yourdomain.com/fullchain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="n"&gt;/etc/letsencrypt/live/dify.yourdomain.com/privkey.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://localhost:80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are using a self-hosted PaaS like Coolify or Dokploy — which we compared in our &lt;a href="https://dev.to/articles/coolify-vs-dokploy-self-hosted-paas-comparison-2026"&gt;Coolify vs Dokploy guide&lt;/a&gt; — they handle reverse proxy and SSL automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backups
&lt;/h3&gt;

&lt;p&gt;The critical data to back up:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL database&lt;/strong&gt; — Contains all your apps, workflows, and user data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector database (Weaviate)&lt;/strong&gt; — Contains your RAG knowledge base embeddings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uploaded files&lt;/strong&gt; — Documents you uploaded for knowledge bases.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A simple backup script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# Backup Dify data&lt;/span&gt;
&lt;span class="nv"&gt;BACKUP_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/backups/dify/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y%m%d&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Backup PostgreSQL&lt;/span&gt;
docker compose &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-T&lt;/span&gt; db pg_dump &lt;span class="nt"&gt;-U&lt;/span&gt; postgres dify &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;/dify_db.sql"&lt;/span&gt;

&lt;span class="c"&gt;# Backup volumes&lt;/span&gt;
docker compose &lt;span class="nb"&gt;cp &lt;/span&gt;weaviate:/var/lib/weaviate &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;/weaviate_data"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Backup completed: &lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run this daily via cron. Test your restore process before you need it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating Dify
&lt;/h3&gt;

&lt;p&gt;Check the &lt;a href="https://github.com/langgenius/dify/releases" rel="noopener noreferrer"&gt;Dify GitHub Releases&lt;/a&gt; for new versions. The update process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;dify/docker

&lt;span class="c"&gt;# Pull latest changes&lt;/span&gt;
git fetch &lt;span class="nt"&gt;--all&lt;/span&gt;
git checkout v1.10.1  &lt;span class="c"&gt;# Replace with the new version tag&lt;/span&gt;

&lt;span class="c"&gt;# Check for .env changes&lt;/span&gt;
diff .env .env.example

&lt;span class="c"&gt;# Apply any new environment variables, then restart&lt;/span&gt;
docker compose down
docker compose pull
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Always review the release notes for breaking changes before updating. Back up your database before every major version upgrade.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance tuning
&lt;/h3&gt;

&lt;p&gt;For a 4 GB RAM VPS, these settings help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Limit Weaviate memory in &lt;code&gt;.env&lt;/code&gt;: &lt;code&gt;WEAVIATE_QUERY_DEFAULTS_LIMIT=10&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Use economical indexing mode if you do not need vector search&lt;/li&gt;
&lt;li&gt;Run smaller Ollama models (3B-8B parameter range)&lt;/li&gt;
&lt;li&gt;Monitor memory usage: &lt;code&gt;docker stats&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For heavier workloads, upgrade to an 8 GB RAM VPS (~$10/month on most providers) — this gives comfortable headroom for Dify plus a local 8B model via Ollama.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is Dify used for?
&lt;/h3&gt;

&lt;p&gt;Dify is an open-source platform for building AI applications — chatbots, RAG systems, multi-step workflows, and autonomous agents — using a visual interface. It handles LLM orchestration, document retrieval, and API deployment so you can focus on the application logic rather than infrastructure plumbing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Dify free to self-host?
&lt;/h3&gt;

&lt;p&gt;Yes. The self-hosted Community Edition is free under the Dify Open Source License (based on Apache 2.0). You pay only for your server costs and any external API calls to LLM providers. Using Ollama for local inference makes the LLM cost zero.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much RAM does Dify need?
&lt;/h3&gt;

&lt;p&gt;Minimum 4 GB for the Dify platform itself (without local LLM inference). If running Ollama alongside Dify for local models, plan for 8 GB+ depending on model size. A 3B parameter model needs ~3 GB additional RAM; an 8B model needs ~6 GB.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Dify with ChatGPT / Claude / Gemini?
&lt;/h3&gt;

&lt;p&gt;Yes. Dify supports 100+ model providers. You can add your OpenAI, Anthropic, or Google API key in Settings → Model Provider and use any available model. You can also mix providers — use a cheap local model for simple tasks and GPT-4 or Claude for complex reasoning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dify vs LangChain — what is the difference?
&lt;/h3&gt;

&lt;p&gt;LangChain is a Python/JavaScript library for building LLM applications in code. Dify is a visual platform that includes a workflow builder, RAG pipeline, and deployment tools. If you prefer writing code and need maximum flexibility, use LangChain (or &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;LangGraph&lt;/a&gt; for agents). If you want faster iteration with a visual interface and built-in deployment, use Dify.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I run Dify and Ollama on the same server?
&lt;/h3&gt;

&lt;p&gt;Yes, and this is the recommended setup for cost-effective self-hosting. Install Ollama on the host machine, pull your models, then configure Dify to connect via the Docker bridge IP. Both services share the same server, and Ollama handles inference while Dify handles orchestration.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I migrate from Dify Cloud to self-hosted?
&lt;/h3&gt;

&lt;p&gt;Dify Cloud supports exporting your apps and workflows as DSL files. Download them from the cloud interface, then import them into your self-hosted instance via &lt;strong&gt;Studio → Import DSL&lt;/strong&gt;. Knowledge bases need to be re-uploaded and re-indexed, as vector embeddings are not portable between instances.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Dify secure enough for production?
&lt;/h3&gt;

&lt;p&gt;The self-hosted version includes sandboxed code execution, an SSRF proxy for outbound requests, and role-based access control. For additional security: run behind a reverse proxy with SSL, change all default passwords in &lt;code&gt;.env&lt;/code&gt;, restrict network access to the Dify ports, and keep the platform updated.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to Build Next
&lt;/h2&gt;

&lt;p&gt;You have a running Dify instance. Here are practical next steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build a customer support bot&lt;/strong&gt; — Upload your product docs as a Knowledge Base, create a chatbot app, embed it on your website.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create an internal research tool&lt;/strong&gt; — Connect to your company's documents and let your team ask questions in natural language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate content workflows&lt;/strong&gt; — Build the research-write-review pipeline from earlier and connect it to your publishing workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experiment with agents&lt;/strong&gt; — Give an LLM access to web search, code execution, and your internal APIs. Let it solve problems autonomously.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For more complex agent architectures, our tutorials on &lt;a href="https://dev.to/articles/build-multi-agent-ai-crewai-python-tutorial-2026"&gt;CrewAI&lt;/a&gt; and &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;LangGraph&lt;/a&gt; show what is possible when you need programmatic control beyond what a visual builder offers. And if you are curious about how AI agents work in a real production environment, read how &lt;a href="https://dev.to/articles/how-we-built-company-with-14-ai-agents"&gt;we built a company with 14 AI agents&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The best part of self-hosting: every experiment costs you nothing beyond the electricity. No API meters ticking. No message credit limits. Just you, your models, and whatever you want to build.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Last updated: April 2026. Dify version referenced: v1.10.1. All pricing verified at time of publication — check provider websites for current rates.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article may contain affiliate links to products or services we recommend. If you purchase through these links, we may earn a small commission at no extra cost to you. This helps support Effloow and allows us to continue creating free, high-quality content. See our &lt;a href="https://dev.to/affiliate-disclosure"&gt;affiliate disclosure&lt;/a&gt; for full details.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dify</category>
      <category>docker</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Build Your First Multi-Agent AI System with CrewAI + Python — Step-by-Step Tutorial (2026)</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Sun, 05 Apr 2026 15:05:01 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/build-your-first-multi-agent-ai-system-with-crewai-python-step-by-step-tutorial-2026-2abb</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/build-your-first-multi-agent-ai-system-with-crewai-python-step-by-step-tutorial-2026-2abb</guid>
      <description>&lt;h1&gt;
  
  
  Build Your First Multi-Agent AI System with CrewAI + Python — Step-by-Step Tutorial (2026)
&lt;/h1&gt;

&lt;p&gt;You want multiple AI agents working together — one to research, one to write, one to review. You have heard of CrewAI but every tutorial stops at "Hello World." This one does not.&lt;/p&gt;

&lt;p&gt;In this tutorial, you will build the same &lt;strong&gt;three-agent content pipeline&lt;/strong&gt; we built in our &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;LangGraph tutorial&lt;/a&gt; and &lt;a href="https://dev.to/articles/openai-agents-sdk-multi-agent-python-tutorial-2026"&gt;OpenAI Agents SDK tutorial&lt;/a&gt; — but using CrewAI. By the end, you will have a working system and enough context to decide which framework fits your project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What you will build:&lt;/strong&gt; A Research Agent that gathers information, a Writer Agent that drafts an article, and a Reviewer Agent that validates quality. All three collaborate as a Crew, producing a polished article with a single command.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Is CrewAI?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CrewAI&lt;/strong&gt; is an open-source Python framework for orchestrating autonomous AI agents. It lets you define agents with specific roles, assign them tasks, and run them together as a crew — either sequentially or in a hierarchical structure with a manager agent.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python (3.10 to 3.13)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Current version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.175.0 (as of April 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLM support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI (default), Anthropic, Ollama, 100+ via LiteLLM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core primitives&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent, Task, Crew, Tool, Process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Package manager&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;uv (recommended), pip also works&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;CrewAI's philosophy: &lt;strong&gt;role-playing agents with structured collaboration&lt;/strong&gt;. Instead of building explicit graphs (like &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;LangGraph&lt;/a&gt;) or wiring handoffs between agents (like the &lt;a href="https://dev.to/articles/openai-agents-sdk-multi-agent-python-tutorial-2026"&gt;OpenAI Agents SDK&lt;/a&gt;), you define each agent's role, goal, and backstory — then let the framework handle coordination.&lt;/p&gt;

&lt;p&gt;Think of it like assembling a project team. You pick the people, define who does what, and the team works together to deliver the result.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before we start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.10 or higher&lt;/strong&gt; (CrewAI supports 3.10 through 3.13)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An OpenAI API key&lt;/strong&gt; — CrewAI defaults to GPT-4, but you can swap in any LLM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic Python knowledge&lt;/strong&gt; — functions, classes, f-strings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A terminal and code editor&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;We will use &lt;code&gt;pip&lt;/code&gt; for simplicity. CrewAI's official toolchain uses &lt;code&gt;uv&lt;/code&gt;, but pip works fine for tutorials.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;crewai-content-pipeline &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;crewai-content-pipeline
python &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate  &lt;span class="c"&gt;# On Windows: venv\Scripts\activate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install CrewAI and the tools package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;crewai crewai-tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Version pinning:&lt;/strong&gt; This tutorial was built with CrewAI 0.175.0. Pin your version in production:&lt;/p&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install crewai==0.175.0 crewai-tools==0.38.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;Set your API key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sk-your-key-here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;crewai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__version__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Expected: 0.175.0
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Core Concepts: Agents, Tasks, Crews, Tools, and Processes
&lt;/h2&gt;

&lt;p&gt;CrewAI has five building blocks. Understanding these is the key to everything that follows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents
&lt;/h3&gt;

&lt;p&gt;An Agent is an autonomous unit with a &lt;strong&gt;role&lt;/strong&gt;, a &lt;strong&gt;goal&lt;/strong&gt;, and a &lt;strong&gt;backstory&lt;/strong&gt;. The role defines its expertise. The goal drives its decisions. The backstory gives the LLM context for how to behave.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;

&lt;span class="n"&gt;researcher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Senior Research Analyst&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Find comprehensive, accurate information about the given topic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a seasoned research analyst with 15 years of experience. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are known for your ability to find the most relevant information &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;and distinguish credible sources from noise.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key parameters beyond the basics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;llm&lt;/code&gt; — which model to use (default: GPT-4)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tools&lt;/code&gt; — list of tools the agent can use&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;allow_delegation&lt;/code&gt; — whether the agent can pass work to other agents (default: &lt;code&gt;False&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;max_iter&lt;/code&gt; — maximum reasoning iterations before forcing an answer (default: 20)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;memory&lt;/code&gt; — whether to maintain conversation history across tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tasks
&lt;/h3&gt;

&lt;p&gt;A Task is a specific assignment for an agent. It needs a &lt;strong&gt;description&lt;/strong&gt; (what to do) and an &lt;strong&gt;expected_output&lt;/strong&gt; (what the result should look like).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;

&lt;span class="n"&gt;research_task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research the topic &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;{topic}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; thoroughly. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Find key facts, recent developments, and expert opinions. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Focus on information from 2025-2026.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;expected_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A structured research brief with at least 10 key findings, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;each with its source or basis.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;researcher&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tasks can depend on each other through the &lt;code&gt;context&lt;/code&gt; parameter — a task receives the output of its context tasks as input.&lt;/p&gt;

&lt;h3&gt;
  
  
  Crews
&lt;/h3&gt;

&lt;p&gt;A Crew is a team of agents working on a set of tasks. You choose a &lt;strong&gt;process&lt;/strong&gt; — sequential or hierarchical — that determines how work flows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Crew&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;

&lt;span class="n"&gt;crew&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Crew&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;researcher&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reviewer&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;research_task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writing_task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;review_task&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sequential&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tools
&lt;/h3&gt;

&lt;p&gt;Tools extend what agents can do. CrewAI ships 30+ built-in tools (web search, file reading, code execution) and lets you build custom ones.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai.tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;

&lt;span class="nd"&gt;@tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;word_count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;word_count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Count the number of words in the given text.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Word count: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Processes
&lt;/h3&gt;

&lt;p&gt;CrewAI supports two execution strategies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sequential&lt;/strong&gt; — tasks run in order, each feeding into the next. Simple and predictable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hierarchical&lt;/strong&gt; — a manager agent distributes tasks to the best-suited agent. Requires &lt;code&gt;manager_llm&lt;/code&gt; to be set.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this tutorial, we use sequential. It maps naturally to a pipeline: research, then write, then review.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project Setup
&lt;/h2&gt;

&lt;p&gt;Create the following file structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;crewai-content-pipeline/
├── main.py
├── agents.py
├── tasks.py
├── tools.py
└── requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;requirements.txt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;crewai&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;=0.175.0&lt;/span&gt;
&lt;span class="err"&gt;crewai-tools&lt;/span&gt;
&lt;span class="err"&gt;python-dotenv&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Building Agent #1: The Research Agent
&lt;/h2&gt;

&lt;p&gt;The Research Agent gathers information on a given topic. We give it the SerperDevTool for web search capability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;agents.py:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai_tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SerperDevTool&lt;/span&gt;

&lt;span class="n"&gt;search_tool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SerperDevTool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_research_agent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Senior Research Analyst&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Produce a comprehensive research brief on the assigned topic. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Find accurate, up-to-date facts with credible sources.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a veteran research analyst who has spent 15 years &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;distilling complex topics into clear, well-sourced briefs. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You never fabricate information — if you cannot verify a claim, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;you flag it as unverified.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;search_tool&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;allow_delegation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_iter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why &lt;code&gt;allow_delegation=False&lt;/code&gt;?&lt;/strong&gt; In sequential mode, each agent handles its own task. Delegation is useful in hierarchical setups where a manager assigns work dynamically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; If you do not have a Serper API key, you can skip the search tool and the Research Agent will rely on its LLM training data. The pipeline still works — you just lose real-time web results. Get a key at &lt;a href="https://serper.dev" rel="noopener noreferrer"&gt;serper.dev&lt;/a&gt; (free tier available).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Building Agent #2: The Writer Agent
&lt;/h2&gt;

&lt;p&gt;The Writer Agent takes the research brief and produces a well-structured article.&lt;/p&gt;

&lt;p&gt;Add to &lt;strong&gt;agents.py:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_writer_agent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Senior Content Writer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Transform research findings into an engaging, well-structured &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;article that is informative and easy to read.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are an experienced technical writer who turns dense research &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;into clear, compelling articles. You write in a practical, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;builder-oriented tone. You use short paragraphs, concrete &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;examples, and avoid jargon unless you define it first.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;allow_delegation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_iter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No tools needed here — the Writer Agent works purely with the text it receives from the Research Agent.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building Agent #3: The Reviewer Agent
&lt;/h2&gt;

&lt;p&gt;The Reviewer Agent checks the article for quality, accuracy, and completeness. We give it a custom word-count tool so it can enforce length requirements.&lt;/p&gt;

&lt;p&gt;Add to &lt;strong&gt;tools.py:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai.tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;

&lt;span class="nd"&gt;@tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;word_count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;word_count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Count the number of words in a given text.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The text contains &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; words.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="nd"&gt;@tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;check_structure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_structure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Check if the article has proper heading structure.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;h2_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;## &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;h3_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;### &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;has_intro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="n"&gt;issues&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;h2_count&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Only &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;h2_count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; H2 headings found (minimum 3 recommended)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;h3_count&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Only &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;h3_count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; H3 headings found (minimum 2 recommended)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;has_intro&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Article may be missing an introduction before the first heading&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Structure issues found:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;- &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;- &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Article structure looks good: sufficient headings and proper introduction.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the Reviewer Agent to &lt;strong&gt;agents.py:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;word_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;check_structure&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_reviewer_agent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Senior Content Reviewer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review the article for accuracy, completeness, readability, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;and proper structure. Provide specific, actionable feedback.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a meticulous editor with a sharp eye for factual errors, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;weak arguments, and structural problems. You review with the &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reader in mind — if something is confusing, you flag it.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;word_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;check_structure&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;allow_delegation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_iter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Defining the Tasks
&lt;/h2&gt;

&lt;p&gt;Each task maps to one agent and describes what that agent needs to deliver. The &lt;code&gt;context&lt;/code&gt; parameter creates the data flow between tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tasks.py:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;create_research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;create_writer_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;create_reviewer_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Create agents
&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_research_agent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;writer_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_writer_agent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;reviewer_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_reviewer_agent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_tasks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;research_task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research the topic: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your deliverables:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1. At least 10 key findings with supporting details&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2. Recent developments (2025-2026 preferred)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3. Notable expert opinions or industry data&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4. Any controversies or counterarguments&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Flag any claim you cannot verify as [UNVERIFIED].&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;expected_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A structured research brief in markdown format with &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;numbered findings, each containing the fact and its basis.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;writing_task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write a comprehensive article about: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Requirements:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- Use the research brief from the previous task as your source&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- Write 1500-2000 words&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- Use clear H2 and H3 headings&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- Include a compelling introduction and conclusion&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- Write in a practical, builder-oriented tone&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- Use short paragraphs (3-4 sentences max)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- Include concrete examples where possible&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;expected_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A well-structured article in markdown format, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1500-2000 words, with proper heading hierarchy.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;research_task&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;review_task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review the article produced by the Writer Agent.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Check for:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1. Factual accuracy — flag any unsupported claims&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2. Structure — proper heading hierarchy (H2/H3)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3. Word count — minimum 1500 words&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4. Readability — clear language, short paragraphs&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5. Completeness — does it cover the topic adequately?&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Use the word_count and check_structure tools.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Produce the final article with any necessary corrections applied.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;expected_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The final, reviewed article in markdown format with a &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;brief reviewer note at the top summarizing any changes made.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;reviewer_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;writing_task&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;output_file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output/article.md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;research_task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writing_task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;review_task&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How &lt;code&gt;context&lt;/code&gt; works:&lt;/strong&gt; When &lt;code&gt;writing_task&lt;/code&gt; has &lt;code&gt;context=[research_task]&lt;/code&gt;, the Writer Agent automatically receives the Research Agent's output as part of its input. This is how data flows through the pipeline without you manually passing strings between agents.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Assembling the Crew — Sequential and Hierarchical Processes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;main.py:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Crew&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;create_tasks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reviewer_agent&lt;/span&gt;

&lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_content_pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;process_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sequential&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Run the three-agent content pipeline.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_tasks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;process_type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hierarchical&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;crew&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Crew&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reviewer_agent&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hierarchical&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;manager_llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;crew&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Crew&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writer_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reviewer_agent&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sequential&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;crew&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;kickoff&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PIPELINE COMPLETE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Token usage: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;token_usage&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Final output saved to: output/article.md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;topic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The rise of multi-agent AI systems in 2026 and why they matter for developers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="nf"&gt;run_content_pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Sequential vs. Hierarchical: When to Use Each
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Sequential&lt;/strong&gt; (&lt;code&gt;Process.sequential&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tasks run in a fixed order: research → write → review&lt;/li&gt;
&lt;li&gt;Each task's output feeds into the next via &lt;code&gt;context&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Predictable, easy to debug&lt;/li&gt;
&lt;li&gt;Best for linear pipelines where the workflow is known upfront&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hierarchical&lt;/strong&gt; (&lt;code&gt;Process.hierarchical&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A manager agent (powered by &lt;code&gt;manager_llm&lt;/code&gt;) decides which agent handles which task&lt;/li&gt;
&lt;li&gt;Agents can be reassigned dynamically based on results&lt;/li&gt;
&lt;li&gt;More flexible but harder to predict&lt;/li&gt;
&lt;li&gt;Best for complex projects where task assignment depends on intermediate results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most content pipelines, &lt;strong&gt;sequential is the right choice&lt;/strong&gt;. Use hierarchical when you have many agents and tasks where the optimal routing is not obvious upfront.&lt;/p&gt;

&lt;h3&gt;
  
  
  Running the Pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will see verbose output showing each agent's reasoning process. The final article is saved to &lt;code&gt;output/article.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Expected output structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;[Research Agent] Starting research on: The rise of multi-agent AI systems...
[Research Agent] Using SerperDevTool to search...
[Research Agent] Found 10 key findings...
[Writer Agent] Received research brief, beginning article...
[Writer Agent] Draft complete: 1,847 words
[Reviewer Agent] Reviewing article structure...
[Reviewer Agent] Using word_count tool... Result: 1,847 words
[Reviewer Agent] Using check_structure tool... Structure looks good
[Reviewer Agent] Final article approved with minor edits

PIPELINE COMPLETE
Token usage: {'total_tokens': 18432, 'prompt_tokens': 14201, 'completion_tokens': 4231}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Actual output format and token counts will vary depending on your CrewAI version and LLM model. The pattern above shows typical behavior, not exact output.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Real Cost Breakdown
&lt;/h2&gt;

&lt;p&gt;Running this three-agent pipeline costs real money. Here is what to expect with GPT-4o pricing as of early 2026:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Typical Range&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total tokens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15,000 – 25,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prompt tokens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12,000 – 18,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Completion tokens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3,000 – 7,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost per run (GPT-4o)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.08 – $0.15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost per run (GPT-4o-mini)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.005 – $0.015&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Execution time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;45 – 120 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; Token counts based on OpenAI's published pricing at &lt;a href="https://openai.com/pricing" rel="noopener noreferrer"&gt;openai.com/pricing&lt;/a&gt;. Actual costs depend on prompt complexity, agent verbosity, and tool usage. [UNVERIFIED: exact per-run costs — run your own pipeline and check &lt;code&gt;result.token_usage&lt;/code&gt; for actual numbers.]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Cost optimization tips:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use GPT-4o-mini for the Writer and Reviewer&lt;/strong&gt; — set &lt;code&gt;llm="gpt-4o-mini"&lt;/code&gt; on agents where you do not need maximum reasoning capability&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduce &lt;code&gt;max_iter&lt;/code&gt;&lt;/strong&gt; — lower the iteration cap to prevent agents from over-thinking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable caching&lt;/strong&gt; — CrewAI caches tool results by default, avoiding duplicate API calls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;verbose=False&lt;/code&gt; in production&lt;/strong&gt; — verbose logging adds overhead&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  CrewAI vs LangGraph vs OpenAI Agents SDK — Comparison
&lt;/h2&gt;

&lt;p&gt;Having built the same content pipeline with all three frameworks (Articles &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;#10&lt;/a&gt;, &lt;a href="https://dev.to/articles/openai-agents-sdk-multi-agent-python-tutorial-2026"&gt;#26&lt;/a&gt;, and this one), here is how they compare:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;CrewAI&lt;/th&gt;
&lt;th&gt;LangGraph&lt;/th&gt;
&lt;th&gt;OpenAI Agents SDK&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Philosophy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Role-playing teams&lt;/td&gt;
&lt;td&gt;Graph-based workflows&lt;/td&gt;
&lt;td&gt;Handoff-based orchestration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low — define roles, run crew&lt;/td&gt;
&lt;td&gt;Medium — learn graph concepts&lt;/td&gt;
&lt;td&gt;Low — Pythonic, minimal API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-agent setup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in (Crew + Process)&lt;/td&gt;
&lt;td&gt;Manual (nodes + edges)&lt;/td&gt;
&lt;td&gt;Built-in (Handoffs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sequential workflow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Process.sequential&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Define edges explicitly&lt;/td&gt;
&lt;td&gt;Chain handoffs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hierarchical workflow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Process.hierarchical&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Custom manager node&lt;/td&gt;
&lt;td&gt;Not built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tool integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30+ built-in + custom&lt;/td&gt;
&lt;td&gt;LangChain tools ecosystem&lt;/td&gt;
&lt;td&gt;Function-based tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Guardrails&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task-level guardrails&lt;/td&gt;
&lt;td&gt;Custom validation nodes&lt;/td&gt;
&lt;td&gt;Built-in Guardrails class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in (short/long-term)&lt;/td&gt;
&lt;td&gt;Built-in persistence&lt;/td&gt;
&lt;td&gt;External (bring your own)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Structured output&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pydantic models&lt;/td&gt;
&lt;td&gt;Pydantic via LangChain&lt;/td&gt;
&lt;td&gt;Pydantic models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Async support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (&lt;code&gt;akickoff()&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Yes (native)&lt;/td&gt;
&lt;td&gt;Yes (&lt;code&gt;Runner.run()&lt;/code&gt; is async)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLM flexibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100+ models via LiteLLM&lt;/td&gt;
&lt;td&gt;100+ via LangChain&lt;/td&gt;
&lt;td&gt;OpenAI native, LiteLLM addon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Team-based AI workflows&lt;/td&gt;
&lt;td&gt;Complex stateful workflows&lt;/td&gt;
&lt;td&gt;OpenAI-native agent systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lines of code (this tutorial)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~120&lt;/td&gt;
&lt;td&gt;~180&lt;/td&gt;
&lt;td&gt;~100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Python requirement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.10 – 3.13&lt;/td&gt;
&lt;td&gt;3.9+&lt;/td&gt;
&lt;td&gt;3.10+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  When to Choose CrewAI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You want the &lt;strong&gt;fastest setup&lt;/strong&gt; for multi-agent collaboration&lt;/li&gt;
&lt;li&gt;Your workflow maps naturally to &lt;strong&gt;roles and responsibilities&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You need &lt;strong&gt;built-in hierarchical delegation&lt;/strong&gt; (manager agent)&lt;/li&gt;
&lt;li&gt;You prefer &lt;strong&gt;YAML configuration&lt;/strong&gt; over code for agent definitions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to Choose LangGraph
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You need &lt;strong&gt;fine-grained control&lt;/strong&gt; over execution flow&lt;/li&gt;
&lt;li&gt;Your workflow has &lt;strong&gt;complex branching, loops, or conditional logic&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You need &lt;strong&gt;durable execution&lt;/strong&gt; with checkpoint/resume&lt;/li&gt;
&lt;li&gt;You want &lt;strong&gt;human-in-the-loop&lt;/strong&gt; approval steps at specific points&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to Choose OpenAI Agents SDK
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You are already in the &lt;strong&gt;OpenAI ecosystem&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You want the &lt;strong&gt;simplest possible API&lt;/strong&gt; with minimal abstractions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handoff-based routing&lt;/strong&gt; between agents fits your use case&lt;/li&gt;
&lt;li&gt;You need &lt;strong&gt;built-in guardrails&lt;/strong&gt; for safety-critical applications&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Extending the Pipeline: Adding RAG and Custom Tools
&lt;/h2&gt;

&lt;p&gt;Once your basic pipeline works, here are practical next steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding a Knowledge Base with RAG
&lt;/h3&gt;

&lt;p&gt;Combine CrewAI agents with a RAG (Retrieval-Augmented Generation) system so your Research Agent can query your own documents instead of just the web.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai_tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RagTool&lt;/span&gt;

&lt;span class="c1"&gt;# Point to your document directory
&lt;/span&gt;&lt;span class="n"&gt;rag_tool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RagTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;provider&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;openai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
        &lt;span class="n"&gt;embedder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;provider&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;openai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text-embedding-3-small&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;research_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Internal Knowledge Researcher&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Find relevant information from our internal knowledge base&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Expert at querying and synthesizing internal documentation.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rag_tool&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a deeper dive into building RAG systems, see our &lt;a href="https://dev.to/articles/build-rag-app-python-llamaindex-tutorial-2026"&gt;LlamaIndex RAG tutorial&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building Custom Tools
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;@tool&lt;/code&gt; decorator makes it easy to give agents new capabilities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai.tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="nd"&gt;@tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;read_json_file&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;read_json_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Read and parse a JSON file, returning its contents as formatted text.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;save_to_file&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;save_to_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Save content to a file at the specified path.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;makedirs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;exist_ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content saved to &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using Structured Output
&lt;/h3&gt;

&lt;p&gt;Force agents to return data in a specific format using Pydantic models:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BaseModel&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ResearchBrief&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;key_findings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;confidence_level&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;

&lt;span class="n"&gt;research_task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research the given topic thoroughly.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;expected_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Structured research brief.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;output_pydantic&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ResearchBrief&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful when your pipeline feeds into other systems that expect structured data — APIs, databases, or downstream processing steps.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Mistakes and How to Avoid Them
&lt;/h2&gt;

&lt;p&gt;After building multi-agent systems with CrewAI, here are the pitfalls we see most often:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Vague agent backstories.&lt;/strong&gt; The backstory is not decoration — it shapes how the LLM interprets the role. "You are a writer" produces worse results than "You are a technical writer who specializes in developer tutorials, writes in short paragraphs, and always includes code examples."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Missing &lt;code&gt;expected_output&lt;/code&gt; detail.&lt;/strong&gt; A task with &lt;code&gt;expected_output="A good article"&lt;/code&gt; gives the agent no quality criteria. Be specific: word count, format, required sections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Forgetting &lt;code&gt;context&lt;/code&gt; on dependent tasks.&lt;/strong&gt; Without &lt;code&gt;context=[previous_task]&lt;/code&gt;, the next agent has no access to prior work. This is the most common cause of "my agents are ignoring each other's output."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Setting &lt;code&gt;max_iter&lt;/code&gt; too low.&lt;/strong&gt; If your agent's task is complex and it hits the iteration limit, it will return whatever it has — often incomplete work. Start with the default (20) and adjust based on observed behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Running hierarchical without understanding the overhead.&lt;/strong&gt; Hierarchical mode adds a manager agent that consumes tokens deciding who should do what. For simple 3-agent pipelines, sequential is cheaper and more predictable.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How is CrewAI different from LangChain?
&lt;/h3&gt;

&lt;p&gt;LangChain is a general-purpose LLM framework for building chains and retrievals. CrewAI is specifically designed for multi-agent collaboration. CrewAI can use LangChain tools, but it adds the Agent-Task-Crew orchestration layer that LangChain does not have natively. LangGraph (part of the LangChain ecosystem) is the closer comparison — see our full comparison above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use CrewAI with local models like Ollama?
&lt;/h3&gt;

&lt;p&gt;Yes. Set the &lt;code&gt;llm&lt;/code&gt; parameter on any agent to point to your local model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Researcher&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research topics using local LLM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Local-first researcher.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ollama/llama3.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a guide on setting up Ollama, see our &lt;a href="https://dev.to/articles/ollama-open-webui-self-hosting-guide-2026"&gt;Ollama + Open WebUI self-hosting guide&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many agents can a Crew have?
&lt;/h3&gt;

&lt;p&gt;There is no hard limit. Practically, 3-7 agents cover most use cases. Beyond that, consider using hierarchical process with sub-crews to keep complexity manageable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can CrewAI agents call other Crews?
&lt;/h3&gt;

&lt;p&gt;Yes — this is the &lt;strong&gt;Flows&lt;/strong&gt; feature. A Flow can trigger multiple Crews as part of a larger pipeline. This is useful for complex applications where different stages need different team compositions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is CrewAI production-ready?
&lt;/h3&gt;

&lt;p&gt;CrewAI is used in production by companies building AI-powered workflows. It has built-in memory, caching, rate limiting, and error handling. For production deployments, pin your CrewAI version and test thoroughly — the API surface is still evolving between releases.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does CrewAI compare to building agents with Claude Code?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://dev.to/articles/claude-code-advanced-workflow-subagents-commands-multi-session"&gt;Claude Code&lt;/a&gt; is an AI coding assistant that uses its own agent architecture for software engineering tasks. CrewAI is a framework you use to build custom agent systems for any domain. They solve different problems — you might even use Claude Code to help you write your CrewAI agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to Build Next
&lt;/h2&gt;

&lt;p&gt;You now have a working multi-agent content pipeline with CrewAI. Here are paths to explore:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add more agents&lt;/strong&gt; — a Fact-Checker Agent, an SEO Agent, or a Translator Agent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try hierarchical mode&lt;/strong&gt; — let a manager agent decide task routing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect to your data&lt;/strong&gt; — use RAG tools to feed agents your internal docs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build a Slack bot&lt;/strong&gt; — trigger the pipeline from a Slack message and post results back&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare frameworks&lt;/strong&gt; — build the same pipeline with &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;LangGraph&lt;/a&gt; or &lt;a href="https://dev.to/articles/openai-agents-sdk-multi-agent-python-tutorial-2026"&gt;OpenAI Agents SDK&lt;/a&gt; and decide which fits your team&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are curious how we use multi-agent systems in our own workflow, read &lt;a href="https://dev.to/articles/how-we-built-company-with-14-ai-agents"&gt;how we built a company powered by 14 AI agents&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is Part 3 of our Agent Trilogy series. Part 1 covers &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;LangGraph&lt;/a&gt;, Part 2 covers the &lt;a href="https://dev.to/articles/openai-agents-sdk-multi-agent-python-tutorial-2026"&gt;OpenAI Agents SDK&lt;/a&gt;, and this article covers CrewAI. All three tutorials build the same content pipeline so you can compare frameworks directly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Effloow uses affiliate links where noted. If you sign up for a service through our links, we may earn a commission at no extra cost to you. We only recommend tools we actually use.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article may contain affiliate links to products or services we recommend. If you purchase through these links, we may earn a small commission at no extra cost to you. This helps support Effloow and allows us to continue creating free, high-quality content. See our &lt;a href="https://dev.to/affiliate-disclosure"&gt;affiliate disclosure&lt;/a&gt; for full details.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>crewai</category>
      <category>python</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Framer Review 2026: The AI Website Builder Designers Actually Want (Complete Guide)</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Sun, 05 Apr 2026 14:45:18 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/framer-review-2026-the-ai-website-builder-designers-actually-want-complete-guide-33gn</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/framer-review-2026-the-ai-website-builder-designers-actually-want-complete-guide-33gn</guid>
      <description>&lt;h1&gt;
  
  
  Framer Review 2026: The AI Website Builder Designers Actually Want
&lt;/h1&gt;

&lt;p&gt;Most website builder reviews start with the same pitch: "build a beautiful website without code." Every platform claims that. Squarespace claims it. Wix claims it. WordPress with Elementor claims it. What none of them deliver is a tool that makes designers feel like they are actually designing — not dragging pre-made blocks around a grid and hoping the result looks intentional.&lt;/p&gt;

&lt;p&gt;Framer is different, and after testing every plan tier against real projects — portfolio sites, SaaS landing pages, content-driven blogs, and multi-language business sites — the reason is clear. Framer treats the web as a design medium first. The canvas feels closer to Figma than to any traditional website builder. Animations are first-class citizens, not afterthoughts. And the AI features that landed in 2025 and 2026 have turned Framer from a designer's toy into a legitimate production platform.&lt;/p&gt;

&lt;p&gt;But Framer is not for everyone. The CMS has real limitations. The pricing has hidden costs that most reviews gloss over. And the learning curve is steeper than Squarespace or Wix, especially if you have never used a freeform design tool before.&lt;/p&gt;

&lt;p&gt;This review covers everything: the AI generation workflow, the developer story with code components, the CMS capabilities and their ceilings, a detailed pricing breakdown, and honest comparisons with Webflow, Squarespace, Wix, and WordPress. If you are choosing a website builder in 2026, this is the review that tells you what the marketing pages leave out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Affiliate Disclosure:&lt;/strong&gt; This article contains affiliate links to Framer via the Framer Creators Program. If you sign up through our links, we earn a 50% commission on first-year subscriptions at no extra cost to you. Framer Creators also keep 100% of marketplace template and plugin revenue. We only recommend tools we use ourselves. See our &lt;a href="https://dev.to/affiliate-disclosure"&gt;affiliate disclosure&lt;/a&gt; for full details.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Framer? (And Why It Is Not Just a Prototyping Tool Anymore)
&lt;/h2&gt;

&lt;p&gt;Framer started in 2014 as a JavaScript-based prototyping tool for interaction designers. If you used Framer Classic or Framer X, you remember a code-heavy tool aimed squarely at design engineers building mobile prototypes. That version of Framer no longer exists.&lt;/p&gt;

&lt;p&gt;Modern Framer is a fully visual, no-code website builder with integrated hosting, a CMS, AI-powered generation, and a growing ecosystem of templates and plugins. The pivot happened gradually — first with Framer Sites in 2022, then with the sunsetting of the legacy desktop app — but the result is a platform that competes directly with Webflow, Squarespace, and WordPress for production websites.&lt;/p&gt;

&lt;p&gt;What makes Framer stand apart from every other builder in 2026 is the canvas. Where Webflow gives you a structured, box-model-driven editor and Squarespace gives you templates with constrained customization, Framer gives you a freeform design surface. You place elements where you want them. You control spacing, typography, and layout with the precision of a design tool, not the constraints of a page builder.&lt;/p&gt;

&lt;p&gt;This matters because the gap between design and implementation has always been where quality dies. You design something beautiful in Figma, then spend hours trying to recreate it in a builder that fights you on every pixel. Framer closes that gap because the builder is the design tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Capabilities at a Glance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Freeform visual editor&lt;/strong&gt; with responsive breakpoints and auto-layout&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI site generation&lt;/strong&gt; from text prompts via Wireframer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in CMS&lt;/strong&gt; with collections, filtering, and dynamic pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code components&lt;/strong&gt; in React for developers who need custom functionality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-click publishing&lt;/strong&gt; with integrated hosting on a global CDN&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template marketplace&lt;/strong&gt; with community-built starters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI translation&lt;/strong&gt; for multi-language sites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO controls&lt;/strong&gt; including metadata, sitemap generation, and Open Graph tags&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have been following the &lt;a href="https://dev.to/articles/what-is-vibe-coding-developer-trend-2026"&gt;vibe coding trend&lt;/a&gt; where developers describe what they want and AI builds it, Framer's AI features sit in a similar space — but for designers and non-technical founders instead of engineers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Framer AI: How AI Website Generation Actually Works
&lt;/h2&gt;

&lt;p&gt;Framer's AI features are not a gimmick bolted onto an existing builder. They are integrated into the core workflow in three distinct areas: site generation, content rewriting, and translation. Here is what each one actually does.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generating a Full Site from a Text Prompt
&lt;/h3&gt;

&lt;p&gt;Framer's Wireframer feature lets you generate a complete responsive page by describing what you want in natural language. You open a new project, select "Generate with AI," and type a prompt like "portfolio website for a freelance brand designer with a dark theme, project gallery, about section, and contact form."&lt;/p&gt;

&lt;p&gt;Within 30 to 60 seconds, Framer generates a structured, responsive page with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A layout framework based on your description&lt;/li&gt;
&lt;li&gt;Starter copy that matches your stated purpose&lt;/li&gt;
&lt;li&gt;Placeholder sections you can customize&lt;/li&gt;
&lt;li&gt;Responsive behavior across desktop, tablet, and mobile breakpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output is not a finished website. It is a strong starting point — a wireframe with enough structure and content that you can refine rather than build from scratch. Think of it as the AI doing the first 40 percent of the work: establishing page structure, section hierarchy, and basic content flow.&lt;/p&gt;

&lt;p&gt;Where Wireframer falls short is in visual sophistication. The generated layouts tend toward safe, generic structures. You will almost always need to customize typography, colors, spacing, and imagery to get something that feels distinctive. But compared to staring at a blank canvas, the time savings are real — especially for landing pages and portfolio sites where structure follows well-established patterns.&lt;/p&gt;

&lt;p&gt;If you are familiar with &lt;a href="https://dev.to/articles/vibe-coding-tools-compared-bolt-lovable-replit-v0-2026"&gt;vibe coding tools like Bolt.new and Lovable&lt;/a&gt;, Framer's AI generation is conceptually similar but aimed at visual design rather than application code. The output is a website layout, not a codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Translation and Content Rewriting
&lt;/h3&gt;

&lt;p&gt;Framer's AI translation feature is genuinely useful for multi-language sites. You click a button, select target languages, and Framer translates your entire site — every text element, every CMS entry — without plugins or third-party integrations.&lt;/p&gt;

&lt;p&gt;The translation quality is surprisingly good for marketing copy and straightforward content. For technical or nuanced content, you will want a human reviewer. But the workflow — translate everything in one click, then review and refine — beats managing translation plugins or external services.&lt;/p&gt;

&lt;p&gt;Framer also offers AI-powered content rewriting within the editor, allowing you to adjust tone, length, and style of existing text blocks. This is useful for iterating on copy without leaving the canvas.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Image Generation
&lt;/h3&gt;

&lt;p&gt;Through a partnership with Visual Electric, Framer includes AI image generation directly in the editor. You can generate images from text prompts and place them on your canvas without switching to a separate tool. For placeholder imagery and quick iterations, this saves time. For final production imagery, you will likely still want professional photography or purpose-built AI image tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Plugins for Custom Workflows
&lt;/h3&gt;

&lt;p&gt;Developers can build custom AI plugins that integrate OpenAI, Anthropic, and Google Gemini models directly into the Framer editor. This enables workflows like automatic alt text generation, content rewriting with custom brand voice, and AI-powered image creation with specific style parameters. It is an advanced feature, but it signals where Framer is heading: a design platform where AI handles the repetitive work while humans focus on creative decisions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Framer Key Features Deep Dive
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Visual Editor — Designing Like Figma, Publishing Like WordPress
&lt;/h3&gt;

&lt;p&gt;The visual editor is Framer's strongest feature and its primary differentiator. If you have used Figma, Sketch, or any modern design tool, the Framer canvas will feel immediately familiar. You have layers, frames, auto-layout, and direct manipulation of every element.&lt;/p&gt;

&lt;p&gt;Key design capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-layout&lt;/strong&gt; that handles responsive behavior without manual breakpoint adjustments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stacks&lt;/strong&gt; for flexible horizontal and vertical arrangements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scroll-based animations&lt;/strong&gt; with granular control over timing and easing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hover, tap, and scroll interactions&lt;/strong&gt; that you configure visually&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component system&lt;/strong&gt; with variants and properties for reusable design elements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart components&lt;/strong&gt; that maintain state and respond to user interaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The animation system deserves special mention. Where most builders offer basic fade-in effects, Framer gives you a full animation toolkit. You can create scroll-triggered parallax effects, hover state transitions, page transition animations, and micro-interactions — all without writing code. For design-focused sites where motion and interaction quality matter, this is a significant advantage over every competitor except perhaps Webflow (which offers similar depth but with a steeper learning curve).&lt;/p&gt;

&lt;h3&gt;
  
  
  CMS — Built-In Content Management (and Its Limits)
&lt;/h3&gt;

&lt;p&gt;Framer's CMS lets you create collections (think database tables), define fields, and build dynamic pages that pull from those collections. For blogs, portfolio galleries, product listings, and documentation sites, the CMS works well.&lt;/p&gt;

&lt;p&gt;What works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visual collection design&lt;/strong&gt; — define fields and content structure without code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic pages&lt;/strong&gt; that automatically generate from collection items&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filtering and sorting&lt;/strong&gt; on collection lists&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relational CMS&lt;/strong&gt; on Pro and above — link collections together&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON sync&lt;/strong&gt; for importing and exporting CMS data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What has real limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No nested collection lists&lt;/strong&gt; — you cannot display a collection list inside another collection list&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CMS item caps&lt;/strong&gt; — Basic allows 1,000 items across 1 collection; Pro allows 2,500 across 10 collections; Scale allows 10,000 across 20 collections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No built-in search&lt;/strong&gt; across CMS content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited API access&lt;/strong&gt; — the CMS is primarily designed for visual management, not headless use&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No schema markup per CMS item&lt;/strong&gt; — you cannot add structured data to individual collection items through the UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For small to medium content sites — a blog with a few hundred posts, a portfolio with 50 to 100 projects — the CMS is more than adequate. For content-heavy sites approaching thousands of items, or sites that need advanced content relationships, Webflow's CMS or a headless CMS like Sanity or Strapi will serve you better.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Components — React for Developers
&lt;/h3&gt;

&lt;p&gt;This is where Framer gets interesting for developers. You can write custom React components and use them alongside visual elements on the Framer canvas. These code components have full access to React's ecosystem — hooks, state management, third-party libraries — and they render as native elements on the published site.&lt;/p&gt;

&lt;p&gt;Developer features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code components&lt;/strong&gt; — custom React components with visual property controls that designers can configure in the editor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code overrides&lt;/strong&gt; — higher-order components that modify properties of any layer or component&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fetch API&lt;/strong&gt; — build API endpoints that designers can use on their sites without code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugins&lt;/strong&gt; — small apps that interact with the Framer editor and CMS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For teams with both designers and developers, this is a powerful model. Designers build the visual layout. Developers create custom components for complex functionality — interactive data visualizations, custom forms, third-party integrations. Both work in the same tool without stepping on each other.&lt;/p&gt;

&lt;p&gt;If you are using &lt;a href="https://dev.to/articles/cursor-vs-windsurf-vs-zed-ai-ide-comparison-2026"&gt;AI code editors like Cursor or Windsurf&lt;/a&gt; for your development workflow, you can write Framer code components in your preferred editor and import them into the platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Templates and Marketplace
&lt;/h3&gt;

&lt;p&gt;Framer's template marketplace offers hundreds of community-built templates across categories: portfolios, landing pages, agency sites, SaaS pages, and personal sites. Templates range from free to $49+, with most premium templates in the $19 to $39 range.&lt;/p&gt;

&lt;p&gt;The marketplace is also where Framer's Creators Program shines. Template creators keep 100 percent of their revenue — Framer takes zero platform fees. This has attracted high-quality template designers, and the marketplace has grown substantially. Framer reports paying out $6.5 million to creators in 2025 (source: &lt;a href="https://www.framer.com/creators/" rel="noopener noreferrer"&gt;Framer Creators page&lt;/a&gt; — verify current figures).&lt;/p&gt;

&lt;p&gt;Beyond templates, the marketplace includes components (reusable design elements) and plugins (editor extensions) that extend Framer's functionality without code.&lt;/p&gt;

&lt;h3&gt;
  
  
  SEO Features and Limitations
&lt;/h3&gt;

&lt;p&gt;Framer includes built-in SEO controls that cover the essentials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Page-level metadata&lt;/strong&gt; — title tags, meta descriptions, and Open Graph tags&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic sitemap generation&lt;/strong&gt; for search engine crawling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean URL structure&lt;/strong&gt; with customizable slugs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Lighthouse integration&lt;/strong&gt; for performance monitoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic image optimization&lt;/strong&gt; and lazy loading&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global CDN hosting&lt;/strong&gt; across 20+ locations for fast load times&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Performance is a genuine strength. Framer sites load fast because they are statically generated and served from a global CDN. Google Lighthouse scores consistently hit 90+ for well-built Framer sites.&lt;/p&gt;

&lt;p&gt;However, there are SEO limitations that matter for content-heavy sites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No per-item structured data&lt;/strong&gt; — you cannot add schema markup (FAQ, Product, Article) to individual CMS items through the Framer interface&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited redirect management&lt;/strong&gt; — bulk redirects require the Pro plan&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No built-in analytics beyond basics&lt;/strong&gt; — you will need Google Analytics, Plausible, or a similar tool for serious analytics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No native blog features&lt;/strong&gt; like RSS feeds, categories with pagination, or related post recommendations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For SEO-focused content sites, tools like &lt;a href="https://dev.to/articles/surfer-seo-review-ai-content-optimization-guide-2026"&gt;Surfer SEO&lt;/a&gt; can complement Framer's built-in capabilities, but you should know that Framer is optimized for marketing sites and portfolios more than content-heavy blogs.&lt;/p&gt;

&lt;p&gt;Is Framer good for SEO? Yes, for the fundamentals — fast load times, clean markup, proper metadata. No, if you need advanced content SEO features that platforms like WordPress with Yoast or Webflow provide natively.&lt;/p&gt;




&lt;h2&gt;
  
  
  Framer Pricing 2026: Every Plan Explained
&lt;/h2&gt;

&lt;p&gt;Framer's pricing is straightforward at first glance but has hidden costs that add up quickly for growing sites. Here is the complete breakdown.&lt;/p&gt;

&lt;h3&gt;
  
  
  Free vs Basic vs Pro vs Scale vs Enterprise
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Free&lt;/th&gt;
&lt;th&gt;Basic ($10/mo)&lt;/th&gt;
&lt;th&gt;Pro ($30/mo)&lt;/th&gt;
&lt;th&gt;Scale ($100+/mo)&lt;/th&gt;
&lt;th&gt;Enterprise&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Site pages&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;300+&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMS collections&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;20+&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMS items&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;td&gt;2,500&lt;/td&gt;
&lt;td&gt;10,000+&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monthly bandwidth&lt;/td&gt;
&lt;td&gt;1 GB&lt;/td&gt;
&lt;td&gt;10 GB&lt;/td&gt;
&lt;td&gt;100 GB&lt;/td&gt;
&lt;td&gt;200 GB+&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom domain&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analytics history&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;30 days&lt;/td&gt;
&lt;td&gt;30 days&lt;/td&gt;
&lt;td&gt;30 days&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Staging environment&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A/B testing&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relational CMS&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Site redirects&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Priority support&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium CDN&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: &lt;a href="https://www.framer.com/pricing/" rel="noopener noreferrer"&gt;framer.com/pricing&lt;/a&gt; — verify current pricing before purchasing. All paid prices are annual billing. Monthly billing costs more — expect roughly 20 to 30 percent higher on month-to-month plans.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Free plan&lt;/strong&gt; is genuinely useful for learning and prototyping. You get the full editor, AI features, and access to the template marketplace. The limitation is publishing: free sites are hosted on a framer.site subdomain with a Framer badge, and you are limited to 2 pages.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Basic plan&lt;/strong&gt; at $10 per month (annual) is a solid entry point for personal sites, simple portfolios, and single-page landing pages. The 30-page limit and single CMS collection are enough for most individual projects.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Pro plan&lt;/strong&gt; at $30 per month (annual) is where Framer becomes a serious tool. Staging environments, relational CMS, A/B testing, and site redirects unlock professional workflows. For freelancers and small agencies building client sites, this is the tier that makes sense.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Scale plan&lt;/strong&gt; starts at $100 per month (annual only) and adds usage-based pricing beyond included limits. It is designed for high-traffic marketing sites and larger businesses that need priority support and premium CDN performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hidden Costs — Editor Seats, Languages, and CMS Limits
&lt;/h3&gt;

&lt;p&gt;This is where most Framer reviews fail you. The plan prices above are per-site costs for a single editor. Here is what adds up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Extra editor seats&lt;/strong&gt;: $20/month on Basic, $40/month on Pro and Scale — per additional editor, per site&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Translation locales&lt;/strong&gt;: $20 per additional language per month across all plans&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CMS overages on Scale&lt;/strong&gt;: $20 per additional 100 pages, CMS items and bandwidth scale similarly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Convert add-on&lt;/strong&gt; (advanced analytics): $50 per 500,000 events&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Hosting&lt;/strong&gt; add-on: $200 per month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a solo founder building one site, these extras do not apply. For an agency managing multiple client sites with team access and multi-language support, the costs compound fast. A Pro site with 2 extra editors and 3 translation locales runs $30 + $80 + $60 = $170 per month — significantly more than the headline $30 price suggests.&lt;/p&gt;

&lt;p&gt;Compare this with a platform like WordPress on a &lt;a href="https://dev.to/articles/self-host-dev-stack-under-20-dollars-month"&gt;self-hosted stack under $20 per month&lt;/a&gt; and you can see why pricing context matters. Framer's value proposition is speed and design quality, not cost efficiency at scale.&lt;/p&gt;




&lt;h2&gt;
  
  
  Framer vs Webflow: Which Should You Choose?
&lt;/h2&gt;

&lt;p&gt;This is the comparison most people searching for a Framer review actually want. Both platforms target designers and agencies. Both offer visual builders, CMS capabilities, and code extensibility. The differences are real and meaningful.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Framer&lt;/th&gt;
&lt;th&gt;Webflow&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Design approach&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Freeform canvas (Figma-like)&lt;/td&gt;
&lt;td&gt;Box model / structured layout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Moderate (intuitive for designers)&lt;/td&gt;
&lt;td&gt;Steep (CSS knowledge helps)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI features&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI site generation, translation, image gen&lt;/td&gt;
&lt;td&gt;Webflow AI (newer, more limited)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMS depth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Good for basic/medium needs&lt;/td&gt;
&lt;td&gt;More powerful (nested lists, 10K items on lower plans)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Code extensibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React code components&lt;/td&gt;
&lt;td&gt;Custom code embed, Webflow APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Animation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Excellent (scroll, hover, page transitions)&lt;/td&gt;
&lt;td&gt;Excellent (Interactions 2.0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;E-commerce&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No native e-commerce&lt;/td&gt;
&lt;td&gt;Full e-commerce platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hosting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Included, global CDN&lt;/td&gt;
&lt;td&gt;Included, global CDN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing (entry)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$10/mo (Basic)&lt;/td&gt;
&lt;td&gt;$14/mo (Basic)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing (professional)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$30/mo (Pro)&lt;/td&gt;
&lt;td&gt;$23/mo (CMS) to $39/mo (Business)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Template marketplace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Growing, creator-friendly (0% cut)&lt;/td&gt;
&lt;td&gt;Larger, established ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Localization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI translation built-in&lt;/td&gt;
&lt;td&gt;Requires third-party tools&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Choose Framer if:&lt;/strong&gt; You are a designer who wants the canvas to feel like a design tool. You prioritize animation quality and interaction design. You want built-in AI translation for multi-language sites. You value speed of iteration over CMS depth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Webflow if:&lt;/strong&gt; You need a robust CMS with nested collections and complex content relationships. You plan to add e-commerce. You are comfortable with CSS concepts and want granular control over the box model. You need a more mature ecosystem with more third-party integrations.&lt;/p&gt;

&lt;p&gt;For most marketing sites, landing pages, and portfolio sites in 2026, Framer is the faster path to a polished result. For content-heavy sites, membership platforms, or e-commerce, Webflow's deeper feature set wins.&lt;/p&gt;




&lt;h2&gt;
  
  
  Framer vs Squarespace: Design Quality Compared
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Framer&lt;/th&gt;
&lt;th&gt;Squarespace&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Design freedom&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Freeform, unlimited layout control&lt;/td&gt;
&lt;td&gt;Template-based with constrained customization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Animation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full animation toolkit&lt;/td&gt;
&lt;td&gt;Basic fade/slide effects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flexible collections&lt;/td&gt;
&lt;td&gt;Blog and product focused&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI features&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI generation, translation, image gen&lt;/td&gt;
&lt;td&gt;Squarespace AI (text and image generation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;E-commerce&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Built-in, mature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;From $10/mo&lt;/td&gt;
&lt;td&gt;From $16/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Designers wanting creative control&lt;/td&gt;
&lt;td&gt;Non-technical users wanting polished templates&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Squarespace is the safer choice for non-designers who want a professional-looking site with minimal effort. Framer is the better choice for anyone who finds Squarespace templates limiting and wants to create something distinctive. If you care about micro-interactions, scroll animations, and pixel-level control, Framer wins decisively. If you want to pick a template, add your content, and launch in an afternoon, Squarespace is more appropriate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Framer vs Wix: Ease of Use vs Design Control
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Framer&lt;/th&gt;
&lt;th&gt;Wix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Design approach&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Freeform professional canvas&lt;/td&gt;
&lt;td&gt;Drag-and-drop with AI positioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI features&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI site gen, translation, plugins&lt;/td&gt;
&lt;td&gt;Wix ADI, AI text, AI image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;App ecosystem&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Growing marketplace&lt;/td&gt;
&lt;td&gt;Massive (500+ apps)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;E-commerce&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Full e-commerce suite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flexible collections&lt;/td&gt;
&lt;td&gt;Built-in with dynamic pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;From $10/mo&lt;/td&gt;
&lt;td&gt;From $17/mo (Light)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Excellent (static generation)&lt;/td&gt;
&lt;td&gt;Variable (historically slower)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Target user&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Designers and developers&lt;/td&gt;
&lt;td&gt;Small businesses and beginners&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Wix serves a broader market — small business owners, restaurants, local services — with an app ecosystem that covers booking, payments, email marketing, and more. Framer serves a narrower audience — designers, agencies, and tech companies — with deeper design tools and better performance. If you need a business operating system with your website, Wix has more built-in functionality. If you need a website that looks and performs like it was custom-built, Framer delivers higher quality.&lt;/p&gt;




&lt;h2&gt;
  
  
  Framer vs WordPress: When to Use Each
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Framer&lt;/th&gt;
&lt;th&gt;WordPress&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Setup complexity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zero (hosted platform)&lt;/td&gt;
&lt;td&gt;Requires hosting, domain, installation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Design flexibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Freeform visual editor&lt;/td&gt;
&lt;td&gt;Theme-dependent, page builders vary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plugin ecosystem&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Small but growing&lt;/td&gt;
&lt;td&gt;Massive (60,000+ plugins)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMS power&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic to medium&lt;/td&gt;
&lt;td&gt;Unlimited (custom post types, ACF, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Consistently fast&lt;/td&gt;
&lt;td&gt;Varies wildly by setup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SEO tools&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in basics&lt;/td&gt;
&lt;td&gt;Best-in-class with Yoast/RankMath&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost at scale&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Expensive (per-site pricing)&lt;/td&gt;
&lt;td&gt;Cheap (hosting + free plugins)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maintenance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zero (managed platform)&lt;/td&gt;
&lt;td&gt;Ongoing (updates, security, backups)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Marketing sites, portfolios&lt;/td&gt;
&lt;td&gt;Content sites, blogs, complex applications&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;WordPress powers 40+ percent of the web for a reason: it can do almost anything with the right plugins and configuration. But that flexibility comes with maintenance burden, security concerns, and performance variability. Framer eliminates all of that by being a managed platform with a consistent, fast experience.&lt;/p&gt;

&lt;p&gt;For content-heavy sites with hundreds or thousands of pages, WordPress with proper hosting remains the better choice. For a marketing site, portfolio, or product landing page where design quality and load speed matter most, Framer gets you there faster with less ongoing work.&lt;/p&gt;

&lt;p&gt;If you are considering self-hosting WordPress or other platforms, our guide to &lt;a href="https://dev.to/articles/coolify-vs-dokploy-self-hosted-paas-comparison-2026"&gt;self-hosted deployment platforms like Coolify&lt;/a&gt; covers the infrastructure side.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who Is Framer Best For? (And Who Should Avoid It)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Framer is excellent for:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Freelance designers&lt;/strong&gt; building portfolio sites and client landing pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Startup founders&lt;/strong&gt; who need a polished marketing site fast&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agencies&lt;/strong&gt; delivering high-design marketing sites at scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design-focused brands&lt;/strong&gt; where animation and interaction quality define the brand&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-language businesses&lt;/strong&gt; that benefit from built-in AI translation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developers&lt;/strong&gt; who want to combine visual design with React code components&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Framer is not the right choice for:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;E-commerce businesses&lt;/strong&gt; — no native e-commerce; use Shopify or Webflow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content-heavy publishers&lt;/strong&gt; — CMS item limits and missing blog features are real constraints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget-conscious solopreneurs&lt;/strong&gt; — costs add up quickly with editor seats and locales&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-technical users wanting maximum simplicity&lt;/strong&gt; — Squarespace or Wix are easier to learn&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Applications with complex backend logic&lt;/strong&gt; — Framer is a website builder, not an app platform&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Framer Creators Program: Affiliate and Monetization Details
&lt;/h2&gt;

&lt;p&gt;The Framer Creators Program offers two monetization paths:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Marketplace Revenue (Templates, Components, Plugins)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create and sell templates, UI kits, components, or plugins on the Framer Marketplace. Creators keep 100 percent of their revenue — Framer takes zero platform fees. This is unusually generous compared to other marketplace platforms. Framer reported $6.5 million in creator payouts in 2025 (source: &lt;a href="https://www.framer.com/creators/" rel="noopener noreferrer"&gt;Framer Creators page&lt;/a&gt;), with individual creators earning from $1,000+ per month to six-figure annual revenues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Referral Commissions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Refer new users to Framer and earn up to 50 percent commission on their subscription payments for the first 12 months. Tracking is powered by Dub. For context, a single Pro plan referral ($30/month annual) generates approximately $180 in first-year commission.&lt;/p&gt;

&lt;p&gt;For designers and agencies who already recommend tools to clients, the Creators Program turns that recommendation into a revenue stream. If you are building with &lt;a href="https://dev.to/articles/free-ai-coding-tools-zero-dollar-stack-2026"&gt;free AI tools&lt;/a&gt; and looking for ways to monetize your expertise, creating Framer templates is a legitimate path.&lt;/p&gt;




&lt;h2&gt;
  
  
  Verdict: Is Framer Worth It in 2026?
&lt;/h2&gt;

&lt;p&gt;Framer has earned its place as the best AI website builder for designers who care about craft. The visual editor is best-in-class. The AI features are practical rather than gimmicky. The code component system bridges the gap between design and development in a way no other platform matches. And the performance of published sites is consistently excellent.&lt;/p&gt;

&lt;p&gt;The trade-offs are real: CMS limitations cap what you can build for content-heavy sites, hidden pricing costs add up for teams, and the lack of e-commerce means Framer cannot be your everything platform. But for marketing sites, portfolios, landing pages, and design-forward brands, Framer delivers results that would cost significantly more with a custom development approach.&lt;/p&gt;

&lt;p&gt;If you are a designer tired of fighting page builders that constrain your creativity, Framer is the tool that finally gets out of your way. If you are a developer who wants to contribute code components without owning the entire frontend, Framer's React integration makes that possible. And if you are a founder who needs a professional site fast, Framer's AI generation gives you a head start that no other builder matches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our recommendation:&lt;/strong&gt; Start with the Free plan to learn the editor. Build your first project. If the design workflow clicks for you — and if your project fits within the CMS and feature constraints outlined above — upgrade to Pro for the full professional toolkit. The $30 per month investment pays for itself if it saves you even a few hours of design and development time per project.&lt;/p&gt;

&lt;p&gt;For teams already invested in the broader AI tooling ecosystem — whether that is &lt;a href="https://dev.to/articles/gamma-ai-review-presentation-builder-guide-2026"&gt;AI presentation tools like Gamma&lt;/a&gt; for decks or &lt;a href="https://dev.to/articles/zapier-vs-make-vs-n8n-automation-comparison-2026"&gt;automation platforms like n8n&lt;/a&gt; for workflows — Framer fits naturally as the website layer. It is purpose-built for a world where AI handles the scaffolding and humans focus on the creative decisions that matter.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you tried Framer for a real project? We would like to hear what worked and what did not. Share your experience with us — it helps us keep this review accurate and useful for the community.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article may contain affiliate links to products or services we recommend. If you purchase through these links, we may earn a small commission at no extra cost to you. This helps support Effloow and allows us to continue creating free, high-quality content. See our &lt;a href="https://dev.to/affiliate-disclosure"&gt;affiliate disclosure&lt;/a&gt; for full details.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>design</category>
      <category>review</category>
    </item>
    <item>
      <title>Raycast Review 2026: The Mac Launcher That Replaced 4 Apps (+ MCP Setup Guide)</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Sun, 05 Apr 2026 14:44:42 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/raycast-review-2026-the-mac-launcher-that-replaced-4-apps-mcp-setup-guide-3ag2</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/raycast-review-2026-the-mac-launcher-that-replaced-4-apps-mcp-setup-guide-3ag2</guid>
      <description>&lt;h1&gt;
  
  
  Raycast Review 2026: The Mac Launcher That Replaced 4 Apps (+ MCP Setup Guide)
&lt;/h1&gt;

&lt;p&gt;Most Mac launcher reviews tell you that Raycast is "a better Spotlight." That misses the point entirely. Raycast is not just a launcher — it is a command center that replaces your clipboard manager, window manager, snippet expander, and increasingly, your AI assistant.&lt;/p&gt;

&lt;p&gt;After using Raycast daily for over six months as part of our developer workflow at Effloow, the tool has become one of those utilities that makes you wonder how you worked without it. But the real story in 2026 is not the launcher itself — it is the AI and MCP integration that turns Raycast into an intelligent bridge between your local tools and large language models.&lt;/p&gt;

&lt;p&gt;This review covers what actually matters: the features that justify switching, the MCP setup that no other review covers properly, the AI capabilities that work (and the ones that do not), and whether the paid plans are worth it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Affiliate Disclosure:&lt;/strong&gt; This article contains affiliate links to Raycast Pro via the Rewardful affiliate program. If you sign up through our links, we earn a 30% recurring commission on Pro subscriptions at no extra cost to you. We only recommend tools we use ourselves. See our &lt;a href="https://www.effloow.com/affiliate-disclosure" rel="noopener noreferrer"&gt;affiliate disclosure&lt;/a&gt; for full details.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Raycast? (And Why Developers Love It)
&lt;/h2&gt;

&lt;p&gt;Raycast is a macOS-only productivity launcher that replaces Spotlight with a keyboard-driven command interface. You press a hotkey (default: Option + Space), type what you want, and Raycast handles it — whether that is launching an app, running a script, managing your clipboard, searching documentation, or chatting with an AI model.&lt;/p&gt;

&lt;p&gt;What separates Raycast from basic launchers is its extension ecosystem. With over 1,500 community-built extensions, Raycast connects to GitHub, Jira, Linear, Notion, Slack, Docker, and dozens of other developer tools without leaving the keyboard. Every action is one or two keystrokes away.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Features Overview
&lt;/h3&gt;

&lt;p&gt;Here is what Raycast does out of the box, no extensions required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Application Launcher&lt;/strong&gt; — Faster than Spotlight with fuzzy search and learning-based ranking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clipboard History&lt;/strong&gt; — Stores text, images, links, and files (3 months on free plan, unlimited on Pro)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Window Management&lt;/strong&gt; — Snap, resize, and organize windows with keyboard shortcuts (replaces Rectangle or Magnet)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snippets &amp;amp; Text Expansion&lt;/strong&gt; — Create reusable text blocks with dynamic variables like date, time, and clipboard content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quicklinks&lt;/strong&gt; — Custom URL shortcuts with query parameters (e.g., type "gh {repo}" to open any GitHub repository)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calculator &amp;amp; Unit Converter&lt;/strong&gt; — Inline calculations and conversions right in the search bar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File Search&lt;/strong&gt; — Find files faster than Finder with content-based search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Raycast Notes&lt;/strong&gt; — Quick capture notes accessible from anywhere (5 on free plan, unlimited on Pro)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The free tier is surprisingly generous. Unlike many productivity tools that gate core features behind paywalls, Raycast gives you the full launcher, window management, snippets, quicklinks, and the extension ecosystem at no cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  Free Tier vs Pro vs Team — What You Actually Get
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Free&lt;/th&gt;
&lt;th&gt;Pro ($8/mo annual)&lt;/th&gt;
&lt;th&gt;Team ($12/user/mo annual)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core launcher &amp;amp; search&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clipboard history&lt;/td&gt;
&lt;td&gt;3 months&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Window management&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Snippets&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Shared across team&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quicklinks&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Shared across team&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extensions (1,500+)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI messages&lt;/td&gt;
&lt;td&gt;50 total&lt;/td&gt;
&lt;td&gt;50 + Advanced AI add-on&lt;/td&gt;
&lt;td&gt;50 + Advanced AI add-on&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raycast Notes&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud Sync&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom themes&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shared commands&lt;/td&gt;
&lt;td&gt;Up to 5&lt;/td&gt;
&lt;td&gt;Up to 5&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shared quicklinks &amp;amp; snippets&lt;/td&gt;
&lt;td&gt;Up to 30 each&lt;/td&gt;
&lt;td&gt;Up to 30 each&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advanced AI add-on&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;+$8/mo&lt;/td&gt;
&lt;td&gt;+$8/user/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://www.raycast.com/pricing" rel="noopener noreferrer"&gt;raycast.com/pricing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The pricing update worth noting: as of early 2026, the Pro plan is $10/month if billed monthly or $8/month on the annual plan. The Advanced AI add-on is a separate $8/month charge on top of Pro, giving you access to higher-tier models and increased rate limits.&lt;/p&gt;

&lt;p&gt;Enterprise pricing is custom and adds SAML/SCIM SSO, domain capture, 2FA enforcement, IP allow-lists, and extension allow-lists.&lt;/p&gt;

&lt;h2&gt;
  
  
  Raycast AI: Built-In Intelligence for Your Mac
&lt;/h2&gt;

&lt;p&gt;Raycast's AI features have matured significantly. The platform now offers four distinct ways to use AI, each suited to different workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloud AI Models
&lt;/h3&gt;

&lt;p&gt;With a Pro subscription and the Advanced AI add-on, Raycast provides access to multiple frontier models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude&lt;/strong&gt; (Anthropic) — Multiple versions available&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-4o and o1/o3 series&lt;/strong&gt; (OpenAI) — Including reasoning models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini&lt;/strong&gt; (Google) — Latest versions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Llama&lt;/strong&gt; (Meta) — Open-source models hosted in the cloud&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grok&lt;/strong&gt; (xAI) — Latest version&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Perplexity&lt;/strong&gt; — With built-in web search capability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rate limits on the standard tier allow 50 requests per minute and 300 per hour. Advanced models like o1 have additional caps of 150 requests per 24 hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bring Your Own Key (BYOK):&lt;/strong&gt; If you already have API keys from Anthropic, OpenAI, Google, or OpenRouter, you can use them directly in Raycast. This bypasses the AI add-on subscription entirely — you pay only for what you use through your own API accounts. This is particularly attractive for developers who already maintain API subscriptions for their coding workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local Models with Ollama — Free, Offline AI
&lt;/h3&gt;

&lt;p&gt;This is where Raycast gets genuinely exciting for privacy-conscious developers. Since v1.99, Raycast integrates directly with &lt;a href="https://ollama.ai" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;, giving you access to over 100 open-source models that run entirely on your machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means in practice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero cloud dependency — works offline, on airplanes, in restricted networks&lt;/li&gt;
&lt;li&gt;No subscription required — local models are free for all Raycast users, including free tier&lt;/li&gt;
&lt;li&gt;Full privacy — your prompts and data never leave your machine&lt;/li&gt;
&lt;li&gt;Models range from lightweight (135M parameters) to massive (671B parameters)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to set up Ollama with Raycast:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Ollama from &lt;a href="https://ollama.ai" rel="noopener noreferrer"&gt;ollama.ai&lt;/a&gt; (one command: &lt;code&gt;curl -fsSL https://ollama.ai/install.sh | sh&lt;/code&gt; or download the Mac app)&lt;/li&gt;
&lt;li&gt;Open Raycast Settings → AI → Local Models&lt;/li&gt;
&lt;li&gt;Copy and paste model names from &lt;a href="https://ollama.com/library" rel="noopener noreferrer"&gt;Ollama's library&lt;/a&gt; to download them directly within Raycast&lt;/li&gt;
&lt;li&gt;Select your preferred local model as the default, or choose per-conversation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Recommended models for different use cases:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;General chat&lt;/td&gt;
&lt;td&gt;&lt;code&gt;llama3.2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;3B&lt;/td&gt;
&lt;td&gt;Fast, good for quick questions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code assistance&lt;/td&gt;
&lt;td&gt;&lt;code&gt;codellama:13b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;13B&lt;/td&gt;
&lt;td&gt;Solid for code generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Detailed analysis&lt;/td&gt;
&lt;td&gt;&lt;code&gt;llama3.1:70b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;70B&lt;/td&gt;
&lt;td&gt;Needs 48GB+ RAM, slower but accurate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vision tasks&lt;/td&gt;
&lt;td&gt;&lt;code&gt;llava&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7B&lt;/td&gt;
&lt;td&gt;Image understanding support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lightweight&lt;/td&gt;
&lt;td&gt;&lt;code&gt;phi3:mini&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;3.8B&lt;/td&gt;
&lt;td&gt;Runs well on 8GB Mac&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Vision model support means you can attach screenshots or images to your Raycast AI chat and have local models analyze them — no cloud required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Experimental: AI Extensions with local models.&lt;/strong&gt; Ollama-powered models can now participate in AI Extensions (tool calling). However, since Ollama does not yet support tool choice or streaming for tool calls, this feature is labeled experimental and can be unreliable. Stick to cloud models for extension-heavy workflows.&lt;/p&gt;

&lt;p&gt;If you are interested in running more models locally, our guide on &lt;a href="https://www.effloow.com/articles/ollama-open-webui-self-hosting-guide-2026" rel="noopener noreferrer"&gt;self-hosting Ollama with Open WebUI&lt;/a&gt; covers the full setup, including VPS deployment options. For comparing Ollama with Docker Model Runner, see our &lt;a href="https://www.effloow.com/articles/docker-model-runner-vs-ollama-local-ai-deployment-2026" rel="noopener noreferrer"&gt;Docker Model Runner vs Ollama comparison&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom AI Commands &amp;amp; Presets for Developers
&lt;/h3&gt;

&lt;p&gt;AI Commands are where Raycast becomes a real productivity multiplier. Instead of typing the same prompt patterns repeatedly, you create reusable commands with specific instructions, model selection, and output formatting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built-in commands include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix Spelling &amp;amp; Grammar&lt;/li&gt;
&lt;li&gt;Improve Writing&lt;/li&gt;
&lt;li&gt;Make Shorter / Make Longer&lt;/li&gt;
&lt;li&gt;Explain This&lt;/li&gt;
&lt;li&gt;Change Tone to (Professional, Casual, Friendly, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Creating custom commands is where the value compounds.&lt;/strong&gt; For example, you can build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A "Review PR" command that takes clipboard content and outputs a structured code review&lt;/li&gt;
&lt;li&gt;A "Write Commit Message" command that generates conventional commits from staged diffs&lt;/li&gt;
&lt;li&gt;A "Explain Error" command that parses stack traces and suggests fixes&lt;/li&gt;
&lt;li&gt;A "Translate to Japanese" command for content localization workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Presets combine a model selection with specific instructions, letting you switch between different AI personalities or specializations instantly. You might have a "Code Reviewer" preset using Claude and a "Creative Writer" preset using GPT-4o.&lt;/p&gt;

&lt;h2&gt;
  
  
  Raycast MCP Setup Guide (Model Context Protocol)
&lt;/h2&gt;

&lt;p&gt;This is the section that most Raycast reviews skip entirely, and it is arguably the most future-facing feature in the entire application. MCP (Model Context Protocol) is an open standard created by Anthropic that lets AI models connect to external tools and data sources. Raycast is one of the first productivity tools to ship native MCP client support.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is MCP and Why It Matters
&lt;/h3&gt;

&lt;p&gt;Think of MCP as a USB-C port for AI. Just as USB-C provides a standard way to connect peripherals to your computer, MCP provides a standard way to connect tools and data to AI models. Instead of each AI tool building custom integrations, MCP servers provide a universal interface.&lt;/p&gt;

&lt;p&gt;For a deep dive into the protocol and the best servers available, see our &lt;a href="https://www.effloow.com/articles/top-mcp-servers-developer-guide-2026" rel="noopener noreferrer"&gt;top MCP servers guide for developers&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing Your First MCP Server in Raycast
&lt;/h3&gt;

&lt;p&gt;Raycast makes MCP server installation straightforward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Method 1: Using the Install Server Command&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Raycast and search for "Install MCP Server"&lt;/li&gt;
&lt;li&gt;Fill out the form with the server details:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; A human-readable identifier (e.g., "Sequential Thinking")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type:&lt;/strong&gt; &lt;code&gt;stdio&lt;/code&gt; (the supported transport protocol)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Command:&lt;/strong&gt; The executable (e.g., &lt;code&gt;npx&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Args:&lt;/strong&gt; Command arguments (e.g., &lt;code&gt;["-y", "@modelcontextprotocol/server-sequential-thinking"]&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Env:&lt;/strong&gt; Any required environment variables (e.g., API keys)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Method 2: Clipboard Pre-fill&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Copy a JSON configuration before opening the Install Server command, and Raycast auto-populates the form:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"context7"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@upstash/context7-mcp@latest"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Method 3: Deeplink Installation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For programmatic or shareable installations, use Raycast's deeplink format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;raycast://mcp/install?&amp;lt;configuration-json-percent-encoded&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful for team documentation or README files where you want one-click MCP server setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring mcp-config.json
&lt;/h3&gt;

&lt;p&gt;All non-development servers are stored in a single &lt;code&gt;mcp-config.json&lt;/code&gt; configuration file. To locate it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Raycast and search for "Manage MCP Servers"&lt;/li&gt;
&lt;li&gt;Select "Show Config File in Finder"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The configuration follows a straightforward JSON format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sequential-thinking"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-sequential-thinking"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"filesystem"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-filesystem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/Users/you/projects"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"github"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-github"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"GITHUB_PERSONAL_ACCESS_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ghp_your_token_here"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important note on PATH:&lt;/strong&gt; Raycast passes the &lt;code&gt;PATH&lt;/code&gt; from your default shell to the MCP server process. If a command works in your terminal (like &lt;code&gt;npx&lt;/code&gt;, &lt;code&gt;node&lt;/code&gt;, or &lt;code&gt;python3&lt;/code&gt;), it will work in Raycast. If your MCP server command is not found, check that your shell PATH includes the relevant directories.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using MCP Tools in AI Chat &amp;amp; Commands
&lt;/h3&gt;

&lt;p&gt;Once installed, MCP servers work identically to native Raycast AI Extensions. To use them:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In any AI context (Quick AI, AI Chat, AI Commands, or Presets), type &lt;code&gt;@&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Select the MCP server you want to invoke&lt;/li&gt;
&lt;li&gt;The server's tools become available to the AI model&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example, with the filesystem MCP server installed, you could ask Raycast AI: "@filesystem What are the largest files in my Downloads folder?" The AI will use the MCP server's tools to actually browse your filesystem and return real results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best MCP Servers for Raycast
&lt;/h3&gt;

&lt;p&gt;Based on our testing, here are the MCP servers that work best with Raycast:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Server&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;th&gt;Install Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sequential Thinking&lt;/td&gt;
&lt;td&gt;Structured reasoning chains&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx -y @modelcontextprotocol/server-sequential-thinking&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filesystem&lt;/td&gt;
&lt;td&gt;Read/write local files&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx -y @modelcontextprotocol/server-filesystem /path&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;Repos, issues, PRs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx -y @modelcontextprotocol/server-github&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brave Search&lt;/td&gt;
&lt;td&gt;Web search from AI chat&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx -y @modelcontextprotocol/server-brave-search&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory&lt;/td&gt;
&lt;td&gt;Persistent knowledge graph&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx -y @modelcontextprotocol/server-memory&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context7&lt;/td&gt;
&lt;td&gt;Up-to-date library docs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx -y @upstash/context7-mcp@latest&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Transport protocol note:&lt;/strong&gt; Raycast currently supports &lt;code&gt;stdio&lt;/code&gt; transport for locally-run servers. Experimental HTTP support (SSE and Streamable protocols) has been added for connecting to remote MCP servers, but stdio remains the most reliable option.&lt;/p&gt;

&lt;p&gt;For a complete guide on building your own MCP server, see our &lt;a href="https://www.effloow.com/articles/build-custom-mcp-server-claude-code-tutorial" rel="noopener noreferrer"&gt;custom MCP server tutorial&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP + AI Commands: The Combined Workflow
&lt;/h3&gt;

&lt;p&gt;This is the workflow combination that no other Raycast review covers: using MCP servers inside custom AI Commands. Here is a practical example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Explain This Codebase" Command:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the filesystem MCP server pointing to your projects directory&lt;/li&gt;
&lt;li&gt;Create a custom AI Command with the prompt: "Using @filesystem, read the README and key source files in {query} directory. Provide a 3-paragraph summary of what this project does, its architecture, and key dependencies."&lt;/li&gt;
&lt;li&gt;Now, from anywhere in Raycast, run this command with a project path and get an AI-powered codebase overview&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This type of workflow — combining MCP tool access with reusable AI Commands — is what makes Raycast's MCP support more than a checkbox feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Must-Have Raycast Extensions for Developers
&lt;/h2&gt;

&lt;p&gt;The extension ecosystem is one of Raycast's strongest advantages over Alfred and Spotlight. Here are the extensions that deliver the most value in a developer workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Top 10 Developer Extensions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; — Browse repos, issues, PRs, and notifications without opening a browser&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linear&lt;/strong&gt; — Create, search, and manage Linear issues from Raycast&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker&lt;/strong&gt; — Manage containers, images, and volumes from the command bar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jira&lt;/strong&gt; — Search and create Jira tickets inline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Homebrew&lt;/strong&gt; — Search, install, and manage Homebrew packages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VS Code Recent Projects&lt;/strong&gt; — Jump to any recent VS Code workspace instantly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; — Search Tailwind classes and utilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm&lt;/strong&gt; — Search npm packages with download stats and documentation links&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevDocs&lt;/strong&gt; — Search DevDocs.io documentation offline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dash&lt;/strong&gt; — Query Dash documentation sets from Raycast&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Productivity Extensions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Notion&lt;/strong&gt; — Search pages, create entries, and access databases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack&lt;/strong&gt; — Send messages, set status, and search conversations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Translate&lt;/strong&gt; — Inline translation with auto-detect&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Todoist / Things&lt;/strong&gt; — Task management without switching apps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Color Picker&lt;/strong&gt; — Pick colors from anywhere on screen with multiple format outputs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1Password / Bitwarden&lt;/strong&gt; — Search and autofill passwords&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every extension installs in seconds from the &lt;a href="https://www.raycast.com/store" rel="noopener noreferrer"&gt;Raycast Store&lt;/a&gt; and integrates directly into the command bar. No configuration files, no terminal commands — just search and install.&lt;/p&gt;

&lt;h2&gt;
  
  
  Raycast vs Alfred 2026: Which Should You Choose?
&lt;/h2&gt;

&lt;p&gt;This is the comparison everyone asks about. Both are excellent Mac launchers, but they serve different philosophies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature Comparison Table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Raycast&lt;/th&gt;
&lt;th&gt;Alfred&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;Free (Pro at $8/mo)&lt;/td&gt;
&lt;td&gt;Free (Powerpack £34 one-time)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI integration&lt;/td&gt;
&lt;td&gt;Native (cloud + local + MCP)&lt;/td&gt;
&lt;td&gt;Via workflows only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extension ecosystem&lt;/td&gt;
&lt;td&gt;1,500+ in store&lt;/td&gt;
&lt;td&gt;Community workflows (fewer, varies)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clipboard manager&lt;/td&gt;
&lt;td&gt;Built-in (free)&lt;/td&gt;
&lt;td&gt;Powerpack required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Window management&lt;/td&gt;
&lt;td&gt;Built-in (free)&lt;/td&gt;
&lt;td&gt;Not included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Snippets&lt;/td&gt;
&lt;td&gt;Built-in (free)&lt;/td&gt;
&lt;td&gt;Powerpack required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customization depth&lt;/td&gt;
&lt;td&gt;Extensions + API&lt;/td&gt;
&lt;td&gt;Workflows + AppleScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP support&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing model&lt;/td&gt;
&lt;td&gt;Subscription (Pro features)&lt;/td&gt;
&lt;td&gt;One-time purchase (Powerpack)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platform&lt;/td&gt;
&lt;td&gt;macOS only&lt;/td&gt;
&lt;td&gt;macOS only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;First-party design&lt;/td&gt;
&lt;td&gt;Modern, polished&lt;/td&gt;
&lt;td&gt;Functional, customizable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Performance &amp;amp; Speed
&lt;/h3&gt;

&lt;p&gt;Both launchers are fast. In daily use, the difference in launch speed is imperceptible. Where Raycast pulls ahead is in the richness of what happens after you press Enter — the depth of extension integrations, the AI features, and the MCP connectivity make it feel like a different category of tool.&lt;/p&gt;

&lt;p&gt;Alfred's strength is its workflow system, which gives power users deep customization through AppleScript, shell scripts, and visual workflow builders. If you already have a library of Alfred workflows that you depend on, migration is a real cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verdict
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose Raycast if:&lt;/strong&gt; You want an all-in-one tool with AI, MCP, modern extensions, and do not mind a subscription model for advanced features. The free tier alone replaces multiple paid apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Alfred if:&lt;/strong&gt; You prefer a one-time purchase, already have deep Alfred workflow investments, or want maximum customization through scripting without relying on a managed extension store.&lt;/p&gt;

&lt;p&gt;For most developers starting fresh in 2026, Raycast is the stronger choice. The AI integration, MCP support, and extension ecosystem create compounding value that Alfred's traditional approach does not match.&lt;/p&gt;

&lt;h2&gt;
  
  
  Raycast Productivity Setup Guide
&lt;/h2&gt;

&lt;p&gt;Beyond AI and developer tools, Raycast excels as a general productivity platform. Here is how to set up the features that replace standalone apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Window Management
&lt;/h3&gt;

&lt;p&gt;Raycast's built-in window management eliminates the need for Rectangle, Magnet, or BetterSnapTool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Half-screen snapping&lt;/strong&gt; — Left half, right half, top half, bottom half&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quarter tiling&lt;/strong&gt; — Snap to any corner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third splits&lt;/strong&gt; — Left third, center third, right third&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom sizes&lt;/strong&gt; — Define your own dimensions and positions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-display support&lt;/strong&gt; — Move windows between monitors with shortcuts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Set up your preferred shortcuts in Raycast Settings → Extensions → Window Management. Common setups:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + Option + Left&lt;/code&gt; → Left half&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + Option + Right&lt;/code&gt; → Right half&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + Option + Up&lt;/code&gt; → Maximize&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + Option + Down&lt;/code&gt; → Restore previous size&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Clipboard History
&lt;/h3&gt;

&lt;p&gt;The clipboard manager stores everything you copy — text, images, links, files, and colors. Search through your history instantly with the Clipboard History command.&lt;/p&gt;

&lt;p&gt;Pro tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pin frequently used items for instant access&lt;/li&gt;
&lt;li&gt;Use the "Paste as Plain Text" action to strip formatting&lt;/li&gt;
&lt;li&gt;Filter by content type (text, images, links)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Snippets &amp;amp; Text Expansion
&lt;/h3&gt;

&lt;p&gt;Create text snippets that expand when you type a keyword:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Static snippets&lt;/strong&gt; — Reusable text blocks (email templates, code patterns, signatures)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic snippets&lt;/strong&gt; — Include variables like &lt;code&gt;{date}&lt;/code&gt;, &lt;code&gt;{time}&lt;/code&gt;, &lt;code&gt;{clipboard}&lt;/code&gt;, or &lt;code&gt;{cursor}&lt;/code&gt; for intelligent expansion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example snippets for developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;!pr&lt;/code&gt; → Expands to your PR template with date and branch placeholders&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;!debug&lt;/code&gt; → Expands to your standard debugging console.log pattern&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;!meeting&lt;/code&gt; → Expands to meeting notes template with today's date&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quicklinks &amp;amp; Shortcuts
&lt;/h3&gt;

&lt;p&gt;Quicklinks are parameterized URL shortcuts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gh {query}&lt;/code&gt; → Opens &lt;code&gt;https://github.com/search?q={query}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm {package}&lt;/code&gt; → Opens &lt;code&gt;https://www.npmjs.com/package/{package}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mdn {query}&lt;/code&gt; → Opens MDN Web Docs search&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;so {query}&lt;/code&gt; → Opens Stack Overflow search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These compound over time. After a few weeks of adding quicklinks for your most-visited URLs, you save minutes every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing Deep Dive: Is Raycast Pro Worth It?
&lt;/h2&gt;

&lt;p&gt;The pricing question comes down to what you value and what you already pay for.&lt;/p&gt;

&lt;h3&gt;
  
  
  Free Tier Value Analysis
&lt;/h3&gt;

&lt;p&gt;The free tier is legitimately excellent. You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full launcher with learning-based ranking&lt;/li&gt;
&lt;li&gt;Clipboard history (3 months)&lt;/li&gt;
&lt;li&gt;Window management (replaces $10-15 apps like Rectangle Pro)&lt;/li&gt;
&lt;li&gt;Snippets and text expansion (replaces $5-10 apps like TextExpander basic)&lt;/li&gt;
&lt;li&gt;Quicklinks and calculator&lt;/li&gt;
&lt;li&gt;All 1,500+ community extensions&lt;/li&gt;
&lt;li&gt;50 AI messages to try the feature&lt;/li&gt;
&lt;li&gt;5 Raycast Notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Estimated replacement value:&lt;/strong&gt; $25-40/month in standalone app subscriptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pro ROI Calculation
&lt;/h3&gt;

&lt;p&gt;Pro at $8/month (annual) adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unlimited clipboard history&lt;/li&gt;
&lt;li&gt;Cloud Sync across devices&lt;/li&gt;
&lt;li&gt;Custom themes&lt;/li&gt;
&lt;li&gt;Unlimited Raycast Notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Advanced AI add-on ($8/month additional) adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access to Claude, GPT-4o, o1/o3, Gemini, and other frontier models&lt;/li&gt;
&lt;li&gt;Higher rate limits (50/min, 300/hour)&lt;/li&gt;
&lt;li&gt;Image generation with DALL·E and Stable Diffusion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Total for Pro + AI: $16/month&lt;/strong&gt; ($192/year).&lt;/p&gt;

&lt;p&gt;For comparison:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ChatGPT Plus: $20/month&lt;/li&gt;
&lt;li&gt;Claude Pro: $20/month&lt;/li&gt;
&lt;li&gt;GitHub Copilot: $10/month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If Raycast AI replaces even one of those subscriptions for your daily quick questions and code assistance, it pays for itself. Combined with BYOK support (bring your own API keys), you can use Pro without the AI add-on and get AI features through your existing API subscriptions at usage-based rates.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Free + Ollama Path
&lt;/h3&gt;

&lt;p&gt;Here is the option that nobody talks about: &lt;strong&gt;Raycast Free + Ollama gives you AI-powered productivity for $0.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Raycast (free)&lt;/li&gt;
&lt;li&gt;Install Ollama (free)&lt;/li&gt;
&lt;li&gt;Download a model like &lt;code&gt;llama3.2&lt;/code&gt; (free)&lt;/li&gt;
&lt;li&gt;Get AI chat, AI commands, and local model inference — all without spending anything&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This works offline, respects your privacy, and requires no subscription. The trade-off is that local models are slower and less capable than frontier cloud models, but for many tasks (writing assistance, code explanation, translation), they are more than sufficient.&lt;/p&gt;

&lt;p&gt;For setting up the most capable local models, see our guides on &lt;a href="https://www.effloow.com/articles/gemma-4-local-setup-ollama-open-webui-guide-2026" rel="noopener noreferrer"&gt;running Gemma 4 locally with Ollama&lt;/a&gt; and the &lt;a href="https://www.effloow.com/articles/free-ai-coding-tools-zero-dollar-stack-2026" rel="noopener noreferrer"&gt;free AI coding tools stack&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Raycast Is and Is Not For
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Raycast is for you if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You are a &lt;strong&gt;macOS developer&lt;/strong&gt; who lives in the terminal and browser&lt;/li&gt;
&lt;li&gt;You want to &lt;strong&gt;consolidate multiple productivity apps&lt;/strong&gt; into one tool&lt;/li&gt;
&lt;li&gt;You are interested in &lt;strong&gt;MCP and AI integration&lt;/strong&gt; as part of your workflow&lt;/li&gt;
&lt;li&gt;You prefer &lt;strong&gt;keyboard-driven interfaces&lt;/strong&gt; over mouse navigation&lt;/li&gt;
&lt;li&gt;You value &lt;strong&gt;privacy&lt;/strong&gt; and want local AI options&lt;/li&gt;
&lt;li&gt;You work across &lt;strong&gt;multiple developer tools&lt;/strong&gt; (GitHub, Linear, Jira, Docker, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Raycast is probably not for you if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You use &lt;strong&gt;Windows or Linux&lt;/strong&gt; — Raycast is macOS only, with no announced plans for other platforms&lt;/li&gt;
&lt;li&gt;You are happy with &lt;strong&gt;Spotlight + individual apps&lt;/strong&gt; and do not want to learn a new tool&lt;/li&gt;
&lt;li&gt;You need &lt;strong&gt;deep Alfred workflow compatibility&lt;/strong&gt; — migration is possible but not seamless&lt;/li&gt;
&lt;li&gt;You want &lt;strong&gt;enterprise-grade AI&lt;/strong&gt; — Raycast AI is convenient but does not replace dedicated tools like &lt;a href="https://www.effloow.com/articles/claude-code-advanced-workflow-subagents-commands-multi-session" rel="noopener noreferrer"&gt;Claude Code for advanced workflows&lt;/a&gt; or &lt;a href="https://www.effloow.com/articles/terminal-ai-coding-agents-compared-claude-code-gemini-cli-2026" rel="noopener noreferrer"&gt;terminal AI coding agents&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;You primarily work on &lt;strong&gt;mobile or iPad&lt;/strong&gt; — no iOS version exists&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Raycast free?
&lt;/h3&gt;

&lt;p&gt;Yes. The core launcher, clipboard history (3 months), window management, snippets, quicklinks, calculator, and all 1,500+ community extensions are free forever. The free plan also includes 50 AI messages and 5 Raycast Notes. You can use Raycast indefinitely without paying anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Raycast safe to use?
&lt;/h3&gt;

&lt;p&gt;Raycast is a reputable company backed by prominent investors. The app runs locally on your Mac and does not require root access. Extension permissions are sandboxed. For AI features, cloud models send your prompts to the respective model providers (OpenAI, Anthropic, etc.), but local models via Ollama keep everything on your machine. Raycast's privacy policy is transparent about data handling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Raycast better than Alfred?
&lt;/h3&gt;

&lt;p&gt;It depends on your priorities. Raycast offers more built-in features (AI, MCP, window management, clipboard) for free. Alfred offers a one-time purchase model and deeper scripting customization. For most developers starting fresh in 2026, Raycast provides more value. See the detailed comparison table above.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I set up MCP in Raycast?
&lt;/h3&gt;

&lt;p&gt;Search for "Install MCP Server" in Raycast, fill out the server details (name, command, args, env variables), and the server becomes available via @-mention in AI Chat and Commands. See the full MCP Setup Guide section above for step-by-step instructions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Raycast run local AI models?
&lt;/h3&gt;

&lt;p&gt;Yes, since v1.99. Raycast integrates with Ollama to run over 100 open-source models locally. Install Ollama, download models through Raycast Settings → AI → Local Models, and use them in all AI features. Local models are free for all users, including the free tier.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much does Raycast cost?
&lt;/h3&gt;

&lt;p&gt;Free plan: $0. Pro plan: $8/month (annual) or $10/month (monthly). Team plan: $12/user/month (annual) or $15/user/month (monthly). Advanced AI add-on: +$8/month on top of Pro. Enterprise: custom pricing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Raycast work on Windows?
&lt;/h3&gt;

&lt;p&gt;No. Raycast is macOS-only as of April 2026. There are no officially announced plans for Windows or Linux support.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are the best Raycast extensions?
&lt;/h3&gt;

&lt;p&gt;For developers: GitHub, Linear, Docker, Jira, Homebrew, VS Code Recent Projects, and Tailwind CSS. For productivity: Notion, Slack, Google Translate, and Color Picker. See the full extensions list above.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I use Raycast with Ollama?
&lt;/h3&gt;

&lt;p&gt;Install Ollama from ollama.ai, then go to Raycast Settings → AI → Local Models. Copy model names from Ollama's library to download them. Once downloaded, select a local model in any AI chat or command. No subscription required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Verdict
&lt;/h2&gt;

&lt;p&gt;Raycast in 2026 is the most complete Mac productivity tool available. The free tier alone replaces multiple paid applications, and the AI integration — especially with MCP and Ollama — puts it in a category that no other launcher touches.&lt;/p&gt;

&lt;p&gt;The MCP support is the real differentiator. While other tools require you to switch between different AI interfaces for different tasks, Raycast lets you connect your AI assistant to your actual tools and data through a standardized protocol. This is not a gimmick — it is the direction that all AI-native tools are moving, and Raycast is there first among Mac launchers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our recommendation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start with the free plan.&lt;/strong&gt; It is genuinely useful without paying anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add Ollama for free AI.&lt;/strong&gt; Local models give you privacy and zero cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade to Pro when you need Cloud Sync&lt;/strong&gt; or unlimited clipboard history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add the AI add-on only if&lt;/strong&gt; local models are not sufficient for your needs and you do not already have API keys you could use via BYOK.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For developers building with AI tools — especially those already in the MCP ecosystem with tools like &lt;a href="https://www.effloow.com/articles/claude-code-advanced-workflow-subagents-commands-multi-session" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; or exploring &lt;a href="https://www.effloow.com/articles/how-we-built-company-with-14-ai-agents" rel="noopener noreferrer"&gt;AI agent workflows&lt;/a&gt; — Raycast is not optional. It is the connective tissue that ties your Mac productivity to your AI-native workflow.&lt;/p&gt;

&lt;p&gt;Whether you are building with &lt;a href="https://www.effloow.com/articles/n8n-self-hosted-ai-workflow-automation-guide-2026" rel="noopener noreferrer"&gt;n8n for automation&lt;/a&gt;, managing projects in &lt;a href="https://www.effloow.com/articles/notion-ai-custom-agents-developer-guide-2026" rel="noopener noreferrer"&gt;Notion with AI agents&lt;/a&gt;, or comparing &lt;a href="https://www.effloow.com/articles/ai-coding-tools-pricing-comparison-2026" rel="noopener noreferrer"&gt;AI coding tools&lt;/a&gt;, Raycast gives you a single keyboard shortcut to access all of it. That is worth trying, and for most developers, it is worth keeping.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Last updated: April 2026. Pricing and features verified against &lt;a href="https://www.raycast.com" rel="noopener noreferrer"&gt;raycast.com&lt;/a&gt; and &lt;a href="https://manual.raycast.com" rel="noopener noreferrer"&gt;manual.raycast.com&lt;/a&gt;. Raycast v1.99+ tested on macOS Sequoia.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mac</category>
      <category>productivity</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Gamma AI Review 2026: I Built 50 Presentations — Here's the Honest Truth About AI Slide Generation</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Sun, 05 Apr 2026 14:44:04 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/gamma-ai-review-2026-i-built-50-presentations-heres-the-honest-truth-about-ai-slide-generation-3l57</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/gamma-ai-review-2026-i-built-50-presentations-heres-the-honest-truth-about-ai-slide-generation-3l57</guid>
      <description>&lt;h1&gt;
  
  
  Gamma AI Review 2026: I Built 50 Presentations — Here's the Honest Truth About AI Slide Generation
&lt;/h1&gt;

&lt;p&gt;Every week, someone asks which AI presentation tool actually delivers on its promises. After building over 50 presentations, pitch decks, project briefs, and internal reports with Gamma AI over the past several months, I have a clear answer — but it comes with caveats that most reviews skip over.&lt;/p&gt;

&lt;p&gt;Gamma AI turns a text prompt into a polished, card-based presentation in under 60 seconds. That part works exactly as advertised. What matters more is what happens after generation: how much editing you need, whether the output looks professional enough for real audiences, and what breaks when you try to export to PowerPoint or PDF.&lt;/p&gt;

&lt;p&gt;This review covers everything from Agent v3.0's conversational design features to the real export limitations that Gamma's marketing does not mention prominently. If you are evaluating Gamma for client presentations, investor decks, or team communications, this is the review that will save you from surprises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Affiliate Disclosure:&lt;/strong&gt; This article contains affiliate links to Gamma AI via PartnerStack. If you sign up through our links, we may earn a commission at no extra cost to you. Gamma pays affiliates 30% recurring commission for one year through their PartnerStack program with a 60-day tracking cookie. See our &lt;a href="https://www.effloow.com/affiliate-disclosure" rel="noopener noreferrer"&gt;affiliate disclosure&lt;/a&gt; for full details.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Gamma AI?
&lt;/h2&gt;

&lt;p&gt;Gamma AI is an AI-powered presentation, document, and web page builder that generates polished visual content from text prompts. Instead of building slides one by one in PowerPoint or Google Slides, you describe what you want and Gamma creates a complete, designed presentation in seconds.&lt;/p&gt;

&lt;p&gt;Founded in 2020 and now serving over 70 million users globally, Gamma has grown into one of the most widely used AI content creation platforms. In November 2025, the company &lt;a href="https://techcrunch.com/2025/11/10/ai-powerpoint-killer-gamma-hits-2-1b-valuation-100m-arr-founder-says/" rel="noopener noreferrer"&gt;announced it had surpassed $100 million in annual recurring revenue and raised a $68 million Series B at a $2.1 billion valuation&lt;/a&gt; led by Andreessen Horowitz, placing it among the most successful AI-native productivity tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Gamma Works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;You enter a prompt or paste content&lt;/strong&gt; — a topic, outline, document, or URL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gamma generates a complete presentation&lt;/strong&gt; — slides with text, images, layouts, and design elements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You refine with AI or manually&lt;/strong&gt; — use Agent v3.0 for conversational edits or drag-and-drop for manual adjustments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You share or export&lt;/strong&gt; — publish as a web page, present live, or export to PDF, PPTX, or PNG&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key difference from traditional tools is Gamma's card-based format. Instead of fixed-dimension slides, Gamma creates scrollable cards that adapt to content length. This means a single card can hold more information than a standard slide without forcing you to split content across multiple pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Makes Gamma Different
&lt;/h3&gt;

&lt;p&gt;Gamma is not just another slide generator. It creates three types of content from the same interface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Presentations&lt;/strong&gt; — card-based slides for live presenting or sharing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documents&lt;/strong&gt; — rich, designed documents that look better than a Google Doc&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Pages&lt;/strong&gt; — publishable one-click websites, no coding required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This versatility is genuinely useful. A single project brief can become a presentation for stakeholders, a document for the team, and a published web page for external partners — all from the same content.&lt;/p&gt;

&lt;p&gt;If you are building content-driven workflows, Gamma fits naturally alongside tools like &lt;a href="https://www.effloow.com/articles/n8n-self-hosted-ai-workflow-automation-guide-2026" rel="noopener noreferrer"&gt;n8n for workflow automation&lt;/a&gt; or &lt;a href="https://www.effloow.com/articles/notion-ai-custom-agents-developer-guide-2026" rel="noopener noreferrer"&gt;Notion AI for workspace management&lt;/a&gt;, creating a pipeline where AI handles the heavy lifting of content creation and formatting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gamma AI Features Deep-Dive
&lt;/h2&gt;

&lt;p&gt;Gamma has evolved significantly beyond basic slide generation. Here is what the platform offers in 2026 and how each feature actually performs.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Generation Engine
&lt;/h3&gt;

&lt;p&gt;Gamma leverages over 20 AI models to generate text, images, layouts, and design elements. The generation quality has improved noticeably over the past year, particularly in layout decisions and visual hierarchy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What works well:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Topic-to-presentation generation consistently produces usable first drafts&lt;/li&gt;
&lt;li&gt;Image selection and placement is contextually relevant most of the time&lt;/li&gt;
&lt;li&gt;Text density is appropriate — Gamma avoids the wall-of-text problem that plagues many AI generators&lt;/li&gt;
&lt;li&gt;Layout variety across cards keeps presentations visually interesting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where it falls short:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generated content tends toward generic language — you will need to inject specific data, examples, and your own voice&lt;/li&gt;
&lt;li&gt;Image quality varies significantly depending on the topic; niche subjects get stock-photo-quality results&lt;/li&gt;
&lt;li&gt;Occasionally generates redundant cards that repeat the same point with slightly different wording&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agent v3.0 — The Conversational Design Assistant
&lt;/h3&gt;

&lt;p&gt;Agent v3.0 is Gamma's most significant recent feature and the closest thing to having a design collaborator available on demand. Instead of manually editing each card, you can describe changes in natural language and the Agent executes them across your entire presentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Agent v3.0 can do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web research&lt;/strong&gt; — search the web for information and pull in citations directly into your slides&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restyle entire decks&lt;/strong&gt; — change the visual theme, color palette, or layout style with a single request&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refine content&lt;/strong&gt; — incorporate links, screenshots, or documents you provide into existing presentations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restructure flow&lt;/strong&gt; — reorganize sections, merge cards, or split dense content across multiple slides&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Localize content&lt;/strong&gt; — translate and adapt presentations for different audiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real-world assessment:&lt;/strong&gt; Agent v3.0 handles broad changes well — restyling a deck or adding a new section works reliably. It struggles with precise, surgical edits. Asking it to "make the third bullet point on card 7 more concise" sometimes affects other content unexpectedly. For precise editing, manual adjustment is still faster.&lt;/p&gt;

&lt;p&gt;The web research capability is genuinely useful for creating data-backed presentations quickly. You can ask the Agent to find recent statistics on a topic and it pulls in sourced data points. However, you should verify every statistic it surfaces — AI-retrieved data is not always current or accurate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Templates and Themes
&lt;/h3&gt;

&lt;p&gt;Gamma offers a growing library of templates organized by use case: pitch decks, project updates, marketing plans, educational content, and more. Each template can be customized with your brand colors, fonts, and logo.&lt;/p&gt;

&lt;p&gt;The template quality is above average compared to competitors. Layouts feel modern and clean rather than the cluttered, clip-art-heavy designs you still see in some tools. That said, the template library is smaller than Canva's. If you need highly specialized templates (restaurant menus, event programs, social media carousels), Canva still has broader coverage.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Animations
&lt;/h3&gt;

&lt;p&gt;As of January 2026, Gamma generates AI-powered animations instead of static images in presentations. Cards can include subtle motion effects, animated transitions, and dynamic visual elements that make presentations feel more polished during live presenting.&lt;/p&gt;

&lt;p&gt;The animations are tasteful and professional — Gamma has avoided the trap of adding distracting motion for its own sake. They work well in web-based presentations but do not translate to exported formats (more on this in the export section).&lt;/p&gt;

&lt;h3&gt;
  
  
  Analytics and Engagement Tracking
&lt;/h3&gt;

&lt;p&gt;Pro plan and above users get presentation analytics: who viewed your presentation, how long they spent on each card, and where they dropped off. This is particularly valuable for sales decks and investor presentations where engagement data directly informs follow-up strategy.&lt;/p&gt;

&lt;p&gt;The analytics dashboard is straightforward but effective. You see view counts, average time per card, and completion rates. It is not as sophisticated as dedicated analytics tools, but it gives you actionable data that PowerPoint and Google Slides simply do not provide.&lt;/p&gt;

&lt;h3&gt;
  
  
  Collaboration
&lt;/h3&gt;

&lt;p&gt;Gamma supports real-time collaboration with multiple editors, comments, and sharing permissions. The collaboration experience is smooth — closer to Google Slides than the clunky co-authoring in PowerPoint.&lt;/p&gt;

&lt;p&gt;Team workspaces allow you to organize presentations by project, share brand assets, and maintain consistent styling across your organization. The collaboration features work well for small to medium teams. Enterprise-level features like SSO and advanced permissions are available on higher-tier plans.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gamma AI Pricing and Plans
&lt;/h2&gt;

&lt;p&gt;Gamma uses a freemium model with credit-based AI generation. Here is the complete pricing breakdown as of April 2026. All prices reflect annual billing unless noted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Individual Plans
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Annual Price&lt;/th&gt;
&lt;th&gt;Monthly Price&lt;/th&gt;
&lt;th&gt;AI Credits&lt;/th&gt;
&lt;th&gt;Key Features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;400 credits&lt;/td&gt;
&lt;td&gt;Basic generation, Gamma watermark, limited templates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$8/mo&lt;/td&gt;
&lt;td&gt;$10/mo&lt;/td&gt;
&lt;td&gt;Unlimited AI&lt;/td&gt;
&lt;td&gt;Remove watermark, custom brand colors and logo, basic brand kit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$15/mo&lt;/td&gt;
&lt;td&gt;$20/mo&lt;/td&gt;
&lt;td&gt;Unlimited AI&lt;/td&gt;
&lt;td&gt;Custom branding, analytics, API access, up to 60-slide decks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ultra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$90/mo&lt;/td&gt;
&lt;td&gt;$100/mo&lt;/td&gt;
&lt;td&gt;Unlimited AI&lt;/td&gt;
&lt;td&gt;Advanced AI models, 75-card decks, early access features&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Team and Enterprise Plans
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price per User (Annual)&lt;/th&gt;
&lt;th&gt;Minimum Seats&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Team&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$20/mo&lt;/td&gt;
&lt;td&gt;2 seats&lt;/td&gt;
&lt;td&gt;Small teams needing shared workspaces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Business&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$40/mo&lt;/td&gt;
&lt;td&gt;10 seats&lt;/td&gt;
&lt;td&gt;Larger organizations with SSO and admin controls&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: &lt;a href="https://gamma.app/pricing" rel="noopener noreferrer"&gt;Gamma pricing page&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How AI Credits Work
&lt;/h3&gt;

&lt;p&gt;The Free plan's 400 credits translate to roughly 10–15 full presentation generations, depending on length and complexity. Each generation, edit with Agent, and AI image creation consumes credits. Once you exhaust free credits, you need to upgrade — there is no pay-per-credit option.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which Plan Should You Choose?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Free plan&lt;/strong&gt; — good for testing Gamma and creating personal, non-client-facing content. The watermark ("Made with Gamma") makes it unsuitable for professional use. If you are presenting to investors, clients, or executives, the watermark undermines credibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plus plan ($8/mo)&lt;/strong&gt; — the sweet spot for most individual users. Unlimited AI generation and watermark removal cover 90% of use cases. If you primarily need to create presentations quickly without advanced analytics, this is the plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro plan ($15/mo)&lt;/strong&gt; — justified if you need presentation analytics, API access, or extended deck lengths. Sales teams and consultants who need engagement tracking will find the upgrade worthwhile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ultra plan ($90/mo)&lt;/strong&gt; — only makes sense if you need access to the most advanced AI models and consistently create very long presentations. For most users, Pro covers everything needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with Gamma AI — Step-by-Step Tutorial
&lt;/h2&gt;

&lt;p&gt;Here is how to go from zero to your first AI-generated presentation in under five minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Sign Up
&lt;/h3&gt;

&lt;p&gt;Visit gamma.app and create an account with Google, email, or SSO. No credit card required for the free plan. You get 400 AI credits immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Choose Your Content Type
&lt;/h3&gt;

&lt;p&gt;From the dashboard, click &lt;strong&gt;Create New&lt;/strong&gt; and select your content type:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Presentation&lt;/strong&gt; — card-based slides for presenting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document&lt;/strong&gt; — rich formatted documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webpage&lt;/strong&gt; — publishable web pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this tutorial, select &lt;strong&gt;Presentation&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Provide Your Input
&lt;/h3&gt;

&lt;p&gt;You have several input options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text prompt&lt;/strong&gt; — describe your topic and Gamma generates everything ("Create a 10-slide pitch deck for a B2B SaaS startup in the project management space")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paste content&lt;/strong&gt; — paste existing text, notes, or an outline and Gamma formats it into slides&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Import&lt;/strong&gt; — upload a document, PDF, or provide a URL for Gamma to convert&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template&lt;/strong&gt; — start from a pre-designed template and customize&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the best results with a text prompt, be specific about your audience, the number of slides, and the key points you want covered. Vague prompts produce vague presentations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Select a Theme
&lt;/h3&gt;

&lt;p&gt;After entering your prompt, Gamma presents theme options. Choose a visual style that matches your brand or purpose. You can change this later, so do not overthink it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Review and Generate
&lt;/h3&gt;

&lt;p&gt;Gamma shows you a proposed outline before generating. This is your chance to add, remove, or reorder sections. Take a moment to adjust the outline — it is much faster to restructure at this stage than after generation.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Generate&lt;/strong&gt; and Gamma creates your full presentation in 30–60 seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Refine Your Presentation
&lt;/h3&gt;

&lt;p&gt;This is where the real work happens. Review each card and:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace generic text with specific data, examples, and your own insights&lt;/li&gt;
&lt;li&gt;Swap AI-generated images with your own screenshots or brand visuals where appropriate&lt;/li&gt;
&lt;li&gt;Adjust the layout of any cards that feel cluttered or sparse&lt;/li&gt;
&lt;li&gt;Use Agent v3.0 for broad changes like restyling or adding new sections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A realistic estimate: a 10-card presentation takes 15–30 minutes to refine after AI generation. Gamma gives you 70% of the work done — you provide the final 30% that makes it yours.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7: Share or Export
&lt;/h3&gt;

&lt;p&gt;Choose your distribution method:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Present&lt;/strong&gt; — full-screen presentation mode directly in Gamma&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share link&lt;/strong&gt; — anyone with the link can view (analytics available on Pro+)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export&lt;/strong&gt; — PDF, PPTX, PNG, or Google Slides&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish as webpage&lt;/strong&gt; — one-click publish with a custom URL&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Agent v3.0 Walkthrough — Your AI Design Assistant
&lt;/h2&gt;

&lt;p&gt;Agent v3.0 deserves a deeper look because it fundamentally changes how you interact with Gamma. Instead of clicking through menus and dragging elements, you have a conversation with an AI that understands your entire presentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Use Agent v3.0
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open any presentation and click the &lt;strong&gt;Agent&lt;/strong&gt; button (or press the keyboard shortcut)&lt;/li&gt;
&lt;li&gt;Type your request in natural language&lt;/li&gt;
&lt;li&gt;Agent processes the request and applies changes across your presentation&lt;/li&gt;
&lt;li&gt;Review the changes and accept, undo, or refine further&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Effective Agent Commands
&lt;/h3&gt;

&lt;p&gt;Here are the types of requests that work best with Agent v3.0:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content additions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Add a slide about our competitive advantages after the market overview"&lt;/li&gt;
&lt;li&gt;"Include recent statistics about the AI presentation market"&lt;/li&gt;
&lt;li&gt;"Create a timeline showing our product roadmap for 2026"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Visual changes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Change the color scheme to dark blue and white"&lt;/li&gt;
&lt;li&gt;"Make the design more minimalist — reduce visual clutter"&lt;/li&gt;
&lt;li&gt;"Use a consistent icon style throughout the presentation"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Structural edits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Combine the last three slides into a single summary slide"&lt;/li&gt;
&lt;li&gt;"Move the pricing section before the features section"&lt;/li&gt;
&lt;li&gt;"Split the long features card into three separate cards"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Research-backed updates:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Research the latest market size data for AI presentation tools and add it to the market overview slide"&lt;/li&gt;
&lt;li&gt;"Find three customer testimonial examples for SaaS pitch decks and add a testimonials section"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agent v3.0 Limitations
&lt;/h3&gt;

&lt;p&gt;Be aware of these real limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Precision editing is unreliable&lt;/strong&gt; — asking for changes to specific elements sometimes affects neighboring content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex multi-step requests sometimes partially fail&lt;/strong&gt; — break complex requests into smaller steps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Research citations need verification&lt;/strong&gt; — the Agent pulls data from the web, but you must verify accuracy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Undo is all-or-nothing&lt;/strong&gt; — you cannot selectively accept some Agent changes while rejecting others&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Despite these limitations, Agent v3.0 is a genuine productivity multiplier. It handles the tedious parts of presentation editing — restyling, restructuring, adding boilerplate sections — so you can focus on the content that matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Output Quality Analysis — The Honest Assessment
&lt;/h2&gt;

&lt;p&gt;This is where most Gamma reviews fall short. They show the best-case outputs and skip the messy reality. Here is what you actually get across different use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design Quality: 7/10
&lt;/h3&gt;

&lt;p&gt;Gamma's design output is consistently good but rarely exceptional. Presentations look modern, clean, and professional — better than what most people create manually in PowerPoint. But they have a recognizable "AI-generated" aesthetic. Experienced designers will spot Gamma output immediately.&lt;/p&gt;

&lt;p&gt;The card-based format is both a strength and a limitation. It works beautifully for web viewing and scrollable content. It feels less natural for traditional boardroom presentations where audiences expect standard slide dimensions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Content Quality: 5/10 (Before Editing) → 8/10 (After Editing)
&lt;/h3&gt;

&lt;p&gt;Raw AI-generated content is a starting point, not a finished product. Expect generic language, safe statements, and a tendency to list features without explaining why they matter. The content is structurally sound — headings, bullet points, and flow are logical — but it lacks the specificity and insight that make presentations compelling.&lt;/p&gt;

&lt;p&gt;After 15–30 minutes of editing per 10-card presentation, the output quality jumps significantly. Gamma handles formatting and structure so well that your editing time goes almost entirely toward improving the actual content.&lt;/p&gt;

&lt;h3&gt;
  
  
  Image Quality: 6/10
&lt;/h3&gt;

&lt;p&gt;AI-generated images are hit or miss. Common business topics (teamwork, technology, growth) get decent results. Niche topics (specific industries, technical concepts, regional contexts) often get generic or irrelevant images. Plan to replace at least 30–50% of generated images with your own.&lt;/p&gt;

&lt;h3&gt;
  
  
  Overall Assessment
&lt;/h3&gt;

&lt;p&gt;Gamma excels at speed and structure. It is the fastest path from "I need a presentation" to "I have a presentable draft." It does not excel at creating presentations that feel handcrafted, unique, or deeply customized. If your presentations need to stand out visually — investor decks, creative pitches, brand launches — Gamma is a starting point, not the finish line.&lt;/p&gt;

&lt;p&gt;For internal communications, team updates, project briefs, and educational content, Gamma's output quality is more than sufficient with minimal editing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gamma AI vs Alternatives — Comparison Table
&lt;/h2&gt;

&lt;p&gt;The AI presentation landscape has shifted significantly. Notably, Tome — once a major competitor with over 20 million users — &lt;a href="https://deckary.com/blog/tome-review" rel="noopener noreferrer"&gt;discontinued its presentation feature in early 2025&lt;/a&gt; to pivot toward sales automation. Here is how the remaining major players compare.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Gamma AI&lt;/th&gt;
&lt;th&gt;Canva&lt;/th&gt;
&lt;th&gt;Beautiful.ai&lt;/th&gt;
&lt;th&gt;PowerPoint (Copilot)&lt;/th&gt;
&lt;th&gt;Google Slides&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Generation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full presentation from prompt&lt;/td&gt;
&lt;td&gt;Outline-level AI, manual refinement needed&lt;/td&gt;
&lt;td&gt;AI layout suggestions, less generative&lt;/td&gt;
&lt;td&gt;Copilot adds AI to existing slides&lt;/td&gt;
&lt;td&gt;Limited AI features&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Generation Speed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~30 seconds&lt;/td&gt;
&lt;td&gt;1–2 minutes&lt;/td&gt;
&lt;td&gt;1–2 minutes&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Design Quality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Modern, card-based&lt;/td&gt;
&lt;td&gt;Broadest template library&lt;/td&gt;
&lt;td&gt;Best automated design&lt;/td&gt;
&lt;td&gt;Traditional slide format&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent/Chat AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent v3.0 (conversational)&lt;/td&gt;
&lt;td&gt;Magic Design&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Copilot chat&lt;/td&gt;
&lt;td&gt;Gemini integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Export to PPTX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Problematic (layout shifts)&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Best fidelity&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Export to PDF&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pro plan and above&lt;/td&gt;
&lt;td&gt;Business plan&lt;/td&gt;
&lt;td&gt;Pro plan&lt;/td&gt;
&lt;td&gt;Via SharePoint&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Collaboration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time, team workspaces&lt;/td&gt;
&lt;td&gt;Excellent, mature&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Excellent via 365&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free Plan&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;400 credits&lt;/td&gt;
&lt;td&gt;Generous free tier&lt;/td&gt;
&lt;td&gt;No free plan&lt;/td&gt;
&lt;td&gt;Requires 365 license&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$8/mo&lt;/td&gt;
&lt;td&gt;$13/mo (Pro)&lt;/td&gt;
&lt;td&gt;$12/mo&lt;/td&gt;
&lt;td&gt;Included in 365 ($7/mo+)&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best For&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast AI generation, web-first content&lt;/td&gt;
&lt;td&gt;Multi-format design, broad templates&lt;/td&gt;
&lt;td&gt;Design-focused teams&lt;/td&gt;
&lt;td&gt;Enterprise, Office ecosystem&lt;/td&gt;
&lt;td&gt;Budget-conscious teams&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  When to Choose Gamma
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You need presentations fast and want AI to handle the first draft&lt;/li&gt;
&lt;li&gt;Your primary distribution is web links or live presenting (not PPTX files)&lt;/li&gt;
&lt;li&gt;You create presentations, documents, and web pages from the same platform&lt;/li&gt;
&lt;li&gt;Agent v3.0's conversational editing matches your workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to Choose an Alternative
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Choose Canva&lt;/strong&gt; if you need the broadest template library and multi-format design (social, print, video, presentations)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose Beautiful.ai&lt;/strong&gt; if design quality and PPTX export fidelity are your top priorities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose PowerPoint with Copilot&lt;/strong&gt; if your organization is embedded in the Microsoft 365 ecosystem&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose Google Slides&lt;/strong&gt; if you need free, reliable collaboration and basic presentations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For teams building AI-powered content pipelines, consider how Gamma fits with other tools in your stack. Our &lt;a href="https://www.effloow.com/articles/how-we-built-company-with-14-ai-agents" rel="noopener noreferrer"&gt;guide to building with 14 AI agents&lt;/a&gt; shows how AI tools work together in practice. And if you are optimizing your content for search, &lt;a href="https://www.effloow.com/articles/surfer-seo-review-ai-content-optimization-guide-2026" rel="noopener noreferrer"&gt;Surfer SEO&lt;/a&gt; can help ensure your Gamma-published web pages rank well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Export and Sharing — What Actually Works
&lt;/h2&gt;

&lt;p&gt;Export is where Gamma's web-first architecture creates real friction. Understanding these limitations before you commit to Gamma for a critical project will save you from deadline-day panic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Web Sharing (Best Experience)
&lt;/h3&gt;

&lt;p&gt;Sharing via link is Gamma's strongest distribution method. Recipients get the full experience: animations, interactive elements, responsive layout, and analytics tracking. If your audience can view a web link, this is always the recommended option.&lt;/p&gt;

&lt;h3&gt;
  
  
  PDF Export (Reliable)
&lt;/h3&gt;

&lt;p&gt;PDF export preserves visual layout faithfully. What you see in Gamma is very close to what you get in the PDF. Gradient headings may render slightly differently, and interactive elements become static, but the overall quality is consistent. This is the safest export option for offline distribution.&lt;/p&gt;

&lt;h3&gt;
  
  
  PowerPoint (PPTX) Export (Problematic)
&lt;/h3&gt;

&lt;p&gt;This is Gamma's most significant weakness and the limitation you must understand before choosing it. PPTX export introduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Layout shifts&lt;/strong&gt; — elements become misaligned or resized incorrectly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Font substitution&lt;/strong&gt; — custom fonts may not transfer; system fonts substitute and change the visual feel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dimension mismatches&lt;/strong&gt; — Gamma's card format does not map cleanly to standard slide dimensions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static conversion&lt;/strong&gt; — all interactive elements, animations, and embedded content become static images&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gradient issues&lt;/strong&gt; — gradient headings may default to a single color&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Realistic expectation:&lt;/strong&gt; budget 15–30 minutes of cleanup time in PowerPoint after exporting a 15-slide deck. For complex presentations with custom layouts, expect more.&lt;/p&gt;

&lt;p&gt;If your workflow requires delivering final presentations in PPTX format — common in corporate environments — Beautiful.ai offers significantly better export fidelity. Consider using Gamma for drafting and ideation, then rebuilding critical slides in PowerPoint or Beautiful.ai for final delivery.&lt;/p&gt;

&lt;h3&gt;
  
  
  PNG Export
&lt;/h3&gt;

&lt;p&gt;Individual cards export as PNG images. Quality is good and useful for embedding presentation visuals in documents, emails, or social media. This is a straightforward feature that works as expected.&lt;/p&gt;

&lt;h3&gt;
  
  
  Google Slides Export
&lt;/h3&gt;

&lt;p&gt;Available as an export option, the quality falls between PDF (good) and PPTX (problematic). Some formatting adjustments are needed, but less than with PowerPoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  Publishing as a Web Page
&lt;/h3&gt;

&lt;p&gt;One of Gamma's unique strengths. You can publish any presentation as a standalone web page with a custom URL, no coding required. This is excellent for portfolio pieces, product pages, and public-facing content. The published pages are responsive and include Gamma's analytics if you are on a Pro plan or above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Is Gamma AI Best For?
&lt;/h2&gt;

&lt;p&gt;After extensive use, here are the audiences that get the most value from Gamma — and the ones who should look elsewhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gamma Is Excellent For:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Startup founders and solo entrepreneurs&lt;/strong&gt; who need investor decks, pitch presentations, and project briefs fast. The speed advantage is massive when you are wearing multiple hats and cannot spend hours on slide design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Marketing teams&lt;/strong&gt; creating campaign briefs, strategy presentations, and client reports. The combination of AI generation and web publishing means you can go from idea to shareable content in minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Educators and trainers&lt;/strong&gt; building course materials, lecture slides, and educational content. The card-based format works particularly well for learning content that students scroll through at their own pace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content creators&lt;/strong&gt; who need visual content for blogs, newsletters, and social media. Gamma's web publishing turns presentations into shareable content pieces. If you are building content workflows with &lt;a href="https://www.effloow.com/articles/n8n-self-hosted-ai-workflow-automation-guide-2026" rel="noopener noreferrer"&gt;automation tools like n8n&lt;/a&gt;, Gamma's API (Pro plan) can integrate into your pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Internal communications teams&lt;/strong&gt; producing company updates, onboarding materials, and team reports where speed matters more than pixel-perfect design.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gamma Is Not Ideal For:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Corporate environments requiring PPTX delivery&lt;/strong&gt; — if your client or executive team expects a PowerPoint file, Gamma's export limitations will create extra work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design-focused agencies&lt;/strong&gt; where every presentation must be visually unique and brand-perfect. Gamma's output, while clean, has a recognizable aesthetic that limits differentiation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data-heavy presentations&lt;/strong&gt; with complex charts, custom graphs, and detailed tables. Gamma handles basic data visualization but cannot match dedicated tools like PowerPoint or Beautiful.ai for complex data presentations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Offline-first workflows&lt;/strong&gt; — if your presentations are primarily delivered in environments without internet access, Gamma's web-first approach is a disadvantage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros and Cons — Honest Assessment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed is unmatched&lt;/strong&gt; — prompt to presentation in under 60 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent v3.0 is genuinely useful&lt;/strong&gt; — conversational editing saves significant time on broad changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three-in-one platform&lt;/strong&gt; — presentations, documents, and web pages from one tool&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web publishing is excellent&lt;/strong&gt; — one-click publish creates professional web pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generous free plan&lt;/strong&gt; — 400 credits let you thoroughly evaluate before paying&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern design output&lt;/strong&gt; — clean, contemporary layouts that look professional&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics on Pro plan&lt;/strong&gt; — engagement tracking that PowerPoint and Google Slides lack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active development&lt;/strong&gt; — regular feature updates including AI animations (January 2026)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PPTX export is unreliable&lt;/strong&gt; — layout shifts, font issues, and dimension mismatches require manual cleanup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Card format is non-standard&lt;/strong&gt; — does not map to traditional 16:9 slide expectations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI content needs significant editing&lt;/strong&gt; — generated text is generic and requires your expertise to become compelling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image quality is inconsistent&lt;/strong&gt; — niche topics get poor AI-generated visuals&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent v3.0 lacks precision&lt;/strong&gt; — broad changes work well, surgical edits are unreliable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template library is smaller than Canva&lt;/strong&gt; — fewer specialized templates for niche use cases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing adds up for teams&lt;/strong&gt; — team plans start at $20/seat/month, which scales quickly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web-dependent&lt;/strong&gt; — limited offline functionality compared to desktop applications&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Gamma AI free?
&lt;/h3&gt;

&lt;p&gt;Yes, Gamma offers a free plan with 400 AI credits. This translates to roughly 10–15 full presentation generations. The free plan includes a "Made with Gamma" watermark on all content. Paid plans start at $8/month (annual billing) with the Plus plan, which removes the watermark and provides unlimited AI generation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I export Gamma presentations to PowerPoint?
&lt;/h3&gt;

&lt;p&gt;Yes, but with significant caveats. PPTX export introduces layout shifts, font substitution, and dimension mismatches. Budget 15–30 minutes for manual cleanup after exporting. PDF export is more reliable if you need an offline format. For the best experience, share via Gamma's web link.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Gamma AI better than Canva for presentations?
&lt;/h3&gt;

&lt;p&gt;It depends on your priority. Gamma is faster for AI-generated presentations and better for web-first content. Canva has a broader template library, better export fidelity, and a more mature design ecosystem. If speed and AI generation are your top priorities, choose Gamma. If you need multi-format design versatility, choose Canva.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Gamma Agent v3.0?
&lt;/h3&gt;

&lt;p&gt;Agent v3.0 is Gamma's conversational AI design assistant. It allows you to edit presentations through natural language commands — restyling entire decks, adding research-backed content, restructuring sections, and more. It works well for broad changes but struggles with precise, element-level edits.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many presentations can I make with Gamma's free plan?
&lt;/h3&gt;

&lt;p&gt;The 400 free credits support approximately 10–15 full presentation generations, depending on length and complexity. Each generation, AI edit, and image creation consumes credits. There is no way to earn additional free credits — once exhausted, you must upgrade to a paid plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Gamma AI work for investor pitch decks?
&lt;/h3&gt;

&lt;p&gt;Gamma can generate a solid first draft of an investor pitch deck quickly. However, investor presentations demand polish, specific financial data, and a unique visual identity that AI generation alone cannot provide. Use Gamma for rapid drafting, then invest time refining content, replacing generic visuals, and ensuring every data point is accurate. If you must deliver in PowerPoint format, be aware of export limitations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Gamma AI for team collaboration?
&lt;/h3&gt;

&lt;p&gt;Yes, Gamma supports real-time collaboration with multiple editors, comments, and team workspaces. Free and Plus plans support basic sharing. Team plans ($20/seat/month, 2-seat minimum) add shared workspaces and brand assets. Business plans ($40/seat/month, 10-seat minimum) include SSO and advanced admin controls.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happened to Tome as a Gamma alternative?
&lt;/h3&gt;

&lt;p&gt;Tome, once a major AI presentation competitor with over 20 million users, &lt;a href="https://deckary.com/blog/tome-review" rel="noopener noreferrer"&gt;discontinued its presentation feature in early 2025&lt;/a&gt; and pivoted to sales automation. Tome Slides officially shut down on April 30, 2025. If you were a Tome user looking for an alternative, Gamma is the closest replacement for AI-powered presentation generation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Gamma AI content original?
&lt;/h3&gt;

&lt;p&gt;Gamma generates content using AI models, so the text and images are generated rather than copied from existing sources. However, AI-generated content can be generic and may overlap with common phrasing. For SEO purposes, you should significantly edit and personalize AI-generated content before publishing. Tools like &lt;a href="https://www.effloow.com/articles/surfer-seo-review-ai-content-optimization-guide-2026" rel="noopener noreferrer"&gt;Surfer SEO&lt;/a&gt; can help you optimize Gamma-published web pages for search engines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Gamma have an API?
&lt;/h3&gt;

&lt;p&gt;Yes, API access is available on the Pro plan ($15/month annual) and above. This enables integration with other tools and automation workflows. For teams building AI-powered content pipelines — similar to how we use &lt;a href="https://www.effloow.com/articles/claude-code-advanced-workflow-subagents-commands-multi-session" rel="noopener noreferrer"&gt;Claude Code for development workflows&lt;/a&gt; — the API opens up programmatic presentation generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Verdict
&lt;/h2&gt;

&lt;p&gt;Gamma AI is the fastest path from idea to presentable content in 2026. Agent v3.0 adds a genuinely useful conversational editing layer that no competitor matches. The combination of presentations, documents, and web pages in a single platform creates real workflow efficiency.&lt;/p&gt;

&lt;p&gt;But Gamma is not a complete PowerPoint replacement. The PPTX export limitations are real and significant for anyone operating in corporate environments where PowerPoint files are the standard deliverable. The card-based format, while excellent for web viewing, creates friction when audiences expect traditional slides.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The right way to use Gamma:&lt;/strong&gt; treat it as a drafting and ideation powerhouse that gets you to 70% in seconds, then invest your expertise in the final 30% that makes content compelling. For web-first distribution — shared links, published pages, live presentations — Gamma delivers an experience that traditional tools cannot match.&lt;/p&gt;

&lt;p&gt;At $8/month for the Plus plan with unlimited AI generation, Gamma offers strong value for anyone who creates presentations regularly. Start with the free plan's 400 credits to test whether Gamma's output matches your quality expectations before committing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gamma.app" rel="noopener noreferrer"&gt;Try Gamma AI Free →&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>presentations</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Surfer SEO Review 2026: AI Content Optimization From Audit to First Page</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Sun, 05 Apr 2026 14:27:54 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/surfer-seo-review-2026-ai-content-optimization-from-audit-to-first-page-2k7k</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/surfer-seo-review-2026-ai-content-optimization-from-audit-to-first-page-2k7k</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.effloow.com/articles/surfer-seo-review-ai-content-optimization-guide-2026/" rel="noopener noreferrer"&gt;Effloow&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Surfer SEO Review 2026: AI Content Optimization From Audit to First Page
&lt;/h1&gt;

&lt;p&gt;Most SEO tools tell you what keywords to target. Surfer SEO tells you exactly how to structure, write, and optimize your content so it actually ranks. The difference matters when you are competing against thousands of pages targeting the same keyword.&lt;/p&gt;

&lt;p&gt;Surfer reverse-engineers the top-ranking pages for any keyword, identifies the patterns they share — word count, heading structure, NLP entities, keyword density, image usage — and gives you a real-time score as you write. Instead of guessing what Google wants, you are building content against a data-driven blueprint.&lt;/p&gt;

&lt;p&gt;This is not a surface-level overview. We break down every major feature, walk through the setup process step by step, show you how the AI Writer and Content Audit actually work, compare Surfer against Clearscope, Frase, and MarketMuse with real pricing data, and give you an honest assessment of where Surfer excels and where it falls short.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Affiliate Disclosure:&lt;/strong&gt; This article contains affiliate links to Surfer SEO via PartnerStack. If you sign up through our links, we may earn a commission at no extra cost to you. Surfer SEO pays affiliates via their PartnerStack program with a tiered CPA commission structure. See our &lt;a href="https://dev.to/affiliate-disclosure"&gt;affiliate disclosure&lt;/a&gt; for full details.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Surfer SEO?
&lt;/h2&gt;

&lt;p&gt;Surfer SEO is an AI-powered content optimization platform that analyzes search engine results pages (SERPs) and provides data-driven recommendations for creating content that ranks. Founded in 2017, Surfer has grown to over 150,000 users including content creators, SEO agencies, and marketing teams.&lt;/p&gt;

&lt;p&gt;At its core, Surfer does one thing exceptionally well: it takes the guesswork out of on-page SEO. Rather than relying on generic best practices or gut instinct, Surfer analyzes the actual top-ranking pages for your target keyword and tells you exactly what your content needs to compete.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Surfer Works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;You enter a target keyword&lt;/strong&gt; — Surfer crawls the top 10–20 results on Google for that keyword&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surfer analyzes the patterns&lt;/strong&gt; — word count, heading structure, keyword frequency, NLP terms, images, paragraph length, and dozens of other ranking factors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You get a Content Score&lt;/strong&gt; — a real-time 0–100 score that updates as you write, telling you how well your content matches the ranking signals&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You optimize until the score is green&lt;/strong&gt; — Surfer highlights exactly what to add, remove, or restructure&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is fundamentally different from keyword research tools like Ahrefs or SEMrush. Those tools tell you &lt;em&gt;what&lt;/em&gt; to write about. Surfer tells you &lt;em&gt;how&lt;/em&gt; to write it so it ranks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who Uses Surfer SEO
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solo bloggers&lt;/strong&gt; who want data-backed content instead of guessing at SEO&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content agencies&lt;/strong&gt; producing high-volume optimized articles for clients&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In-house SEO teams&lt;/strong&gt; standardizing content quality across writers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Affiliate marketers&lt;/strong&gt; optimizing product reviews and comparison pages for search traffic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SaaS companies&lt;/strong&gt; building organic content engines for lead generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your business depends on organic search traffic, Surfer is built for you. If you are doing social media marketing or paid ads exclusively, you will not get much value from it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Surfer SEO Features Deep-Dive
&lt;/h2&gt;

&lt;p&gt;Surfer has expanded well beyond its original Content Editor. Here is what the platform offers in 2026 and what each feature actually does.&lt;/p&gt;

&lt;h3&gt;
  
  
  Content Editor
&lt;/h3&gt;

&lt;p&gt;The Content Editor is Surfer's flagship feature and the reason most people sign up. It is a writing workspace where you create content with real-time SEO feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You enter your target keyword, and Surfer generates a set of guidelines based on SERP analysis. These guidelines include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Suggested word count&lt;/strong&gt; — based on the average length of top-ranking content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heading structure&lt;/strong&gt; — recommended number of H2s and H3s with suggested topics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keywords and NLP terms&lt;/strong&gt; — a prioritized list of terms to include, with suggested frequency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image recommendations&lt;/strong&gt; — how many images top-ranking pages typically include&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paragraph structure&lt;/strong&gt; — optimal paragraph length and density&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you write (or paste existing content), a Content Score updates in real time. Scores above 70 are typically competitive. Scores above 80 indicate strong optimization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changed in 2026:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Content Editor outlines now use full brand, AI, and SEO context. They are shorter, more natural, and structured like top-ranking articles instead of generic templates. AI Search guidelines are now available to all users, providing real-time suggestions for citation-optimized writing. The Auto-Optimize feature can automatically add missing entities and facts in one click.&lt;/p&gt;

&lt;p&gt;The new Workflow tab walks you through every step from blank document to fully optimized content — helpful if you are new to Surfer or training a team of writers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Surfer AI (AI Writer)
&lt;/h3&gt;

&lt;p&gt;Surfer AI generates full articles optimized for your target keyword. You provide the keyword, select a tone, choose your target audience, and Surfer produces a complete draft with headings, internal structure, and NLP optimization already built in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What makes it different from ChatGPT or other AI writers:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every paragraph Surfer AI generates is guided by the same SERP analysis that powers the Content Editor. The output is not generic AI text — it is structured specifically to match what is ranking for your keyword. You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heading structure matching top-ranking content patterns&lt;/li&gt;
&lt;li&gt;NLP terms and entities integrated naturally throughout&lt;/li&gt;
&lt;li&gt;Proper keyword density from the start&lt;/li&gt;
&lt;li&gt;A Content Score that is already competitive before you edit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Surfer AI credits are purchased separately from your subscription. They are not included in the base plan — this is a common point of confusion for new users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use Surfer AI vs. writing manually:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use Surfer AI when you need a solid first draft quickly, especially for informational content where the structure follows predictable patterns (how-to guides, listicles, comparison pages). The overlap between &lt;a href="https://dev.to/articles/what-is-vibe-coding-developer-trend-2026"&gt;vibe coding and content creation&lt;/a&gt; is growing as more teams use AI to generate structured output at speed. Write manually when the topic requires original research, personal experience, or a distinctive voice that AI cannot replicate.&lt;/p&gt;

&lt;h3&gt;
  
  
  SERP Analyzer
&lt;/h3&gt;

&lt;p&gt;The SERP Analyzer is Surfer's research tool for understanding why specific pages rank. It breaks down the top results for any keyword across dozens of metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Word count distribution&lt;/li&gt;
&lt;li&gt;Heading count and structure&lt;/li&gt;
&lt;li&gt;Keyword density and placement&lt;/li&gt;
&lt;li&gt;Number of images&lt;/li&gt;
&lt;li&gt;Page load speed&lt;/li&gt;
&lt;li&gt;Domain authority indicators&lt;/li&gt;
&lt;li&gt;Backlink profiles&lt;/li&gt;
&lt;li&gt;Exact keyword usage in titles, meta descriptions, and headings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the feature that separates Surfer from simpler content optimization tools. Instead of just telling you to "include more keywords," the SERP Analyzer shows you the exact patterns that correlate with rankings for your specific keyword.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical use:&lt;/strong&gt; Before writing a new article, run SERP Analyzer on your target keyword. Look for patterns — if all top-ranking pages have 2,000+ words, 8+ images, and use a specific set of NLP terms, you know what your content needs to compete.&lt;/p&gt;

&lt;p&gt;The SERP Analyzer is available on the Scale plan and above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Topical Map
&lt;/h3&gt;

&lt;p&gt;The Topical Map helps you plan an entire content strategy around a topic cluster. Enter a broad topic, and Surfer maps out all the subtopics you should cover, their relationships, and the content gaps on your site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the Topical Map gives you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A visual map of topic clusters and content relationships&lt;/li&gt;
&lt;li&gt;Keyword suggestions for each subtopic&lt;/li&gt;
&lt;li&gt;Identification of content gaps — topics your competitors cover but you do not&lt;/li&gt;
&lt;li&gt;Priority scoring based on search volume and competition&lt;/li&gt;
&lt;li&gt;Automatic refresh every 14 days to reflect SERP changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In 2026, Surfer added bulk operations to the Topical Map — you can select multiple articles at once to archive or create Content Editor and AI articles in bulk, which speeds up content production significantly.&lt;/p&gt;

&lt;p&gt;The Topical Map is where you plan. The Content Editor is where you execute. Using both together is where Surfer becomes most powerful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Content Audit
&lt;/h3&gt;

&lt;p&gt;The Content Audit analyzes your existing published pages and tells you exactly what to change to improve rankings. This is Surfer's answer to the question: "I have 200 articles on my blog. Which ones should I update and how?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Content Audit works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect your Google Search Console account to Surfer&lt;/li&gt;
&lt;li&gt;Surfer scans your site and identifies pages with ranking potential&lt;/li&gt;
&lt;li&gt;For each page, you get specific recommendations: add these keywords, remove this section, increase word count, restructure headings&lt;/li&gt;
&lt;li&gt;A priority score tells you which pages to update first for maximum impact&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This feature alone can justify the subscription cost. Most sites have dozens of underperforming pages that are one update away from significantly better rankings. Content Audit finds them and tells you exactly what to fix.&lt;/p&gt;

&lt;h3&gt;
  
  
  Surfy (AI Assistant)
&lt;/h3&gt;

&lt;p&gt;Surfy is Surfer's upgraded in-platform AI assistant that helps you research, write, edit, and repurpose articles. It lives inside the Content Editor and acts like a co-writer that understands your SEO targets.&lt;/p&gt;

&lt;p&gt;You can ask Surfy to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Research a subtopic and suggest content to add&lt;/li&gt;
&lt;li&gt;Rewrite a section in a different tone&lt;/li&gt;
&lt;li&gt;Expand a bullet list into detailed paragraphs&lt;/li&gt;
&lt;li&gt;Generate FAQ sections based on "People Also Ask" data&lt;/li&gt;
&lt;li&gt;Suggest internal linking opportunities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Surfy was significantly upgraded in early 2026, and it now functions more like a real assistant than a basic chatbot.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Tracker
&lt;/h3&gt;

&lt;p&gt;The AI Tracker is Surfer's newest major feature, designed for the era of AI-powered search. It monitors how your brand appears in AI-generated search results (Google AI Overviews, ChatGPT, Perplexity, and now Gemini).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What AI Tracker monitors:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether your brand is cited in AI-generated answers&lt;/li&gt;
&lt;li&gt;Which competitors are being mentioned instead of you&lt;/li&gt;
&lt;li&gt;Mention Gap analysis — where competitors appear in AI search but you do not&lt;/li&gt;
&lt;li&gt;Sentiment Analysis — how AI models describe your brand versus competitors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is forward-looking functionality that most SEO tools do not offer yet. As AI search grows, understanding your visibility in AI-generated results becomes as important as traditional SERP rankings. If you want to control how AI crawlers access your site before tracking their behavior, try &lt;a href="https://dev.to/tools/ai-crawler-control-panel"&gt;our AI Crawler Control Panel&lt;/a&gt; to generate and manage your robots.txt and AI-specific directives.&lt;/p&gt;

&lt;p&gt;AI Tracker is available as an add-on or included in higher-tier plans.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sites (Mission Control)
&lt;/h3&gt;

&lt;p&gt;Surfer Sites is the 2026 hub that brings Dashboard, Content Audit, and Topical Map together in one unified view. Instead of jumping between separate tools, you get a single screen showing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overall site health and content scores&lt;/li&gt;
&lt;li&gt;Pages that need attention, ranked by priority&lt;/li&gt;
&lt;li&gt;Content gaps from your Topical Map&lt;/li&gt;
&lt;li&gt;Performance trends over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sites also includes improved filtering and analysis, making it easier to manage content operations for multiple domains through the Workspaces feature.&lt;/p&gt;




&lt;h2&gt;
  
  
  Surfer SEO Pricing and Plans (2026)
&lt;/h2&gt;

&lt;p&gt;Surfer restructured its pricing in January 2026. Here is the current plan breakdown.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Monthly Price&lt;/th&gt;
&lt;th&gt;Annual Price (per month)&lt;/th&gt;
&lt;th&gt;Content Editor Articles&lt;/th&gt;
&lt;th&gt;Content Audits&lt;/th&gt;
&lt;th&gt;Team Members&lt;/th&gt;
&lt;th&gt;Key Features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Essential&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$99/mo&lt;/td&gt;
&lt;td&gt;$79/mo&lt;/td&gt;
&lt;td&gt;30/month&lt;/td&gt;
&lt;td&gt;10/month&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Content Editor, Keyword Research (100 searches/day), Topical Map, Surfy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scale&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$219/mo&lt;/td&gt;
&lt;td&gt;$175/mo&lt;/td&gt;
&lt;td&gt;100/month&lt;/td&gt;
&lt;td&gt;30/month&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Everything in Essential + SERP Analyzer, Rank Tracker, AI Tracker basic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Everything in Scale + API access, dedicated support, custom integrations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: &lt;a href="https://surferseo.com/pricing/" rel="noopener noreferrer"&gt;Surfer SEO Pricing Page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important notes on pricing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Surfer AI credits are sold separately.&lt;/strong&gt; The base plans include Content Editor access but not AI-generated articles. AI credits are purchased as add-ons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Annual billing saves up to 17%&lt;/strong&gt; compared to monthly payments. Annual plans grant all credits in a single yearly batch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The pricing structure changed on January 29, 2026.&lt;/strong&gt; If you subscribed before that date, your plan may differ from current offerings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No free plan exists.&lt;/strong&gt; Surfer does not offer a permanently free tier, but they occasionally run trial promotions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Is the Price Worth It?
&lt;/h3&gt;

&lt;p&gt;At $99/month for the Essential plan, Surfer is a mid-range investment. Compare this to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clearscope:&lt;/strong&gt; $170/month starting price — significantly more expensive&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frase:&lt;/strong&gt; $14.99/month (Solo) to $44.99/month (Team) — considerably cheaper but fewer features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MarketMuse:&lt;/strong&gt; Free tier available, $149/month for Standard — free option exists but paid tier is more expensive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you publish 10+ articles per month and organic search is a primary traffic channel, the $99/month quickly pays for itself through improved rankings. If you publish less frequently, Frase might be a more cost-effective choice. For a broader look at how AI tools compare on price, see our &lt;a href="https://dev.to/articles/ai-coding-tools-pricing-comparison-2026"&gt;AI tool pricing comparison&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For agencies managing multiple clients, the Scale plan at $219/month with 100 articles and 5 team members provides strong value per article.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started With Surfer SEO: Step-by-Step Tutorial
&lt;/h2&gt;

&lt;p&gt;Here is how to go from signup to your first optimized article.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create Your Account
&lt;/h3&gt;

&lt;p&gt;Visit &lt;a href="https://surferseo.com/" rel="noopener noreferrer"&gt;surferseo.com&lt;/a&gt; and sign up for the Essential plan. You will need an email address and payment method. The onboarding flow asks about your use case — answer honestly, as this customizes your dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Set Up Your First Site
&lt;/h3&gt;

&lt;p&gt;After signing in, go to &lt;strong&gt;Sites&lt;/strong&gt; and add your website domain. If you have Google Search Console connected, Surfer will import your existing pages and performance data automatically. This step is optional for writing new content but essential for Content Audit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Use Topical Map to Plan Content
&lt;/h3&gt;

&lt;p&gt;Navigate to &lt;strong&gt;Topical Map&lt;/strong&gt; and enter your main topic. For example, if your site covers AI tools, enter "AI tools" as your seed topic. Surfer generates a cluster map showing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primary topics to cover&lt;/li&gt;
&lt;li&gt;Supporting subtopics and their relationships&lt;/li&gt;
&lt;li&gt;Search volume estimates for each topic&lt;/li&gt;
&lt;li&gt;Content gaps on your site&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Select a topic from the map that aligns with your strategy and click &lt;strong&gt;Create Content Editor&lt;/strong&gt; to start writing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Write Your First Article in Content Editor
&lt;/h3&gt;

&lt;p&gt;The Content Editor opens with your target keyword pre-loaded. On the left side, you see your writing area. On the right, Surfer shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content Score&lt;/strong&gt; (your target: 70+)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Word count target&lt;/strong&gt; (based on SERP analysis)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keywords to include&lt;/strong&gt; with suggested frequency&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heading suggestions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NLP terms&lt;/strong&gt; that top-ranking content uses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start writing. As you type, the Content Score updates in real time. The keyword panel shows which terms you have covered (green), which need more mentions (yellow), and which you have overused (red).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Use the new Workflow tab if this is your first time. It guides you through outlining, drafting, and optimizing in a structured sequence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Optimize Until Your Score Is Green
&lt;/h3&gt;

&lt;p&gt;A Content Score of 70+ means your content is competitive. 80+ means it is strongly optimized. Focus on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hitting the word count range&lt;/strong&gt; — do not pad with filler, but cover the topic thoroughly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Including all primary keywords&lt;/strong&gt; at their suggested frequency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Using NLP terms naturally&lt;/strong&gt; — these are the topical signals that differentiate thorough content from thin content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Matching the heading structure&lt;/strong&gt; — if top-ranking pages use 8 H2s, you probably need a similar depth&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 6: Use Facts &amp;amp; Coverage Booster
&lt;/h3&gt;

&lt;p&gt;Before publishing, use Surfer's Facts &amp;amp; Coverage Booster inside the Content Editor. It scans your draft for factual gaps and missing topical depth, then suggests specific statements and data points sourced from SERPs. One click adds them to your content.&lt;/p&gt;

&lt;p&gt;This is especially useful for data-heavy topics where you might miss key statistics or industry benchmarks that top-ranking articles include.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7: Publish and Track
&lt;/h3&gt;

&lt;p&gt;Export your article (Surfer supports copy-to-clipboard, HTML export, and direct integration with WordPress and Google Docs) and publish it on your site. If you are building your site with &lt;a href="https://dev.to/articles/framer-review-ai-website-builder-guide-2026"&gt;AI website builders like Framer&lt;/a&gt;, you can paste optimized content directly into your pages. Use Content Audit later to track how the article performs and what adjustments might improve its ranking.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Writer Walkthrough: Creating an Optimized Article With Surfer AI
&lt;/h2&gt;

&lt;p&gt;Let us walk through using Surfer AI to generate a complete article.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up an AI Article
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;From your dashboard, click &lt;strong&gt;Create&lt;/strong&gt; and select &lt;strong&gt;Surfer AI&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enter your target keyword (example: "best project management tools for startups")&lt;/li&gt;
&lt;li&gt;Choose your settings:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tone of voice&lt;/strong&gt; — professional, casual, academic, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Target audience&lt;/strong&gt; — who is reading this content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitors to analyze&lt;/strong&gt; — Surfer suggests top-ranking pages, but you can add specific URLs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structure preferences&lt;/strong&gt; — let Surfer auto-generate or provide your own outline&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What Surfer AI Produces
&lt;/h3&gt;

&lt;p&gt;Within a few minutes, Surfer AI generates a complete article that includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A title optimized for your target keyword&lt;/li&gt;
&lt;li&gt;H2 and H3 headings matching top-ranking content structure&lt;/li&gt;
&lt;li&gt;NLP terms and entities integrated throughout&lt;/li&gt;
&lt;li&gt;A Content Score that is typically 60–75 out of the box&lt;/li&gt;
&lt;li&gt;Proper keyword distribution across sections&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Editing the AI Output
&lt;/h3&gt;

&lt;p&gt;Surfer AI output is a strong starting point, not a finished article. Here is what you should always edit:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add personal experience or original data.&lt;/strong&gt; AI-generated content lacks unique insights. Add your own examples, case studies, or test results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify all claims.&lt;/strong&gt; Surfer AI can generate plausible-sounding but inaccurate statements. Fact-check every statistic and product detail.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adjust the voice.&lt;/strong&gt; The default tone is competent but generic. Inject your brand personality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimize the Content Score to 80+.&lt;/strong&gt; The initial score is competitive but not dominant. Use the Content Editor guidelines to push it higher.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add images and media.&lt;/strong&gt; Surfer AI generates text only. You need to add relevant images, screenshots, and diagrams.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Surfer AI Credit Costs
&lt;/h3&gt;

&lt;p&gt;Surfer AI credits are purchased separately. Check the &lt;a href="https://surferseo.com/ai/" rel="noopener noreferrer"&gt;Surfer AI pricing page&lt;/a&gt; for current per-article costs. Budget for this on top of your subscription if you plan to use AI generation at scale.&lt;/p&gt;




&lt;h2&gt;
  
  
  Content Audit: How to Improve Existing Articles With Surfer
&lt;/h2&gt;

&lt;p&gt;If you have a library of existing content, Content Audit is potentially the highest-ROI feature in Surfer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Running Your First Audit
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Connect Google Search Console to Surfer (Settings → Integrations)&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Content Audit&lt;/strong&gt; under your site&lt;/li&gt;
&lt;li&gt;Surfer scans your indexed pages and identifies optimization opportunities&lt;/li&gt;
&lt;li&gt;Each page gets a current Content Score and a list of specific improvements&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What Content Audit Recommends
&lt;/h3&gt;

&lt;p&gt;For each page, Surfer provides actionable recommendations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Missing keywords&lt;/strong&gt; — terms that top-ranking competitors use but your page does not&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyword overuse&lt;/strong&gt; — terms you have stuffed that might trigger over-optimization penalties&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Word count adjustments&lt;/strong&gt; — whether your content is too thin or unnecessarily long&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heading restructure&lt;/strong&gt; — how to reorganize your H2/H3 structure for better topical coverage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NLP term gaps&lt;/strong&gt; — entity and topic coverage that your content is missing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prioritizing Updates
&lt;/h3&gt;

&lt;p&gt;Not every page is worth updating. Focus on pages that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rank on page 2 or top of page 3 (positions 11–30) — these are closest to page 1 with the least effort&lt;/li&gt;
&lt;li&gt;Have declining traffic trends — they need a refresh&lt;/li&gt;
&lt;li&gt;Cover high-value keywords for your business&lt;/li&gt;
&lt;li&gt;Have high impressions but low click-through rates — the content is visible but not compelling enough&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Content Audit assigns priority scores to help you focus. Start with the highest-priority pages and work down.&lt;/p&gt;

&lt;h3&gt;
  
  
  Audit Workflow Example
&lt;/h3&gt;

&lt;p&gt;Here is a realistic workflow for updating existing content:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run Content Audit across your site&lt;/li&gt;
&lt;li&gt;Export the top 10 priority pages&lt;/li&gt;
&lt;li&gt;Open each in Content Editor to see specific recommendations&lt;/li&gt;
&lt;li&gt;Update the content — add missing sections, refresh outdated data, improve heading structure&lt;/li&gt;
&lt;li&gt;Republish with an updated date&lt;/li&gt;
&lt;li&gt;Monitor ranking changes over the next 2–4 weeks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This process is where many SEO teams see the fastest results from Surfer. New content takes months to rank. Updated existing content often improves within weeks.&lt;/p&gt;

&lt;p&gt;If you are running content operations at scale, consider pairing Content Audit with workflow automation tools. For example, you can use &lt;a href="https://dev.to/blog/n8n-self-hosted-ai-workflow-automation-guide-2026"&gt;n8n to build automated workflows&lt;/a&gt; that trigger content review tasks based on ranking drops detected through your analytics pipeline.&lt;/p&gt;




&lt;h2&gt;
  
  
  Surfer SEO vs Alternatives: Honest Comparison
&lt;/h2&gt;

&lt;p&gt;Here is how Surfer stacks up against the major alternatives in 2026.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Surfer SEO&lt;/th&gt;
&lt;th&gt;Clearscope&lt;/th&gt;
&lt;th&gt;Frase&lt;/th&gt;
&lt;th&gt;MarketMuse&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Starting Price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$99/mo&lt;/td&gt;
&lt;td&gt;$170/mo&lt;/td&gt;
&lt;td&gt;$14.99/mo&lt;/td&gt;
&lt;td&gt;Free (limited)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Content Editor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (real-time score)&lt;/td&gt;
&lt;td&gt;Yes (A++ grading)&lt;/td&gt;
&lt;td&gt;Yes (topic score)&lt;/td&gt;
&lt;td&gt;Yes (content score)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Writer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (separate credits)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes (included)&lt;/td&gt;
&lt;td&gt;Yes (limited in free)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SERP Analyzer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (Scale plan+)&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Topical Map&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes (basic)&lt;/td&gt;
&lt;td&gt;Yes (advanced)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Content Audit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (GSC integration)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes (inventory)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Search Tracking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (AI Tracker)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WordPress Plugin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Docs Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Team Collaboration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2–5+ members&lt;/td&gt;
&lt;td&gt;Unlimited (Enterprise)&lt;/td&gt;
&lt;td&gt;3+ members&lt;/td&gt;
&lt;td&gt;1+ members&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NLP Depth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Deep (multi-factor)&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Deep (topic modeling)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning Curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Steep&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Surfer SEO vs Clearscope
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose Surfer if:&lt;/strong&gt; You want the deepest optimization data, AI writing capabilities, and content audit functionality in one platform. Surfer offers significantly more features at a lower price point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Clearscope if:&lt;/strong&gt; Your team needs the simplest possible tool. Clearscope's A++ grading system is intuitive enough that non-SEO writers can use it independently without training. You are willing to pay a premium for simplicity.&lt;/p&gt;

&lt;p&gt;The accuracy gap between Surfer and Clearscope has narrowed significantly in 2026. Both provide solid optimization recommendations. The difference is in depth and price.&lt;/p&gt;

&lt;h3&gt;
  
  
  Surfer SEO vs Frase
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose Surfer if:&lt;/strong&gt; You need a complete optimization platform with SERP analysis, content audit, topical mapping, and AI search tracking. You publish content at volume and need robust team features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Frase if:&lt;/strong&gt; Budget is your primary constraint. At $14.99/month for the Solo plan, Frase offers solid content optimization at a fraction of Surfer's cost. Frase is also strong for content briefs — useful if you manage freelance writers.&lt;/p&gt;

&lt;p&gt;Frase is the best budget option for solo bloggers and freelancers. Surfer is the better choice for teams and agencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Surfer SEO vs MarketMuse
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose Surfer if:&lt;/strong&gt; Your focus is optimizing individual articles and getting them to rank. Surfer's Content Editor provides more granular, actionable guidance for the actual writing process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose MarketMuse if:&lt;/strong&gt; Your primary need is content strategy at scale. MarketMuse maps your entire content landscape and identifies topical authority gaps. It is less of a writing tool and more of a strategic planning engine.&lt;/p&gt;

&lt;p&gt;Many serious content operations use both — MarketMuse for strategy and Surfer for execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Surfer SEO vs SEMrush Writing Assistant
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose Surfer if:&lt;/strong&gt; Content optimization is your primary use case and you want the deepest on-page SEO guidance available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose SEMrush if:&lt;/strong&gt; You already use SEMrush for keyword research, backlink analysis, and technical SEO, and you want a decent writing assistant integrated into your existing workflow. SEMrush's Writing Assistant is good but less specialized than Surfer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who Is Surfer SEO Best For?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Surfer Is an Excellent Fit For:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content agencies&lt;/strong&gt; producing 20+ articles per month for clients — the Content Score provides a measurable quality standard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO teams&lt;/strong&gt; that need to standardize content quality across multiple writers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Affiliate marketers&lt;/strong&gt; writing product reviews and comparison content where ranking determines revenue&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SaaS marketing teams&lt;/strong&gt; building organic content engines — Surfer's Topical Map plus Content Editor is a powerful combination&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anyone publishing content where organic search traffic is the primary distribution channel&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Surfer Is Not the Best Fit For:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Occasional bloggers&lt;/strong&gt; who publish 1–2 articles per month — the $99/month may not justify the output volume&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teams focused exclusively on social media or paid advertising&lt;/strong&gt; — Surfer optimizes for search engines, not social algorithms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content creators who prioritize creative writing over optimization&lt;/strong&gt; — poets and fiction writers should look elsewhere&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Very technical or niche topics with low search volume&lt;/strong&gt; — Surfer needs sufficient SERP data to generate useful recommendations. If only 3 pages rank for your keyword, the analysis is less reliable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teams that already use MarketMuse or Clearscope successfully&lt;/strong&gt; — switching costs may outweigh the marginal benefits&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Pros and Cons: Honest Assessment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Content Editor is genuinely best-in-class.&lt;/strong&gt; The real-time scoring based on SERP analysis is more actionable than any competing product we have tested.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Content Audit finds hidden opportunities.&lt;/strong&gt; Identifying underperforming pages that need small updates to rank significantly better is where most sites see the fastest ROI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Topical Map eliminates guesswork in content planning.&lt;/strong&gt; Instead of brainstorming topics, you get a data-driven map of what to write and in what order.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI Tracker is forward-thinking.&lt;/strong&gt; Monitoring AI search visibility is a feature most tools have not built yet. This positions Surfer well for the AI search era.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Strong integrations.&lt;/strong&gt; WordPress plugin, Google Docs add-on, Jasper integration, and API access (Enterprise) mean Surfer fits into existing workflows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Active development.&lt;/strong&gt; Surfer ships meaningful feature updates regularly. The January 2026 restructuring and subsequent feature releases show a product team that is investing heavily.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Surfer AI credits cost extra.&lt;/strong&gt; The base subscription does not include AI-generated articles. This adds up if you rely heavily on AI writing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No free tier.&lt;/strong&gt; Unlike MarketMuse (limited free plan) or Frase (low entry price), Surfer starts at $99/month with no free option.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SERP Analyzer is locked to Scale plan.&lt;/strong&gt; The detailed SERP analysis tool requires the $219/month plan. This is a significant limitation for Essential plan users who want deeper competitive research.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Learning curve exists.&lt;/strong&gt; While the new Workflow tab helps, Surfer has more features and data points than simpler tools like Clearscope. New users need time to understand what matters.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Content Score is not a ranking guarantee.&lt;/strong&gt; A score of 90 does not mean you will rank first. Domain authority, backlinks, site speed, and hundreds of other factors still matter. Surfer optimizes content, not your entire SEO profile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Keyword data is estimated.&lt;/strong&gt; Surfer's built-in keyword research uses estimated search volumes, not exact data from Google Ads. For precise volume data, you still need a dedicated keyword research tool.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  How Surfer Fits Into a Modern Content Workflow
&lt;/h2&gt;

&lt;p&gt;Surfer is most powerful when integrated into a broader content operation rather than used in isolation. Here is how it fits with other tools in a modern content stack:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Planning → Execution → Distribution → Optimization&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Planning:&lt;/strong&gt; Use Surfer's Topical Map to identify content opportunities. Pair this with &lt;a href="https://dev.to/blog/notion-ai-custom-agents-developer-guide-2026"&gt;Notion AI for content planning and workspace management&lt;/a&gt; to organize your editorial calendar around Surfer's recommendations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Execution:&lt;/strong&gt; Write in Surfer's Content Editor or use Surfer AI for first drafts. If you are running an AI-powered content factory, tools like &lt;a href="https://dev.to/blog/claude-code-advanced-workflow-subagents-commands-multi-session"&gt;Claude Code for development workflows&lt;/a&gt; can help you build automation pipelines around your content process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distribution:&lt;/strong&gt; Once published, promote across channels. Automation platforms can help syndicate content — see our &lt;a href="https://dev.to/blog/zapier-vs-make-vs-n8n-automation-comparison-2026"&gt;comparison of Zapier, Make, and n8n&lt;/a&gt; for choosing the right automation tool. If newsletters are part of your distribution strategy, our &lt;a href="https://dev.to/tools/newsletter-revenue-calculator"&gt;Newsletter Revenue Calculator&lt;/a&gt; can help you model the revenue potential before investing in list building.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimization:&lt;/strong&gt; Use Content Audit to continuously improve published content. AI Tracker monitors your visibility in AI search results.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This cyclical workflow — plan, write, distribute, optimize, repeat — is how content teams compound their organic traffic over time. Surfer fits into the writing and optimization phases.&lt;/p&gt;

&lt;p&gt;For teams running content operations with AI agents, the combination of Surfer's data-driven optimization with AI-powered workflows creates a scalable system. We run our own content factory using &lt;a href="https://dev.to/blog/how-we-built-company-with-14-ai-agents"&gt;14 AI agents coordinated through Paperclip&lt;/a&gt;, and tools like Surfer provide the optimization data that guides our content quality standards.&lt;/p&gt;

&lt;p&gt;If you are building AI workflows for content operations, &lt;a href="https://dev.to/blog/dify-self-hosted-docker-ai-workflow-guide-2026"&gt;self-hosting Dify as your AI workflow platform&lt;/a&gt; can integrate with Surfer's data through custom API connections at the Enterprise level.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Surfer SEO worth it in 2026?
&lt;/h3&gt;

&lt;p&gt;Yes, if organic search traffic is important to your business and you publish content regularly. The Content Editor alone provides enough value to justify the $99/month Essential plan for teams publishing 10+ articles per month. The ROI comes from higher rankings, which translate to more traffic without paying for ads. If you publish infrequently (less than 5 articles per month), consider Frase as a more budget-friendly alternative.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Surfer SEO actually improve rankings?
&lt;/h3&gt;

&lt;p&gt;Surfer optimizes your on-page content based on what is currently ranking. This is one factor among many that determine rankings. Content Score improvements correlate with ranking improvements, but they do not guarantee them. Domain authority, backlinks, site speed, user experience, and search intent alignment all matter too. Surfer makes your content competitive — it does not replace a comprehensive SEO strategy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Surfer SEO with WordPress?
&lt;/h3&gt;

&lt;p&gt;Yes. Surfer offers a WordPress plugin that connects your Content Editor directly to your WordPress posts. You can also copy optimized content from Surfer and paste it into any CMS. Google Docs integration is also available if you prefer writing there first.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is Surfer AI different from ChatGPT for content?
&lt;/h3&gt;

&lt;p&gt;Surfer AI generates content that is pre-optimized for your target keyword based on SERP analysis. ChatGPT generates generic text without any SEO context. Surfer AI articles come with built-in keyword distribution, heading structure, and NLP term coverage that align with what is currently ranking. ChatGPT requires you to manually optimize the output afterward.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Surfer SEO offer a free trial?
&lt;/h3&gt;

&lt;p&gt;Surfer does not maintain a permanent free tier. They occasionally run promotional trials — check &lt;a href="https://surferseo.com/" rel="noopener noreferrer"&gt;surferseo.com&lt;/a&gt; for current offers. There is no commitment-free way to test the full platform, which is a drawback compared to tools like MarketMuse that offer limited free plans.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many articles can I write per month with Surfer?
&lt;/h3&gt;

&lt;p&gt;The Essential plan ($99/month) includes 30 Content Editor articles per month. The Scale plan ($219/month) includes 100 articles. Enterprise plans have custom limits. Surfer AI articles consume separate credits purchased on top of your subscription.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Surfer SEO help with existing content?
&lt;/h3&gt;

&lt;p&gt;Yes — this is one of Surfer's strongest use cases. The Content Audit feature connects to Google Search Console, scans your published pages, and provides specific optimization recommendations for each one. Many users see faster results from updating existing content than from publishing new articles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Surfer work for languages other than English?
&lt;/h3&gt;

&lt;p&gt;Yes. Surfer supports content optimization in multiple languages. The SERP analysis adapts to the target language and location, analyzing local search results. The accuracy of NLP analysis may vary by language — English has the deepest coverage.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the Surfer SEO affiliate program?
&lt;/h3&gt;

&lt;p&gt;Surfer runs its affiliate program through PartnerStack. The program uses a tiered CPA commission model — affiliates earn a one-time payout based on the customer's first payment. Monthly subscription referrals earn a percentage of the first month's fee. Annual subscription referrals earn a percentage of the full annual amount upfront. Commission rates increase as you refer more customers. Details at &lt;a href="https://surferseo.com/affiliate-program/" rel="noopener noreferrer"&gt;surferseo.com/affiliate-program&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I cancel my Surfer SEO subscription anytime?
&lt;/h3&gt;

&lt;p&gt;Yes. Monthly plans can be cancelled at any time. Annual plans are billed upfront for the full year. Check Surfer's &lt;a href="https://docs.surferseo.com/en/articles/7545943-pricing-faq" rel="noopener noreferrer"&gt;pricing FAQ&lt;/a&gt; for current cancellation and refund policies.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Verdict
&lt;/h2&gt;

&lt;p&gt;Surfer SEO is the most comprehensive content optimization platform available in 2026. The Content Editor remains best-in-class, the Content Audit provides tangible ROI for existing sites, and newer features like AI Tracker position Surfer well for the evolving search landscape.&lt;/p&gt;

&lt;p&gt;The main barriers are price ($99/month minimum with no free tier) and complexity (more features means a steeper learning curve than simpler tools). If those are deal-breakers, Frase offers solid optimization at a lower price point, and Clearscope offers a simpler experience at a higher one.&lt;/p&gt;

&lt;p&gt;For content teams serious about organic search performance, Surfer provides the data, tools, and AI capabilities to consistently produce content that ranks. It is not magic — you still need good content strategy, domain authority, and technical SEO. But for the on-page optimization piece of the puzzle, Surfer is the tool we recommend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to try Surfer SEO?&lt;/strong&gt; Visit &lt;a href="https://surferseo.com/" rel="noopener noreferrer"&gt;surferseo.com&lt;/a&gt; to explore their plans and start optimizing your content with data-driven insights.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>contentcreation</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Self-Host n8n with Docker — AI Workflow Automation Guide 2026</title>
      <dc:creator>Jangwook Kim</dc:creator>
      <pubDate>Sun, 05 Apr 2026 14:27:36 +0000</pubDate>
      <link>https://forem.com/jangwook_kim_e31e7291ad98/how-to-self-host-n8n-with-docker-ai-workflow-automation-guide-2026-3lec</link>
      <guid>https://forem.com/jangwook_kim_e31e7291ad98/how-to-self-host-n8n-with-docker-ai-workflow-automation-guide-2026-3lec</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.effloow.com/articles/n8n-self-hosted-ai-workflow-automation-guide-2026/" rel="noopener noreferrer"&gt;Effloow&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  How to Self-Host n8n with Docker — AI Workflow Automation Guide 2026
&lt;/h1&gt;

&lt;p&gt;n8n Cloud's Pro plan costs €60 per month for 30,000 executions. A self-hosted n8n instance on a $5 VPS handles unlimited executions. Same software, same features, 12x cost difference.&lt;/p&gt;

&lt;p&gt;n8n is an open-source workflow automation platform with 1,400+ integrations and a visual node editor. It started as a Zapier alternative, but in 2026 it has evolved into something more interesting: a visual AI workflow engine where you can chain LLM calls, vector database queries, and tool-using agents — all without writing orchestration code.&lt;/p&gt;

&lt;p&gt;This guide walks you through self-hosting n8n with Docker Compose, from initial setup to a working AI workflow with Ollama for local LLM inference. We will build a practical AI agent that can search the web, process documents, and generate structured output — running entirely on your own infrastructure.&lt;/p&gt;

&lt;p&gt;By the end, you will have a production-ready n8n instance with PostgreSQL persistence, Ollama integration for private AI inference, and the knowledge to build AI workflows that would cost hundreds on Zapier or Make.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is n8n?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;n8n&lt;/strong&gt; (pronounced "nodemation") is an open-source, source-available workflow automation platform. You connect nodes on a visual canvas to build automations — triggers, data transformations, API calls, AI model invocations — and n8n executes them on schedule or in response to events.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub stars&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;70,000+ (as of April 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Current version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2.14.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sustainable Use License (source-available)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Integrations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1,400+ built-in nodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI capabilities&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLM chains, AI agents, vector stores, embeddings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Docker (self-hosted), n8n Cloud, or npm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Why n8n stands out in 2026
&lt;/h3&gt;

&lt;p&gt;Most automation platforms treat AI as a bolt-on feature — a single "call GPT" action buried among 7,000 other integrations. n8n treats AI as a first-class workflow primitive.&lt;/p&gt;

&lt;p&gt;The platform ships with dedicated nodes for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LLM chains&lt;/strong&gt; — connect any model (OpenAI, Anthropic, Google, Ollama) to structured prompts with output parsing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI agents&lt;/strong&gt; — autonomous agents with tool use, memory, and multi-step reasoning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector stores&lt;/strong&gt; — Qdrant, Pinecone, Supabase, and more for RAG workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embeddings&lt;/strong&gt; — generate and query embeddings from multiple providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document loaders&lt;/strong&gt; — ingest PDFs, web pages, and databases into your AI pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have used &lt;a href="https://dev.to/articles/dify-self-hosted-docker-ai-workflow-guide-2026"&gt;Dify&lt;/a&gt; for AI-specific workflows, think of n8n as the broader automation layer. Dify excels at RAG chatbots and prompt engineering. n8n excels at connecting AI to everything else — your CRM, email, databases, APIs, and file systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  n8n's execution model
&lt;/h3&gt;

&lt;p&gt;This matters for understanding the cost advantage. Zapier charges per "task" — every individual action in a workflow counts. A 5-step workflow triggered 1,000 times burns 5,000 tasks. Make.com charges per "operation" — similar granularity.&lt;/p&gt;

&lt;p&gt;n8n counts per "execution." One execution = one complete workflow run, regardless of how many nodes it contains. A 20-node workflow that processes 1,000 webhook events uses 1,000 executions, not 20,000.&lt;/p&gt;

&lt;p&gt;On self-hosted n8n, there is no execution limit at all. You pay for the server. That is it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Self-Host n8n? The Cost Breakdown
&lt;/h2&gt;

&lt;p&gt;The cost math for self-hosting n8n is straightforward and dramatic.&lt;/p&gt;

&lt;h3&gt;
  
  
  n8n Cloud pricing (as of April 2026)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Executions/month&lt;/th&gt;
&lt;th&gt;Active workflows&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Starter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;€24/mo&lt;/td&gt;
&lt;td&gt;2,500&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;€60/mo&lt;/td&gt;
&lt;td&gt;10,000+&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: &lt;a href="https://n8n.io/pricing/" rel="noopener noreferrer"&gt;n8n.io/pricing&lt;/a&gt; — verify current pricing before purchasing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Self-hosted cost
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Monthly cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VPS (Hetzner CX22, 2 vCPU, 4GB RAM)&lt;/td&gt;
&lt;td&gt;€4.35/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain name (amortized)&lt;/td&gt;
&lt;td&gt;~$1/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSL certificate (Let's Encrypt)&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$5.50/mo&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is unlimited executions, unlimited active workflows, and full data sovereignty for the price of a coffee.&lt;/p&gt;

&lt;h3&gt;
  
  
  When n8n Cloud makes more sense
&lt;/h3&gt;

&lt;p&gt;Self-hosting is not always the right choice. n8n Cloud is worth the premium if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need &lt;strong&gt;multi-user access control&lt;/strong&gt; without configuring LDAP/OIDC yourself&lt;/li&gt;
&lt;li&gt;You want &lt;strong&gt;zero maintenance&lt;/strong&gt; — no Docker updates, no backups to manage&lt;/li&gt;
&lt;li&gt;Your team does not have anyone comfortable with basic server administration&lt;/li&gt;
&lt;li&gt;You need &lt;strong&gt;enterprise SSO&lt;/strong&gt; and audit logging out of the box&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For solo developers, small teams, and anyone who already manages their own infrastructure, self-hosting is the obvious path. If that describes you, &lt;a href="https://dev.to/articles/self-host-dev-stack-under-20-dollars-month"&gt;our guide to self-hosting your entire dev stack under $20/month&lt;/a&gt; covers the broader infrastructure context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comparison with other platforms
&lt;/h3&gt;

&lt;p&gt;We covered this in detail in our &lt;a href="https://dev.to/articles/zapier-vs-make-vs-n8n-automation-comparison-2026"&gt;Zapier vs Make vs n8n comparison&lt;/a&gt;, but here is the executive summary:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Zapier&lt;/th&gt;
&lt;th&gt;Make.com&lt;/th&gt;
&lt;th&gt;n8n Cloud&lt;/th&gt;
&lt;th&gt;n8n Self-Hosted&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1,000 runs/day, 5 steps each&lt;/td&gt;
&lt;td&gt;$300+/mo&lt;/td&gt;
&lt;td&gt;~$19/mo&lt;/td&gt;
&lt;td&gt;€60/mo&lt;/td&gt;
&lt;td&gt;~$5/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI workflow (LLM + tools)&lt;/td&gt;
&lt;td&gt;$50+/mo add-on&lt;/td&gt;
&lt;td&gt;$9+/mo add-on&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data stays on your server&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom code nodes&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hostable&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before starting, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A server or local machine&lt;/strong&gt; with at least 2 CPU cores and 2GB RAM (4GB recommended for AI workloads)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Engine 24+&lt;/strong&gt; and &lt;strong&gt;Docker Compose v2&lt;/strong&gt; installed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A domain name&lt;/strong&gt; (for production with SSL — optional for local development)&lt;/li&gt;
&lt;li&gt;Basic comfort with the terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommended servers
&lt;/h3&gt;

&lt;p&gt;For a dedicated self-hosted n8n instance, we recommend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local development:&lt;/strong&gt; Any machine with Docker installed (Mac, Linux, or Windows with WSL2)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production VPS:&lt;/strong&gt; &lt;a href="https://hetzner.cloud/?ref=effloow" rel="noopener noreferrer"&gt;Hetzner Cloud CX22&lt;/a&gt; (2 vCPU, 4GB RAM, €4.35/mo) — see our &lt;a href="https://dev.to/articles/hetzner-cloud-ai-gpu-server-guide-2026"&gt;Hetzner Cloud setup guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI workloads with local LLMs:&lt;/strong&gt; Hetzner CAX21 ARM server (4 vCPU, 8GB RAM, €7.49/mo) or a machine with a GPU&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you plan to run Ollama alongside n8n for local AI inference, budget at least 8GB of RAM. Small models like Llama 3.2 (3B) run well on 8GB; larger models like Llama 3.1 (70B) need a GPU server. See our &lt;a href="https://dev.to/articles/ollama-open-webui-self-hosting-guide-2026"&gt;Ollama self-hosting guide&lt;/a&gt; for model sizing details.&lt;/p&gt;




&lt;h2&gt;
  
  
  Method 1: n8n Self-Hosted AI Starter Kit (Recommended)
&lt;/h2&gt;

&lt;p&gt;n8n maintains an official &lt;a href="https://github.com/n8n-io/self-hosted-ai-starter-kit" rel="noopener noreferrer"&gt;Self-Hosted AI Starter Kit&lt;/a&gt; that bundles n8n with PostgreSQL, Ollama, and Qdrant (a vector database). This is the fastest path to a working AI workflow setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Clone the repository
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git
&lt;span class="nb"&gt;cd &lt;/span&gt;self-hosted-ai-starter-kit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Configure environment variables
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit the &lt;code&gt;.env&lt;/code&gt; file with secure values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .env — CHANGE THESE VALUES&lt;/span&gt;
&lt;span class="nv"&gt;POSTGRES_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;n8n_user
&lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-secure-password-here
&lt;span class="nv"&gt;POSTGRES_DB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;n8n

&lt;span class="nv"&gt;N8N_ENCRYPTION_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;generate-a-random-32-char-string
&lt;span class="nv"&gt;N8N_USER_MANAGEMENT_JWT_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;generate-another-random-string
&lt;span class="nv"&gt;N8N_DEFAULT_BINARY_DATA_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;filesystem

&lt;span class="c"&gt;# Uncomment for Mac/Apple Silicon running Ollama locally&lt;/span&gt;
&lt;span class="c"&gt;# OLLAMA_HOST=host.docker.internal:11434&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generate secure random strings for the encryption keys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl rand &lt;span class="nt"&gt;-hex&lt;/span&gt; 32  &lt;span class="c"&gt;# Run twice — once for each key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; The &lt;code&gt;N8N_ENCRYPTION_KEY&lt;/code&gt; encrypts stored credentials. If you lose it, all saved credentials become unreadable. Back it up somewhere safe.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Start the stack
&lt;/h3&gt;

&lt;p&gt;Choose the command that matches your hardware:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# NVIDIA GPU (recommended for AI workloads)&lt;/span&gt;
docker compose &lt;span class="nt"&gt;--profile&lt;/span&gt; gpu-nvidia up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# AMD GPU (Linux only)&lt;/span&gt;
docker compose &lt;span class="nt"&gt;--profile&lt;/span&gt; gpu-amd up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# CPU only (works everywhere, slower AI inference)&lt;/span&gt;
docker compose &lt;span class="nt"&gt;--profile&lt;/span&gt; cpu up &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# Mac / Apple Silicon (uses host Ollama — install Ollama separately)&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first run pulls several Docker images and downloads the Llama 3.2 model (about 2GB). This takes a few minutes depending on your connection speed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Access n8n
&lt;/h3&gt;

&lt;p&gt;Open your browser and navigate to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:5678
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will see the n8n setup screen. Create your admin account — this is the owner account for your instance. Choose a strong password.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the starter kit includes
&lt;/h3&gt;

&lt;p&gt;The Docker Compose stack runs five services:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Port&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;n8n&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;n8nio/n8n:latest&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Workflow automation engine&lt;/td&gt;
&lt;td&gt;5678&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;postgres:16-alpine&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Persistent data storage&lt;/td&gt;
&lt;td&gt;5432 (internal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ollama&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ollama/ollama:latest&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Local LLM inference&lt;/td&gt;
&lt;td&gt;11434&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qdrant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;qdrant/qdrant&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vector database for RAG&lt;/td&gt;
&lt;td&gt;6333&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;n8n-import&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;n8nio/n8n:latest&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;One-time demo data import&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The starter kit also includes a demo AI workflow that you can access at &lt;code&gt;http://localhost:5678/workflow/srOnR8PAY3u4RSwb&lt;/code&gt; after setup. It demonstrates an AI chatbot chain using Ollama — a good starting point for understanding n8n's AI capabilities.&lt;/p&gt;




&lt;h2&gt;
  
  
  Method 2: Minimal n8n Setup (Without AI Stack)
&lt;/h2&gt;

&lt;p&gt;If you only need workflow automation without the AI components, a simpler setup with just n8n and PostgreSQL is lighter on resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker Compose for minimal n8n
&lt;/h3&gt;

&lt;p&gt;Create a &lt;code&gt;docker-compose.yml&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;n8n_storage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;postgres_storage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;postgres&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres:16-alpine&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;POSTGRES_USER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${POSTGRES_USER}&lt;/span&gt;
      &lt;span class="na"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${POSTGRES_PASSWORD}&lt;/span&gt;
      &lt;span class="na"&gt;POSTGRES_DB&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${POSTGRES_DB}&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;postgres_storage:/var/lib/postgresql/data&lt;/span&gt;
    &lt;span class="na"&gt;healthcheck&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;CMD-SHELL'&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pg_isready&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-h&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;localhost&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-U&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;${POSTGRES_USER}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-d&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;${POSTGRES_DB}'&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5s&lt;/span&gt;
      &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5s&lt;/span&gt;
      &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;

  &lt;span class="na"&gt;n8n&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8nio/n8n:2.14.2&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5678:5678"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_TYPE=postgresdb&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_POSTGRESDB_HOST=postgres&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_POSTGRESDB_USER=${POSTGRES_USER}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_POSTGRESDB_DATABASE=${POSTGRES_DB}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_USER_MANAGEMENT_JWT_SECRET=${N8N_USER_MANAGEMENT_JWT_SECRET}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_DIAGNOSTICS_ENABLED=false&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;n8n_storage:/home/node/.n8n&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;postgres&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;service_healthy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the &lt;code&gt;.env&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;POSTGRES_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;n8n_user
&lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-secure-password
&lt;span class="nv"&gt;POSTGRES_DB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;n8n

&lt;span class="nv"&gt;N8N_ENCRYPTION_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-random-encryption-key
&lt;span class="nv"&gt;N8N_USER_MANAGEMENT_JWT_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-random-jwt-secret
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This minimal setup uses roughly 512MB of RAM — suitable for even the smallest VPS instances.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building Your First AI Workflow
&lt;/h2&gt;

&lt;p&gt;Now that n8n is running, let us build a practical AI workflow. We will create an &lt;strong&gt;AI-powered content summarizer&lt;/strong&gt; that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Receives a URL via webhook&lt;/li&gt;
&lt;li&gt;Fetches the web page content&lt;/li&gt;
&lt;li&gt;Sends it to an LLM for summarization&lt;/li&gt;
&lt;li&gt;Returns the summary as a structured JSON response&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 1: Create a new workflow
&lt;/h3&gt;

&lt;p&gt;In the n8n editor (&lt;a href="http://localhost:5678" rel="noopener noreferrer"&gt;http://localhost:5678&lt;/a&gt;), click &lt;strong&gt;"Add Workflow"&lt;/strong&gt; in the top-right corner. Name it "AI Content Summarizer."&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Add a Webhook trigger
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;strong&gt;+&lt;/strong&gt; button to add a node&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;"Webhook"&lt;/strong&gt; and select it&lt;/li&gt;
&lt;li&gt;Set the HTTP Method to &lt;strong&gt;POST&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Set the path to &lt;code&gt;summarize&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Under "Respond," select &lt;strong&gt;"Using 'Respond to Webhook' Node"&lt;/strong&gt; — this lets us return the AI-generated summary&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 3: Add an HTTP Request node
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Add a new node after the Webhook&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;"HTTP Request"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Set the URL to: &lt;code&gt;{{ $json.body.url }}&lt;/code&gt; — this reads the URL from the incoming webhook payload&lt;/li&gt;
&lt;li&gt;Set the method to &lt;strong&gt;GET&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Under "Options," set Response Format to &lt;strong&gt;"String"&lt;/strong&gt; — we want the raw HTML&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 4: Add an AI chain
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Add a &lt;strong&gt;"Basic LLM Chain"&lt;/strong&gt; node&lt;/li&gt;
&lt;li&gt;Connect it to the HTTP Request output&lt;/li&gt;
&lt;li&gt;Configure the model:

&lt;ul&gt;
&lt;li&gt;If using Ollama (from the starter kit): select &lt;strong&gt;Ollama Chat Model&lt;/strong&gt; and choose &lt;code&gt;llama3.2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If using an API: select &lt;strong&gt;OpenAI Chat Model&lt;/strong&gt; or &lt;strong&gt;Anthropic Chat Model&lt;/strong&gt; and add your API credentials&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Set the prompt:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Summarize the following web page content in 3-5 bullet points. Focus on the key facts and actionable information. Return the summary as JSON with the format: {"title": "...", "bullets": ["...", "..."], "word_count": N}

Content:
{{ $json.data }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Add a Respond to Webhook node
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Add a &lt;strong&gt;"Respond to Webhook"&lt;/strong&gt; node at the end&lt;/li&gt;
&lt;li&gt;Set "Respond With" to &lt;strong&gt;"All Incoming Items"&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 6: Test it
&lt;/h3&gt;

&lt;p&gt;Activate the workflow, then call it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:5678/webhook/summarize &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"url": "https://example.com"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should receive a JSON response with the AI-generated summary.&lt;/p&gt;

&lt;p&gt;This basic pattern — &lt;strong&gt;trigger → fetch data → AI processing → structured output&lt;/strong&gt; — is the foundation for most AI automation workflows. From here, you can add error handling, conditional branches, database storage, and notification steps.&lt;/p&gt;




&lt;h2&gt;
  
  
  Advanced: AI Agent Workflows with Tool Use
&lt;/h2&gt;

&lt;p&gt;n8n's AI Agent node goes beyond simple LLM chains. It creates autonomous agents that can reason, use tools, and take multi-step actions — similar to what you would build with &lt;a href="https://dev.to/articles/build-ai-agent-langgraph-python-tutorial-2026"&gt;LangGraph&lt;/a&gt; or &lt;a href="https://dev.to/articles/build-multi-agent-ai-crewai-python-tutorial-2026"&gt;CrewAI&lt;/a&gt; in code, but configured visually.&lt;/p&gt;

&lt;h3&gt;
  
  
  What an AI Agent can do in n8n
&lt;/h3&gt;

&lt;p&gt;An n8n AI Agent node combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An LLM&lt;/strong&gt; (any supported model) for reasoning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt; that the agent can call: HTTP requests, code execution, database queries, web search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt; for multi-turn conversations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output parsers&lt;/strong&gt; for structured responses&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Building a research agent
&lt;/h3&gt;

&lt;p&gt;Here is a workflow pattern for an AI research agent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Webhook trigger&lt;/strong&gt; — receives a research question&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Agent node&lt;/strong&gt; configured with:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Ollama (llama3.2) or Claude/GPT-4 via API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SerpAPI&lt;/strong&gt; or &lt;strong&gt;Google Search&lt;/strong&gt; node — for web research&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP Request&lt;/strong&gt; tool — for fetching specific pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code&lt;/strong&gt; tool — for data processing and calculations&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System prompt:&lt;/strong&gt; "You are a research assistant. Search the web to answer questions thoroughly. Cite your sources with URLs."&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Respond to Webhook&lt;/strong&gt; — returns the agent's research report&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent autonomously decides which tools to use, in what order, and how many times — based on the question and intermediate results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent tool configuration
&lt;/h3&gt;

&lt;p&gt;To add tools to an AI Agent node:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click the AI Agent node&lt;/li&gt;
&lt;li&gt;Under "Tools," click &lt;strong&gt;"Add Tool"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Select from available tool nodes (Calculator, Code, HTTP Request, SerpAPI, etc.)&lt;/li&gt;
&lt;li&gt;Each tool gets a name and description that the LLM uses to decide when to invoke it&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key insight is that the tool descriptions matter as much as the system prompt. Write clear, specific descriptions so the agent knows when each tool is appropriate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory for multi-turn conversations
&lt;/h3&gt;

&lt;p&gt;For chatbot-style workflows, add a &lt;strong&gt;Window Buffer Memory&lt;/strong&gt; or &lt;strong&gt;Postgres Chat Memory&lt;/strong&gt; sub-node to the AI Agent. This gives the agent conversation context across multiple interactions.&lt;/p&gt;

&lt;p&gt;With PostgreSQL already in your stack, Postgres Chat Memory is the natural choice — sessions persist across n8n restarts and you get full conversation history in your database.&lt;/p&gt;




&lt;h2&gt;
  
  
  n8n vs Zapier vs Make: When to Choose What
&lt;/h2&gt;

&lt;p&gt;We wrote a &lt;a href="https://dev.to/articles/zapier-vs-make-vs-n8n-automation-comparison-2026"&gt;detailed comparison of all four platforms&lt;/a&gt;. Here is the decision framework:&lt;/p&gt;

&lt;h3&gt;
  
  
  Choose Zapier if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You need the largest integration library (7,000+ apps)&lt;/li&gt;
&lt;li&gt;Your team is non-technical and needs the simplest interface&lt;/li&gt;
&lt;li&gt;Budget is not a primary constraint&lt;/li&gt;
&lt;li&gt;You need enterprise compliance certifications&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose Make.com if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You need complex multi-branch workflows at scale&lt;/li&gt;
&lt;li&gt;You want the best price-to-operations ratio on a managed platform&lt;/li&gt;
&lt;li&gt;Your workflows involve heavy data transformation&lt;/li&gt;
&lt;li&gt;You do not want to manage infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose n8n (self-hosted) if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You want AI workflow automation as a first-class feature&lt;/li&gt;
&lt;li&gt;You need unlimited executions at a fixed server cost&lt;/li&gt;
&lt;li&gt;Data sovereignty matters — GDPR, client contracts, or privacy requirements&lt;/li&gt;
&lt;li&gt;You are comfortable with Docker and basic server management&lt;/li&gt;
&lt;li&gt;You want to run local LLMs via Ollama without API costs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose n8n Cloud if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You want n8n's features without managing infrastructure&lt;/li&gt;
&lt;li&gt;You need managed scaling and high availability&lt;/li&gt;
&lt;li&gt;Your execution volume fits within the tier pricing&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Production Deployment Tips
&lt;/h2&gt;

&lt;p&gt;Running n8n locally is one thing. Running it reliably in production requires a few more steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reverse proxy with Caddy
&lt;/h3&gt;

&lt;p&gt;For production deployments, put n8n behind a reverse proxy with automatic SSL. Caddy is the simplest option.&lt;/p&gt;

&lt;p&gt;Add Caddy to your &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="na"&gt;caddy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;caddy:2-alpine&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80:80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./Caddyfile:/etc/caddy/Caddyfile&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;caddy_data:/data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a &lt;code&gt;Caddyfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;n8n.yourdomain.com&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;reverse_proxy&lt;/span&gt; &lt;span class="nf"&gt;n8n&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5678&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add &lt;code&gt;WEBHOOK_URL=https://n8n.yourdomain.com&lt;/code&gt; to your n8n environment variables so webhook URLs resolve correctly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backups
&lt;/h3&gt;

&lt;p&gt;Your n8n data lives in two places:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL database&lt;/strong&gt; — workflow definitions, credentials (encrypted), execution logs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n_storage volume&lt;/strong&gt; — binary data, encryption keys&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Automate daily backups:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# backup-n8n.sh&lt;/span&gt;
&lt;span class="nv"&gt;BACKUP_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/backups/n8n/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y-%m-%d&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Database backup&lt;/span&gt;
docker compose &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-T&lt;/span&gt; postgres pg_dump &lt;span class="nt"&gt;-U&lt;/span&gt; n8n_user n8n &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;/n8n-db.sql"&lt;/span&gt;

&lt;span class="c"&gt;# Volume backup&lt;/span&gt;
docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; n8n_storage:/data &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;:/backup alpine &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;tar &lt;/span&gt;czf /backup/n8n-storage.tar.gz &lt;span class="nt"&gt;-C&lt;/span&gt; /data &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Backup completed: &lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run this daily via cron:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;0 3 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /path/to/backup-n8n.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Updating n8n
&lt;/h3&gt;

&lt;p&gt;Pin your n8n version in &lt;code&gt;docker-compose.yml&lt;/code&gt; (e.g., &lt;code&gt;n8nio/n8n:2.14.2&lt;/code&gt; instead of &lt;code&gt;latest&lt;/code&gt;) and update deliberately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Backup first&lt;/span&gt;
./backup-n8n.sh

&lt;span class="c"&gt;# 2. Update the image tag in docker-compose.yml&lt;/span&gt;

&lt;span class="c"&gt;# 3. Pull and restart&lt;/span&gt;
docker compose pull n8n
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt; n8n
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the &lt;a href="https://github.com/n8n-io/n8n/releases" rel="noopener noreferrer"&gt;n8n release notes&lt;/a&gt; before updating. Major version bumps may include breaking changes to workflow nodes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Credential encryption
&lt;/h3&gt;

&lt;p&gt;n8n encrypts stored credentials using the &lt;code&gt;N8N_ENCRYPTION_KEY&lt;/code&gt; environment variable. If this key is lost or changed, all saved credentials become unreadable.&lt;/p&gt;

&lt;p&gt;Best practices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate a strong key: &lt;code&gt;openssl rand -hex 32&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Store it outside the server (password manager, encrypted backup)&lt;/li&gt;
&lt;li&gt;Never commit &lt;code&gt;.env&lt;/code&gt; files to version control&lt;/li&gt;
&lt;li&gt;Set the key before creating any credentials — changing it later requires re-entering all credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Resource monitoring
&lt;/h3&gt;

&lt;p&gt;For a typical self-hosted n8n instance:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Idle&lt;/th&gt;
&lt;th&gt;Under load (50 concurrent workflows)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CPU&lt;/td&gt;
&lt;td&gt;&amp;lt;5%&lt;/td&gt;
&lt;td&gt;30-60% (2 cores)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAM (n8n only)&lt;/td&gt;
&lt;td&gt;~200MB&lt;/td&gt;
&lt;td&gt;~500MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAM (full AI stack)&lt;/td&gt;
&lt;td&gt;~2GB&lt;/td&gt;
&lt;td&gt;~4GB+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disk I/O&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;td&gt;Moderate (execution logs)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If running AI workloads with Ollama, the LLM inference is the bottleneck. Monitor Ollama's memory usage separately — a 3B parameter model uses about 2GB of RAM, while a 7B model needs 4-5GB.&lt;/p&gt;




&lt;h2&gt;
  
  
  Five Practical AI Automation Examples
&lt;/h2&gt;

&lt;p&gt;Here are five n8n workflows you can build today with the self-hosted AI stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Email triage agent
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; New email arrives (IMAP or Gmail node)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Agent:&lt;/strong&gt; Classifies email as urgent/normal/spam, extracts action items&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actions:&lt;/strong&gt; Labels email, creates tasks in your project management tool, sends Slack alert for urgent items&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Llama 3.2 (3B) via Ollama — fast enough for classification tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. RSS-to-summary pipeline
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; RSS Feed trigger (check every hour)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Chain:&lt;/strong&gt; Summarizes each new article in 3 bullet points&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output:&lt;/strong&gt; Posts summaries to a Slack channel or Discord server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Any LLM — this is a straightforward summarization task&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Customer support auto-responder
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; Webhook from your support system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Agent with tools:&lt;/strong&gt; Searches knowledge base (Qdrant vector store), drafts a response&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human review:&lt;/strong&gt; Sends draft to Slack for approval before sending&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Claude or GPT-4 via API for quality-sensitive responses&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Document processor
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; File uploaded to a watched folder or S3 bucket&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Processing:&lt;/strong&gt; Extract text from PDF, split into chunks, generate embeddings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage:&lt;/strong&gt; Store embeddings in Qdrant for later RAG queries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Ollama for embeddings, any LLM for subsequent queries&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Competitor monitoring dashboard
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; Scheduled (daily)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web scraping:&lt;/strong&gt; HTTP Request nodes fetch competitor pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Analysis:&lt;/strong&gt; Compares changes, identifies new features or pricing updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output:&lt;/strong&gt; Generates a daily digest email with structured comparison data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Llama 3.2 via Ollama for cost-free daily runs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these workflows runs on the same $5/month server. On Zapier, the email triage agent alone would cost $50+/month due to the per-task billing on multi-step workflows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Connecting n8n to Local LLMs via Ollama
&lt;/h2&gt;

&lt;p&gt;If you used the AI Starter Kit, Ollama is already running. Here is how to configure n8n to use it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding Ollama as a credential
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In any AI node, click the &lt;strong&gt;Model&lt;/strong&gt; parameter&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;"Ollama Chat Model"&lt;/strong&gt; or &lt;strong&gt;"Ollama"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Create new credentials:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Base URL:&lt;/strong&gt; &lt;code&gt;http://ollama:11434&lt;/code&gt; (inside Docker network) or &lt;code&gt;http://localhost:11434&lt;/code&gt; (if Ollama runs on the host)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Select your model (e.g., &lt;code&gt;llama3.2&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Pulling additional models
&lt;/h3&gt;

&lt;p&gt;To download more models into your Ollama instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;ollama ollama pull mistral
docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;ollama ollama pull codellama
docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;ollama ollama pull nomic-embed-text  &lt;span class="c"&gt;# For embeddings&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a complete guide on Ollama model selection, hardware requirements, and optimization, see our &lt;a href="https://dev.to/articles/ollama-open-webui-self-hosting-guide-2026"&gt;Ollama + Open WebUI self-hosting guide&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to use local LLMs vs API models
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use case&lt;/th&gt;
&lt;th&gt;Recommended model&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Classification, tagging&lt;/td&gt;
&lt;td&gt;Llama 3.2 (3B) via Ollama&lt;/td&gt;
&lt;td&gt;Fast, free, good enough for structured tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Summarization&lt;/td&gt;
&lt;td&gt;Llama 3.2 (3B) or Mistral via Ollama&lt;/td&gt;
&lt;td&gt;Adequate quality for internal summaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer-facing content&lt;/td&gt;
&lt;td&gt;Claude or GPT-4 via API&lt;/td&gt;
&lt;td&gt;Higher quality matters when customers see the output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code generation&lt;/td&gt;
&lt;td&gt;CodeLlama via Ollama or Claude via API&lt;/td&gt;
&lt;td&gt;Depends on complexity and quality requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embeddings&lt;/td&gt;
&lt;td&gt;nomic-embed-text via Ollama&lt;/td&gt;
&lt;td&gt;Free, fast, runs locally — no reason to pay for API embeddings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The hybrid approach works well: use local Ollama models for high-volume, internal tasks and API models for customer-facing or quality-critical outputs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is n8n really free to self-host?
&lt;/h3&gt;

&lt;p&gt;The n8n Community Edition is free to self-host under the &lt;a href="https://github.com/n8n-io/n8n/blob/master/LICENSE.md" rel="noopener noreferrer"&gt;Sustainable Use License&lt;/a&gt;. You can use it for your own projects and business automations. The license restricts reselling n8n as a hosted service. For most self-hosting use cases, it is effectively free.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many workflows can self-hosted n8n handle?
&lt;/h3&gt;

&lt;p&gt;There is no artificial limit on workflows or executions. The practical limit is your server's CPU and RAM. A 2-core, 4GB RAM VPS comfortably handles 50+ active workflows with moderate traffic. For high-volume scenarios (thousands of executions per minute), scale vertically or run n8n in queue mode with multiple workers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use n8n with OpenAI and Anthropic APIs?
&lt;/h3&gt;

&lt;p&gt;Yes. n8n has native credential types for OpenAI, Anthropic, Google AI, Hugging Face, and many more. Add your API key in the credentials settings and select the corresponding model in any AI node. You can mix and match providers within the same workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I update n8n without losing data?
&lt;/h3&gt;

&lt;p&gt;Pin your version, backup your database and volumes, update the image tag in &lt;code&gt;docker-compose.yml&lt;/code&gt;, then run &lt;code&gt;docker compose pull &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;. Your workflows, credentials, and execution history are stored in PostgreSQL and survive container updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is self-hosted n8n secure enough for production?
&lt;/h3&gt;

&lt;p&gt;n8n encrypts stored credentials, supports LDAP/OIDC/SAML authentication, and provides role-based access control. For production, add a reverse proxy with SSL (Caddy or Nginx), keep the instance updated, restrict network access to port 443, and use strong encryption keys. The self-hosted version gives you more security control than any cloud platform because you own the network boundary.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can n8n replace Zapier for a small team?
&lt;/h3&gt;

&lt;p&gt;For most use cases, yes. n8n covers the same integration patterns — triggers, API calls, data transformation, scheduling — with 1,400+ built-in nodes. The main gap is Zapier's larger app library (7,000+ apps). If the specific integrations you need exist in n8n (check the &lt;a href="https://n8n.io/integrations/" rel="noopener noreferrer"&gt;n8n integrations page&lt;/a&gt;), you will save significant money by switching.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does n8n compare to Dify for AI workflows?
&lt;/h3&gt;

&lt;p&gt;They serve different purposes. &lt;a href="https://dev.to/articles/dify-self-hosted-docker-ai-workflow-guide-2026"&gt;Dify&lt;/a&gt; is purpose-built for AI: RAG chatbots, prompt engineering, model management. n8n is a general-purpose automation platform with strong AI capabilities added. Use Dify when your entire workflow is AI (chat interfaces, document Q&amp;amp;A). Use n8n when you need AI as part of a broader automation that connects to external services, databases, and APIs.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Learned Running n8n
&lt;/h2&gt;

&lt;p&gt;At Effloow, we run &lt;a href="https://dev.to/articles/how-we-built-company-with-14-ai-agents"&gt;14 AI agents&lt;/a&gt; for content production, SEO analysis, and site management. n8n handles our workflow automation layer — connecting agents to external services, scheduling recurring tasks, and processing webhooks from various platforms.&lt;/p&gt;

&lt;p&gt;Three things we learned the hard way:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pin your n8n version.&lt;/strong&gt; We initially ran &lt;code&gt;:latest&lt;/code&gt; and an automatic update broke a webhook workflow in production. Pin to a specific version and update manually after testing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set up execution log pruning.&lt;/strong&gt; By default, n8n stores all execution data. After a month of active workflows, our PostgreSQL database grew to 8GB. Set &lt;code&gt;EXECUTIONS_DATA_PRUNE=true&lt;/code&gt; and &lt;code&gt;EXECUTIONS_DATA_MAX_AGE=168&lt;/code&gt; (hours) to auto-prune old execution data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The AI Starter Kit is the right starting point.&lt;/strong&gt; We initially set up n8n alone and added Ollama later. The starter kit's Docker Compose configuration handles the networking, volume mounts, and service dependencies correctly from the start. Save yourself the debugging.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Getting Started: Your First 30 Minutes
&lt;/h2&gt;

&lt;p&gt;Here is a concrete plan for your first session with self-hosted n8n:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Minutes 0-10:&lt;/strong&gt; Clone the AI Starter Kit, configure &lt;code&gt;.env&lt;/code&gt;, run &lt;code&gt;docker compose --profile cpu up -d&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minutes 10-15:&lt;/strong&gt; Open &lt;code&gt;http://localhost:5678&lt;/code&gt;, create your admin account, explore the demo workflow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minutes 15-25:&lt;/strong&gt; Build the AI Content Summarizer workflow from the tutorial above&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minutes 25-30:&lt;/strong&gt; Test the webhook, iterate on the prompt, try switching between Ollama and an API model&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After that, explore n8n's &lt;a href="https://n8n.io/workflows/" rel="noopener noreferrer"&gt;workflow templates library&lt;/a&gt; — there are hundreds of community-built workflows you can import and customize.&lt;/p&gt;

&lt;p&gt;Self-hosting n8n is one of the highest-ROI moves for any developer or small team building with AI. Unlimited automations, local LLM inference, and full data control — all for the cost of a small VPS.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;n8n is open-source software maintained by n8n GmbH. This guide covers the self-hosted Community Edition. For managed hosting with support, see &lt;a href="https://n8n.io/cloud/" rel="noopener noreferrer"&gt;n8n Cloud&lt;/a&gt; (affiliate link — we earn a commission at no extra cost to you).&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article may contain affiliate links to products or services we recommend. If you purchase through these links, we may earn a small commission at no extra cost to you. This helps support Effloow and allows us to continue creating free, high-quality content. See our &lt;a href="https://dev.to/affiliate-disclosure"&gt;affiliate disclosure&lt;/a&gt; for full details.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>automation</category>
      <category>selfhosted</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
