<?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: Odd Essentials</title>
    <description>The latest articles on DEV Community by Odd Essentials (@oddessentials).</description>
    <link>https://dev.to/oddessentials</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%2F4199456%2F6128769d-2df5-4292-a4d3-e652b8eb6ed9.png</url>
      <title>DEV Community: Odd Essentials</title>
      <link>https://dev.to/oddessentials</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oddessentials"/>
    <language>en</language>
    <item>
      <title>Build Like an Onion, Govern Like a God</title>
      <dc:creator>Odd Essentials</dc:creator>
      <pubDate>Fri, 23 Oct 2026 20:17:32 +0000</pubDate>
      <link>https://dev.to/oddessentials/build-like-an-onion-govern-like-a-god-50h5</link>
      <guid>https://dev.to/oddessentials/build-like-an-onion-govern-like-a-god-50h5</guid>
      <description>&lt;h2&gt;
  
  
  How to scale agentic builders to infinite
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqvtzll7dnybrkiodzol0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqvtzll7dnybrkiodzol0.gif" alt=" " width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One core, every surface. agentguild.oddessentials.ai&lt;/p&gt;

&lt;h2&gt;
  
  
  Two days, seven platforms
&lt;/h2&gt;

&lt;p&gt;Agent Guild went from a web page to Steam, VS Code, iPhone, iPad, Vision Pro, Apple Watch and Apple TV in two days. Not two days per platform. Two days for all of them, once the core existed.&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%2Fvcn8gtnmjlnadeinyrkx.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%2Fvcn8gtnmjlnadeinyrkx.png" alt=" " width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That sentence gets one of two reactions. Engineers who have shipped a cross-platform product assume it is marketing. Engineers who have been building with agents for the last year nod, because they have watched it happen. Both are missing the point. The speed was never the agents. The speed was the shape of the thing the agents were building on.&lt;/p&gt;

&lt;p&gt;Next up are Google Play, Android, Fire TV and Samsung. I expect them to take a day. Not because the agents got better since last week, but because the onion already has its core.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build like an onion
&lt;/h2&gt;

&lt;p&gt;An onion has a core, and every layer is the same shape as the core, one size larger. Nothing in the outer layer knows anything the inner layer does not. Peel any layer off and what is underneath still works.&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%2Fgaclecdotxbn14gzkvh1.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%2Fgaclecdotxbn14gzkvh1.png" alt=" " width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is how Agent Guild was built. The core is a local manager with one job: own the sessions, own the state, expose both over a small API. It does not know what a screen is. The web page was the first layer. It talks to the core and nothing else. The Steam build, the VS Code extension and every Apple target are further layers, and each one talks to the same core through the same API. None of them carries its own copy of the truth. When a new platform shows up, the question is never "how do we make this work" but "what does this layer need to render the core." That is a day's question.&lt;/p&gt;

&lt;p&gt;The alternative is the Frankenstein build, and almost everyone does it because it feels productive. You have a working app. Somebody wants it on a phone, so you bolt on a phone. Somebody wants it in their editor, so you graft an extension onto the side. Each addition carries a little of its own state, its own assumptions about where the data lives, its own idea of what "logged in" means. The sixth platform is harder than the fifth. The tenth never ships. Dr. Frankenstein did not fail because the parts were bad. He failed because nothing he stitched together shared a spine.&lt;/p&gt;

&lt;p&gt;Agents make this worse, not better, if you let them. An agent will happily bolt on a seventh limb, and it will do it fast. The faster you build, the faster patchwork becomes unmaintainable. The onion is the only shape that gets faster as it grows, because every new layer is cheaper than the last one. That is what "infinite" means in the title: not that you will ship infinite platforms, but that the marginal cost of the next one keeps falling instead of rising.&lt;/p&gt;

&lt;h2&gt;
  
  
  Govern like a god
&lt;/h2&gt;

&lt;p&gt;Every agentic framework on the market right now sells governance as a folder of markdown files. Put the rules in CLAUDE.md, put the conventions in AGENTS.md, add a few .cursorrules, and the agents will behave. I want to be fair to this: it gets you further than you would guess. A well-written instructions file is the cheapest productivity gain in the whole stack, and I keep mine current.&lt;/p&gt;

