<?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: Tim Gaul</title>
    <description>The latest articles on Forem by Tim Gaul (@fourixai).</description>
    <link>https://forem.com/fourixai</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%2F287312%2F64a357a3-5bb5-4a78-bcf9-e25a0b09cfa8.jpg</url>
      <title>Forem: Tim Gaul</title>
      <link>https://forem.com/fourixai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/fourixai"/>
    <language>en</language>
    <item>
      <title>Beyond Deadwoodworks: How Claude Code Skills Super-charge MCP Servers and Everyday Workflows</title>
      <dc:creator>Tim Gaul</dc:creator>
      <pubDate>Wed, 19 Nov 2025 03:37:43 +0000</pubDate>
      <link>https://forem.com/fourixai/beyond-deadwoodworks-how-claude-code-skills-super-charge-mcp-servers-and-everyday-workflows-69</link>
      <guid>https://forem.com/fourixai/beyond-deadwoodworks-how-claude-code-skills-super-charge-mcp-servers-and-everyday-workflows-69</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;You've probably heard about AI assistants that can "use tools." Maybe you've even set up an MCP server or two. But here's the question nobody's asking: why do they work perfectly one day and completely miss the mark the next?&lt;/p&gt;

&lt;p&gt;I'll tell you why: you're giving Claude access to tools, but you're not giving it the playbook.&lt;/p&gt;

&lt;p&gt;That's what skills do. They turn "Claude can technically do this if I phrase it right" into "Claude does this reliably, every single time, without me babysitting it."&lt;/p&gt;

&lt;p&gt;This isn't just for developers—though if you are one, you'll love this. This is for anyone who's tired of re-explaining the same workflow, watching AI miss obvious steps, or wondering why yesterday's perfect prompt doesn't work today.&lt;/p&gt;

&lt;p&gt;In this article, you'll learn what skills actually are, see real-world examples across different teams, understand the difference between skills and MCP servers (they're not the same thing), and build something you can use today. Screenshots and working code ahead—grab a coffee. ☕️&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why Skills Matter (And Why MCP Servers Alone Aren't Enough)
&lt;/h2&gt;

&lt;p&gt;Here's the thing everyone gets wrong at first: they think MCP servers are the solution. You set them up, Claude can access your tools, problem solved.&lt;/p&gt;

&lt;p&gt;Except it's not solved. You still have to explain what you want every single time. The phrasing matters. The order matters. Miss a step? Claude misses it too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without skills, you're a manager who has to micromanage every task.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With skills, you write the instructions once, and Claude follows them forever.&lt;/p&gt;

&lt;h3&gt;
  
  
  What skills actually give you:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Predictable, consistent behaviour&lt;/strong&gt; → No more "why did it skip that step today?" moments&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Reusable logic that scales&lt;/strong&gt; → Build once, use everywhere&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Safety and control&lt;/strong&gt; → You define the guardrails, not hope for the best&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Evolve without rewiring&lt;/strong&gt; → Update the skill, not your entire stack  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;The shift&lt;/strong&gt;: From "Does Claude understand what I need?" to "Claude already knows what to do."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  MCP Server vs Skill—What's Actually Happening Here
&lt;/h2&gt;

&lt;p&gt;Alright, let's clear up the confusion. A lot of people think MCP servers and skills are the same thing. They're not. Here's the difference, and why it matters:&lt;/p&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;What it does&lt;/th&gt;
&lt;th&gt;When you need it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP server&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gives Claude access to your files, APIs, databases, external systems&lt;/td&gt;
&lt;td&gt;When Claude needs to reach outside itself to get data or take actions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Skill&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Defines how Claude uses those tools—what order, what validation, what to do when things go wrong&lt;/td&gt;
&lt;td&gt;When you want Claude to follow a specific workflow reliably&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Here's the mental model:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;MCP server&lt;/strong&gt; = "Claude, here are the keys to the filing cabinet."&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Skill&lt;/strong&gt; = "Claude, here's exactly how to organise what's inside."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9anjns4wyo6fxzfciz2d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9anjns4wyo6fxzfciz2d.png" alt="MCP Server to Skill to Result flow diagram" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The MCP Server provides access to tools, while the Skill orchestrates how those tools are used to deliver consistent, predictable results.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You need both. MCP gives the access. Skills give the logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens if you only have MCP?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Claude can technically access everything, but you're counting on it to figure out the right sequence every time. Sometimes it nails it. Sometimes it doesn't. You're rolling the dice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens if you only have a skill?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Nothing. The skill is calling tools that don't exist. It's like writing a perfect recipe but having no ingredients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens when you have both?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Magic. Claude knows what it can access and exactly how to use it. Every. Single. Time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Common mistake&lt;/strong&gt;: People build an MCP server, see that Claude can use the tools, and think they're done. Then they wonder why results are inconsistent. The MCP server isn't the finish line—it's the starting line.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  How Real Teams Are Actually Using This
&lt;/h2&gt;

&lt;p&gt;Let's get out of theory and into what this looks like when people use it every day.&lt;/p&gt;
&lt;h3&gt;
  
  
  📸 Content &amp;amp; Marketing Teams
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The workflow&lt;/strong&gt;: Upload images, videos, docs → Skill auto-tags everything → Files are organised and searchable&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changed&lt;/strong&gt;: No one's manually tagging 47 product photos anymore.&lt;/p&gt;


&lt;h3&gt;
  
  
  🛠️ Product &amp;amp; Engineering
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The workflow&lt;/strong&gt;: New tickets → Skill triages, generates test stubs, flags violations → Team focuses on real work&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changed&lt;/strong&gt;: The skill is the teammate who never forgets.&lt;/p&gt;


&lt;h3&gt;
  
  
  💬 Customer Support &amp;amp; Success
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The workflow&lt;/strong&gt;: User report → Skill classifies, pulls context, drafts response or escalates&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changed&lt;/strong&gt;: Support teams stop reacting and start operating.&lt;/p&gt;


&lt;h3&gt;
  
  
  ⚙️ Internal Ops &amp;amp; Automation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The workflow&lt;/strong&gt;: Audit logs, error reports, health checks → Skill handles routine maintenance&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changed&lt;/strong&gt;: Your team focuses on actual problems, not routine checks.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;What's the common thread?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You're not asking Claude to help you. You're giving Claude responsibility to do it without you.&lt;/p&gt;

&lt;p&gt;That shift—from assistant to operator—is where the real value lives.&lt;/p&gt;
&lt;h2&gt;
  
  
  Let's Build Something: Auto-Tagging Files in Under 20 Minutes
&lt;/h2&gt;

&lt;p&gt;Enough theory. Let's build a skill you can actually use.&lt;br&gt;&lt;br&gt;
This one's simple but meaningful: you point Claude at a folder, it reads your files, analyses what they are, and tags them automatically. Useful for any team. Any workflow.&lt;/p&gt;

&lt;p&gt;By the end, you'll have something working that you can adapt to your own needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffkb59yysnicegrsyr6ld.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffkb59yysnicegrsyr6ld.png" alt="File upload UI showing list of files to process" width="800" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example file upload interface showing various document types ready for automatic tagging and categorisation.&lt;/em&gt;  &lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1—Understand What Tools You Just Unlocked (1 minute)
&lt;/h3&gt;

&lt;p&gt;With Claude Code's built-in filesystem MCP, you have these abilities:&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;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_directory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;See what files are in a folder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;read_file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read the content of a file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;write_file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Write to a file (we won't use this today)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That's it. Simple, focused, useful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqpq1haqi9rkx6d6lhdi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqpq1haqi9rkx6d6lhdi.png" alt="Tool list showing list_directory and read_file filesystem tools" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Claude Code's built-in filesystem tools for reading files and listing directories.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2—Write the Skill (5 minutes)
&lt;/h3&gt;

&lt;p&gt;Here's where you build the workflow. Skills live in a &lt;code&gt;.claude&lt;/code&gt; folder in your project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your folder structure should look like this:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;your-project/
├── .claude/
│   └── skills/
│       └── auto-tag-files/
│           └── SKILL.md
└── uploads/
    ├── file1.png
    ├── file2.pdf
    └── file3.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a file at &lt;code&gt;.claude/skills/auto-tag-files/SKILL.md&lt;/code&gt; and paste this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;auto-tag-files&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Automatically tag and categorise files from the uploads folder. Use this when the user asks to tag files, organise uploads, categorise recent files, or analyse uploaded content.&lt;/span&gt;
&lt;span class="na"&gt;allowed-tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Bash, Read, Glob&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Auto-Tag Files&lt;/span&gt;

Automatically analyse and tag files from the uploads directory.

&lt;span class="gu"&gt;## Instructions&lt;/span&gt;

When this skill is activated:
&lt;span class="p"&gt;
1.&lt;/span&gt; Use Glob to find all files in the ./uploads directory
&lt;span class="p"&gt;2.&lt;/span&gt; For each file found:
&lt;span class="p"&gt;   -&lt;/span&gt; Use Read to examine the file content (for text/code files) or Read to view images/PDFs visually
&lt;span class="p"&gt;   -&lt;/span&gt; Analyze the content to determine:
&lt;span class="p"&gt;     -&lt;/span&gt; File type (image/document/video/code/data)
&lt;span class="p"&gt;     -&lt;/span&gt; 3-5 meaningful keywords/tags based on the content
&lt;span class="p"&gt;   -&lt;/span&gt; Create a structured summary with filename, type, and tags
&lt;span class="p"&gt;3.&lt;/span&gt; Present all results in a clear, organised format (JSON or markdown table)

&lt;span class="gu"&gt;## Analysis Guidelines&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="gs"&gt;**Images**&lt;/span&gt;: Describe visual content, subjects, style, purpose
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Documents**&lt;/span&gt;: Extract key topics, themes, purpose, audience
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Videos**&lt;/span&gt;: Note subject matter, format, likely purpose
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Code**&lt;/span&gt;: Identify language, frameworks, purpose, key functionality
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Data**&lt;/span&gt;: Determine format, structure, domain, use case

&lt;span class="gu"&gt;## Output Format&lt;/span&gt;

Present results as a JSON array or markdown table:

[
  {
    "filename": "banner.png",
    "type": "image",
    "tags": ["branding", "header", "design", "marketing", "visual"]
  }
]

&lt;span class="gu"&gt;## Limits&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Process up to 10 files by default
&lt;span class="p"&gt;-&lt;/span&gt; If the user specifies a limit, honor that number
&lt;span class="p"&gt;-&lt;/span&gt; For large files, analyse a representative sample
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What this does, step by step:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Frontmatter&lt;/strong&gt;: Defines the skill name, description, and allowed tools (Bash, Read, Glob)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instructions&lt;/strong&gt;: Tells Claude exactly what to do when the skill is activated&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analysis Guidelines&lt;/strong&gt;: Provides specific guidance for different file types&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output Format&lt;/strong&gt;: Specifies how results should be structured (JSON or markdown table)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limits&lt;/strong&gt;: Sets reasonable boundaries (10 files by default, configurable)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is your workflow, locked in. Claude follows these instructions every time, using the allowed tools to get consistent, predictable results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3—Use It Like a Human (30 seconds)
&lt;/h3&gt;

&lt;p&gt;Open Claude and just type:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Tag my last 3 uploads"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Auto-tag my recent files"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's it. Claude sees the skill is available and runs it. No JSON. No configuration. Just talk to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens behind the scenes:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Skill lists your 3 most recent files&lt;/li&gt;
&lt;li&gt;Reads the content of each one&lt;/li&gt;
&lt;li&gt;Claude analyses what type of file it is and what tags make sense&lt;/li&gt;
&lt;li&gt;You get back a clean, structured list&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxqk48grl3vsr3w1wapd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxqk48grl3vsr3w1wapd.png" alt="Claude chat showing skill call and response with file tagging results" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Claude Code interface showing the auto-tag-files skill being called and displaying the structured tagging results.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4—What You Actually Get Back
&lt;/h3&gt;

&lt;p&gt;Here's what the output looks like:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"filename"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"banner.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tags"&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;"marketing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"branding"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"technology"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"abstract-design"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"header"&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="nl"&gt;"filename"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pitch_deck.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"document"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tags"&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;"business"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"presentation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"investment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"market-strategy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"startup"&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="nl"&gt;"filename"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"demo_video.mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tags"&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;"demonstration"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"product"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"presentation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"marketing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"promotional"&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;Why this matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For non-technical users&lt;/strong&gt;: "I just asked it to tag my files and it worked."&lt;br&gt;&lt;br&gt;
&lt;strong&gt;For developers&lt;/strong&gt;: Clean, structured data you can pipe into other systems.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;For teams&lt;/strong&gt;: Everyone gets consistent tagging without manual work.&lt;/p&gt;

&lt;p&gt;You're not just getting suggestions. You're getting reliable, repeatable results.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Try this now&lt;/strong&gt;: Drop 3 random files in your uploads folder and run the skill. See what happens. Then go tweak the skill to add more tags, change the format, or filter by file type. That's the power of having the logic in one place.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Handling Video Files with Scripts and Examples
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚙️ Advanced Technique&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This section covers extending skills with custom scripts and examples files. If you're just getting started, the basic skill above works great—come back to this when you're ready to level up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you run the auto-tag skill on video files, you might notice something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;● Read&lt;span class="o"&gt;(&lt;/span&gt;uploads/demo_video.mp4&lt;span class="o"&gt;)&lt;/span&gt;
  ⎿  Error reading file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;This is expected.&lt;/strong&gt; Claude can't directly "read" binary video files the way it reads text documents or analyses images. Video files need special handling.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution: Extract Frames First
&lt;/h3&gt;

&lt;p&gt;Here's where skills get powerful. Instead of giving up on videos, we can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use a bash script to extract frames from videos (1 frame per second)&lt;/li&gt;
&lt;li&gt;Store those frames in a folder matching the video name&lt;/li&gt;
&lt;li&gt;Analyze the frames to understand what's in the video&lt;/li&gt;
&lt;li&gt;Tag the video based on that analysis&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This demonstrates two advanced skill features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scripts&lt;/strong&gt; (&lt;code&gt;scripts/&lt;/code&gt; folder) - External tools your skill can call&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt; (&lt;code&gt;EXAMPLES.md&lt;/code&gt;) - Reference documentation for complex workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Setting Up the Advanced Video Tagging
&lt;/h3&gt;

