<?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: Jatinlabs</title>
    <description>The latest articles on DEV Community by Jatinlabs (@jatinlabs).</description>
    <link>https://dev.to/jatinlabs</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%2F3244756%2F5019ff6e-b612-4ff9-9918-f8b749723da6.jpeg</url>
      <title>DEV Community: Jatinlabs</title>
      <link>https://dev.to/jatinlabs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jatinlabs"/>
    <language>en</language>
    <item>
      <title>How I Put Three AI Agents in a Discord Channel with Switch (and What Broke on Windows)</title>
      <dc:creator>Jatinlabs</dc:creator>
      <pubDate>Sat, 07 Nov 2026 04:59:31 +0000</pubDate>
      <link>https://dev.to/jatinlabs/how-i-put-three-ai-agents-in-a-discord-channel-with-switch-and-what-broke-on-windows-2946</link>
      <guid>https://dev.to/jatinlabs/how-i-put-three-ai-agents-in-a-discord-channel-with-switch-and-what-broke-on-windows-2946</guid>
      <description>&lt;p&gt;I built ShipLoop for the Flip the Switch hackathon. It takes a customer complaint in Discord to a tested GitHub pull request, and a human makes the merge decision.&lt;/p&gt;

&lt;p&gt;This post covers what I built, how to set it up, and the problems I hit as a first-time Switch user on Windows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Demo video: &lt;a href="https://youtu.be/eMA2HgUEG9Q" rel="noopener noreferrer"&gt;https://youtu.be/eMA2HgUEG9Q&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/Jatin083/shiploop" rel="noopener noreferrer"&gt;https://github.com/Jatin083/shiploop&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Customer bug reports often get stuck between support and engineering. Someone has to understand the report, reproduce it, fix it, review it and update the customer. Every handoff adds delay.&lt;/p&gt;

&lt;h2&gt;
  
  
  What ShipLoop does
&lt;/h2&gt;

&lt;p&gt;Three Claude Code agents share one chat room:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Triager&lt;/strong&gt; classifies the report and hands bugs to Fixer, using the customer's exact words.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixer&lt;/strong&gt; reproduces the bug, writes a failing test, makes the fix and opens a pull request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviewer&lt;/strong&gt; checks the pull request with its own edge-case tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I merge on GitHub and tell Triager. Triager then reports the elapsed time and drafts a customer update for my approval.&lt;/p&gt;

&lt;p&gt;The demo app is a small FastAPI shop with deliberately planted bugs. Nothing is deployed to a live site, and the customer updates were drafts that were not sent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Switch?
&lt;/h2&gt;

&lt;p&gt;Switch puts AI agents into team chat. A channel becomes a room, and agents join it like teammates. Switch does not ship its own agent or model. You bring an agent such as Claude Code, and Switch connects it to the room.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Install the tools.&lt;/strong&gt; You need Switch Console, Docker Desktop and an AI coding agent. Sign in to Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude auth login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Start Docker first.&lt;/strong&gt; Then, in Switch Console, select &lt;strong&gt;Add a server&lt;/strong&gt; and &lt;strong&gt;Run a server on this computer&lt;/strong&gt;. I started once with Docker off. The server ran, but without its bundled Mattermost chat app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Test one agent.&lt;/strong&gt; Use the &lt;strong&gt;Switch expert&lt;/strong&gt; template and turn on &lt;strong&gt;Start it in a room&lt;/strong&gt;. Mention the agent by its exact name. An agent ignores a message that does not address it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Create your agents.&lt;/strong&gt; Go to &lt;strong&gt;Your Agents&lt;/strong&gt;, then add each one with a name, a working directory and instructions. I gave Reviewer its own clone of the repo, so it would not switch branches under Fixer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Connect Discord.&lt;/strong&gt; Create a bot in the Discord Developer Portal and turn on &lt;strong&gt;Server Members Intent&lt;/strong&gt; and &lt;strong&gt;Message Content Intent&lt;/strong&gt;. Invite the bot with the permissions in the Switch guide. Then connect it from &lt;strong&gt;Home &amp;gt; Messaging apps&lt;/strong&gt;. Keep the bot token secret.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Add rules to the room.&lt;/strong&gt; My instructions say that only the human merges, and that nothing goes to a customer without approval.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Check before you start.&lt;/strong&gt; These two room commands show the state of the room:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;!agents-status
!roles
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What broke, and what fixed it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code showed "CLI not installed".&lt;/strong&gt; The same panel had found its version, and agents still ran. It looked like a Windows path check problem, so reinstalling would not have helped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Address already in use", but nothing was using the port.&lt;/strong&gt; Windows had reserved that port range. You can check with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;netsh interface ipv4 show excludedportrange &lt;span class="nv"&gt;protocol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quit Docker Desktop and Switch Console, then run these as administrator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;net stop winnat
net start winnat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Handoff between two rooms failed.&lt;/strong&gt; I first planned separate support and engineering rooms. The agent's connection call reported success, but its message to the other agent was refused with &lt;code&gt;Targets not in room&lt;/code&gt;. Moving all the agents into one room solved it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agents replied in the logs, but not in Discord.&lt;/strong&gt; The bot needed the &lt;strong&gt;Manage Webhooks&lt;/strong&gt; permission.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Roles were held somewhere else.&lt;/strong&gt; An agent can hold one role lease at a time, so old rooms can block a new one. Check with &lt;code&gt;!roles&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mentions wake agents.&lt;/strong&gt; Even an @mention inside quoted text wakes an agent and uses tokens. I now leave off the @ in setup messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  The result
&lt;/h2&gt;

&lt;p&gt;Two runs on Discord ended in merged pull requests:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bug&lt;/th&gt;
&lt;th&gt;Pull request&lt;/th&gt;
&lt;th&gt;Tests after the fix&lt;/th&gt;
&lt;th&gt;Report to human merge&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate cancellation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Jatin083/shiploop/pull/6" rel="noopener noreferrer"&gt;#6&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;41 passed&lt;/td&gt;
&lt;td&gt;3m 6s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cart quantity&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Jatin083/shiploop/pull/8" rel="noopener noreferrer"&gt;#8&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;42 passed&lt;/td&gt;
&lt;td&gt;5m 53s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In both runs, the new regression test failed on the old code before the fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prove one agent first.&lt;/strong&gt; Getting Fixer to open one real pull request removed the biggest risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep the workflow in one room&lt;/strong&gt; until you have tested handoffs across rooms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Say where the human decides.&lt;/strong&gt; My agents are told never to merge, but GitHub branch protection is not turned on. A real team should enforce it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be honest about limits.&lt;/strong&gt; Concurrent requests can still produce wrong counts in the demo app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try Switch, start with one agent and one channel, then add the next agent after that works.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I used Claude Code to help build this project and write this post.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  HowISwitch
&lt;/h1&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>github</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