&lt;p&gt;But it is not governance. It is a request. A markdown file asks the agent to behave. Governance is what happens when the agent does not.&lt;/p&gt;

&lt;p&gt;Governance means taking personal responsibility for five things, and "personal" is the operative word. You do not delegate these to the agent that is being governed.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The automated test suite. Not the tests the agent writes to make its own PR green. The tests that define what the product is, that run on every commit, that an agent cannot edit without a human noticing. If the agents own the tests, there are no tests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The CI/CD pipeline. Every layer of the onion ships through the same pipeline. The pipeline is the one place where "works on the agent's machine" dies. It builds every target, runs every suite, and refuses to publish anything that fails. An agent can propose a change to the pipeline. It cannot merge one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resource management. Agents do not get tired, and they do not get a bill. You do. Token budgets per task, compute caps per session, rate limits per provider, a kill switch that is one keystroke away. The day you let an agent loop unattended with an uncapped budget is the day you learn what "infinite" costs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Failsafes and stop points. Some actions require a human before they continue. Publishing to a store. Rotating a credential. Deleting anything. Touching the pipeline itself. These are not suggestions in a markdown file; they are gates the agent physically cannot pass. A stop point that an agent can argue its way through is a speed bump, not a gate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;VMs, sandboxes, containers. Contain your environment.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;"Like a god" is not about control for its own sake. A god does not micromanage; a god sets the physics. The agents are free to do anything the physics allow, and the physics do not allow them to break the build, exceed the budget, or ship without a human at the gate. Inside that, let them run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The boring technical part, which is the whole point
&lt;/h2&gt;

&lt;p&gt;The tooling that makes this work is deliberately dull. Lightweight CLI tools, not IDE plugins and not platforms. Claude Code, Codex, Gemini CLI: whichever the task calls for, and often more than one on the same task, because CLIs compose and GUIs do not. A CLI can be piped, scripted, scheduled, diffed and killed. That is the entire reason governance is possible. You cannot put a stop point in front of a button.&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%2Fo6xi04ets28z9krscd2m.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%2Fo6xi04ets28z9krscd2m.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agent Guild's web page: every CLI tool side by side, each with its own accounts, usage and launch flags. Sample data.&lt;/p&gt;

&lt;p&gt;Every one of those agents runs the same deterministic processes: the same build scripts, the same test runners, the same lint, the same release checklist. The agent is the thing that varies. The process is the thing that does not. Swap the provider tomorrow and the pipeline does not notice, because the pipeline never trusted the provider in the first place.&lt;/p&gt;

&lt;p&gt;And where it is feasible, the same processes run against local models. Not for the hard reasoning, but for the long tail: classification, summarization, first-pass review, the hundred small calls that would otherwise cost money and leave the building. A local model is a resource you own, with a budget you can see and a network boundary you control. That is governance by default, which is the best kind.&lt;/p&gt;

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

&lt;p&gt;The commands you keep retyping, turned into buttons: Agent Guild's productivity features.&lt;/p&gt;

&lt;h2&gt;
  
  
  What infinite means
&lt;/h2&gt;

&lt;p&gt;Infinite does not mean unlimited. It means the next platform costs less than the last one, and that curve never turns back up. The onion gives you the shape. Governance gives you the confidence to let agents run at the speed the shape allows.&lt;/p&gt;

&lt;p&gt;We will know by tonight whether Google Play, Android, Fire TV and Samsung took a day. I am writing this before we start, so there is no hiding if they did not. But the core has not changed, the pipeline has not changed, and the gates are where they were. If it takes two days, the onion is fine and I was wrong about the day. If it takes a week, something grew a limb, and I will go find it.&lt;/p&gt;

&lt;p&gt;Agent Guild runs on the web, Steam, VS Code, iPhone, iPad, Vision Pro, Apple Watch and Apple TV, all from one core.&lt;/p&gt;

