<?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>DEV Community: Hubzoid</title>
    <description>The latest articles on DEV Community by Hubzoid (@hubzoid).</description>
    <link>https://dev.to/hubzoid</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4215612%2Fcf23c127-3080-495b-8cd6-ecd9d8e1ce0a.png</url>
      <title>DEV Community: Hubzoid</title>
      <link>https://dev.to/hubzoid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hubzoid"/>
    <language>en</language>
    <item>
      <title>Three types of AI agents, and how to pick one before you build</title>
      <dc:creator>Hubzoid</dc:creator>
      <pubDate>Thu, 29 Oct 2026 16:24:10 +0000</pubDate>
      <link>https://dev.to/hubzoid/three-types-of-ai-agents-and-how-to-pick-one-before-you-build-388m</link>
      <guid>https://dev.to/hubzoid/three-types-of-ai-agents-and-how-to-pick-one-before-you-build-388m</guid>
      <description>&lt;p&gt;Most internal AI projects don't fail on the tech. They fail because nobody decided what kind of agent they were building.&lt;/p&gt;

&lt;p&gt;Some agent jobs start with a specific input. Some start with a question in plain language. Others start when a clock or an event fires. Those differences decide what a useful answer looks like, and what can go wrong.&lt;/p&gt;

&lt;p&gt;So choose the shape of the work before you choose the model or the interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three shapes
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shape&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;What it needs most&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Specific task&lt;/td&gt;
&lt;td&gt;Check this invoice against its purchase order&lt;/td&gt;
&lt;td&gt;Named inputs and an agreed result format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Question-answering&lt;/td&gt;
&lt;td&gt;What is our current returns policy?&lt;/td&gt;
&lt;td&gt;Relevant knowledge and a source for the answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Background work&lt;/td&gt;
&lt;td&gt;Prepare the report every weekday morning&lt;/td&gt;
&lt;td&gt;A schedule, bounded runs and an owner&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The failure mode is mixing them
&lt;/h2&gt;

&lt;p&gt;Trouble starts when a job of one shape is built as another:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A Q&amp;amp;A bot sold as a tool.&lt;/strong&gt; People expect a predictable result and get a conversation that answers a slightly different question each time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A flexible tool frozen into automation.&lt;/strong&gt; Something that needed a person to read and adjust the output now runs at 7am with nobody watching.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The shapes are patterns, not product categories. A chat can ask for an invoice check, and a scheduled job can use an agent to explain exceptions. What matters is that each job gets what its shape needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Specific tasks need a contract
&lt;/h2&gt;

&lt;p&gt;An invoice check says what it expects: an invoice, a purchase order and the current matching rules. It says what it returns: matched lines, mismatches and any missing document.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use code for exact comparisons and arithmetic.&lt;/li&gt;
&lt;li&gt;If the model reads messy text, check its extraction before treating it as fact.&lt;/li&gt;
&lt;li&gt;If the result feeds another process, validate the structure and give failures their own explicit outcome.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A paragraph that looks convincing is not a contract. A fixed output format doesn't make every model-generated value deterministic, either.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions need sources and room to clarify
&lt;/h2&gt;

&lt;p&gt;People ask the same policy question in many forms. A useful Q&amp;amp;A agent finds the current policy, names its source and asks a follow-up when the answer depends on details it doesn't have. A returns question may depend on the purchase date or the account type, and guessing them changes the answer.&lt;/p&gt;

&lt;p&gt;Test the refusal too. Ask for a number the agent's sources don't hold, and check that it says what's missing instead of estimating from unrelated data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background work needs a failure plan
&lt;/h2&gt;

&lt;p&gt;When nobody is watching, a duplicate report or a silent failure can go unnoticed for days. Before you schedule anything, answer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What starts the work, and which timezone applies?&lt;/li&gt;
&lt;li&gt;Which account does the run act as, and what may it access?&lt;/li&gt;
&lt;li&gt;Where does the result appear, and who reviews it?&lt;/li&gt;
&lt;li&gt;What happens if an input fails or the process restarts?&lt;/li&gt;
&lt;li&gt;Could repeating a step send a second message or change a record twice?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The last one bites hardest. If a run restarts halfway, any step with an external effect needs its own protection against running twice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you build, write four lines
&lt;/h2&gt;

&lt;p&gt;For the job you have in mind:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Input:    what the agent receives, and from whom
Output:   the exact result, and where it goes
Trigger:  a person asking, or a schedule or event
Failure:  what happens when an input is missing or a step fails
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you can't fill in the trigger, you don't know the shape yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  See it in action
&lt;/h2&gt;

