<?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: Snedz</title>
    <description>The latest articles on DEV Community by Snedz (@snedz).</description>
    <link>https://dev.to/snedz</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%2F4233061%2Fa4f1b91b-d6be-4305-b675-97bc6e83899d.png</url>
      <title>DEV Community: Snedz</title>
      <link>https://dev.to/snedz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/snedz"/>
    <language>en</language>
    <item>
      <title>Two Rooms, One Operator</title>
      <dc:creator>Snedz</dc:creator>
      <pubDate>Sun, 08 Nov 2026 03:41:36 +0000</pubDate>
      <link>https://dev.to/snedz/two-rooms-one-operator-no9</link>
      <guid>https://dev.to/snedz/two-rooms-one-operator-no9</guid>
      <description>&lt;p&gt;&lt;em&gt;A deadline board that caught this hackathon's wrong deadline, and a producer agent that tells the truth about a dormant pipeline.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — Two rooms on one self-hosted Switch deployment, each staffed by a deterministic agent (no LLM): one runs the portfolio from its real deadline board; the other reports on a media pipeline — including the fact that it's dormant, has earned $0, and has never posted. Every answer prints its snapshot's timestamp. Repo: &lt;a href="https://github.com/Snedz/switch-portfolio-ops-room" rel="noopener noreferrer"&gt;https://github.com/Snedz/switch-portfolio-ops-room&lt;/a&gt; · Demo: &lt;a href="https://www.youtube.com/watch?v=1pMSuimFJVk" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=1pMSuimFJVk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I run a portfolio of ventures with a fleet of AI agents and exactly one human: me. The portfolio's state lives in a deadline register with 123 tracked commitments, a watch layer that monitors our machines, and a GitHub repo that acts as the fleet's brain. The information was never the problem. &lt;em&gt;Where&lt;/em&gt; it lived was. Every status check meant leaving the conversation and opening another tool.&lt;/p&gt;

&lt;p&gt;For Flip the Switch, we moved the work into the rooms where it's discussed: two channels on our self-hosted Switch deployment, each with an agent of its own.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Room one: the Portfolio Ops Room
&lt;/h2&gt;

&lt;p&gt;Ask &lt;code&gt;@ops-agent&lt;/code&gt; for &lt;code&gt;deadlines&lt;/code&gt;, &lt;code&gt;gates&lt;/code&gt;, &lt;code&gt;money&lt;/code&gt;, &lt;code&gt;health&lt;/code&gt;, &lt;code&gt;brief&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, or &lt;code&gt;prs&lt;/code&gt;, and it answers in a second or two — from the real board:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;deadlines&lt;/strong&gt; — 97 active items, what's overdue, what's due in 24 hours, the next five. That evening: four overdue items, including a small unpaid bill, a grant window that crossed its 18:59 deadline — and, for a while, this hackathon itself. Our register first recorded Flip the Switch's deadline as 13:29; the live form was still open hours later, and the board now carries the verified close.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;gates&lt;/strong&gt; — the ten actions only I can take (payments, submissions, ID checks), most urgent first, each with its estimated minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;money&lt;/strong&gt; — the money picture: what's owed, what's overdue, what needs paying first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;health&lt;/strong&gt; — the watch layer, per monitor. It reported one monitor DOWN. The agent doesn't do reassurance; it reads the watcher file and says what's there.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@ops-agent deadlines  → the board: 97 active, 4 overdue
@ops-agent gates      → 10 actions only the founder can take
@producer credits     → 2 of 150 left; cheapest clip costs 28
@producer review      → what is waiting on a human decision
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The room doesn't wait to be asked: a digest lands twice a day on a timer, and at 21:45 it fired unattended, with nobody in the room.&lt;/p&gt;

&lt;h2&gt;
  
  
  Room two: the Creator Room
&lt;/h2&gt;

&lt;p&gt;The second room came later the same evening, for the other half of my work life: a media pipeline — a faceless animated-shorts lane (MiniMax H3) plus a clipping lane. Its agent, &lt;code&gt;@producer&lt;/code&gt;, answers eleven questions — &lt;code&gt;ideas&lt;/code&gt;, &lt;code&gt;script&lt;/code&gt;, &lt;code&gt;renders&lt;/code&gt;, &lt;code&gt;clips&lt;/code&gt;, &lt;code&gt;next&lt;/code&gt;, &lt;code&gt;help&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;credits&lt;/code&gt;, &lt;code&gt;review&lt;/code&gt;, &lt;code&gt;sources&lt;/code&gt;, &lt;code&gt;health&lt;/code&gt; — from a labelled snapshot of the pipeline files: which shorts are queued, whether any episode script exists (template ready; episode 1 not written), and which test clips exist on disk, measured rather than remembered.&lt;/p&gt;

&lt;p&gt;Tonight the Producer also learned to publish. It maintains two room documents — the pipeline snapshot, and the pipeline state with its review gate. When the snapshot refreshes, you can re-ask and watch the documents and the answers move together; we proved that end-to-end before writing this sentence. And if a snapshot can't be read, it degrades honestly — last-good copy, labelled, or an explicit "unavailable" — never an invented number.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvrw4z1wv9ovcpedlkzhz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvrw4z1wv9ovcpedlkzhz.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Creator Room — @producer answering from its labelled snapshot (Nov 7).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Neither agent is an LLM. Both are deterministic services: every number traces to a labelled snapshot, and every answer prints that snapshot's timestamp, because a snapshot should never pretend to be a live query.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Switch carries it
&lt;/h2&gt;