&lt;p&gt;Get it at &lt;a href="https://agentguild.oddessentials.ai" rel="noopener noreferrer"&gt;agentguild.oddessentials.ai&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>agents</category>
      <category>cli</category>
    </item>
    <item>
      <title>Visualizing Coding Agents Across Providers</title>
      <dc:creator>Odd Essentials</dc:creator>
      <pubDate>Thu, 22 Oct 2026 03:30:38 +0000</pubDate>
      <link>https://dev.to/oddessentials/visualizing-coding-agents-across-providers-3de7</link>
      <guid>https://dev.to/oddessentials/visualizing-coding-agents-across-providers-3de7</guid>
      <description>&lt;p&gt;Four agents were working for me on a Tuesday night. One was rewriting a database layer, one was chasing a flaky test, one was drafting docs, and one was doing something to the build that I had stopped following an hour earlier.&lt;/p&gt;

&lt;p&gt;At 11:40 the fourth one went quiet.&lt;/p&gt;

&lt;p&gt;Was it finished? Stuck? Sitting on a permission prompt, politely waiting for me to type "yes" while I was in another window? The screen had simply stopped moving.&lt;/p&gt;

&lt;p&gt;That silence is why I built &lt;a href="https://github.com/oddessentials/agent-guild" rel="noopener noreferrer"&gt;Agent Guild&lt;/a&gt;, a local page that runs every coding agent CLI side by side and draws what each one is doing. This post is about the drawing: how you visualize agents from five vendors who each describe their work differently, and where the picture has to admit it can't see.&lt;/p&gt;

&lt;h2&gt;
  
  
  A terminal is a river of characters
&lt;/h2&gt;

&lt;p&gt;A terminal does not label anything. Nothing on the screen says "this is a shell command" or "this is the agent asking for help". If the screen is all you have, you are guessing from the shape of the text, and the guess breaks every time a vendor changes a spinner.&lt;/p&gt;

&lt;p&gt;So the screen can't be the source of truth. Every modern coding agent has hooks: a way to run a small program when something happens, such as a turn starting, a command running, a helper agent being spawned, or a permission being requested. Agent Guild installs a small reporter into each tool's hooks at launch. The reporter turns each event into a short message to a local manager: "session 12 ran a shell command", "session 12 is waiting on permission", "session 12's helper finished".&lt;/p&gt;

&lt;p&gt;The screen becomes the fallback. The only thing taken from it is whether output is still flowing: a card says &lt;strong&gt;Working&lt;/strong&gt; while it is, and drops back when it stops. That is an inference, and the page treats it as one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer one: the board
&lt;/h2&gt;

&lt;p&gt;The first picture is a board of cards. One card per tool at the top, with its account, usage left and model grades. One card per session below, with the model in use, the working folder, and the session's helper agents as lettered circles.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhrdt36jx9jlohk0j9wgn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhrdt36jx9jlohk0j9wgn.webp" alt="The board: one card per tool, one card per running session, helper agents as lettered circles" width="800" height="691"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look at the Antigravity session in the bottom left. Its agents row says &lt;strong&gt;reporting off&lt;/strong&gt;, with a &lt;strong&gt;Why?&lt;/strong&gt; beside it. That is the most important pixel on the page. A blank row would look like "no helpers running". Saying "I can't see this" is the difference between a dashboard you can trust and one that quietly lies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five crews, five dialects
&lt;/h2&gt;