&lt;p&gt;First, create the proper skill structure with scripts:&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; &lt;span class="nt"&gt;-p&lt;/span&gt; .claude/skills/auto-tag-files/scripts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your folder structure will now look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;your-project/
├── .claude/
│   └── skills/
│       └── auto-tag-files/
│           ├── SKILL.md
│           ├── EXAMPLES.md &lt;span class="o"&gt;(&lt;/span&gt;new&lt;span class="o"&gt;)&lt;/span&gt;
│           └── scripts/
│               └── extract_video_frames.sh &lt;span class="o"&gt;(&lt;/span&gt;new&lt;span class="o"&gt;)&lt;/span&gt;
└── uploads/
    ├── file1.png
    ├── file2.pdf
    └── demo_video.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create the Frame Extraction Script
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;.claude/skills/auto-tag-files/scripts/extract_video_frames.sh&lt;/code&gt;:&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;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-euo&lt;/span&gt; pipefail

&lt;span class="c"&gt;# Extract 1 frame per second from video files in uploads/&lt;/span&gt;
&lt;span class="c"&gt;# Usage: ./scripts/extract_video_frames.sh &amp;lt;video_filename&amp;gt;&lt;/span&gt;

&lt;span class="nv"&gt;VIDEO_FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;VIDEO_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;basename&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VIDEO_FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/\.[^.]*$//'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;OUTPUT_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"uploads/&lt;/span&gt;&lt;span class="nv"&gt;$VIDEO_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; ffmpeg &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null 2&amp;gt;&amp;amp;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"ERROR: ffmpeg is not installed. Install with: brew install ffmpeg"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp;2
  &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi

&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;$OUTPUT_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Extracting frames from: &lt;/span&gt;&lt;span class="nv"&gt;$VIDEO_FILE&lt;/span&gt;&lt;span class="s2"&gt; → &lt;/span&gt;&lt;span class="nv"&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Extract 1 frame per second, max 10 frames&lt;/span&gt;
ffmpeg &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VIDEO_FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-vf&lt;/span&gt; &lt;span class="s2"&gt;"fps=1,scale=640:-1"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-frames&lt;/span&gt;:v 10 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span class="s2"&gt;/frame_%02d.jpg"&lt;/span&gt; 2&amp;gt;/dev/null

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"✓ Extracted frames to: &lt;/span&gt;&lt;span class="nv"&gt;$OUTPUT_DIR&lt;/span&gt;&lt;span class="s2"&gt;/"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make it executable:&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;chmod&lt;/span&gt; +x .claude/skills/auto-tag-files/scripts/extract_video_frames.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Add the Examples File
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;.claude/skills/auto-tag-files/EXAMPLES.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Auto-Tag Files Skill – Examples&lt;/span&gt;

&lt;span class="gu"&gt;## Example 1: Tagging Mixed Files (Including Videos)&lt;/span&gt;

When you have videos in your uploads folder:

&lt;span class="gs"&gt;**Step 1:**&lt;/span&gt; List all files in uploads/

ls uploads/
&lt;span class="gh"&gt;# demo_video.mp4, banner.png, pitch_deck.pdf&lt;/span&gt;

&lt;span class="gs"&gt;**Step 2:**&lt;/span&gt; For video files, extract frames first:

./scripts/extract_video_frames.sh uploads/demo_video.mp4

This creates: &lt;span class="sb"&gt;`uploads/demo_video/frame_01.jpg`&lt;/span&gt;, &lt;span class="sb"&gt;`frame_02.jpg`&lt;/span&gt;, etc.

&lt;span class="gs"&gt;**Step 3:**&lt;/span&gt; Analyze frames to understand video content:
&lt;span class="p"&gt;
-&lt;/span&gt; Read each extracted frame image
&lt;span class="p"&gt;-&lt;/span&gt; Identify objects, actions, settings, style
&lt;span class="p"&gt;-&lt;/span&gt; Generate tags based on visual analysis

&lt;span class="gs"&gt;**Step 4:**&lt;/span&gt; Tag the video based on frame analysis:

{
  "filename": "demo_video.mp4",
  "type": "video",
  "tags": ["product-demo", "software", "tutorial", "screen-recording", "presentation"]
}

&lt;span class="gu"&gt;## Example 2: Batch Processing with Videos&lt;/span&gt;

&lt;span class="gh"&gt;# Process all files, automatically handling videos&lt;/span&gt;
"Tag all my uploads including videos"

The skill will:
&lt;span class="p"&gt;1.&lt;/span&gt; Detect video files by extension (.mp4, .mov, .avi, .mkv)
&lt;span class="p"&gt;2.&lt;/span&gt; Run frame extraction script automatically
&lt;span class="p"&gt;3.&lt;/span&gt; Analyze extracted frames
&lt;span class="p"&gt;4.&lt;/span&gt; Tag video based on visual content
&lt;span class="p"&gt;5.&lt;/span&gt; Clean up temporary frames after analysis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Update Your SKILL.md
&lt;/h3&gt;

&lt;p&gt;Now update the main skill file to handle videos. Add this section after the "Analysis Guidelines":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Video File Handling&lt;/span&gt;

Videos cannot be read directly. For video files:
&lt;span class="p"&gt;
1.&lt;/span&gt; Detect video files by extension (.mp4, .mov, .avi, .mkv)
&lt;span class="p"&gt;2.&lt;/span&gt; Run the frame extraction script:
   &lt;span class="sb"&gt;`./scripts/extract_video_frames.sh uploads/[video_filename]`&lt;/span&gt;
&lt;span class="p"&gt;3.&lt;/span&gt; Analyze the extracted frames from &lt;span class="sb"&gt;`uploads/[video_name]/frame_*.jpg`&lt;/span&gt;
&lt;span class="p"&gt;4.&lt;/span&gt; Generate tags based on what you see across the frames
&lt;span class="p"&gt;5.&lt;/span&gt; After tagging, optionally remove the frames folder to save space

&lt;span class="gs"&gt;**Note**&lt;/span&gt;: Requires &lt;span class="sb"&gt;`ffmpeg`&lt;/span&gt; to be installed. If not available, tag videos as "video-content-unknown" and note this in output.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Now when you run the skill:&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="s2"&gt;"Tag my files including the demo video"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4033chxq0gzpjeptyg7x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4033chxq0gzpjeptyg7x.png" alt="Claude Code interface showing video processing workflow with frame extraction and tagging" width="800" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Claude Code automatically detecting a video file, extracting frames, and generating meaningful tags based on the visual content analysis.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;See &lt;code&gt;demo_video.mp4&lt;/code&gt; in uploads&lt;/li&gt;
&lt;li&gt;Recognize it's a video file&lt;/li&gt;
&lt;li&gt;Execute the bash script to extract frames&lt;/li&gt;
&lt;li&gt;Read and analyse the extracted frames&lt;/li&gt;
&lt;li&gt;Generate meaningful tags based on visual content&lt;/li&gt;
&lt;li&gt;Return structured results including the video&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Before (without scripts):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Error reading file: demo_video.mp4
Type: unknown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;After (with scripts):&lt;/strong&gt;&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;"filename"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"demo_video.mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tags"&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;"product-demo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"smart-home"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"aura-smart-hub"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"presentation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"technology"&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;h3&gt;
  
  
  Why This Matters
&lt;/h3&gt;

&lt;p&gt;This isn't just about videos. You've now learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scripts&lt;/strong&gt; extend what skills can do beyond Claude's built-in tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples files&lt;/strong&gt; document complex workflows for future reference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills can orchestrate&lt;/strong&gt; external tools, not just use MCP servers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The pattern scales&lt;/strong&gt; to PDFs requiring OCR, audio transcription, data processing, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're not limited to what Claude can do natively. You're teaching it how to use the right tool for each job.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Try this:&lt;/strong&gt; Drop a video in your uploads folder and run the skill. Watch it extract frames, analyse them, and return structured tags. Then look in &lt;code&gt;uploads/[video_name]/&lt;/code&gt; to see the frames it analysed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Just Changed
&lt;/h2&gt;

&lt;p&gt;You didn't just build a one-off automation. You gave Claude a reusable capability that works the same way every time you invoke it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before skills:
&lt;/h3&gt;

&lt;p&gt;❌ Open Claude&lt;br&gt;&lt;br&gt;
❌ Explain what you want&lt;br&gt;&lt;br&gt;
❌ Hope it understands&lt;br&gt;&lt;br&gt;
❌ Check if it worked&lt;br&gt;&lt;br&gt;
❌ Repeat tomorrow  &lt;/p&gt;

&lt;h3&gt;
  
  
  After skills:
&lt;/h3&gt;

&lt;p&gt;✅ "Tag my files"&lt;br&gt;&lt;br&gt;
✅ Done  &lt;/p&gt;

&lt;p&gt;The difference between those two experiences? That's what makes skills worth understanding.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Skills in Claude Code aren't a novelty—they're a different way of working with AI. Instead of asking "Can Claude help me with this?" you move to "Claude already knows how to do this."&lt;/p&gt;

&lt;p&gt;You're not building throwaway scripts. You're creating persistent, reliable workflows. Whether you're in engineering, marketing, ops, or somewhere in between, this unlocks something real.&lt;/p&gt;

&lt;p&gt;Now you've got the concept. You've seen the use-cases. You understand the MCP vs Skills distinction. And you've built something working that you can adapt.&lt;/p&gt;

&lt;p&gt;Next step? Drop in your screenshots, tweak the skill for your actual workflow, and start building things your team will actually use.&lt;/p&gt;

&lt;p&gt;Because the difference between "cool demo" and "thing I use every day" is reliability. And that's what skills give you.&lt;/p&gt;




&lt;p&gt;Read the full walkthrough and related posts on my blog: &lt;a href="https://gaul.dev/blogs/beyond-deadwoodworks-claude-code-skills" rel="noopener noreferrer"&gt;Beyond Deadwoodworks&lt;/a&gt;. It dives into Claude Code skills, MCP servers, and practical automations (auto-tagging, video handling) so you can move from brittle prompts to reliable workflows.&lt;/p&gt;

&lt;p&gt;Connect on &lt;a href="https://www.linkedin.com/in/tgaul" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; and share your perspective: what workflow would you hand over to Claude today?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>developertools</category>
      <category>productivity</category>
    </item>
    <item>
      <title>OpenAI Agent Builder: The No-Code Way to Put AI on Your Website</title>
      <dc:creator>Tim Gaul</dc:creator>
      <pubDate>Tue, 14 Oct 2025 10:19:22 +0000</pubDate>
      <link>https://forem.com/fourixai/openai-agent-builder-the-no-code-way-to-put-ai-on-your-website-4ack</link>
      <guid>https://forem.com/fourixai/openai-agent-builder-the-no-code-way-to-put-ai-on-your-website-4ack</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdibkmq1ck4c3icvddsoz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdibkmq1ck4c3icvddsoz.png" alt="Screenshot: OpenAI Agent Builder: The No-Code Way to Put AI on Your Website" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Most people think building an AI chatbot for your website requires a development team, a bunch of API calls, and weeks of testing. That was true six months ago. Then OpenAI launched Agent Builder, and suddenly you can build a working AI agent—one that reads from your knowledge base, follows your instructions, and deploys to your website—with minimal code in about 15 minutes.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is OpenAI Agent Builder?
&lt;/h2&gt;

&lt;p&gt;Agent Builder is OpenAI's visual tool for creating AI agents—basically custom ChatGPTs that can actually &lt;em&gt;do things&lt;/em&gt; instead of just suggesting them.&lt;/p&gt;

&lt;p&gt;Think of it like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Regular ChatGPT&lt;/strong&gt;: You ask a question, it gives you an answer based on training data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom GPTs&lt;/strong&gt;: You add instructions and documents, it remembers your context&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Builder&lt;/strong&gt;: You connect tools and build workflows, it can &lt;em&gt;take actions&lt;/em&gt; on your behalf&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the killer feature: Agent Builder gives you a GUI for connecting your agent to external services like Notion, Slack, Google Drive, or your own APIs. You're not writing integration code—you're just clicking checkboxes and configuring fields.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozrrepxjfv2ooeqsve6y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozrrepxjfv2ooeqsve6y.png" alt="Screenshot: Agent Builder main interface showing workflow canvas with multiple connected nodes" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's like Zapier met ChatGPT and had a very capable child.&lt;/p&gt;

&lt;p&gt;The visual workflow you see in Agent Builder isn't just for show—it's actually how you design your agent's behavior. Want your agent to check a database, process the results, then send a formatted message? Just drag those nodes onto the canvas and connect them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters (And Why I'm Writing About It)
&lt;/h2&gt;

&lt;p&gt;I've spent the last few months building AI automation workflows using ChatGPT custom actions, Claude MCP, and various API integrations. They all work, but they all have friction.&lt;/p&gt;

&lt;p&gt;Agent Builder removes most of that friction.&lt;/p&gt;

&lt;p&gt;You don't need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write authentication code&lt;/li&gt;
&lt;li&gt;Handle API responses&lt;/li&gt;
&lt;li&gt;Parse JSON&lt;/li&gt;
&lt;li&gt;Deal with rate limits&lt;/li&gt;
&lt;li&gt;Deploy infrastructure&lt;/li&gt;
&lt;li&gt;Manage secrets (well, mostly)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You just connect things through a visual interface and OpenAI handles the plumbing.&lt;/p&gt;

&lt;p&gt;That's transformative for small businesses and solo developers who want AI capabilities but don't want to become integration specialists.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We're Building Today
&lt;/h2&gt;

&lt;p&gt;To show you how Agent Builder actually works in practice, we're going to build a customer support chatbot for a fictional adventure travel company called TrekWise.&lt;/p&gt;

