<?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: Gbangbola Oluwagbemiga</title>
    <description>The latest articles on DEV Community by Gbangbola Oluwagbemiga (@gopae).</description>
    <link>https://dev.to/gopae</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%2F4232397%2F838b6e56-7582-404a-8140-14c3a1180f47.jpg</url>
      <title>DEV Community: Gbangbola Oluwagbemiga</title>
      <link>https://dev.to/gopae</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gopae"/>
    <language>en</language>
    <item>
      <title>AI made pull requests free. Here's the triage room I built so maintainers don't drown.</title>
      <dc:creator>Gbangbola Oluwagbemiga</dc:creator>
      <pubDate>Sat, 07 Nov 2026 16:05:39 +0000</pubDate>
      <link>https://dev.to/gopae/ai-made-pull-requests-free-heres-the-triage-room-i-built-so-maintainers-dont-drown-2agi</link>
      <guid>https://dev.to/gopae/ai-made-pull-requests-free-heres-the-triage-room-i-built-so-maintainers-dont-drown-2agi</guid>
      <description>&lt;p&gt;&lt;em&gt;Built for the Flip the Switch hackathon (WeMakeDevs × Switch AI). Demo: &lt;a href="https://youtu.be/uioe7InEN9Q" rel="noopener noreferrer"&gt;https://youtu.be/uioe7InEN9Q&lt;/a&gt; · Code: &lt;a href="https://github.com/Gbangbolaoluwagbemiga/gatehouse" rel="noopener noreferrer"&gt;https://github.com/Gbangbolaoluwagbemiga/gatehouse&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The judge was never the hard part
&lt;/h2&gt;

&lt;p&gt;Coding agents made pull requests almost free to produce, and maintainers now wade through plausible-looking slop: a README full stop that "closes" a smart-contract bug, a personal notes file, an empty diff.&lt;/p&gt;

&lt;p&gt;Some projects already put an AI judge in front of the queue. My earlier project, PatchBond, does exactly that: a stranger's PR carries a small refundable bond, and a model running in a trusted execution environment signs one of three verdicts: &lt;strong&gt;refund&lt;/strong&gt;, &lt;strong&gt;forfeit&lt;/strong&gt; or &lt;strong&gt;needs_human&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Watching it run taught me the uncomfortable part. The judge works. The &lt;strong&gt;team&lt;/strong&gt; doesn't:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Nobody watches the doubtful cases.&lt;/strong&gt; A needs_human verdict sits on a web page until its 72-hour review window runs out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nobody checks the verdict is real.&lt;/strong&gt; Was it actually signed by the model, or is it just text on a page?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;There's no record of who decided what.&lt;/strong&gt; When money taken from a stranger is at stake, that isn't acceptable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contributors have nobody to ask&lt;/strong&gt; why their PR is being forfeited.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I didn't need another dashboard. Maintainers already live in a chat, so the work had to happen there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gatehouse: two agents in the maintainers' Telegram
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/sandbox-quantum/switch" rel="noopener noreferrer"&gt;Switch&lt;/a&gt; turns a Slack, Teams, Discord or Telegram channel into a &lt;strong&gt;room&lt;/strong&gt; where people and coding agents work together. Gatehouse is one Switch template that puts two Claude Code agents into the maintainers' group:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The desk&lt;/strong&gt; runs the queue. Say "I'm on rota" and it records you. Say "triage" and it posts every case that needs a person, with its deadline and verdict link, @mentioning whoever is on rota. Say "forfeit civicledger#61, it only adds a full stop to a README heading" and it records the decision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The auditor&lt;/strong&gt; trusts nothing the desk says. It re-runs six signature checks offline on every verdict: the request and response hashes, the model, the recovered signer, the verdict inside the signed response, and the published hash. It replies ✓ 6/6 in the thread. In my demo it also noticed that two verdicts were signed by a different key, and handed that to a person instead of calling them verified.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A separate &lt;strong&gt;help room&lt;/strong&gt; lets contributors ask "why was my PR forfeited?" The desk answers from the signed verdict and passes disputes to the maintainers' room through a linked room. It never records a decision there.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule I care most about: two keys
&lt;/h2&gt;

&lt;p&gt;The AI proposes, and a person decides. &lt;code&gt;gatehouse decide&lt;/code&gt; refuses to record anything unless the signature still passes every check at that moment, and it refuses anyone who isn't on the maintainers list. Each decision is appended to a &lt;strong&gt;hash-chained ledger&lt;/strong&gt;, so editing an old entry breaks every hash after it, and the auditor re-walks the chain after every decision.&lt;/p&gt;

&lt;p&gt;The agents hold no keys and move no money. The bond only moves when the maintainer signs on the verdict page with their own wallet.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Switch made easy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One YAML template, two agents.&lt;/strong&gt; Each agent runs in its own folder of the repo with a &lt;code&gt;CLAUDE.md&lt;/code&gt; brief. The folder is the permission boundary: the agent gets exactly one CLI and nothing else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;addressing&lt;/code&gt; per agent.&lt;/strong&gt; Anyone can talk to the desk, but the auditor only answers the desk and its owner, so a stranger can't steer the checker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Roles and room documents.&lt;/strong&gt; The desk holds the &lt;code&gt;triage-desk&lt;/code&gt; role and keeps a &lt;em&gt;Triage Board&lt;/em&gt; document current; the auditor keeps an &lt;em&gt;Audit Log&lt;/em&gt;. A maintainer catches up by reading one document instead of scrolling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linked rooms.&lt;/strong&gt; A dispute in the public help room lands in the private maintainers' room, tagged to whoever is on rota.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The visible trace.&lt;/strong&gt; Telegram shows "Worked for 29s" with every command the agent ran. For a team deciding about money, seeing &lt;em&gt;which command&lt;/em&gt; produced an answer is what builds trust.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I'd tell a first-time Switch user
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with Switch Console and switch-buddy.&lt;/strong&gt; It sets up the server and the Telegram connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A template can't create a Telegram group.&lt;/strong&gt; Create the group, add your bot, then have agents join it as a room parameter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restart agents after changing their instructions.&lt;/strong&gt; Running sessions keep the old brief.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make your tools print chat-sized text.&lt;/strong&gt; Agents relay what they get, so a 2-line output becomes a 2-line message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make the agents check each other.&lt;/strong&gt; A second agent with fewer permissions, whose only job is to doubt the first, cost me one folder and one &lt;code&gt;CLAUDE.md&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Clone &lt;a href="https://github.com/Gbangbolaoluwagbemiga/gatehouse" rel="noopener noreferrer"&gt;https://github.com/Gbangbolaoluwagbemiga/gatehouse&lt;/a&gt;, then deploy &lt;code&gt;switch/gatehouse.template.yaml&lt;/code&gt; from Switch Console with your maintainers' room. In that room, type &lt;code&gt;@gatehouse-desk triage&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Watch the 3-minute demo, recorded live in Telegram: &lt;a href="https://youtu.be/uioe7InEN9Q" rel="noopener noreferrer"&gt;https://youtu.be/uioe7InEN9Q&lt;/a&gt;&lt;/p&gt;

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

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>hackathon</category>
      <category>telegram</category>
    </item>
  </channel>
</rss>
