<?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: Chris Lui</title>
    <description>The latest articles on DEV Community by Chris Lui (@chris_l_c1b53c66e5a4ce7e8).</description>
    <link>https://dev.to/chris_l_c1b53c66e5a4ce7e8</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%2F4057724%2Fc3b809f6-b23c-4986-998d-0846987b34a9.png</url>
      <title>DEV Community: Chris Lui</title>
      <link>https://dev.to/chris_l_c1b53c66e5a4ce7e8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chris_l_c1b53c66e5a4ce7e8"/>
    <language>en</language>
    <item>
      <title>I built an AI dev team that reviews its own work — here's what I learned about multi-agent loops</title>
      <dc:creator>Chris Lui</dc:creator>
      <pubDate>Sat, 01 Aug 2026 09:12:25 +0000</pubDate>
      <link>https://dev.to/chris_l_c1b53c66e5a4ce7e8/i-built-an-ai-dev-team-that-reviews-its-own-work-heres-what-i-learned-about-multi-agent-loops-40la</link>
      <guid>https://dev.to/chris_l_c1b53c66e5a4ce7e8/i-built-an-ai-dev-team-that-reviews-its-own-work-heres-what-i-learned-about-multi-agent-loops-40la</guid>
      <description>&lt;p&gt;Most multi-agent demos are impressive for five minutes and useless for five hours. After months of building &lt;a href="https://github.com/catowabisabi/task-hounds" rel="noopener noreferrer"&gt;Task Hounds&lt;/a&gt; — an open-source, local multi-agent development workspace — here are the design decisions that actually mattered.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;Task Hounds runs three agents in a loop around one project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;Manager&lt;/strong&gt; that understands context, maintains the plan, and assigns exactly one concrete task per cycle&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Worker&lt;/strong&gt; that implements the task and files a structured report: files changed, test results, known issues&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Reviewer&lt;/strong&gt; that inspects the result for bugs, UX problems, and risks — before the Manager decides what happens next&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A human writes a &lt;strong&gt;Directive&lt;/strong&gt; (the mission), and can inject thoughts or new tasks mid-run. Everything — plans, todos, reports, feedback, live agent streams — persists in local SQLite and renders in a real-time dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 1: One task at a time beats parallel everything
&lt;/h2&gt;

&lt;p&gt;My first instinct was parallel workers. It demoed great and shipped nothing: agents stepped on each other's files and the Manager couldn't attribute failures. Serializing to one task per loop looks slower and finishes dramatically more work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 2: Give the human a write-protected anchor
&lt;/h2&gt;

&lt;p&gt;Goal drift is the silent killer of long loops. Around loop 10, the plan subtly stops resembling what you asked for. Our fix: the Human Directive is copied into every session and the loop is &lt;em&gt;forbidden&lt;/em&gt; from editing it. Only a human can change the mission. Drift now shows up as visible divergence from a fixed anchor instead of quiet mutation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 3: Structured handoffs, not chat history
&lt;/h2&gt;

&lt;p&gt;Passing conversation history between agents fails in two ways: it blows the context window, and it lets downstream agents anchor on upstream reasoning noise. Every hop in Task Hounds is a fixed document: the Manager's memory is an explicit JSON handoff read once per loop; the Worker's output is a fixed report schema. If the machine-readable todo JSON is invalid, the loop repairs it before any work is released.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 4: The Reviewer must not have power
&lt;/h2&gt;

&lt;p&gt;Early on, the Reviewer could assign fixes directly. Result: infinite review spirals, with two agents negotiating forever. Now the Reviewer only files structured feedback back to the Manager, who decides: fix, continue, or stop. Separating judging from deciding stabilized the whole loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 5: Trust is a UI problem, not a model problem
&lt;/h2&gt;

&lt;p&gt;The single biggest change in how much autonomy I give the system wasn't a better model — it was being able to &lt;em&gt;watch&lt;/em&gt;. When every decision is a row in SQLite and a panel in the dashboard, "should I let it run for an hour?" becomes an evidence question instead of a faith question.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's still hard
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Text contracts with LLMs remain fragile; structured outputs / tool-calling will replace parts of our repair layer&lt;/li&gt;
&lt;li&gt;Cost: three roles use more tokens than one-shot prompting. The bet is that plan→implement→review wastes less than re-prompting a confused single agent — true for long tasks, not for small edits&lt;/li&gt;
&lt;li&gt;Cross-platform polish (the managed runtime is Windows-first today; Docker runs everywhere)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Task Hounds is MIT licensed: &lt;a href="https://github.com/catowabisabi/task-hounds" rel="noopener noreferrer"&gt;https://github.com/catowabisabi/task-hounds&lt;/a&gt;&lt;br&gt;
3-minute demo: &lt;a href="https://www.youtube.com/watch?v=pu-Rt8Ye4EQ" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=pu-Rt8Ye4EQ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've built agent loops — where do yours fail: planning, execution, or review? I'd love to compare notes in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>python</category>
    </item>
  </channel>
</rss>