&lt;p&gt;Why this example? Because it demonstrates the three core capabilities of Agent Builder:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data retrieval&lt;/strong&gt;: Reading from external sources (we'll use Notion)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligent processing&lt;/strong&gt;: Understanding questions and finding relevant answers (RAG pattern)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User interface&lt;/strong&gt;: Deploying as a chat widget that anyone can interact with&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The company is fictional, but the demo is real and fully functional. You can see the working TrekWise chatbot at &lt;a href="https://trekwise-adventure-blueprint.pages.dev/" rel="noopener noreferrer"&gt;trekwise-adventure-blueprint.pages.dev&lt;/a&gt; and even clone the repository from &lt;a href="https://github.com/FourixAI/trekwise-adventure-blueprint" rel="noopener noreferrer"&gt;github.com/FourixAI/trekwise-adventure-blueprint&lt;/a&gt; to see how it all works under the hood.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20jtg9y7038napdpzj96.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20jtg9y7038napdpzj96.png" alt="Screenshot: Demo TrekWise website homepage showing adventure travel content" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By the end, you'll have a working agent that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reads from a Notion page containing FAQs and product info&lt;/li&gt;
&lt;li&gt;Answers customer questions intelligently&lt;/li&gt;
&lt;li&gt;Lives on your website as a clickable chat widget&lt;/li&gt;
&lt;li&gt;Updates automatically when you edit your Notion page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All built through Agent Builder's visual interface. Minimal code until the very last step (deploying to your site).&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture: How Agent Builder Thinks
&lt;/h2&gt;

&lt;p&gt;Before we start clicking buttons, let's understand what Agent Builder is actually doing under the hood. This will make the GUI make more sense.&lt;/p&gt;

&lt;p&gt;An agent in Agent Builder has three core components:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Instructions (The Brain)&lt;/strong&gt;&lt;br&gt;
This is where you tell your agent what its job is and how to behave. Think of it as writing a job description for an employee who's very literal and incredibly fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Tools (The Hands)&lt;/strong&gt;&lt;br&gt;
These are the actions your agent can take. Read from Notion? That's a tool. Send a Slack message? Tool. Create a calendar event? Tool. Agent Builder connects to external services through MCP (Model Context Protocol) servers like Zapier's, which is OpenAI's standardized way for AI agents to securely interact with external applications and APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Workflow (The Process)&lt;/strong&gt;&lt;br&gt;
This is the visual flowchart you build. It defines &lt;em&gt;how&lt;/em&gt; your agent uses its tools. Do you want it to check one source, or multiple? Should it clean up its output before showing the user? Do you need approval gates? You design this in the GUI by connecting nodes.&lt;/p&gt;

&lt;p&gt;The beautiful thing is you're never writing code to make these components work together. You're just configuring them through forms and dropdowns.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 1: Create Your Knowledge Base (Notion Setup)
&lt;/h2&gt;

&lt;p&gt;First, we need something for our agent to read from. I'm using Notion because it's easy to update and integrates cleanly with Agent Builder through Zapier.&lt;/p&gt;

&lt;p&gt;Head to Notion and create a new page. Call it whatever makes sense—I named mine "TrekWise Knowledge Base."&lt;/p&gt;

&lt;p&gt;Now structure your content clearly. Use headers, bullet points, and distinct sections. Agent Builder will read this entire page, so organization matters.&lt;/p&gt;

&lt;p&gt;Here's the structure I used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# TrekWise Adventure Travel Knowledge Base

## About TrekWise
We offer eco-conscious adventure travel expeditions to remote wilderness areas.

## Expeditions

### Patagonia Expedition
- Duration: 12 days
- Difficulty: Moderate to challenging
- Group size: 8-12 people
- What's included: All meals, camping gear, expert guides, permits
- Price: $3,200 per person
- Best time to visit: November to March

### Nepal Trekking Experience
[Similar structure]

### Tasmania Wilderness Journey
[Similar structure]

## Frequently Asked Questions

**What's included in the expedition price?**
All our expeditions include meals, camping equipment, expert guides, permits, and group gear. You'll need to bring personal items and clothing.

**Do I need previous hiking experience?**
Our Patagonia and Nepal treks require good fitness and some hiking experience. Tasmania is suitable for beginners with moderate fitness.

[More FAQs...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pro tip: Write answers in full sentences as if you're speaking to a customer. This gives your agent better source material to work with than bullet points alone.&lt;/p&gt;

&lt;p&gt;Once your page is ready, keep it open—you'll need to connect it to Zapier in a moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Connect Zapier to Your Apps
&lt;/h2&gt;

&lt;p&gt;Agent Builder can connect to external tools through MCP servers, and Zapier provides one of the most comprehensive MCP servers available. Think of Zapier as the universal translator between your agent and your apps, using OpenAI's MCP architecture to enable secure, standardized communication.&lt;/p&gt;

&lt;p&gt;Go to &lt;a href="https://zapier.com" rel="noopener noreferrer"&gt;zapier.com&lt;/a&gt; → &lt;strong&gt;App Connections&lt;/strong&gt; → &lt;strong&gt;Add Connection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Connect &lt;strong&gt;Notion&lt;/strong&gt;: When the permission screen appears, click &lt;strong&gt;Select pages&lt;/strong&gt; (not "allow all") and choose only your TrekWise knowledge base page. This scopes the permission tightly—your agent can only read this one page, nothing else in your Notion workspace.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ym1e5s1zkicn83rsi8h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ym1e5s1zkicn83rsi8h.png" alt="Screenshot: Notion permission screen with " width="800" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it for connections. Simple, right? Now Zapier knows which accounts your agent will use when it needs to read from Notion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Open Agent Builder and Create Your Agent
&lt;/h2&gt;

&lt;p&gt;This is where the magic happens. Head to &lt;a href="https://platform.openai.com" rel="noopener noreferrer"&gt;platform.openai.com&lt;/a&gt; and look for &lt;strong&gt;Agent Builder&lt;/strong&gt; in the sidebar.&lt;/p&gt;

&lt;p&gt;If you don't see it, you might need to enable it in your account settings—OpenAI has been rolling this out gradually over the past few months.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Create Agent&lt;/strong&gt; and you'll land on a blank canvas. This is your workspace.&lt;/p&gt;

&lt;h3&gt;
  
  
  Name Your First Agent: The RAG Agent
&lt;/h3&gt;

&lt;p&gt;Click to add your first node and name it something descriptive. I called mine &lt;strong&gt;"RAG Agent"&lt;/strong&gt; because its job is to retrieve information from our knowledge base (that's the "R" in RAG—Retrieval-Augmented Generation).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgaul.dev%2Fassets%2Fimages%2Fopenai-agent-builder-no-code-ai%2Frag_agent_creation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgaul.dev%2Fassets%2Fimages%2Fopenai-agent-builder-no-code-ai%2Frag_agent_creation.png" alt="Screenshot: Creating first agent node with name " width="800" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't worry about what RAG means technically yet—just know this agent's job is to read from Notion and find answers to questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Connect the Zapier MCP Server (Give Your Agent Tools)
&lt;/h2&gt;

&lt;p&gt;Now we're going to give this agent the ability to actually &lt;em&gt;do something&lt;/em&gt;. In Agent Builder, that means connecting tools.&lt;/p&gt;

&lt;p&gt;Click on your RAG Agent node → &lt;strong&gt;Tools&lt;/strong&gt; → &lt;strong&gt;+ Add Tool&lt;/strong&gt; → &lt;strong&gt;MCP Server&lt;/strong&gt; → &lt;strong&gt;Zapier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdzae4q774mtricjoqaj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdzae4q774mtricjoqaj.png" alt="Screenshot: Tool selection dropdown showing MCP Server → Zapier option" width="800" height="921"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll see a prompt asking for your Zapier API key. Click &lt;strong&gt;"Get API key"&lt;/strong&gt; and it'll redirect you to &lt;a href="https://mcp.zapier.com" rel="noopener noreferrer"&gt;mcp.zapier.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjg2d4fi4pnqo30zhwgug.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjg2d4fi4pnqo30zhwgug.png" alt="Screenshot: Zapier MCP dashboard showing API key" width="779" height="649"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy that key and paste it back into Agent Builder. Hit &lt;strong&gt;Connect&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now Agent Builder can talk to Zapier, which means it can talk to any app you connected in Step 2.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure the Notion Tool in Zapier
&lt;/h3&gt;

&lt;p&gt;This is the specific capability we're adding: the ability to read your Notion page.&lt;/p&gt;

&lt;p&gt;Go back to the Zapier MCP dashboard where you got your API key. This is where you'll configure the Notion integration:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnas7146vpxevvf4aovy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnas7146vpxevvf4aovy.png" alt="Screenshot: Zapier MCP dashboard with tool configuration" width="800" height="686"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;Notion&lt;/strong&gt; → &lt;strong&gt;Get Page and Children&lt;/strong&gt; and configure it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PageId&lt;/strong&gt;: Click "Set a specific value" → Select your TrekWise knowledge base page from the dropdown&lt;/li&gt;
&lt;li&gt;Leave everything else as default&lt;/li&gt;
&lt;li&gt;Hit &lt;strong&gt;Save&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Find the toggle that says &lt;strong&gt;"Require approval for this tool"&lt;/strong&gt; and turn it &lt;strong&gt;OFF&lt;/strong&gt;. You want your agent to automatically read from Notion when needed, not ask permission every time.&lt;/p&gt;

&lt;p&gt;Now go back to Agent Builder and make sure &lt;strong&gt;only&lt;/strong&gt; the &lt;code&gt;notion_get_page_and_children&lt;/code&gt; tool is selected for your agent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbiwxb6twezg5gewdaw0i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbiwxb6twezg5gewdaw0i.png" alt="Screenshot: Notion tool configuration showing pageId field set to TrekWise page" width="800" height="996"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What just happened? You gave your agent a superpower: whenever it needs information, it can now pull up your entire Notion page and search through it. No code. Just configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Write Your Agent's Instructions (The Critical Part)
&lt;/h2&gt;

&lt;p&gt;This is where you teach your agent &lt;em&gt;how&lt;/em&gt; to think. The instructions you write here determine how your agent behaves, how it uses its tools, and how it responds to users.&lt;/p&gt;

&lt;p&gt;Click on the &lt;strong&gt;Instructions&lt;/strong&gt; field in your RAG Agent and paste something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are the TrekWise knowledge assistant.

Your job: Answer customer questions about TrekWise expeditions using information from the TrekWise knowledge base.

How to work:
1. When a user asks a question, use the tool `notion_get_page_and_children` to read the TrekWise knowledge base (page ID already configured)
2. Treat the returned text as your complete source of truth
3. If the information is in that page, summarize it clearly and naturally
4. If the answer is NOT in the page, say politely: "I don't have that information in our guide yet, but I'd be happy to help with something else!"
5. Never mention Notion, tools, or internal processes—speak like a TrekWise team member
6. Keep answers short and confident
7. Use bullet points for lists

Example:
User asks: "Tell me about the Patagonia Expedition"
→ You read the knowledge base, find the Patagonia section, and respond with the key details (duration, difficulty, price, what's included, etc.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These instructions are doing a lot of heavy lifting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They tell the agent &lt;em&gt;which tool&lt;/em&gt; to use (the Notion reader)&lt;/li&gt;
&lt;li&gt;They define &lt;em&gt;how&lt;/em&gt; to use it (treat it as source of truth)&lt;/li&gt;
&lt;li&gt;They set &lt;em&gt;tone&lt;/em&gt; (speak like a team member, not a robot)&lt;/li&gt;
&lt;li&gt;They handle &lt;em&gt;edge cases&lt;/em&gt; (what to say when you don't know)&lt;/li&gt;
&lt;li&gt;They give &lt;em&gt;examples&lt;/em&gt; (so the agent understands the pattern)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the brain of your operation. The better your instructions, the better your agent performs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure Display Settings
&lt;/h3&gt;

&lt;p&gt;Two quick toggles at the bottom of your agent configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Display response in chat&lt;/strong&gt;: Turn this &lt;strong&gt;OFF&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Show search sources&lt;/strong&gt;: Turn this &lt;strong&gt;OFF&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are debugging features. During testing they're useful, but customers don't need to see "Tool called: notion_get_page_and_children" when they ask about pricing. They just want the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Add a Display Agent (Polish the Output)
&lt;/h2&gt;

&lt;p&gt;Here's a technique I picked up from building these agents: the raw output from your RAG agent sometimes includes technical debris—tool traces, JSON snippets, metadata tags.&lt;/p&gt;

&lt;p&gt;So add a second agent whose only job is to clean that up.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;+ Add Agent&lt;/strong&gt; in your workflow canvas and name it &lt;strong&gt;"Display Agent"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Connect it to your RAG Agent—this agent receives the RAG agent's output and processes it.&lt;/p&gt;

&lt;p&gt;In the Display Agent's instructions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are the Display Agent. Your job is to take the RAG Agent's output and present it cleanly to the user.

What to do:
1. Receive the previous agent's raw output
2. Remove any internal debug info, tool names, JSON wrappers, or technical metadata
3. Add natural conversational framing like:
   - "Here's what I found about that..."
   - "Based on our TrekWise guide..."
4. If the RAG agent says "not found", convert it to: "I don't have that info in our guide yet. Can I help with something else?"
5. NEVER call any tools yourself—just clean up and return the text
6. Output exactly what you want the customer to see

Your output is what the customer reads. Make it clean, friendly, and natural.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6z3nvwkl2ch5vedezdxr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6z3nvwkl2ch5vedezdxr.png" alt="Screenshot: Adding second agent node to workflow" width="800" height="1154"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set this agent as your &lt;strong&gt;End Node&lt;/strong&gt;—the final step before output reaches the user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fylig60pwfr2pbjy4oi3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fylig60pwfr2pbjy4oi3n.png" alt="Screenshot: Workflow canvas showing RAG Agent → Display Agent → End Node" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now your workflow is: User question → RAG Agent (reads Notion) → Display Agent (cleans output) → User sees polished answer.&lt;/p&gt;

&lt;p&gt;This two-agent pattern is optional but makes a huge difference in output quality. The RAG agent focuses on accuracy, the Display agent focuses on presentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Test Your Agent in Preview Mode
&lt;/h2&gt;

&lt;p&gt;Before deploying this to your website, let's make sure it actually works.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Preview&lt;/strong&gt; in the top-right corner of Agent Builder.&lt;/p&gt;

&lt;p&gt;A chat interface appears. Try some questions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Tell me about the Patagonia Expedition"
"What's included in the price?"
"Do I need hiking experience for Nepal?"
"How much does Tasmania cost?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1258fapvzcxo4q6hv8bz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1258fapvzcxo4q6hv8bz.png" alt="Screenshot: Preview chat showing sample conversation with agent responding correctly" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Watch what happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your agent receives the question&lt;/li&gt;
&lt;li&gt;It calls the Notion tool to read your knowledge base&lt;/li&gt;
&lt;li&gt;It finds the relevant section&lt;/li&gt;
&lt;li&gt;It formats a clean answer&lt;/li&gt;
&lt;li&gt;The Display Agent polishes it&lt;/li&gt;
&lt;li&gt;You see the final response&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If something feels off—maybe the tone is too formal, or it's not finding answers correctly—go back and tweak your instructions. Agent Builder makes iteration fast: edit → save → test → repeat.&lt;/p&gt;

&lt;p&gt;This is where you'll spend most of your time: testing edge cases and refining behavior. The good news is you can do this all in the GUI without touching code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8: Publish Your Workflow
&lt;/h2&gt;

&lt;p&gt;Once you're happy with how your agent responds, it's time to make it real.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Publish&lt;/strong&gt; in the top-right corner.&lt;/p&gt;

&lt;p&gt;Give your workflow a memorable name—I called mine &lt;strong&gt;"TrekWise Chatbot"&lt;/strong&gt;—and hit &lt;strong&gt;Publish&lt;/strong&gt; to confirm.&lt;/p&gt;

&lt;p&gt;OpenAI will deploy your agent and generate the necessary credentials for embedding it on your website.&lt;/p&gt;

&lt;p&gt;Your agent is now live and ready to be added to a web page. This is the moment Agent Builder shines: you just built a working AI system without writing a single line of integration code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 9: Deploy ChatKit to Your Website
&lt;/h2&gt;

&lt;p&gt;Now comes the payoff: putting your agent on your actual website as a chat widget.&lt;/p&gt;

&lt;p&gt;OpenAI calls this embedding system &lt;strong&gt;ChatKit&lt;/strong&gt;. It's a pre-built chat interface (that little bubble in the corner of websites) that connects directly to your published agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure Your Domain
&lt;/h3&gt;

&lt;p&gt;In Agent Builder, click &lt;strong&gt;ChatKit&lt;/strong&gt; → &lt;strong&gt;Add domain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enter your website's domain. In my case, I deployed TrekWise to GitHub Pages, so it's &lt;code&gt;fourixai.github.io&lt;/code&gt;. If you have a custom domain, use that.&lt;/p&gt;

&lt;p&gt;Hit &lt;strong&gt;Generate key&lt;/strong&gt; and copy the key that appears. It'll look like &lt;code&gt;domain_pk_68ec696807xxxxxxxxxxxxxxxxxxxxxxxxxxx5c73520cd16&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This key is how ChatKit knows your website is authorized to use your agent. Keep it handy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add the ChatKit Script to Your HTML
&lt;/h3&gt;

&lt;p&gt;Open your website's main HTML file (usually &lt;code&gt;index.html&lt;/code&gt;) and add this single script tag inside the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; section:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script
  &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.platform.openai.com/deployments/chatkit/chatkit.js"&lt;/span&gt;
  &lt;span class="na"&gt;async&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the core integration - just the script tag. ChatKit is now loaded on your site and will automatically look for your published agent using the domain key you generated.&lt;/p&gt;

&lt;p&gt;Save and deploy your site. The ChatKit script will automatically render a chat bubble on your page, or you can customize how and where the chat appears.&lt;/p&gt;

&lt;h3&gt;
  
  
  If You're Using React or Another Framework
&lt;/h3&gt;

&lt;p&gt;Agent Builder also provides framework-specific packages. For React:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @openai/chatkit-react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then import and add the component to your page wherever you want it to appear:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ChatKit&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@openai/chatkit-react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;MyPage&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Welcome to TrekWise&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Your adventure travel content here...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ChatKit&lt;/span&gt;
        &lt;span class="na"&gt;domainKey&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"your-domain-key-here"&lt;/span&gt;
        &lt;span class="na"&gt;workflowId&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"your-workflow-id-here"&lt;/span&gt;
      &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;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;This gives you complete control over where and how the chat widget appears on your page. Full docs at &lt;a href="https://platform.openai.com/docs/guides/chatkit" rel="noopener noreferrer"&gt;platform.openai.com/docs/guides/chatkit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The GUI setup is identical—you're still building your agent in Agent Builder. The only difference is how you embed the chat widget on your page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4eqnt0d9ed0lin90pht.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4eqnt0d9ed0lin90pht.png" alt="Screenshot: TrekWise website with chat bubble visible in corner" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 10: Handle Authentication (Cloudflare Pages Example)
&lt;/h2&gt;

&lt;p&gt;If you're hosting on a static platform like Cloudflare Pages, GitHub Pages, or Netlify, there's one more piece: session management.&lt;/p&gt;

&lt;p&gt;ChatKit needs to create a secure session for each visitor without exposing your OpenAI API key to the public internet. Different platforms handle this differently, but the pattern is the same: a serverless function that acts as a secure middleman.&lt;/p&gt;

&lt;p&gt;Here's the Cloudflare Pages version. Create a folder structure: &lt;code&gt;/functions/chatkit/session.ts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Paste this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;PagesFunction&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@cloudflare/workers-types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Env&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;WORKFLOW_ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;corsHeaders&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Access-Control-Allow-Origin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Access-Control-Allow-Headers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type, Authorization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Access-Control-Allow-Methods&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST, OPTIONS&lt;/span&gt;&lt;span class="dl"&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;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;onRequest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PagesFunction&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Env&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OPTIONS&lt;/span&gt;&lt;span class="dl"&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;204&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;corsHeaders&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Method Not Allowed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;405&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;headers&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="nx"&gt;corsHeaders&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&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;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;WORKFLOW_ID&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Server missing OpenAI configuration.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;corsHeaders&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;openaiRes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.openai.com/v1/chatkit/sessions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OpenAI-Beta&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chatkit_beta=v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;WORKFLOW_ID&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randomUUID&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;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;openaiRes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;errorText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;openaiRes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;errorText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;openaiRes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;corsHeaders&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;client_secret&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;openaiRes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;client_secret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;client_secret&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;status&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="na"&gt;headers&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="nx"&gt;corsHeaders&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cache-Control&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no-store&lt;/span&gt;&lt;span class="dl"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What this does&lt;/strong&gt;: It creates a secure session for each website visitor. Think of it as a bouncer who checks credentials server-side and issues temporary passes. Visitors get access to chat with your agent, but they never see your API keys.&lt;/p&gt;

&lt;h3&gt;
  
  
  Set Environment Variables
&lt;/h3&gt;

&lt;p&gt;Go to Cloudflare Dashboard → Workers &amp;amp; Pages → your project → Settings → Environment Variables&lt;/p&gt;

&lt;p&gt;Add two variables:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;OPENAI_API_KEY&lt;/strong&gt;: Your OpenAI API key (mark as Secret/encrypted)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WORKFLOW_ID&lt;/strong&gt;: Your workflow ID from Agent Builder&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Deploy again, and your chat widget will now work properly with authenticated sessions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwvj7dbezv3bnecjsq2p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwvj7dbezv3bnecjsq2p.png" alt="Screenshot: Final TrekWise chatbot in action on the website" width="550" height="716"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results: What Actually Works
&lt;/h2&gt;

&lt;p&gt;After going through this process, here's what surprised me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The knowledge base updates automatically.&lt;/strong&gt; When I change pricing in Notion, the chatbot instantly has the new information. No redeploying, no retraining—just edit and it's live.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The chat interface is intuitive.&lt;/strong&gt; The demo shows how people prefer asking questions in natural language rather than hunting through FAQ pages. The chat widget makes finding information frictionless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It handles unexpected questions gracefully.&lt;/strong&gt; When someone asks about something not in the knowledge base (like "Do you offer trips to Antarctica?"), the agent politely says it doesn't have that information rather than hallucinating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The two-agent pattern was worth it.&lt;/strong&gt; The Display Agent consistently removes technical artifacts and makes responses feel more natural.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for Businesses
&lt;/h2&gt;

&lt;p&gt;Agent Builder changes the calculation for small businesses:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;: Custom chatbot = $5,000-20,000 development project + monthly maintenance&lt;br&gt;
&lt;strong&gt;After&lt;/strong&gt;: Working AI agent = 15 minutes setup + OpenAI usage fees (typically pennies per interaction)&lt;/p&gt;

&lt;p&gt;More importantly, it puts the power back in the hands of people who actually know the business. You don't need to translate your knowledge base into JSON schemas or API specifications. You just write it like you'd explain it to a new employee, and the agent figures out the rest.&lt;/p&gt;

&lt;p&gt;The real breakthrough isn't technical—it's that your subject matter experts can now build AI tools without becoming developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations and Considerations
&lt;/h2&gt;

&lt;p&gt;Agent Builder is still in its infancy, and it's important to understand where it shines and where it has limitations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's quite basic in functionality.&lt;/strong&gt; Agent Builder doesn't offer the massive amount of features you'd find in mature automation platforms like n8n or Zapier. Currently missing features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retry mechanisms for failed tool calls&lt;/li&gt;
&lt;li&gt;Custom node creation&lt;/li&gt;
&lt;li&gt;Advanced error handling&lt;/li&gt;
&lt;li&gt;Advance loop constructs&lt;/li&gt;
&lt;li&gt;Complex data transformation&lt;/li&gt;
&lt;li&gt;Triggers that aren't chat-based&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, Agent Builder is actively evolving and OpenAI is regularly adding new capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But it's much closer to the LLM.&lt;/strong&gt; What Agent Builder lacks in features, it makes up for in proximity to GPT. The integration feels more natural and the reasoning capabilities are more powerful because you're working directly with OpenAI's models rather than going through multiple layers of abstraction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It can be deployed very quickly.&lt;/strong&gt; While we ended up with a few lines of code including the required backend authentication function, the deployment process is still remarkably fast compared to traditional development approaches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's still dependent on your knowledge base quality.&lt;/strong&gt; Garbage in, garbage out. The agent can only work with what you give it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complex reasoning may hit limits.&lt;/strong&gt; If customers need multi-step comparisons or calculations that aren't explicitly in your documents, the agent might struggle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You need to monitor conversations.&lt;/strong&gt; Like any AI system, it can occasionally misinterpret questions or provide incomplete answers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage costs add up.&lt;/strong&gt; While typically cheap, high-traffic sites should monitor their OpenAI API usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;Agent Builder represents a fundamental shift in how we think about AI deployment:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From&lt;/strong&gt;: Building custom integrations and managing infrastructure&lt;br&gt;
&lt;strong&gt;To&lt;/strong&gt;: Configuring workflows through visual interfaces&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From&lt;/strong&gt;: Technical teams implementing AI features&lt;br&gt;
&lt;strong&gt;To&lt;/strong&gt;: Business experts directly creating AI tools&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From&lt;/strong&gt;: Long development cycles and testing phases&lt;br&gt;
&lt;strong&gt;To&lt;/strong&gt;: Rapid prototyping and immediate deployment&lt;/p&gt;

&lt;p&gt;This democratization of AI building is happening across the board. Tools like Agent Builder, Zapier, and others are removing the technical barriers that kept AI capabilities locked away in engineering departments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it yourself!&lt;/strong&gt; Visit the live demo at &lt;a href="https://trekwise-adventure-blueprint.pages.dev/" rel="noopener noreferrer"&gt;trekwise-adventure-blueprint.pages.dev&lt;/a&gt; to see the TrekWise chatbot in action, or clone the repository from &lt;a href="https://github.com/FourixAI/trekwise-adventure-blueprint" rel="noopener noreferrer"&gt;github.com/FourixAI/trekwise-adventure-blueprint&lt;/a&gt; to explore the complete implementation.&lt;/p&gt;

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

&lt;p&gt;Once you have this basic pattern working, you can expand it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-source knowledge bases&lt;/strong&gt;: Connect to multiple Notion pages, Google Docs, or databases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handoff to human agents&lt;/strong&gt;: Add logic to escalate complex questions to real staff&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proactive engagement&lt;/strong&gt;: Trigger the chat based on user behavior&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration with booking systems&lt;/strong&gt;: Let customers check availability or make reservations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics and feedback&lt;/strong&gt;: Track what questions people ask most frequently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The visual workflow interface makes it easy to experiment with these capabilities without rewriting code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Agent Builder isn't just another AI tool—it's a glimpse at how AI deployment should work. The fact that I can build a working customer support system in 15 minutes, connect it to my existing knowledge sources, and deploy it with just a few lines of code (including the a small backend authentication function) shows how far we've come.&lt;/p&gt;

&lt;p&gt;The low-code approach doesn't just make things faster—it makes them more accessible. Your marketing team can build a product recommendation bot. Your HR department can create an onboarding assistant. Your support team can build a triage system.&lt;/p&gt;

&lt;p&gt;And they can do it all without waiting for the development queue.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The most powerful AI tools aren't the ones with the most features—they're the ones that turn expertise into automation. When the people who live and breathe these problems can directly build the solutions, that's when AI stops being impressive and starts being indispensable.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Want to dive deeper into AI automation and low-code development? I share practical experiments, implementation details, and real-world examples over at &lt;a href="https://gaul.dev" rel="noopener noreferrer"&gt;gaul.dev&lt;/a&gt;. Come join the conversation about building the future of AI-powered workflows.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>lowcode</category>
      <category>openai</category>
    </item>
    <item>
      <title>Part 2: The Upgrade That Turns Claude Into a Persistent Workspace Operator</title>
      <dc:creator>Tim Gaul</dc:creator>
      <pubDate>Thu, 09 Oct 2025 07:23:47 +0000</pubDate>
      <link>https://forem.com/fourixai/part-2-the-upgrade-that-turns-claude-into-a-persistent-workspace-operator-55c8</link>
      <guid>https://forem.com/fourixai/part-2-the-upgrade-that-turns-claude-into-a-persistent-workspace-operator-55c8</guid>
      <description>&lt;p&gt;&lt;em&gt;"GPTs made AI automation possible. Claude + Zapier MCP made it effortless."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is Part 2 of my series on building practical AI assistants. If you haven’t built the Part 1 foundation yet, start there: &lt;a href="https://dev.to/fourixai/part-1-the-5-minute-setup-that-turns-chatgpt-into-your-real-assistant-5gai"&gt;Part 1: The 5-Minute Setup That Turns ChatGPT Into Your Real Assistant&lt;/a&gt;. For the broader context, see the series hub: &lt;a href="https://dev.to/fourixai/from-chatgpt-prototype-to-real-ai-assistant-how-i-automated-my-daily-planning-1ebi"&gt;From ChatGPT Prototype to Real AI Assistant: How I Automated My Daily Planning&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This post follows naturally from &lt;strong&gt;&lt;a href="https://dev.to/fourixai/part-1-the-5-minute-setup-that-turns-chatgpt-into-your-real-assistant-5gai"&gt;Part 1: The 5-Minute Setup That Turns ChatGPT Into Your Real Assistant&lt;/a&gt;&lt;/strong&gt;, where we built a custom GPT that could actually write to your calendar. If you haven't read Part 1, the quick version is this: we solved the copy-paste problem by connecting ChatGPT to Zapier so it could create calendar events automatically instead of just suggesting them.&lt;/p&gt;

&lt;p&gt;That GPT setup is genuinely useful. It works. Lots of people are using it successfully right now.&lt;/p&gt;

&lt;p&gt;But here's what I realized after living with it for a few weeks: custom GPTs are the &lt;em&gt;old way&lt;/em&gt; of doing AI automation. They get the job done, but they're not nearly as flexible or powerful as what's possible today.&lt;/p&gt;

&lt;p&gt;Think of custom GPTs like the early iPhone—revolutionary for its time, but once you've used an iPhone 15, you notice all the limitations you used to tolerate.&lt;/p&gt;

&lt;p&gt;The new way? &lt;strong&gt;Claude with Zapier MCP&lt;/strong&gt;. Same basic idea, but with a fundamental architectural difference that changes everything about how your assistant actually works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5jan7k2bunp5pomzwnh0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5jan7k2bunp5pomzwnh0.png" alt="Claude + Zapier MCP setup showing Notion / Outlook / Slack orchestration" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why GPTs Feel Like the Old Way
&lt;/h2&gt;

&lt;p&gt;After using that ChatGPT scheduling assistant for a few weeks, I started noticing the cracks. Nothing broke exactly—it just felt... constrained.&lt;/p&gt;

&lt;p&gt;Every morning I'd open a new chat, enable the Outlook connector, and paste in my task list from wherever I'd scribbled it down. The assistant would check my calendar, build a smart schedule, and create the events. Mission accomplished.&lt;/p&gt;

&lt;p&gt;But here's what kept bugging me: my task list lived in Notion with all this beautiful metadata—priorities, time estimates, energy levels, due dates. ChatGPT couldn't see any of that. So I'd manually copy tasks over in a format it could understand, losing all the context in translation.&lt;/p&gt;

&lt;p&gt;It was like having an assistant who could only read sticky notes while all my actual work lived in a sophisticated database.&lt;/p&gt;

&lt;p&gt;And the connector situation? Every single morning I had to enable Outlook access again. Click, authorize, wait. It's only a few seconds, but when you're doing it daily, those seconds add up to frustration.&lt;/p&gt;

&lt;p&gt;The bigger issue wasn't the friction—it was the flexibility. With GPTs, you're locked into OpenAI's integration system. They decide which apps get connectors. They control how those connectors work. Want to connect to Notion? Hope they build it. Want to pull from a custom database? Good luck.&lt;/p&gt;

&lt;p&gt;GPTs solved the automation problem beautifully, but they left me wanting more control.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed When I Discovered Claude MCP
&lt;/h2&gt;

&lt;p&gt;I kept hearing about Claude's "MCP" thing—Model Context Protocol. The name sounds intimidating, like something you'd need a computer science degree to understand. But when I finally tried it, I realized it's just a fancier version of what we built in Part 1, except with one crucial difference: &lt;strong&gt;persistence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With ChatGPT's approach, you're granting permissions every time. With Claude MCP, you're setting up permanent abilities your assistant can reuse across every conversation.&lt;/p&gt;

&lt;p&gt;Think of it like this: ChatGPT is like having a temp worker show up each day. You have to show them where everything is, give them permissions to use the tools, explain the routine. They do great work! But tomorrow, you start over.&lt;/p&gt;

&lt;p&gt;Claude with MCP is like having an actual employee. You give them access once, show them your systems, and they remember. They already know where your tasks live, how your calendar works, and how you like things done.&lt;/p&gt;

&lt;p&gt;Here's what my morning looks like now: I open Claude and type "build today's schedule." That's it. No connector-enabling. No task-list-pasting. No permission-granting dance.&lt;/p&gt;

&lt;p&gt;Claude already knows how to pull my tasks from Notion, check my Outlook calendar, build a conflict-free schedule, and send me a Slack digest. It just... does it.&lt;/p&gt;

&lt;p&gt;That shift from "assistant I have to manage" to "operator I can trust" is what this guide is about.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You're About to Build
&lt;/h2&gt;

&lt;p&gt;By the end of this, you'll have created something that feels a bit like magic but is actually just good engineering:&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Notion Tasks&lt;/strong&gt; database that captures everything about your work—not just what needs doing, but how long it takes, how much energy it requires, and when it's due.&lt;/p&gt;

&lt;p&gt;A private &lt;strong&gt;Zapier MCP server&lt;/strong&gt; you completely control, with a secret URL you can rotate anytime. Think of this as your assistant's permanent ID badge for accessing your workspace.&lt;/p&gt;

&lt;p&gt;That server will expose exactly four abilities: query your Notion tasks, read your Outlook calendar, create calendar events, and send you Slack messages. Nothing more, nothing less.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude&lt;/strong&gt; connected to that server, so those abilities are always available across every chat you ever have. No re-authenticating. No re-explaining. Just permanent, safe access to the tools your assistant needs to actually help.&lt;/p&gt;

&lt;p&gt;The beautiful part? You can build all of this without writing a single line of code. Just clear permissions and a simple playbook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1 — Create Your Notion Task Database (Let AI Do the Work)
&lt;/h2&gt;

&lt;p&gt;Here's where we start getting smarter about how we work. Instead of treating your tasks like a dumb checklist, we're going to build a database that captures the &lt;em&gt;context&lt;/em&gt; around each task.&lt;/p&gt;

&lt;p&gt;Open Notion, click anywhere, and look for the "Build with AI" button. When the chat pops up, paste this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build a Notion database schema for managing tasks.
The database should have columns/properties:

Title (task name)
Due Date (date)
Status (select: To Do / In Progress / Done)
Estimate (mins) (number)
Priority (select: Low / Medium / High)
Energy Tag (select: Creative / Admin / Heavy / Light)
Notion URL (link/URL property)

After creating the database, set up an action to add new task items into this database with those fields.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Watch Notion's AI build your database in real-time. It's oddly satisfying.&lt;/p&gt;

&lt;p&gt;Here's why this matters more than you might think: when your assistant can see that "Write Q4 strategy deck" takes 90 minutes, is high priority, and requires creative energy, it doesn't just slot it into the first available hole in your calendar. It can put it in the morning when you're fresh, give it a contiguous block instead of chopping it up, and make sure it happens before the deadline.&lt;/p&gt;

&lt;p&gt;Context turns scheduling from Tetris into strategy.&lt;/p&gt;

&lt;p&gt;Once Notion finishes building the database, add a couple of sample tasks so you can see how it looks. Make one high-priority creative work, one low-priority admin task. You'll thank yourself later when you're testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkri05vjyyas09lfk9ai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkri05vjyyas09lfk9ai.png" alt="Notion AI building a structured Tasks database with priority, estimate, energy, and due date fields" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2 — Connect Your Apps (and Actually Give Permission This Time)
&lt;/h2&gt;

&lt;p&gt;Head to &lt;strong&gt;Zapier → App Connections&lt;/strong&gt; and connect three accounts: Microsoft Outlook, Slack, and Notion.&lt;/p&gt;

&lt;p&gt;The Outlook and Slack connections are straightforward—add connection and just sign in and approve. But Notion has a gotcha that trips everyone up the first time.&lt;/p&gt;

&lt;p&gt;When you connect Notion, it'll ask what pages Zapier can access. This is where most people click "Allow access to all pages" because they're in a hurry. Don't do that.&lt;/p&gt;

&lt;p&gt;Instead, click &lt;strong&gt;Select pages&lt;/strong&gt; and choose only your &lt;strong&gt;Tasks&lt;/strong&gt; database. Nothing else.&lt;/p&gt;

&lt;p&gt;Why this matters: You're building an automated system that will touch your workspace every day. Being specific about permissions isn't paranoia—it's good hygiene. If something weird happens (spoiler: nothing will), your assistant can only mess with your task list, not your entire Notion workspace.&lt;/p&gt;

&lt;p&gt;Think of it like giving someone the key to your garage, not your whole house.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffll56nakm8dygcpb3cce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffll56nakm8dygcpb3cce.png" alt="Scoped Notion permission dialog with only the Tasks database selected" width="516" height="665"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 — Create Your Zapier MCP Server (Your Assistant's Permanent Badge)
&lt;/h2&gt;

&lt;p&gt;Alright, this is where things get interesting. We're about to create what Zapier calls an "MCP server," which sounds incredibly technical but is actually just a secure control room for your assistant.&lt;/p&gt;

&lt;p&gt;Here's what MCP really means in plain English: it's a system that decides what your AI can and can't do. You tell it "Claude can read my Notion database" or "Claude can send me a Slack message," and Zapier enforces those rules. Nothing more, nothing less.&lt;/p&gt;

&lt;p&gt;Every MCP server lives under your Zapier account, which means you own the keys. You decide which actions are visible. You can revoke or rotate access any time with a single click.&lt;/p&gt;

&lt;p&gt;When we "configure tools" in a minute, we're literally choosing which switches Claude can flip. It's like being a building manager who decides which rooms each employee can unlock.&lt;/p&gt;

&lt;p&gt;Head over to &lt;a href="https://mcp.zapier.com" rel="noopener noreferrer"&gt;mcp.zapier.com&lt;/a&gt; and click &lt;strong&gt;+ New MCP Server&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Pick &lt;strong&gt;Claude&lt;/strong&gt; as your client and name your server something memorable. I went with "WorkspaceOperator" because it sounds way cooler than "my-schedule-thing."&lt;/p&gt;

&lt;p&gt;Hit &lt;strong&gt;Create&lt;/strong&gt; and you'll land on a screen with three tabs: Configure, Connect, and History.&lt;/p&gt;

&lt;p&gt;Click into the &lt;strong&gt;Connect&lt;/strong&gt; tab and you'll see your &lt;strong&gt;Integration URL&lt;/strong&gt;. This is your secret key—treat it like a password. Anyone with this URL could theoretically use your assistant's abilities, so don't go pasting it in public Slack channels.&lt;/p&gt;

&lt;p&gt;The beautiful thing? See that &lt;strong&gt;Rotate secret&lt;/strong&gt; button right below it? If you ever want to revoke access completely, click that and the old URL stops working instantly. Your assistant gets locked out until you give it the new one.&lt;/p&gt;

&lt;p&gt;This is the safety net. You're in control. Always.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3lbcl6fk6nnx29aezsc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3lbcl6fk6nnx29aezsc.png" alt="Zapier MCP Connect tab with Integration URL and Rotate Secret control" width="740" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4 — Configure Your Tools (This Is Where Everything Clicks)
&lt;/h2&gt;

&lt;p&gt;This is the heart of the whole setup. Everything you've done so far—building the Notion database, connecting your apps, creating the MCP server—was prep work. This step is where you actually decide what your assistant can do.&lt;/p&gt;

&lt;p&gt;Think of your Zapier MCP server as an empty control console right now. No buttons, no permissions, nothing Claude can actually touch. We're about to add exactly four abilities, and only these four. If it's not in this list, Claude can't do it.&lt;/p&gt;

&lt;p&gt;Click over to the &lt;strong&gt;Configure Tools&lt;/strong&gt; tab. This is where you'll connect your existing app accounts (Notion, Outlook, Slack) and choose the specific actions Claude will be able to use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add Your Notion Tools (The Brain)
&lt;/h3&gt;

&lt;p&gt;We'll start by letting Claude read from and optionally write to your Tasks database.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Add Tool → Notion → Query Database (Advanced)&lt;/strong&gt; and then expand Notion, then click the three dots next to &lt;em&gt;**Query Database (Advanced)&lt;/em&gt;* and &lt;strong&gt;configure&lt;/strong&gt; like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Account:&lt;/strong&gt; your Notion connection (this is pre-filled)&lt;br&gt;
&lt;strong&gt;Database:&lt;/strong&gt; &lt;strong&gt;Set a specific value for this field&lt;/strong&gt; and select the &lt;strong&gt;Tasks&lt;/strong&gt; database you created earlier&lt;/p&gt;

&lt;p&gt;Leave everything else as default.&lt;/p&gt;
&lt;h3&gt;
  
  
  Add Your Outlook Tools (The Schedule)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Outlook → Get Calendar Events in Date Range&lt;/strong&gt; and &lt;strong&gt;configure&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Account:&lt;/strong&gt; your Outlook account (this is pre-filled)&lt;br&gt;
&lt;strong&gt;Calendar:&lt;/strong&gt; &lt;strong&gt;Set a specific value for this field&lt;/strong&gt; and select your main working calendar&lt;/p&gt;

&lt;p&gt;Leave everything else as default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Outlook → Create Event&lt;/strong&gt; and &lt;strong&gt;configure&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Account:&lt;/strong&gt; your Outlook account (this is pre-filled)&lt;br&gt;
&lt;strong&gt;Calendar:&lt;/strong&gt; &lt;strong&gt;Set a specific value for this field&lt;/strong&gt; and select your main working calendar&lt;br&gt;
&lt;strong&gt;Show me as:&lt;/strong&gt; free (this is optional)&lt;/p&gt;

&lt;p&gt;Leave everything else as default.&lt;/p&gt;
&lt;h3&gt;
  
  
  Add Your Slack Tool (The Messenger)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Slack → Send Direct Message&lt;/strong&gt; and &lt;strong&gt;configure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Account:&lt;/strong&gt; Slack&lt;br&gt;
&lt;strong&gt;To Username:&lt;/strong&gt; &lt;strong&gt;Set a specific value for this field&lt;/strong&gt; and select your name&lt;/p&gt;

&lt;p&gt;Leave everything else as default.&lt;/p&gt;

&lt;p&gt;Once added, enable all four tools (1 Notion, 2 Outlook, 1 Slack).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa9lmj1qjdvgspntotpkf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa9lmj1qjdvgspntotpkf.png" alt="MCP Configure Tools panel showing four enabled abilities: Notion (query), Outlook (read/create), Slack (DM)" width="732" height="876"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 5 — Connect Claude to Your MCP Server (The Handshake)
&lt;/h2&gt;

&lt;p&gt;In Claude (web or desktop): click your user icon → &lt;strong&gt;Settings → Connectors → Browse connectors&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;Zapier&lt;/strong&gt;, then connect. Paste in the URL from your Zapier MCP (under the &lt;strong&gt;Connect&lt;/strong&gt; tab).&lt;/p&gt;

&lt;p&gt;Hit &lt;strong&gt;Continue&lt;/strong&gt;. You may need to grant access to Claude, and click &lt;strong&gt;Allow&lt;/strong&gt; if you haven't previously done so.&lt;/p&gt;

&lt;p&gt;Open a new chat and under &lt;strong&gt;Search and Tools&lt;/strong&gt; you should see your four tools listed. If not, double-check each tool is enabled in Zapier.&lt;/p&gt;

&lt;p&gt;This is the handshake—persistent capabilities instead of one-off permissions.&lt;/p&gt;


  
    
    Your browser doesn’t support inline video.
    &lt;a href="/assets/images/claude-zapier-mcp/claude_enable_mcp.mp4"&gt;Download the walkthrough MP4&lt;/a&gt;.
  
    Short walkthrough: connecting Claude to the Zapier MCP server and verifying the tools appear in Claude’s interface.
  
  

&lt;h2&gt;
  
  
  Step 6 — Create Your Project (Where Claude Remembers Everything)
&lt;/h2&gt;

&lt;p&gt;Projects are Claude's persistent workspaces. Instead of re-explaining context every session, you anchor instructions, tools, and memory in one place.&lt;/p&gt;

&lt;p&gt;In Claude: &lt;strong&gt;Projects → + New project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Name:&lt;/strong&gt; Daily Digest&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Uses Zapier MCP to populate daily calendar with unfinished tasks&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpbh1lg2pdr32uycuqxs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpbh1lg2pdr32uycuqxs.png" alt="Claude Projects list with New Project button and Daily Digest workspace" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 7 — Give Your Project Instructions (The Brain of the Operation)
&lt;/h2&gt;

&lt;p&gt;Open your new project. In the &lt;strong&gt;Instructions&lt;/strong&gt; panel, paste:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a "Daily Scheduler Agent" using a Zapier MCP Server.
You have access to these tools:
- microsoft_outlook_get_calendar_events_in_date_range
- microsoft_outlook_create_event
- notion_query_database_advanced
- slack_send_direct_message

Goal: Build and send a daily schedule based on Notion tasks and Outlook calendar, then DM me the summary in Slack.

Workflow:
1) Fetch today's Outlook events (treat as busy). Timezone = UTC+10:00 (Brisbane).
2) Query Notion "Tasks" where Status != "Done".
   Return: title, due_date, estimate_mins, priority, energy_tag, notion_url.
   Sort: Priority High→Medium→Low, then Due Date ascending.
3) Working window: 09:00–16:30 (UTC+10).
4) Fit tasks into free slots: Creative/Heavy first, then Admin/Light. Add 5–15 min buffers. If no fit, mark Deferred.
5) Ask once for approval. On "yes", create Outlook events (Show me as = Free) and send a Slack DM with:

🗓 Meetings
- [start–end] — title

📋 Scheduled
- [start–end] — Task (energy)

📌 Deferred
- Task name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8 — Take It for a Test Drive (The Moment of Truth)
&lt;/h2&gt;

&lt;p&gt;In the project chat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build today's daily digest.

Constraints:
- Timezone: Brisbane (UTC+10)
- Working window: 09:00–16:30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read Outlook events&lt;/li&gt;
&lt;li&gt;Query Notion tasks (excluding Done)&lt;/li&gt;
&lt;li&gt;Sort + prioritize&lt;/li&gt;
&lt;li&gt;Allocate blocks with buffers&lt;/li&gt;
&lt;li&gt;Ask for approval&lt;/li&gt;
&lt;li&gt;On confirmation: create events + send Slack digest&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7zwclgm5w0ep5olxtcc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7zwclgm5w0ep5olxtcc.png" alt="Claude proposing a structured schedule with meetings, task blocks, and approval prompt" width="764" height="1117"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Approve it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv5ef3v8an2k9vofdp4la.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv5ef3v8an2k9vofdp4la.png" alt="Slack DM" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Just Happened Here
&lt;/h2&gt;

&lt;p&gt;You didn't build another one-off automation. You gave your AI &lt;strong&gt;reusable powers&lt;/strong&gt;—safely scoped by Zapier, visible in one place, and available every single time you open a chat.&lt;/p&gt;