&lt;p&gt;This short video shows the three shapes running on one shared set of team knowledge:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/cQkfXSHfkTU" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The longer version, including how each shape maps to chat, workflows and assistants over MCP in &lt;a href="https://hubzoid.com" rel="noopener noreferrer"&gt;Hubzoid&lt;/a&gt;, is on our blog: &lt;a href="https://hubzoid.com/blog/three-agent-types" rel="noopener noreferrer"&gt;Three types of AI agents, and when to use each&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>architecture</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Stop fixing your AI agents in chat</title>
      <dc:creator>Hubzoid</dc:creator>
      <pubDate>Thu, 29 Oct 2026 16:23:55 +0000</pubDate>
      <link>https://dev.to/hubzoid/stop-fixing-your-ai-agents-in-chat-4m4</link>
      <guid>https://dev.to/hubzoid/stop-fixing-your-ai-agents-in-chat-4m4</guid>
      <description>&lt;p&gt;The first mistake we made with internal agents: fixing them in chat.&lt;/p&gt;

&lt;p&gt;You correct the agent, it does better, and then the next session forgets. A teammate's agent never knew about the correction in the first place. A week later someone fixes the same thing again, slightly differently.&lt;/p&gt;

&lt;p&gt;The fix was boring. Every rule now lives in a file the agents read. A correction is a small edit, and every agent follows it on the next run.&lt;/p&gt;

&lt;p&gt;Here's how that works in practice, and the three habits that kept it usable as it grew.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why chat corrections don't stick
&lt;/h2&gt;

&lt;p&gt;A correction in chat lives in one conversation. When that session ends, so does the rule. Assistants with memory keep it per person, so it still doesn't reach the colleague who asks the same question tomorrow.&lt;/p&gt;

&lt;p&gt;Nobody can review it either. You can't see which rules the agent follows, who added them or whether two of them disagree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Put the rule where the agent reads it
&lt;/h2&gt;

&lt;p&gt;When the agent gets something wrong, ask one question: which file should have said this?&lt;/p&gt;

&lt;p&gt;Then change that file. Say the agent reported gross sales when the team means net:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt; ## Net sales
&lt;span class="gd"&gt;-Revenue for the period.
&lt;/span&gt;&lt;span class="gi"&gt;+Revenue for the period after returns and discounts.
+Use the finance export, not the CRM total. The CRM includes cancelled orders.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commit it like any other change. The next run, in your session or a teammate's, uses the new rule.&lt;/p&gt;

&lt;p&gt;You get three things chat never gave you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One source.&lt;/strong&gt; Every agent and every person reads the same definition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;History.&lt;/strong&gt; &lt;code&gt;git log knowledge/definitions.md&lt;/code&gt; shows who changed a rule and why.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review.&lt;/strong&gt; A rule that affects everyone can go through a pull request.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Habit 1: keep the top file a map
&lt;/h2&gt;

&lt;p&gt;Our shared setup started with one big instructions file. It grew until the agent was loading pages of rules it didn't need for the job in front of it.&lt;/p&gt;

&lt;p&gt;What fixed it was a short top file that is only a map of which file to read for which job:&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;# Team agent&lt;/span&gt;

Read only the files the task needs.

| Job | Read |
| --- | --- |
| Sales numbers | knowledge/definitions.md, knowledge/sources.md |
| Weekly stock review | skills/weekly-stock-review/SKILL.md |
| Anything sent outside the team | knowledge/approvals.md |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agents now load two or three files instead of the whole repo, and people can find a rule without scrolling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Habit 2: plain Markdown the agent searches itself
&lt;/h2&gt;

&lt;p&gt;We keep the agents' knowledge as plain Markdown files and let the agent search them, instead of running them through an embedding index first.&lt;/p&gt;

&lt;p&gt;There's no index to drift out of sync with the files, because there's no index. People can read and fix the same files the agent reads. And when the data gets larger, &lt;code&gt;grep&lt;/code&gt; still works wonderfully well.&lt;/p&gt;

&lt;p&gt;The Claude Code team has described a similar path: they started with a vector database and moved to the agent searching the files itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Habit 3: one folder per kind of thing
&lt;/h2&gt;

&lt;p&gt;A layout that has held up for us:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;team-hub/
├── AGENTS.md              # the map
├── knowledge/
│   ├── definitions.md     # what "net sales" means here
│   ├── sources.md         # which export is current
│   └── approvals.md       # what needs a person's sign-off
└── skills/
    └── weekly-stock-review/
        └── SKILL.md       # the steps for one recurring job
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Definitions and sources go in &lt;code&gt;knowledge/&lt;/code&gt;. Repeatable procedures go in &lt;code&gt;skills/&lt;/code&gt;. Every correction has an obvious home, which is most of the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  When it's more than your repo
&lt;/h2&gt;

&lt;p&gt;Committing your setup to a repo works for people who work in that repo with the same coding assistant. The rules usually need to reach people who don't: someone in ops asking in chat, or a report that runs at 7am.&lt;/p&gt;

&lt;p&gt;That's what we built &lt;a href="https://hubzoid.com" rel="noopener noreferrer"&gt;Hubzoid&lt;/a&gt; for. A Hub is a folder like the one above. The same files serve a team web chat, scheduled workflows and assistants such as Claude Code and Codex through MCP, so one correction reaches all of them. It's open source (Apache-2.0) and self-hosted: &lt;a href="https://github.com/hubzoid/hubzoid" rel="noopener noreferrer"&gt;github.com/hubzoid/hubzoid&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Whatever you use, the habit is the same: when the agent is wrong, fix the file, not the chat.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