&lt;p&gt;In plain words: Switch puts AI agents into the chat rooms a team already uses — as named, addressable members of the room, not as a separate app you have to visit.&lt;/p&gt;

&lt;p&gt;There is no bot bolted onto the side of Switch. Each agent is registered through Switch's agent API, holding its own Switch-issued key and an owner-only addressing policy — zero tools, zero models, read-only by construction. A human posts in Mattermost; the bridge carries it into the room; the agent receives it on its Switch event stream, answers through the Switch message API, and the bridge publishes the answer under the agent's bot account. Switch's identity guard is visibly on duty: because our demo chat account isn't linked to a Switch user, it posts its "I only take instructions from my owner…" notice ahead of the answers — correct behaviour, since an unlinked account shouldn't be able to instruct someone else's agent.&lt;/p&gt;

&lt;p&gt;Two plumbing facts. The rooms weren't created the same way: the ops channel was auto-bridged when we registered the bridge; the Creator Room's channel was gateway-provisioned on the same deployment. And a genuine discovery: the agent API has no document endpoints — room documents live on the gateway API. We found that by reading the live API surface, not the docs.&lt;/p&gt;

&lt;p&gt;Take Switch away and both agents are formatters with nobody to talk to. That was the test we set ourselves, because "is Switch central?" is the first judging criterion — and it's the right question to ask of any entry, including ours.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest limits
&lt;/h2&gt;

&lt;p&gt;A section most hackathon posts skip. This pipeline's state is the reason the second room exists, so here it is plainly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The media pipeline is dormant.&lt;/strong&gt; The clipping pipeline was built on October 16 and hasn't run since. Nothing it made has ever been posted. It has earned $0.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generation is blocked.&lt;/strong&gt; Exactly two H3 test renders exist; both passed review on October 29. The free generation credits stand at 2 of 150, and the cheapest clip costs 28 — so no new clip can be made until I decide the production route (the Producer's estimate: API-first, roughly $2.60–3.90 per kept clip) — a wait the room can report but not end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Producer's snapshot refresh is manual&lt;/strong&gt; — a one-command script. The ops snapshot refreshes every five minutes by cron; the Producer's refresh timer ships in the repo, not yet installed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The room documents are owner-visible.&lt;/strong&gt; The gateway refused room-scoped visibility, so the documents are attached to the room and visible to the console owner — not yet verified visible to room members.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Watch Agent hasn't posted a real transition.&lt;/strong&gt; Its flip logic is dry-run verified; no monitor flipped that evening, and we won't pretend otherwise.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The API teaches you the setup.&lt;/strong&gt; Our bridge registration failed: Switch's outbound SSRF guard refuses the literal &lt;code&gt;127.0.0.1&lt;/code&gt; — and the error names the allowlist setting that fixes it. &lt;code&gt;localhost&lt;/code&gt; worked immediately. Every blocker we hit was like this: the error message was the documentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bang commands are Switch's, not yours.&lt;/strong&gt; &lt;code&gt;!help&lt;/code&gt; is answered by Switch itself. Build your agent's interface on mentions and plain words.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claims are code too.&lt;/strong&gt; Our own README carried one sentence that overstated the machinery — it said both rooms' snapshots refreshed every five minutes. One did; the Producer's didn't. We corrected it the same night, and every claim in this post was checked against the repo and the live evidence before it shipped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The trust layer is real — and chatty.&lt;/strong&gt; The guard is right; firing before &lt;em&gt;every&lt;/em&gt; answer is noise a room should be able to tune to once per account. Our one improvement request.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;The rooms stay live: the digest keeps landing twice a day, and the register keeps running the portfolio — it exists because we lost a hackathon entry earlier this year to a decision that sat unmade while a deadline passed. The Creator Room stays live too. Next: make the production-route decision, install the refresh timer, and write episode 1.&lt;/p&gt;

&lt;p&gt;The code is MIT-licensed. The repo carries reproduction steps, an architecture document, and a licence-checked survey of fourteen comparable projects — plus an offline quickstart that prints the Ops Agent's seven answers, no Switch stack required. Clone it, point it at your register, and your room gets a staff agent too.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;— Mission Winning (team T3RBB9)&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Repo: &lt;a href="https://github.com/Snedz/switch-portfolio-ops-room" rel="noopener noreferrer"&gt;https://github.com/Snedz/switch-portfolio-ops-room&lt;/a&gt; — public, MIT. Demo video: &lt;a href="https://www.youtube.com/watch?v=1pMSuimFJVk" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=1pMSuimFJVk&lt;/a&gt;. Built for Flip the Switch (WeMakeDevs × DevTools Academy × Switch) — Track 01 Best Business Workflow, Track 02 Best Personal Productivity, and Best Blog. #HowISwitch&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hackathon</category>
      <category>ai</category>
      <category>devtools</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