&lt;p&gt;That's the difference between "assistant that suggests" and &lt;strong&gt;operator that executes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Old way:&lt;/strong&gt; Open chat → Enable connectors → Paste tasks → Hope it works → Repeat tomorrow&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New way:&lt;/strong&gt; Open project → Type "build today's schedule" → Approve → Done&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Goes Next
&lt;/h2&gt;

&lt;p&gt;I've been using this setup for weeks now, and the trust factor is what surprised me most. When your assistant knows where your work lives and how you like things done, you stop second-guessing it.&lt;/p&gt;

&lt;p&gt;I don't stare at the proposed schedule anymore wondering if it missed something. I just say yes and get to work.&lt;/p&gt;

&lt;p&gt;That shift from "tool I have to manage" to "teammate I can trust" is what makes all of this worth it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Further reading:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/fourixai/part-1-the-5-minute-setup-that-turns-chatgpt-into-your-real-assistant-5gai"&gt;Part 1: The 5-Minute Setup That Turns ChatGPT Into Your Real Assistant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/fourixai/from-chatgpt-prototype-to-real-ai-assistant-how-i-automated-my-daily-planning-1ebi"&gt;From ChatGPT Prototype to Real AI Assistant: How I Automated My Daily Planning&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this helped you build something useful, I'd love to hear about it. What creative uses are you finding for persistent AI assistants? What other tools would make this even better?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>zapier</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Part 1: The 5-Minute Setup That Turns ChatGPT Into Your Real Assistant</title>
      <dc:creator>Tim Gaul</dc:creator>
      <pubDate>Wed, 10 Sep 2025 02:46:30 +0000</pubDate>
      <link>https://forem.com/fourixai/part-1-the-5-minute-setup-that-turns-chatgpt-into-your-real-assistant-5gai</link>
      <guid>https://forem.com/fourixai/part-1-the-5-minute-setup-that-turns-chatgpt-into-your-real-assistant-5gai</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"ChatGPT could plan my day — but it couldn't do anything about it. Now it can."&lt;/em&gt;&lt;br&gt;