&lt;p&gt;The board is only as good as what each tool will tell it, and the tools disagree a lot. Here is what each one reports today:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What the board can show&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;Codex CLI&lt;/th&gt;
&lt;th&gt;Grok Build&lt;/th&gt;
&lt;th&gt;Docker Agent&lt;/th&gt;
&lt;th&gt;Antigravity CLI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model in use&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes, from 1.100.0&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Helper agents&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell commands&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Only the ones it asks about&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Waiting on your permission&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes, but not refusals&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Turn ended by an error or a cancel&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Cancel only&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Usage left&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few of those cells took real digging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Codex CLI&lt;/strong&gt; reports a permission request but never says the command was refused, so a command it asked about is closed at the end of its turn instead of sitting on the board forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grok Build&lt;/strong&gt; lists a good set of events, but the exact message shapes weren't in its public docs; I read them out of the program itself. It never reports a permission request, so a command waiting for approval looks the same as one still running.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Agent&lt;/strong&gt; fires no pre-tool hook for commands it runs without asking, so in autonomous mode its shell commands are invisible to hooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Antigravity CLI&lt;/strong&gt; reports the model, its conversation and each turn's answer, and nothing about helpers or commands.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this fails loudly. The card for a Grok session simply shows less than the card for a Claude session, and a reasonable person assumes the app is broken rather than the tool being quiet. Half the work went into making the gaps visible instead of empty.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer two: the Yard
&lt;/h2&gt;

&lt;p&gt;Cards are good for reading. They are bad for glancing. With six sessions open, I wanted to know who needed me without reading any text at all.&lt;/p&gt;

&lt;p&gt;So the same facts are also drawn as a place. In the Yard, each tool is a hall, each session is a character working outside its hall, and each helper agent is a smaller figure that works, waits, idles or finishes. The roster and an inspector sit beside it, and double-clicking a character opens its terminal.&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%2Fnu6e2z8utjmilidfq5w1.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%2Fnu6e2z8utjmilidfq5w1.png" alt="The Living Grove: two Claude Code sessions as foxes working outside their treehouse" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each world draws the same sessions differently. In Goblinville Works it's a smithy crew on a boardwalk; on Orbital Station it's a crew outside domed pods.&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%2F2iygm0t8q3kvjrycbexh.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%2F2iygm0t8q3kvjrycbexh.png" alt="Goblinville Works: the same sessions as goblin smiths outside steaming workshops" width="800" height="518"&gt;&lt;/a&gt;&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%2Fuxb2bo4ozvgszd2693lp.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%2Fuxb2bo4ozvgszd2693lp.png" alt="Orbital Station: the same sessions outside domed pods on a space platform" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Yard reads the same reports as the board. It doesn't know anything more. A Grok character has nothing to show for a permission wait, for the same reason the Grok card doesn't. What changes is how fast your eye finds the one that stopped moving.&lt;/p&gt;

&lt;p&gt;The Yard also fits places a board doesn't: there's a &lt;a href="https://marketplace.visualstudio.com/items?itemName=OddEssentials.agent-guild" rel="noopener noreferrer"&gt;VS Code extension&lt;/a&gt; that shows it in a small view beside your code, and the whole page works from a phone over Tailscale. The sessions run in a background manager rather than the browser, so closing the tab, or walking away with your phone, doesn't stop anything.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Quiet is not done
&lt;/h2&gt;

&lt;p&gt;Suppose every tool reported perfectly. You still wouldn't know if the work was finished.&lt;/p&gt;

&lt;p&gt;Every hook that sounds like "finished" means something smaller. A stop event fires at the end of every turn, not the end of the job. A session-end event is a cleanup signal that doesn't fire if the process crashes. Even the final result record of a headless run only tells you the agent stopped talking.&lt;/p&gt;

&lt;p&gt;The people running agents unattended have all landed on the same answer, and it isn't a hook. It's evidence: the tests pass, the pull request exists, the CI run is green, a second reviewer found nothing. The controller decides what done means, never the agent.&lt;/p&gt;

&lt;p&gt;That reframed what a visualization is for. It can't tell you the work is finished. It can tell you, as honestly as each vendor allows, what every crew is doing and which one just went quiet, so you open the right door at the right moment. The checking is still yours.&lt;/p&gt;

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

&lt;p&gt;With Node.js 22 or newer, on Windows, macOS or Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @oddessentials/agent-guild
agent-guild
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or try the &lt;a href="https://oddessentials.github.io/agent-guild/" rel="noopener noreferrer"&gt;demo in your browser&lt;/a&gt;, simulated with nothing installed.&lt;/p&gt;

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

&lt;p&gt;I'd love to hear how you keep track of agents from several vendors, and which gaps in that table bite you most. If you know a hook I've missed, tell me in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>showdev</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