&lt;em&gt;This is Part 1 of my continuing series on building practical AI assistants. You can find the complete technical guide and additional resources at &lt;a href="https://dev.to/fourix/from-chatgpt-prototype-to-real-ai-assistant-how-i-automated-my-daily-planning-1ebi"&gt;From ChatGPT Prototype to Real AI Assistant: How I Automated My Daily Planning&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've been there. You know that moment when you paste your entire to-do list into ChatGPT, ask it to organize your day, and it spits out this beautiful, perfectly timed schedule? Then you stare at it for a minute, sigh, and manually type each item into your calendar one by one.&lt;/p&gt;

&lt;p&gt;What if I told you that frustrating copy-paste dance could be over in the next five minutes?&lt;/p&gt;

&lt;p&gt;I'm about to show you how I turned ChatGPT from a planning suggestion box into an actual assistant that writes directly to my Outlook calendar. No coding required, no technical wizardry, just a simple setup that works every single time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You're About to Build
&lt;/h2&gt;

&lt;p&gt;By the time you finish reading this, you'll have your own AI assistant that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reads your existing calendar to avoid double-booking you&lt;/li&gt;
&lt;li&gt;Takes a messy list of tasks and creates a smart daily schedule&lt;/li&gt;
&lt;li&gt;Actually puts those events in your Outlook calendar (not just suggests them)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole thing takes about five minutes to set up, and once it's done, planning your day becomes as simple as sending a message. No code, no webhooks, no ICS files. Just ask → schedule → done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Give Zapier Access to Your Calendar
&lt;/h2&gt;

&lt;p&gt;Think of this first step as introducing your assistant to your calendar. We're going to use Zapier as the middleman that lets ChatGPT actually talk to Outlook.&lt;/p&gt;

&lt;p&gt;Head over to Zapier and look for "App Connections" in your dashboard. When you click "Add Connection" and search for Microsoft Outlook, it'll ask you to sign in with your Microsoft account. This part always feels a little scary (you're giving access to your calendar, after all), but Zapier's been around forever and they're legitimate.&lt;/p&gt;

&lt;p&gt;The permissions it asks for are just so your assistant can peek at your existing appointments and add new ones when you tell it to. Think of it like giving a friend a key to your house so they can water your plants while you're away.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvk523dwp67rdcfcross2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvk523dwp67rdcfcross2.png" alt="Screenshot: Zapier connection setup" width="656" height="288"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Zapier App Connections screen establishing secure Microsoft Outlook calendar integration for the assistant&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 2: Create Your Personal Planning Assistant
&lt;/h2&gt;

&lt;p&gt;Now for the fun part. Go to ChatGPT, find "GPTs" in the sidebar, and click "Create." This is where you get to build your own custom assistant from scratch.&lt;/p&gt;

&lt;p&gt;Here's what I've found works best:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Name:&lt;/strong&gt; I went with "Daily Task Scheduler" but call it whatever makes you smile. "Task Ninja" works too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Keep it simple: "Builds a conflict-aware daily task schedule from your Outlook calendar and updates the calendar with daily tasks."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instructions:&lt;/strong&gt; This is where you teach your assistant how you like to work. I use: "You MUST read all of TODAY's events from Outlook Calendar before suggesting anything. Never ask for calendar permissions. Only ask for confirmation once before scheduling."&lt;/p&gt;

&lt;p&gt;Here's the thing about instructions — you can get as specific as you want. Maybe you're one of those people who needs 15-minute buffers between meetings to decompress, or you prefer batching all your creative work in the morning. Add that stuff here. Your assistant will remember it forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conversation Starters:&lt;/strong&gt; Add a few examples of how you typically dump your tasks. I like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Plan my day from 9am to 5pm with these tasks..."&lt;/li&gt;
&lt;li&gt;"[deep] = prefer contiguous blocks; [flex] = can move around"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The conversation starters aren't just for show — they actually train your assistant on how you communicate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6te5rmc47eclny2xfvtd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6te5rmc47eclny2xfvtd.png" alt="Screenshot: GPT configuration" width="800" height="506"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Custom GPT builder showing name, description, instructions and conversation starters for the scheduling assistant&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Let ChatGPT Talk to Zapier
&lt;/h2&gt;

&lt;p&gt;Don't worry — this sounds more technical than it actually is. Think of this step like introducing two friends so they can work together.&lt;/p&gt;

&lt;p&gt;Still in your GPT builder, scroll down to "Actions" and click "Create new action." All we're doing here is giving ChatGPT a way to communicate with the Zapier account you just set up.&lt;/p&gt;

&lt;p&gt;Choose "Import from URL" and paste this link (I know it looks scary, but it's just Zapier's way of saying "here's how ChatGPT can talk to me"):&lt;br&gt;
&lt;code&gt;https://actions.zapier.com/gpt/api/v1/dynamic/openapi.json?tools=meta&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Hit Import. When you see "Available actions" appear, click "Test" next to "list_available_actions."&lt;/p&gt;

&lt;p&gt;Now here comes the part that looks intimidating but is totally safe. In the chat window, you'll see a message saying "gpt wants to access your Zapier Account" with a popup asking for permissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't worry — this is completely normal and safe.&lt;/strong&gt; This is just ChatGPT asking "Hey, can I talk to your Zapier account so I can help you automate things?" It's exactly like when you let Spotify connect to Facebook or let Google Calendar sync with your phone.&lt;/p&gt;

&lt;p&gt;Here's what will happen step by step:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;First popup:&lt;/strong&gt; ChatGPT will show "gpt wants to talk to actions.zapier.com" — click &lt;strong&gt;"Always Allow."&lt;/strong&gt; This just means "yes, my assistant can communicate with Zapier whenever I ask it to."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zapier login:&lt;/strong&gt; You'll be redirected to Zapier's website to confirm you're really you. Just log in with the same Zapier account you set up in Step 1.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Permission screen:&lt;/strong&gt; Zapier will show you exactly what your assistant is asking for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access your Zapier account (so it can see what apps you've connected)&lt;/li&gt;
&lt;li&gt;See your enabled actions (so it knows what it can help you with)&lt;/li&gt;
&lt;li&gt;Run actions and see results (so it can actually do the work)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Click &lt;strong&gt;"Allow"&lt;/strong&gt; — you're not giving ChatGPT the keys to your entire digital life, just permission to use the specific automations you've set up in Zapier.&lt;/p&gt;

&lt;p&gt;Think of it like giving a trusted friend permission to use your Netflix account. They can watch shows, but they can't change your password or see your credit card.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e7ohyi1v7mcrctv0up7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e7ohyi1v7mcrctv0up7.png" alt="Screenshot: Authorization screen" width="442" height="763"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Permission dialog requesting limited access so the GPT can run only the Outlook actions you enable via Zapier&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You should be returned to the GPT configuration screen and if you see "No available actions yet," don't panic. That's totally normal — it's like having a phone number but no one to call yet. We'll fix that in the next step by actually giving your assistant some useful abilities.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 4: Tell Your Assistant What It Can Do
&lt;/h2&gt;

&lt;p&gt;This is the part where we actually give your assistant some useful abilities. We're going to create two simple "skills" — one for reading your calendar, one for adding things to it.&lt;/p&gt;

&lt;p&gt;Go to &lt;code&gt;actions.zapier.com/gpt/start&lt;/code&gt; (that's Zapier's setup page) and we'll walk through this together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First skill: Let your assistant peek at your calendar&lt;/strong&gt;&lt;br&gt;
Click "Add Action" first, then look for "Microsoft Outlook: Get Calendar Events in Date Range" and click it. This just means "let my assistant see what's already scheduled today so it doesn't double-book me."&lt;/p&gt;

&lt;p&gt;Select your Outlook account from the dropdown, click "Show all options" to see all your calendars, then choose whichever calendar you actually use for your daily planning.&lt;/p&gt;

&lt;p&gt;For everything else, just leave it as "Let AI guess." Zapier is pretty smart about figuring out the details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2z6cjvyny4bmuitkw3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2z6cjvyny4bmuitkw3q.png" alt="Screenshot: Zapier action setup — Get Events" width="800" height="1199"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Zapier action configuration granting read access to today's Outlook events (conflict awareness)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second skill: Let your assistant add events to your calendar&lt;/strong&gt;&lt;br&gt;
Now find "Microsoft Outlook: Create Event" and click that one. Same deal — pick your account and calendar.&lt;/p&gt;

&lt;p&gt;One small tip: if you see a "Show me as" option, set it to "Free." This way, when your assistant schedules "Write blog post" from 2-3pm, it won't look like you're in a meeting to anyone trying to schedule time with you.&lt;/p&gt;

&lt;p&gt;Hit "Enable Action" for both of these. (I always forget this step and then wonder why nothing works.)&lt;/p&gt;

&lt;p&gt;The whole thing should feel like you're just telling Zapier: "Hey, when my assistant asks, it's okay to check my calendar and add things to it."&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 5: Test Everything
&lt;/h2&gt;

&lt;p&gt;Back in your GPT builder, find Actions and click that little gear icon next to actions.zapier.com. Hit Test again on "list_available_actions."&lt;/p&gt;

&lt;p&gt;If you see both of your Outlook actions listed, you're golden. If not, go back to Zapier and double-check that you actually enabled both actions. We've all been there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1q8xl5f7lq4zi3i0ucrs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1q8xl5f7lq4zi3i0ucrs.png" alt="Screenshot: Final actions list" width="800" height="606"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Confirmed enabled Outlook actions (Get Events and Create Event) now available to the GPT&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 6: Launch Your Assistant
&lt;/h2&gt;

&lt;p&gt;Hit "Create" in the top-right corner. Congratulations — you've just built something that would have seemed like science fiction five years ago.&lt;/p&gt;

&lt;p&gt;This is the moment your assistant goes from prototype to actually useful. It can now read your calendar, understand what you're trying to accomplish, and make it happen automatically.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 7: Take It for a Spin
&lt;/h2&gt;

&lt;p&gt;Time to see if this thing actually works. Click "View GPT" and try this prompt (feel free to swap in your own tasks):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;START_TIME=9am END_TIME=4:30pm

Task A (personal, dur: 10m)
Task B (personal, dur: 10m)
Create a video demonstrating vibecoding for non-coders using AI tools (dur: ~2h) [deep]
Produce a video intro for reuse in future recordings (dur: ~1h)
Draft and rehearse script for this week's presentation (dur: ~1h) [flex]
Research options for a company video platform (dur: ~30m) [flex]
Personal commitment (2:40pm – 3:20pm)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's what happens next (and don't panic when you see permission requests):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your assistant checks your calendar for today's meetings&lt;/li&gt;
&lt;li&gt;It identifies the BUSY slots where you're already booked&lt;/li&gt;
&lt;li&gt;It builds a conflict-free schedule around your existing commitments&lt;/li&gt;
&lt;li&gt;It asks: "Do you approve this schedule?"&lt;/li&gt;
&lt;li&gt;When you say yes, it creates all the events in your Outlook calendar&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You'll see permission requests twice — once when it reads your calendar, once when it writes to it. That's normal. That's just your assistant asking "hey, can I check your calendar?" and then "hey, can I add these events?"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqv3ndx4x0842lxt4ayh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqv3ndx4x0842lxt4ayh.png" alt="Screenshot: The assistant in action" width="800" height="1117"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Assistant proposing a conflict-free schedule and requesting approval before creating events&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Within seconds, you'll see your perfectly organized schedule appear in your actual Outlook calendar. No file downloads, no manual imports, no copy-paste marathon — just a clean, conflict-free day that actually makes sense.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28svjwq146c3sm67xu2o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28svjwq146c3sm67xu2o.png" alt="Screenshot: The result in Outlook" width="777" height="704"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Resulting Outlook calendar populated automatically with the approved scheduled task blocks&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Just Happened Here?
&lt;/h2&gt;

&lt;p&gt;You've just eliminated the most annoying part of planning your day. No more copying and pasting. No more switching between ChatGPT and your calendar app. No more accidentally double-booking yourself because you misread a time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The old way:&lt;/strong&gt; Ask ChatGPT for help → Get suggestions → Open calendar → Create event → Copy details → Set time → Repeat six times → Realize you scheduled two things at once&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The new way:&lt;/strong&gt; Send message → Say yes → Done&lt;/p&gt;

&lt;p&gt;The best part? Your assistant learns how you work. Tell it once that you prefer morning blocks for creative work, and it'll remember that forever.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Part 2: &lt;a href="https://dev.to/fourixai/part-2-the-upgrade-that-turns-claude-into-a-persistent-workspace-operator-55c8"&gt;How Claude MCP takes this concept even further, giving AI persistent access to your entire digital workspace for power users. We'll look at what changes when your assistant can reuse tools and context across sessions—no hype, just practical extensions of what you built here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But for now, enjoy having an AI assistant that doesn't just give advice — it actually gets stuff done.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Try building your own version and let me know how it goes. I'm genuinely curious what creative uses you'll find for this.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Curious to dive deeper into open-weight AI and its role in shaping business strategy? Check out my &lt;a href="https://gaul.dev/blogs/chatgpt-prototype-to-ai-assistant/" rel="noopener noreferrer"&gt;blog&lt;/a&gt; where you’ll find this article and more explorations on the subject.&lt;/p&gt;

&lt;p&gt;Want to keep the conversation going? Connect with me on &lt;a href="https://www.linkedin.com/in/tgaul/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; — I’d love to hear your perspectives on GPT-OSS and where you see open AI heading next.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>chatgpt</category>
      <category>zapier</category>
    </item>
    <item>
      <title>From ChatGPT Prototype to Real AI Assistant: How I Automated My Daily Planning</title>
      <dc:creator>Tim Gaul</dc:creator>
      <pubDate>Sun, 07 Sep 2025 23:55:03 +0000</pubDate>
      <link>https://forem.com/fourixai/from-chatgpt-prototype-to-real-ai-assistant-how-i-automated-my-daily-planning-1ebi</link>
      <guid>https://forem.com/fourixai/from-chatgpt-prototype-to-real-ai-assistant-how-i-automated-my-daily-planning-1ebi</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;ChatGPT helped me design my ideal day, but every morning I found myself retyping tasks, toggling connectors, downloading calendar files, and importing them into Outlook. It was clever, but not seamless. Here's how I took that AI experiment and made it actually save me time.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How It Started: The 8-Step Morning Dance
&lt;/h2&gt;

&lt;p&gt;Picture this: It's 8:47 AM, I'm running late, and I'm staring at a messy to-do list wondering how I'll fit everything in. So I fire up ChatGPT to help me plan my day.&lt;/p&gt;

&lt;p&gt;The ritual began:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a fresh ChatGPT chat (because yesterday's context is gone)&lt;/li&gt;
&lt;li&gt;Scroll through weeks of chat history trying to find that one conversation where my planning prompt actually worked perfectly&lt;/li&gt;
&lt;li&gt;Copy-paste that entire prompt, then amend it with today's specific tasks&lt;/li&gt;
&lt;li&gt;Enable the Outlook connector (again)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cissp1mrr4uezf5huu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cissp1mrr4uezf5huu5.png" alt="ChatGPT Connectors Interface" width="800" height="476"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;ChatGPT's connector interface showing available integrations including Canva, Notion, Outlook Calendar, Outlook Email, Dropbox, and GitHub - each requiring manual setup and re-enabling&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cross my fingers that ChatGPT interprets everything the same way as yesterday&lt;/li&gt;
&lt;li&gt;Wait while ChatGPT thoughtfully arranges my chaos into a neat schedule&lt;/li&gt;
&lt;li&gt;Download the mysteriously-named "calendar_events_2024.ics" file&lt;/li&gt;
&lt;li&gt;Navigate to Outlook, find the import button, and pray it doesn't duplicate last week's events&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The result?&lt;/strong&gt; A beautiful calendar that perfectly balanced my priorities, accounted for travel time, and even built in coffee breaks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem?&lt;/strong&gt; This "automation" was taking me 10 minutes of manual labor every single morning.&lt;/p&gt;

&lt;p&gt;ChatGPT showed me what was possible but not what was practical. I had built the world's most sophisticated reminder to do things manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Revealed About AI Today
&lt;/h2&gt;

&lt;p&gt;This is where most AI stories stop—at the cool demo. But I kept using this workflow for weeks, and a pattern emerged that reveals something important about how we think about AI:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLMs are incredible at prototyping.&lt;/strong&gt; I had a working "assistant" in an hour, without writing a line of code. ChatGPT could analyze my competing priorities like a seasoned consultant and generate perfectly formatted calendar files. You can have a "working" solution in minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But they're not autonomous or persistent.&lt;/strong&gt; ChatGPT couldn't remember that I prefer 45-minute meeting blocks, that I'm useless before 10 AM, or even my basic planning preferences from yesterday. Every single morning, I had to dig through chat history to find my working prompt, then manually append today's new tasks to it. Sometimes I'd grab the wrong version and wonder why my calendar looked off. It would occasionally forget formatting mid-conversation, requiring edits before Outlook accepted the ICS file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "magic" wears off quickly&lt;/strong&gt; when you realize you're doing archaeological work in your own chat history, then manually splicing together prompts and task lists every morning.&lt;/p&gt;

&lt;p&gt;This revealed something important: LLMs are extraordinary reasoning engines, but they're not automation platforms. When ChatGPT "integrates" with Outlook, you're doing the integration. When it "automates" your workflow, you're running the automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Missing Piece: Zapier as the Bridge
&lt;/h2&gt;

&lt;p&gt;Instead of abandoning ship, I had a different thought: What if I kept ChatGPT for what it's brilliant at—the thinking—and found something else to handle the doing?&lt;/p&gt;

&lt;p&gt;Enter Zapier—the unsexy hero of this story. While everyone was talking about AI agents and autonomous systems, I built something simpler using a no-code automation platform that talks to Outlook, Slack, Google Docs, and thousands of other apps.&lt;/p&gt;

&lt;p&gt;Now my morning looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I tell my custom GPT my tasks for the day&lt;/li&gt;
&lt;li&gt;ChatGPT plans them out with intelligent reasoning about priorities and timing&lt;/li&gt;
&lt;li&gt;Zapier instantly creates and updates events in my Outlook calendar&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No files. No uploads. No manual integrations. No 10-minute morning ritual.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwslca97l6uof3wpeywsp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwslca97l6uof3wpeywsp.png" alt="Automated AI Planning Workflow" width="800" height="301"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Simple automation flow: User input flows through ChatGPT's reasoning to Zapier's execution, ending up in Outlook Calendar&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This setup required no programming, just some structured thinking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT still does what it's best at:&lt;/strong&gt; reasoning about time, priorities, and buffers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zapier handles what software is best at:&lt;/strong&gt; acting on decisions automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just: thought → action → done.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59arbabl8cm0u7pino2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59arbabl8cm0u7pino2c.png" alt="ChatGPT Zapier Integration Setup" width="800" height="766"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The actual ChatGPT-Zapier integration showing saved GPT actions: ChatGPT conversation capabilities combined with Microsoft Outlook calendar events (both reading and creating), all connected through Zapier's automation platform&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Simple Change Was Revolutionary
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Friction vanished overnight.&lt;/strong&gt; I went from dreading daily planning to actually looking forward to it. When something takes 30 seconds instead of 10 minutes, you use it differently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My AI assistant got persistent memory.&lt;/strong&gt; The custom GPT now stores that elaborate prompt I'd spent hours perfecting—all my scheduling preferences, time blocks, buffer requirements, and output formatting rules. No more hunting through chat history or re-pasting instructions every morning. The planning logic that used to live in my head (and various scattered chat conversations) now lives in a reusable brain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It became scalable.&lt;/strong&gt; This same setup could plan someone else's week, run team standups, or automate marketing tasks. The pattern works anywhere you need AI reasoning plus reliable execution.&lt;/p&gt;

&lt;p&gt;But here's what surprised me most: &lt;strong&gt;I started trusting my calendar again.&lt;/strong&gt; When something appears there automatically, based on intelligent reasoning about my actual priorities, I follow it. No more 3 PM existential crises about what I should be working on.&lt;/p&gt;

&lt;p&gt;This experiment showed me how LLMs plus automation platforms are the sweet spot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ChatGPT made it real quickly, proving the concept&lt;/li&gt;
&lt;li&gt;Zapier made it usable, eliminating repetitive tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ChatGPT is the best prototyping tool you've ever seen.&lt;/strong&gt; It will happily write an ICS file, an API call, or a script to organize your day. You can have a "working" solution in minutes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;But it's not an automation engine.&lt;/strong&gt; It won't wake up on a schedule, remember your settings, or talk to multiple services seamlessly. The magic happens in the connections, not the AI itself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automation platforms like Zapier close the gap.&lt;/strong&gt; They're not as flashy as AI, but they make AI actually helpful by handling the persistent, boring execution work.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The bigger insight: We're in the awkward teenage years of AI. The reasoning is incredible, but the integration layer is still clunky. Most people experience AI as a series of impressive demos followed by the question: "Okay, now what?"&lt;/p&gt;

&lt;p&gt;The answer isn't better AI—it's better connections.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Goes Next
&lt;/h2&gt;

&lt;p&gt;I plan to share two guides:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 1:&lt;/strong&gt; &lt;a href="https://dev.to/fourixai/part-1-the-5-minute-setup-that-turns-chatgpt-into-your-real-assistant-5gai"&gt;The exact 5-minute setup for replicating this ChatGPT plus Zapier workflow&lt;/a&gt; (no code required, no jargon)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 2:&lt;/strong&gt; &lt;a href="https://dev.to/fourixai/part-2-the-upgrade-that-turns-claude-into-a-persistent-workspace-operator-55c8"&gt;How Claude MCP takes this concept even further, giving AI persistent access to your entire digital workspace for power users&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But this article is about the mindset shift that makes it all work:&lt;/p&gt;

&lt;p&gt;Stop asking AI to replace your tools. Start asking it to connect them.&lt;/p&gt;

&lt;p&gt;AI isn't magic; it's leverage. The future isn't AI doing everything—it's AI making everything you already do dramatically easier.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;AI didn't replace me; it removed friction. My daily planning workflow went from 10 minutes of copy-paste busywork to a single sentence in ChatGPT—and that's the difference between a cool demo and a life-changing tool.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Curious to dive deeper into open-weight AI and its role in shaping business strategy? Check out my &lt;a href="https://gaul.dev/blogs/chatgpt-prototype-to-ai-assistant/" rel="noopener noreferrer"&gt;blog&lt;/a&gt; where you’ll find this article and more explorations on the subject.&lt;/p&gt;

&lt;p&gt;Want to keep the conversation going? Connect with me on &lt;a href="https://www.linkedin.com/in/tgaul/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; — I’d love to hear your perspectives on GPT-OSS and where you see open AI heading next.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>automation</category>
      <category>productivity</category>
      <category>zapier</category>
    </item>
    <item>
      <title>The Rise of Open AI Models: Privacy, Control, and a New Era</title>
      <dc:creator>Tim Gaul</dc:creator>
      <pubDate>Thu, 21 Aug 2025 03:09:24 +0000</pubDate>
      <link>https://forem.com/fourixai/the-rise-of-open-ai-models-privacy-control-and-a-new-era-26j1</link>
      <guid>https://forem.com/fourixai/the-rise-of-open-ai-models-privacy-control-and-a-new-era-26j1</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0fy5knxt5rinktrm2mp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0fy5knxt5rinktrm2mp.png" alt="Credit: Sora (edited with Midjourney)" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Introduction: OpenAI’s Power Move
&lt;/h3&gt;

&lt;p&gt;OpenAI has recently released something that feels like a plot twist: &lt;strong&gt;GPT-OSS&lt;/strong&gt;, their first open-weight model in years. Unlike previous research releases, this one is practical, licensed under Apache 2.0, and strong enough to stand next to GPT-4-mini. It’s a clear move toward the open AI movement—and one that signals a dramatic shift in direction.&lt;/p&gt;

&lt;p&gt;What makes it exciting isn’t just the tech, but the &lt;strong&gt;symbolism&lt;/strong&gt;. For years, OpenAI was the poster child for closed (ironically!), centralized AI systems. Now they’re releasing powerful, commercially usable models that anyone can run on their own infrastructure—locally, on their cloud of choice, or in tightly regulated environments. This is no longer about experiments—it’s about &lt;strong&gt;freedom&lt;/strong&gt;, and the market is taking notice.&lt;/p&gt;

&lt;p&gt;They’re not alone. Meta’s LLaMA family ignited this trend. Qwen from Alibaba and Grok from xAI pushed boundaries. And a rising tide of open-weight, community-backed models is redefining what it means to build and deploy large language models. Whether you’re a startup, a hobbyist, or an enterprise compliance officer, there’s now a real choice. You don’t have to send your prompts to a black box anymore.&lt;/p&gt;

&lt;p&gt;The open model movement is here. And it’s not going away.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 Why This Matters: Privacy, Security, and Control
&lt;/h3&gt;

&lt;p&gt;One of the biggest drivers of the open-source model movement is privacy and data security. When you use a closed AI service—an API or SaaS platform—your data is routed through third-party infrastructure. For sensitive domains like &lt;strong&gt;healthcare, finance, law, or defense&lt;/strong&gt;, this is often a dealbreaker. Questions around where your data is stored, how long it's retained, and whether it's used for training are often unclear—or worse, vary depending on your pricing tier or some opt-out setting buried in a legal doc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open-source models give you control, clarity, and compliance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you self-host, no sensitive data leaves your infrastructure. You know where it lives, how long it’s retained, and exactly who can access it. That’s not just about technical sovereignty—it’s about &lt;strong&gt;legal and ethical responsibility&lt;/strong&gt;. For industries under GDPR, HIPAA, or financial data compliance, these aren't nice-to-haves; they’re &lt;strong&gt;must-haves&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Security is another part of this picture. With open models, you’re not relying on a third party’s security practices—you can apply your own, tailored to your threat model. You can choose what gets logged, audited, encrypted, or isolated. And you’re not at the mercy of another company’s roadmap.&lt;/p&gt;

&lt;p&gt;Transparency matters too. Most open-weight models come with full architectural disclosure, and some even detail training sources. That level of visibility lets your teams understand, audit, and vet the models they're using—crucial for AI safety, fairness, and trust.&lt;/p&gt;

&lt;p&gt;Then there’s customization. You can adapt the model to your workflows, your tone, your data. Fine-tune it on your internal documentation, product manuals, legal clauses—whatever matters most. That’s often more valuable than raw benchmark performance. You also gain the ability to compress models, reduce inference costs, or embed them directly into your pipelines—&lt;strong&gt;not possible with closed APIs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Performance and uptime improve too. Local or private-cloud inference means &lt;strong&gt;no network latency&lt;/strong&gt;, &lt;strong&gt;no rate limits&lt;/strong&gt;, and &lt;strong&gt;no surprise downtime&lt;/strong&gt;. And if your internet drops, your AI still works.&lt;/p&gt;

&lt;p&gt;Finally, OSS fosters innovation. A shared model base allows communities to debug, extend, adapt, and improve on one another’s work. In some cases, the OSS model ecosystem advances faster than closed labs—driven by hundreds of contributors and power users, not one roadmap. That’s a win for transparency, accessibility, and global progress.&lt;/p&gt;

&lt;p&gt;In short, OSS models offer something you can’t buy with any proprietary subscription: &lt;strong&gt;certainty, flexibility, a seat at the table—and zero licensing or token fees&lt;/strong&gt;. The only cost is infrastructure, making it especially compelling at scale or for sensitive environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Spotlight: GPT-OSS — OpenAI’s Best Open Move Yet
&lt;/h3&gt;

&lt;p&gt;Here’s what you need to know about GPT-OSS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It’s Open-Weight, Not Open-Source:&lt;/strong&gt; You don’t get the training data, but you do get the full model weights, architecture, and tokenizer. Crucially, it’s licensed under Apache 2.0—&lt;strong&gt;truly open&lt;/strong&gt;, unlike LLaMA’s more restrictive license.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two Models:&lt;/strong&gt; A 120B model that rivals GPT-4-mini, and a 20B model that’s roughly in GPT-3.5 territory. Both use &lt;strong&gt;Mixture-of-Experts (MoE)&lt;/strong&gt;, so they’re far more efficient than you'd expect—using just 5B or 3.6B active parameters per generation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Anchored by Benchmarks:&lt;/strong&gt; On reasoning benchmarks like MMLU and GSM8K, GPT-OSS-120B scores within ~2–3 points of GPT-4-mini, while the 20B variant is on par with GPT-3.5 (o3-mini). This isn’t lab hype—these are independent leaderboard results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versatile Performance:&lt;/strong&gt; Both models excel at a wide range of tasks—&lt;strong&gt;coding, math, reasoning, and tool use&lt;/strong&gt;—thanks to architectural efficiencies and strong pretraining. They're not just for chatbots; they're capable assistants across many domains.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runs Almost Anywhere:&lt;/strong&gt; The 20B model can run on a decent consumer GPU (~16GB). The 120B model needs serious hardware (~80GB GPU), but it’s still manageable without massive clusters. That means &lt;strong&gt;on-premises deployments for enterprises&lt;/strong&gt;, and &lt;strong&gt;tinkering on personal machines for hobbyists&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fine-tuning is Possible:&lt;/strong&gt; With access to the model weights and tokenizer, organizations can fine-tune GPT-OSS on internal datasets—adding domain expertise, company-specific language, or private knowledge without waiting on a vendor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not Tied to Microsoft:&lt;/strong&gt; While OpenAI still uses Azure for training, &lt;strong&gt;inference is totally open&lt;/strong&gt;. You can deploy it on AWS, GCP, your own bare-metal cluster, or even run it offline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built for Accessibility:&lt;/strong&gt; Because of its MoE architecture and efficient design, inference cost is &lt;strong&gt;5–10% of a full dense GPT-4&lt;/strong&gt; class model. You get powerful reasoning with a much lighter runtime footprint—and no ongoing per-token fees.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Cost Advantage at a Glance:&lt;/strong&gt; With GPT-OSS, you pay &lt;strong&gt;no licensing fees or per-token charges&lt;/strong&gt;—just infrastructure. Compare that to enterprise APIs where costs scale directly with usage.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This release isn't charity. It's a signal: OpenAI understands that developers, enterprises, and even competitors are demanding &lt;strong&gt;real control&lt;/strong&gt; over their AI—and they're finally offering a path to run AI &lt;strong&gt;on your own terms&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌍 The Expanding Ecosystem of Open Models
&lt;/h3&gt;

&lt;p&gt;OpenAI might be making headlines, but they’re joining a wave:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Meta’s LLaMA 2&lt;/strong&gt; helped kickstart the open-weight renaissance. Its performance and scaled release showed what was possible—despite licensing limitations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qwen-3 (Alibaba)&lt;/strong&gt; pushed boundaries with a massive 235B model, topping open benchmarks in reasoning and multilingual understanding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DeepSeek&lt;/strong&gt; focused on enterprise-ready reasoning performance, with a clean license and growing adoption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grok (xAI)&lt;/strong&gt; stunned many by releasing a 314B MoE model under Apache 2.0. It’s unclear how widely used it is yet, but the licensing alone is a bold move.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mistral, Falcon, and OpenHermes&lt;/strong&gt; represent a deep bench of community and startup-led models pushing the boundaries of lightweight, performant AI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they create an open-source AI ecosystem that’s &lt;strong&gt;mature, fast-moving, and competitive&lt;/strong&gt;. No longer just “good enough,” many of these models are edging toward parity with their closed counterparts—and in specific use-cases, they’re already better.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚖️ Real Trade-offs to Consider
&lt;/h3&gt;

&lt;p&gt;Open models aren’t for everyone—yet. Here are the big trade-offs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You need hardware.&lt;/strong&gt; Even with MoE efficiency, running big models still requires modern GPUs. The 20B tier is accessible; the 120B model, less so.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need skills.&lt;/strong&gt; Setting up a safe, efficient LLM stack is no small task. Fine-tuning, inference optimization, safety filters—all require MLOps talent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You own the output—and the risks.&lt;/strong&gt; Want moderation? Logging? Uptime SLAs? That’s your responsibility now. Implementing custom moderation and auditing pipelines is essential for responsible deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;They’re catching up—but not there yet.&lt;/strong&gt; GPT-4 and Claude Opus still outperform open models on long-context and nuanced reasoning. That gap is shrinking monthly, but it’s still there.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For many use-cases—especially ones involving sensitive data or domain-specific workflows—these trade-offs are not dealbreakers. They’re &lt;strong&gt;a small price for full control&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔚 Wrapping Up: The Future Is Open (Again)
&lt;/h3&gt;

&lt;p&gt;The future of AI is changing. Fast. What was once locked behind APIs, restricted licenses, and closed infrastructure is now something you can download, run, and improve yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT-OSS isn’t just a strong model—it’s a statement.&lt;/strong&gt; It tells us that even the most successful AI companies understand the need for openness, flexibility, and developer freedom. And it proves that open-weight models are no longer second-class citizens. They're fast, smart, and increasingly production-ready.&lt;/p&gt;

&lt;p&gt;Whether you’re a startup founder looking for cost savings, a developer wanting more control, or an enterprise leader navigating compliance and data risk, &lt;strong&gt;the open model ecosystem is finally robust enough to support your needs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We’re entering a world where you don’t just use AI—you shape it. Where privacy isn’t a premium feature. Where control is the default, not the exception. And where innovation doesn’t need permission.&lt;/p&gt;

&lt;p&gt;This isn’t just a shift in tooling. It’s a shift in power.&lt;/p&gt;




&lt;p&gt;Curious to dive deeper into open-weight AI and its role in shaping business strategy? Check out my &lt;a href="https://gaul.dev/blogs/rise-of-open-ai-models/" rel="noopener noreferrer"&gt;blog&lt;/a&gt; where you’ll find this article and more explorations on the subject.&lt;/p&gt;

&lt;p&gt;Want to keep the conversation going? Connect with me on &lt;a href="https://www.linkedin.com/in/tgaul/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; — I’d love to hear your perspectives on GPT-OSS and where you see open AI heading next.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openai</category>
      <category>openweights</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
