<?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: Zack Chew</title>
    <description>The latest articles on DEV Community by Zack Chew (@zackchew).</description>
    <link>https://dev.to/zackchew</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%2F4059076%2F50dd0a30-1cf3-4c03-969f-725fb06345e6.png</url>
      <title>DEV Community: Zack Chew</title>
      <link>https://dev.to/zackchew</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zackchew"/>
    <language>en</language>
    <item>
      <title>Your ChatGPT Doesn't Know Your Stuff. Your Bot Does.</title>
      <dc:creator>Zack Chew</dc:creator>
      <pubDate>Tue, 20 Oct 2026 16:19:01 +0000</pubDate>
      <link>https://dev.to/zackchew/your-chatgpt-doesnt-know-your-stuff-your-bot-does-16d1</link>
      <guid>https://dev.to/zackchew/your-chatgpt-doesnt-know-your-stuff-your-bot-does-16d1</guid>
      <description>&lt;p&gt;&lt;em&gt;Hermes and OpenClaw bots on OpenClaw Launch can now be added to ChatGPT or Claude as a connector, so the assistant you already type into can ask the one that actually knows your context.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You know the shape of this already. You're in ChatGPT, halfway through something, and you need a fact that isn't in the chat. What's on your calendar tomorrow. What you decided in the notes you've been keeping. Whether that thing you asked for on Monday ever got done.&lt;/p&gt;

&lt;p&gt;You have a bot that knows. It's been running for weeks. If you connected your calendar to it, it can read your calendar. It wrote the notes. It has the skill you set up for exactly this kind of question. But it lives in another tab, and the only bridge between the two is you, copying a question across and pasting an answer back.&lt;/p&gt;

&lt;p&gt;That bridge is now a setting. Copy one address, approve it once, and you can ask ChatGPT to ask your bot. The answer comes back in the same chat.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a connector actually is
&lt;/h2&gt;

&lt;p&gt;The feature is called an MCP connector. MCP is a standard that lets an AI app call something outside itself, and you don't need the acronym to use it. Think of a plug socket. ChatGPT gets one socket that leads to your bot.&lt;/p&gt;

&lt;p&gt;The part worth understanding is what doesn't happen. Your bot isn't copied into ChatGPT. Its memory, its skills and the apps you connected to it stay where they are, running on your bot. ChatGPT gets a way to send it a message and read what comes back. That's the whole mechanism.&lt;/p&gt;

&lt;p&gt;This matters because the alternative is worse than it sounds. Pasting an answer into ChatGPT gives it a paragraph. It doesn't give it the twenty previous conversations that made the answer make sense, or the notes file the answer came from, or the ability to go and check something else tomorrow. A connector keeps all of that on the bot's side, where it already lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it feels like
&lt;/h2&gt;

&lt;p&gt;You type the way you'd text a person who happens to know your stuff.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ask my bot what's on my calendar tomorrow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ChatGPT hands the message to your bot. Your bot works the way it does in Telegram or WhatsApp, with its own model, its own memory and its own connected apps, and the reply appears in the ChatGPT conversation a moment later. You stay where you were.&lt;/p&gt;

&lt;p&gt;Some other things this is good for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Have my bot add this to the project notes it keeps."&lt;/li&gt;
&lt;li&gt;"Ask my bot to run its weekly report skill now."&lt;/li&gt;
&lt;li&gt;"Ask my bot whether the thing I mentioned this morning is finished."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Follow-up questions continue the same conversation on the bot's side, so it still has the earlier context when you ask the second question. If you'd rather start clean, tell ChatGPT to start a new conversation with your bot first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why there's only one tool
&lt;/h2&gt;

&lt;p&gt;The connector gives ChatGPT exactly one ability, and it's called &lt;code&gt;ask_bot&lt;/code&gt;. Send a message, get the reply. There is no file tool, no terminal, no way to change your bot's configuration or read its credentials.&lt;/p&gt;

&lt;p&gt;That limit is deliberate. A connected app should never be able to do more than a person typing to the bot could do, and that's the line this sits on. If you wouldn't hand a stranger your Telegram bot, don't hand them the connector address either.&lt;/p&gt;

&lt;p&gt;Access is the part I'd want you to read properly, because this does give an outside app a route to an agent with real permissions. When you add the connector, ChatGPT sends you to an OpenClaw Launch page that names the exact bot being connected. You sign in with the account that owns it and press Allow. What the app receives is a token that works for that one bot. Your bot's API keys and provider credentials never leave the platform, and the connector address on its own does nothing until someone signs in and approves it.&lt;/p&gt;

&lt;p&gt;If you change your mind, open the bot's MCP window and press Disconnect. Access ends there and then, not at the next restart or the next billing date. You can also remove the plugin on the ChatGPT side, though disconnecting on the dashboard is what actually revokes it.&lt;/p&gt;

&lt;p&gt;One warning that applies to any connector, not just this one: only approve a connection you started yourself. If someone sends you a link and asks you to approve it, close the tab. Whoever completes that screen can use the bot, and everything connected to that bot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting it up
&lt;/h2&gt;

&lt;p&gt;Two things before you start. You need a running bot on OpenClaw Launch with an active plan or free trial, and you need a ChatGPT plan that allows custom connectors. ChatGPT Free doesn't offer them, and on a work workspace an admin may have switched them off. Claude accepts custom connectors on any plan, with one connector on Free.&lt;/p&gt;

&lt;p&gt;For ChatGPT:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On your dashboard, press &lt;strong&gt;MCP&lt;/strong&gt; on the bot's card and copy the Connector URL from the &lt;strong&gt;ChatGPT / Claude&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Open ChatGPT's plugins page, press &lt;strong&gt;Add&lt;/strong&gt; and choose &lt;strong&gt;Add custom MCP server&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Give it a name you'll recognise, paste the URL under &lt;strong&gt;Connection&lt;/strong&gt;, and leave &lt;strong&gt;Authentication&lt;/strong&gt; on OAuth.&lt;/li&gt;
&lt;li&gt;Tick the confirmation, press &lt;strong&gt;Create as a plugin&lt;/strong&gt;, then &lt;strong&gt;Continue&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Sign in to OpenClaw Launch, check that the bot named on the page is the one you meant, and press &lt;strong&gt;Allow&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Start a new chat and try: "Use my bot to tell me what you can do."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For Claude:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Copy the same Connector URL from the bot's MCP window.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Customize&lt;/strong&gt;, then &lt;strong&gt;Connectors&lt;/strong&gt;, press &lt;strong&gt;+ Add&lt;/strong&gt; and choose &lt;strong&gt;Add custom connector&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Paste the URL, add it, and press &lt;strong&gt;Connect&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Sign in, check the bot name, and press &lt;strong&gt;Allow&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On Claude Team and Enterprise, an owner adds the connector first under Organization settings, then Connectors, and each member connects it for themselves.&lt;/p&gt;

&lt;p&gt;Those menu names were correct when the flow was checked in October 2026 on a Pro plan. Both companies move their menus around, so if a button has a different name, look for the option to add a custom connector rather than for the exact wording above.&lt;/p&gt;

&lt;p&gt;If ChatGPT answers the question itself instead of passing it to your bot, name the plugin in your message. "Use the &lt;em&gt;your bot's name&lt;/em&gt; plugin to ask my bot what's on my calendar tomorrow" is usually enough, and after that it tends to get the idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it doesn't do
&lt;/h2&gt;

&lt;p&gt;It doesn't make ChatGPT smarter, and it doesn't give ChatGPT your bot's model. ChatGPT relays the message and reads the reply. The work happens on the bot, which spends the same AI credits as a message from any other chat app.&lt;/p&gt;

&lt;p&gt;A single request can run for just under five minutes. For anything longer than that, ask the bot to start the job and message you when it's finished, rather than leaving the ChatGPT request hanging in the meantime.&lt;/p&gt;

&lt;p&gt;It's also not a way to reach a bot that isn't yours. Bots created through the developer API, and bots you resell to your own customers, can't be connected this way.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you don't have a bot yet
&lt;/h2&gt;

&lt;p&gt;None of this is much use without one. OpenClaw Launch runs Hermes or OpenClaw for you, with restarts, updates and chat apps handled from a dashboard, and the connector is included on every plan and during the free trial. A trial takes a minute to start and doesn't ask for a card.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openclawlaunch.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-10-20-chatgpt-connector" rel="noopener noreferrer"&gt;openclawlaunch.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>productivity</category>
      <category>openai</category>
    </item>
    <item>
      <title>My agent now answers with cards I can compare, check and filter</title>
      <dc:creator>Zack Chew</dc:creator>
      <pubDate>Sat, 10 Oct 2026 15:45:06 +0000</pubDate>
      <link>https://dev.to/zackchew/my-agent-now-answers-with-cards-i-can-compare-check-and-filter-2ojj</link>
      <guid>https://dev.to/zackchew/my-agent-now-answers-with-cards-i-can-compare-check-and-filter-2ojj</guid>
      <description>&lt;p&gt;Ask an AI to help you buy something and you usually get an essay. Then you open ten tabs to check whether any of it is right.&lt;/p&gt;

&lt;p&gt;My Hermes bot can now answer with something you use instead: cards you can compare at a glance, numbered sources you can click, and a slider that narrows the list without asking it again.&lt;/p&gt;

&lt;p&gt;ChatGPT does something similar with GPT-6 (OpenAI calls it Intelligent UI). I wanted it in the agent I actually work with, the one with its own tools, memory and files, so I built it into Hermes on OpenClaw Launch.&lt;/p&gt;

&lt;p&gt;It's live for every Hermes bot there, and it stays off until you switch it on.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it looks like
&lt;/h2&gt;

&lt;p&gt;In Quick Chat on the dashboard there's a chip next to "/ commands" called Interactive. I turned it on and asked the kind of question I normally lose an evening of tabs to:&lt;/p&gt;

&lt;p&gt;"I want a robot vacuum that handles pet hair, budget up to $500. Search the web for 4 strong options you can buy right now, with their current price and battery life from what you find. Show them as cards with a photo of each (use real image URLs from your search), and let me filter by max price with a slider."&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%2Fpbs.twimg.com%2Fmedia%2FHUOhlIrX0AAb_LM%3Fformat%3Djpg%26name%3Dlarge" 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%2Fpbs.twimg.com%2Fmedia%2FHUOhlIrX0AAb_LM%3Fformat%3Djpg%26name%3Dlarge" alt="Robot vacuum cards and budget slider" width="1158" height="1555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few minutes later the answer was four cards, not an essay. A Roborock at $249.99, a Dreame at $269.99, and two eufy models at $339.99 and $499.99 with coupons. Each card had a product photo, the battery life, what it's good and bad at, and numbered sources I could click. A slider at the top cut the list down as I dragged it.&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%2Fpbs.twimg.com%2Fmedia%2FHUOho_xWwAEfxg1%3Fformat%3Djpg%26name%3Dlarge" 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%2Fpbs.twimg.com%2Fmedia%2FHUOho_xWwAEfxg1%3Fformat%3Djpg%26name%3Dlarge" alt="Eufy cards and research caveats" width="1205" height="1607"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's the part I care about. Normally I'd get a page of text and then open ten tabs to check it. Here the checking came with the answer. It even warned me that the battery numbers come from different cleaning modes, and that it hadn't tested the coupon prices at checkout. Dragging the slider costs nothing, because nothing goes back to the model.&lt;/p&gt;

&lt;p&gt;It's one run on my own bot, checked October 9, so treat the prices as that day's prices.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;The obvious way to do this is to let the model write a whole web page and load it in an iframe. That works, but it's a lot of code to trust. OpenAI describes their version as a library of native components plus a compiler, and I went the same direction.&lt;/p&gt;

&lt;p&gt;The bot writes a small markup block in its reply. Tags that look like JSX, a little JavaScript for state, if and each blocks. The browser compiles it, runs the code inside a sandboxed frame and two isolated workers, and draws the result with a fixed set of parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rows, columns, cards and tiles&lt;/li&gt;
&lt;li&gt;text, buttons, inputs, sliders, toggles and selects&lt;/li&gt;
&lt;li&gt;tables, plus line, area, bar and pie charts&lt;/li&gt;
&lt;li&gt;drawings, with simple animation for games and diagrams&lt;/li&gt;
&lt;li&gt;pictures, from the bot's own files or the web&lt;/li&gt;
&lt;li&gt;a look of its own: dark or light, an accent colour, gradients&lt;/li&gt;
&lt;li&gt;246 icons and a copy button&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The view's code can't reach the page, your cookies, storage or the network. Pictures are the one thing it can show from outside, and it doesn't fetch them itself. Our server fetches every picture written into the view as soon as it appears, so nothing you type or click inside it makes a request. If a view is broken, too big or stuck in a loop, you get the code instead of the view and the chat carries on.&lt;/p&gt;

&lt;p&gt;Every view has a "View code" link. I wanted to see exactly what the bot wrote, and I figured other people would too.&lt;/p&gt;

&lt;p&gt;Views can also draw and animate, show pictures, and pick their own look. The vacuum cards above use the pictures.&lt;/p&gt;

&lt;p&gt;Ask it how a ballpoint pen works and it draws an exploded view on a dark card, with the cap, barrel, ink tube, tip and ball each labelled. I never asked for dark.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;My bots run on tokens I pay for, so this was the first thing I measured, on my own bot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a normal call there already sends about 22,000 input tokens (system prompt and tools)&lt;/li&gt;
&lt;li&gt;with Interactive on, the format note adds about 1,900 tokens to the first message, roughly 9% more input. It grew when drawings, pictures and styling went in, and I'm counting from its length&lt;/li&gt;
&lt;li&gt;after that most messages carry a 60 token reminder, and the full note goes again every 10th message&lt;/li&gt;
&lt;li&gt;over a long chat I'd expect 10 to 15% more input, and most of it is sent as cheap cache reads&lt;/li&gt;
&lt;li&gt;plain text replies cost no extra output&lt;/li&gt;
&lt;li&gt;the tip calculator I tested first was about 600 to 700 output tokens, nearly all of it the view's code. A text answer would have been 100 to 200&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Turn the chip off and nothing gets added to new messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where ChatGPT is ahead
&lt;/h2&gt;

&lt;p&gt;Honestly, in a lot of places. It's on by default and the model decides by itself when an answer should be a UI. OpenAI says it trained GPT-6 to make that call. And it's rolling out to Free users too.&lt;/p&gt;

&lt;p&gt;Mine is a switch you turn on, and it's only as good as the model writing the markup. So far I've tested it with GPT-6.1 Sol. I haven't tried weaker models yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where a Hermes bot is different
&lt;/h2&gt;

&lt;p&gt;The view comes from an agent that already has my context. It can run a web search first and put what it found into the view, sources and all, like the vacuum cards above. It has its own memory, skills and files on its own server. And the view is plain text in the reply, so it doesn't care which vendor's model writes it.&lt;/p&gt;

&lt;p&gt;The same bot keeps answering on Telegram and Discord in plain text. Those apps can't draw a live view, so Interactive only lives in the web chat.&lt;/p&gt;

&lt;h2&gt;
  
  
  One caveat
&lt;/h2&gt;

&lt;p&gt;Turning the switch off stops new notes. In a chat where it was already on, the earlier notes are still in the history, so the bot may keep building views there. Start a new chat if you want plain answers back.&lt;/p&gt;

&lt;p&gt;If you run a Hermes bot on &lt;a href="https://openclawlaunch.com/" rel="noopener noreferrer"&gt;openclawlaunch.com&lt;/a&gt;, open Quick Chat and click Interactive. I wrote up the details and a side by side with ChatGPT here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openclawlaunch.com/guides/hermes-agent-interactive-answers?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-10-08-interactive" rel="noopener noreferrer"&gt;https://openclawlaunch.com/guides/hermes-agent-interactive-answers?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-10-08-interactive&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My guess is the first thing most people ask for is a calculator. I'd rather hear what you'd make it research.&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>Rent a Cloud GPU with Hermes Agent or OpenClaw</title>
      <dc:creator>Zack Chew</dc:creator>
      <pubDate>Sun, 04 Oct 2026 01:36:03 +0000</pubDate>
      <link>https://dev.to/zackchew/rent-a-cloud-gpu-with-hermes-agent-or-openclaw-5b4</link>
      <guid>https://dev.to/zackchew/rent-a-cloud-gpu-with-hermes-agent-or-openclaw-5b4</guid>
      <description>&lt;p&gt;Your bot runs on a CPU server, but it can rent a GPU when a job needs one: it quotes the cost, rents a Vast.ai machine on your account, runs the job over SSH, brings the files back and releases the machine. The steps are the same on managed Hermes Agent and OpenClaw.&lt;/p&gt;

&lt;p&gt;I run OpenClaw Launch, which hosts the managed bots described in this guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this looks like in practice
&lt;/h2&gt;

&lt;p&gt;We tested this on our own managed Hermes Agent while it was producing an animated film in Blender. It had been rendering on CPU and needed a full-HD, 128-sample Cycles frame to check quality. From one chat message, the bot:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;searched Vast.ai for GPUs with at least 12 GB of VRAM, enough CPU and disk, and a CUDA driver new enough for its Blender build, all under a price cap;&lt;/li&gt;
&lt;li&gt;rented an RTX 4060 Ti 16GB with a 20 GB disk and a throwaway SSH key it generated for this one job;&lt;/li&gt;
&lt;li&gt;uploaded Blender and the scene, checking a SHA-256 hash for each upload;&lt;/li&gt;
&lt;li&gt;confirmed Cycles was really rendering on the GPU (CUDA) and not falling back to CPU;&lt;/li&gt;
&lt;li&gt;rendered the 1920×1080 frame in 22.5 seconds, then downloaded it and checked the file;&lt;/li&gt;
&lt;li&gt;destroyed the instance, removed the SSH key, and confirmed that instance no longer existed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The whole rental, from creating the machine to releasing it, took 194 seconds. Vast posted a $0.007 charge for that instance. The bot then compared the GPU frame with its earlier CPU preview and told us honestly what had improved and what still fell short, rather than declaring the job done.&lt;/p&gt;

&lt;p&gt;The GPU is yours, not ours. Your bot rents the machine on your own Vast.ai account and Vast bills it separately from your OpenClaw Launch plan. Your bot's own container has no GPU; it acts as the controller that rents, drives and releases one.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Piece&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Your managed bot&lt;/td&gt;
&lt;td&gt;Plans the job, prepares the files, and runs every step from its own workspace terminal.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vast.ai connection&lt;/td&gt;
&lt;td&gt;Lets the bot quote offers, rent and release instances, manage SSH keys, and read charges on your Vast account, with no API key in the chat.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSH and scp&lt;/td&gt;
&lt;td&gt;Already installed in every Hermes Agent and OpenClaw container. The bot uses them to upload inputs, run the job and download outputs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The GPU machine&lt;/td&gt;
&lt;td&gt;A short-lived Vast instance running a versioned Docker image. It is destroyed once the results are safely back in your bot's workspace.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A running managed &lt;a href="https://openclawlaunch.com/hermes-hosting" rel="noopener noreferrer"&gt;Hermes Agent&lt;/a&gt; or OpenClaw bot on OpenClaw Launch.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://cloud.vast.ai/" rel="noopener noreferrer"&gt;Vast.ai&lt;/a&gt; account with credit or a payment method on file.&lt;/li&gt;
&lt;li&gt;Vast.ai connected to your bot. Follow the &lt;a href="https://openclawlaunch.com/guides/hermes-agent-vast-ai-composio" rel="noopener noreferrer"&gt;Vast.ai connection guide&lt;/a&gt;: create a Vast API key with the permissions this workflow uses (&lt;code&gt;misc&lt;/code&gt; for offer search, &lt;code&gt;user_read&lt;/code&gt; and &lt;code&gt;user_write&lt;/code&gt; for balance and SSH keys, &lt;code&gt;instance_read&lt;/code&gt; and &lt;code&gt;instance_write&lt;/code&gt; for rentals, &lt;code&gt;billing_read&lt;/code&gt; for charges), then connect it under &lt;a href="https://openclawlaunch.com/dashboard/integrations" rel="noopener noreferrer"&gt;Dashboard → Integrations&lt;/a&gt;. That takes about two minutes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before your first rental, check the connection without spending anything:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use my connected Vast.ai account. Read my balance and list my instances. Do not create, start, stop or delete anything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. Describe the job and your limits
&lt;/h2&gt;

&lt;p&gt;Tell the bot what the job is, what counts as success, and how much you are willing to spend. The more concrete the limits, the better the quote. For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Render frame 289 of my Blender project at 1920×1080 with 128 Cycles samples on a rented GPU. Use a single GPU with at least 12 GB of VRAM, a 20 GB disk, and a maximum of $0.40 per hour. Quote the full cost first and wait for my approval. After the render, download the frame, verify it, destroy the instance, and remove any SSH key you added.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you do not know how much VRAM your job needs, ask the bot to work it out from your model or scene first. Specifying VRAM, CUDA version and disk up front removes most of the cheap offers that would fail halfway.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Approve the quote
&lt;/h2&gt;

&lt;p&gt;The bot searches current Vast offers with full pricing and comes back with a specific machine. A good quote names:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the offer ID, GPU model, VRAM, and the host's maximum supported CUDA version;&lt;/li&gt;
&lt;li&gt;the hourly price for the disk size you asked for (Vast includes storage in that quote, so it should not be added twice);&lt;/li&gt;
&lt;li&gt;upload and download rates, and an estimate of how much data will move;&lt;/li&gt;
&lt;li&gt;an estimated total for the expected runtime, and a hard time limit after which it will release the machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Offers on Vast change minute by minute. If the chosen offer disappears, the bot should come back with a new quote instead of quietly renting a different machine. Reply with a clear approval, for example &lt;em&gt;"Approved: offer 123456, up to $0.40 per hour, 30 minutes max."&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The bot rents the machine and connects
&lt;/h2&gt;

&lt;p&gt;Once you approve, the bot typically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;generates a new SSH key pair in its own workspace for this job only, and registers the &lt;em&gt;public&lt;/em&gt; key with Vast (the private key never leaves the bot);&lt;/li&gt;
&lt;li&gt;creates the instance from the approved offer with a versioned Docker image; the connection refuses untagged, &lt;code&gt;latest&lt;/code&gt; and &lt;code&gt;main&lt;/code&gt; images. To pin the exact image contents, ask the bot to use the image's &lt;code&gt;sha256&lt;/code&gt; digest instead of a tag;&lt;/li&gt;
&lt;li&gt;checks the instance until SSH actually answers. A "running" status from Vast does not yet mean the machine is ready to connect to.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The rental calls look like this from the bot's terminal. You do not need to type them; they show what the bot is doing on your behalf. &lt;code&gt;&amp;lt;PUBLIC_KEY&amp;gt;&lt;/code&gt; stands for the public key the bot generated in step 1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composio execute VAST_AI_OCL_SEARCH_GPU_OFFERS_FULL &lt;span class="s1"&gt;'{"limit":20,"allocated_storage":20,"filters":{"gpu_ram":{"gte":12000},"num_gpus":{"eq":1},"dph_total":{"lte":0.4}}}'&lt;/span&gt;
composio execute VAST_AI_OCL_ADD_SSH_KEY &lt;span class="s1"&gt;'{"user_confirmed":true,"ssh_key":"&amp;lt;PUBLIC_KEY&amp;gt;"}'&lt;/span&gt;
composio execute VAST_AI_OCL_CREATE_INSTANCE &lt;span class="s1"&gt;'{"user_confirmed":true,"offer_id":123456,"image":"nvidia/cuda:12.8.0-runtime-ubuntu24.04","disk":20,"runtype":"ssh"}'&lt;/span&gt;
composio execute VAST_AI_OCL_GET_INSTANCE &lt;span class="s1"&gt;'{"instance_id":52500115}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. The bot runs the job
&lt;/h2&gt;

&lt;p&gt;Over SSH, the bot uploads its inputs, installs or unpacks the software, and runs the job. Two checks separate a real GPU run from an expensive CPU run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify the uploads. Comparing a hash of each file on both ends catches a truncated upload before you pay for a broken run.&lt;/li&gt;
&lt;li&gt;Prove the GPU is used. Run &lt;code&gt;nvidia-smi&lt;/code&gt;, and for Blender check that Cycles has the CUDA or OptiX device enabled. Many tools silently fall back to CPU when the driver and the software's CUDA version do not match.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Download, verify, release
&lt;/h2&gt;

&lt;p&gt;When the job finishes, the bot copies the outputs back into its own workspace with &lt;code&gt;scp&lt;/code&gt; and checks them. Only then does it destroy the instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composio execute VAST_AI_OCL_DESTROY_INSTANCE &lt;span class="s1"&gt;'{"user_confirmed":true,"instance_id":52500115}'&lt;/span&gt;
composio execute VAST_AI_OCL_LIST_INSTANCES &lt;span class="s1"&gt;'{}'&lt;/span&gt;
composio execute VAST_AI_OCL_DELETE_SSH_KEY &lt;span class="s1"&gt;'{"user_confirmed":true,"ssh_key_id":98765}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The job is only finished when this job's instance ID no longer appears in your instance list (the list returns 25 rentals per page, so the bot should follow every page) and its temporary SSH key is gone. Other rentals on your account are left alone. The results then sit in your bot's workspace, where it can send them to you in chat, publish them, or keep working on them.&lt;/p&gt;

&lt;p&gt;Stop is not release. Stopping a Vast instance keeps its disk, and Vast keeps charging for that storage. Destroying it deletes the disk and ends all charges. Always download results before destroying. See &lt;a href="https://docs.vast.ai/guides/instances/manage-instances" rel="noopener noreferrer"&gt;Vast's instance lifecycle&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jobs worth sending to a GPU
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Job&lt;/th&gt;
&lt;th&gt;What to tell the bot&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Blender Cycles rendering&lt;/td&gt;
&lt;td&gt;Blender version, resolution, samples and frame range. Ask it to confirm the CUDA or OptiX device before rendering the full range.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image and video generation&lt;/td&gt;
&lt;td&gt;The ComfyUI workflow or model and the output count. Size VRAM from the model, and have the bot download the model weights on the GPU machine rather than uploading them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speech transcription&lt;/td&gt;
&lt;td&gt;The audio files and the Whisper model size. For a large batch, a short GPU rental can cost less than hours of CPU time; test one file first to compare.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fine-tuning a small model&lt;/td&gt;
&lt;td&gt;The base model, dataset and training config. Ask for a checkpoint download before the release step.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch inference with an open model&lt;/td&gt;
&lt;td&gt;The model and the input list. For a quick batch, a short vLLM rental can beat keeping an always-on endpoint.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Keep costs under control
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Give a price cap and a time limit in the first message, and ask the bot to release the machine automatically when either is reached, including on failure.&lt;/li&gt;
&lt;li&gt;Test small first. One frame or a short sample on the GPU tells you the real speed and cost before you pay for the full batch.&lt;/li&gt;
&lt;li&gt;Check the actual charge. Ask the bot to read your Vast charges for that instance ID afterwards. Vast posts charges with a delay, so the first figure is not always the final one.&lt;/li&gt;
&lt;li&gt;Never retry a rental blindly. If a create call times out, the machine may already exist. The bot should list your instances before trying again, so you do not end up paying for two.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Hermes Agent and OpenClaw: same steps
&lt;/h2&gt;

&lt;p&gt;On OpenClaw Launch, managed Hermes Agent and OpenClaw bots get the same Vast.ai connection, the same &lt;code&gt;composio&lt;/code&gt; command and the same preinstalled &lt;code&gt;ssh&lt;/code&gt;, &lt;code&gt;scp&lt;/code&gt; and &lt;code&gt;ssh-keygen&lt;/code&gt; in their workspace. Every prompt and command on this page works unchanged on both. Hermes Agent can also save the finished flow as a reusable skill, so the next GPU job starts from a tested routine instead of from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-hosted agents
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;VAST_AI_OCL_&lt;/code&gt; actions are part of OpenClaw Launch's managed connection, so a self-hosted Hermes Agent or OpenClaw does not have them. The same workflow works with Vast's own &lt;a href="https://github.com/vast-ai/vast-cli" rel="noopener noreferrer"&gt;command-line tool&lt;/a&gt;, installed where your agent runs and authorized with your Vast API key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;vastai
vastai &lt;span class="nb"&gt;set &lt;/span&gt;api-key YOUR_VAST_API_KEY
vastai search offers &lt;span class="s1"&gt;'gpu_ram&amp;gt;=12 num_gpus=1 rentable=true'&lt;/span&gt;
vastai create instance OFFER_ID &lt;span class="nt"&gt;--image&lt;/span&gt; nvidia/cuda:12.8.0-runtime-ubuntu24.04 &lt;span class="nt"&gt;--disk&lt;/span&gt; 20 &lt;span class="nt"&gt;--ssh&lt;/span&gt;
vastai show instances
vastai destroy instance INSTANCE_ID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On a self-hosted agent, &lt;code&gt;vastai set api-key&lt;/code&gt; saves the key to a file on that machine and the agent can spend with it, so give it a restricted key and put the same approval and cleanup rules in your instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;th&gt;What to do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SSH connection refused right after renting&lt;/td&gt;
&lt;td&gt;Normal for the first minute or two. The bot should poll until SSH answers, with a time limit, and release the machine if it never does.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The job ran, but slowly&lt;/td&gt;
&lt;td&gt;It probably ran on CPU. Check &lt;code&gt;nvidia-smi&lt;/code&gt; and the tool's device setting, and compare the host's maximum CUDA version with the one your software needs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The chosen offer is gone&lt;/td&gt;
&lt;td&gt;Ask for a fresh quote. Do not let the bot substitute another machine without your approval.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create failed or timed out&lt;/td&gt;
&lt;td&gt;List instances before retrying. An uncertain response can still mean the machine was created.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A restarted instance stays in Scheduling&lt;/td&gt;
&lt;td&gt;A stopped instance can only restart when its host's GPU is free again, and storage is billed while it waits. If the results were already downloaded, destroying it and renting a fresh offer is usually faster.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The bot says Vast tools are missing&lt;/td&gt;
&lt;td&gt;Check the connection under Integrations, then ask the bot to run &lt;code&gt;composio search vast_ai&lt;/code&gt;. See the &lt;a href="https://openclawlaunch.com/guides/hermes-agent-vast-ai-composio" rel="noopener noreferrer"&gt;connection guide&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Cloud GPU FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does this work on Hermes Agent and OpenClaw?
&lt;/h3&gt;

&lt;p&gt;Yes. Managed Hermes Agent and OpenClaw use the same Vast.ai connection, the same composio command and the same SSH tools inside the bot's workspace, so every step on this page is identical on both. Self-hosted agents need their own Vast integration; see the self-hosted section.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does OpenClaw Launch provide the GPU?
&lt;/h3&gt;

&lt;p&gt;No. Your bot itself runs on a CPU server. The GPU is rented from Vast.ai on your own Vast account and billed by Vast, separately from your OpenClaw Launch plan. Your bot does the renting, setup, running and cleanup for you.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much does a GPU job cost?
&lt;/h3&gt;

&lt;p&gt;It depends on the GPU, how long it runs, the disk you allocate and how much data you move. In our own test, one 1080p Blender Cycles frame on an RTX 4060 Ti 16GB took about 3 minutes and 15 seconds from rental to release, and Vast posted a $0.007 charge for it. Prices change constantly, so ask your bot for a quote on current offers before every rental.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can the bot rent a GPU without asking me?
&lt;/h3&gt;

&lt;p&gt;Every paid Vast action on OpenClaw Launch refuses to run unless the bot explicitly marks it as confirmed by you, and the action descriptions tell the bot to do that only after you approve the specific offer and cost. The bot sets that flag itself, so your instructions are the real control: give it a budget and tell it to wait for your approval before it creates anything. Reading balances, offers and instance lists never rents anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens if the job fails halfway?
&lt;/h3&gt;

&lt;p&gt;Ask the bot to release the machine on failure as well as on success, and to set a hard time limit up front. A stopped Vast instance still bills storage, so a rental is only fully closed once that instance is destroyed and no longer appears on any page of your instance list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related guides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://openclawlaunch.com/guides/hermes-agent-vast-ai-composio" rel="noopener noreferrer"&gt;Connect Vast.ai to Hermes &amp;amp; OpenClaw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openclawlaunch.com/guides/blender-mcp-server" rel="noopener noreferrer"&gt;Blender MCP server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openclawlaunch.com/guides/hermes-agent-comfyui" rel="noopener noreferrer"&gt;Hermes Agent + ComfyUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openclawlaunch.com/guides/hermes-agent-vllm" rel="noopener noreferrer"&gt;Hermes Agent + vLLM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openclawlaunch.com/guides/faster-whisper" rel="noopener noreferrer"&gt;Faster Whisper transcription&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openclawlaunch.com/hermes-hosting" rel="noopener noreferrer"&gt;Managed Hermes Agent hosting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Give your agent a GPU
&lt;/h2&gt;

&lt;p&gt;Connect Vast.ai under Integrations, then ask your bot for a quote on your first GPU job.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openclawlaunch.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-10-03-vast-gpu-workflow" rel="noopener noreferrer"&gt;OpenClaw Launch&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The same word can be an answer or a silence signal</title>
      <dc:creator>Zack Chew</dc:creator>
      <pubDate>Sun, 27 Sep 2026 03:39:55 +0000</pubDate>
      <link>https://dev.to/zackchew/the-same-word-can-be-an-answer-or-a-silence-signal-1mag</link>
      <guid>https://dev.to/zackchew/the-same-word-can-be-an-answer-or-a-silence-signal-1mag</guid>
      <description>&lt;p&gt;An agent answering a yes-or-no question with &lt;code&gt;NO&lt;/code&gt; can have its answer classified as silence in the group-turn implementation examined here. Change that answer to &lt;code&gt;No&lt;/code&gt;, and the silence check returns false. Capitalization has become part of the conversation protocol.&lt;/p&gt;

&lt;p&gt;I build OpenClaw Launch. This particular behavior comes from &lt;code&gt;isSilentReply&lt;/code&gt;, a small function that decides whether returned text represents an intentional absence of a reply. Its accepted inputs extend beyond the instructed token, &lt;code&gt;NO_REPLY&lt;/code&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%2Fufpsldxwowaqw2z8ss8f.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%2Fufpsldxwowaqw2z8ss8f.png" alt="Two agents reviewing a handoff document" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The function first trims whitespace. An empty result immediately counts as silence. For other input, it removes a trailing run of periods, exclamation marks, question marks, and whitespace. It then accepts the exact uppercase token or any exact prefix of that token whose length is at least two characters and shorter than the full token. It never lowercases the text.&lt;/p&gt;

&lt;p&gt;Here is a truth table derived from those rules. Quotation marks delimit test inputs, and backslash escapes represent whitespace. The table specifies expected results for regression fixtures.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;&lt;code&gt;isSilentReply&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;""&lt;/code&gt;, &lt;code&gt;"   "&lt;/code&gt;, &lt;code&gt;"\t\n"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;"NO"&lt;/code&gt;, &lt;code&gt;"NO_"&lt;/code&gt;, &lt;code&gt;"NO_R"&lt;/code&gt;, &lt;code&gt;"NO_RE"&lt;/code&gt;, &lt;code&gt;"NO_REP"&lt;/code&gt;, &lt;code&gt;"NO_REPL"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;"NO_REPLY"&lt;/code&gt;, &lt;code&gt;" NO_REPLY "&lt;/code&gt;, &lt;code&gt;"NO_REPLY.!?"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;"NO!"&lt;/code&gt;, &lt;code&gt;"NO_R?"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;"N"&lt;/code&gt;, &lt;code&gt;"N!"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;"No"&lt;/code&gt;, &lt;code&gt;"no"&lt;/code&gt;, &lt;code&gt;"no_reply"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;"."&lt;/code&gt;, &lt;code&gt;"!?"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;"NO_REPLY,"&lt;/code&gt;, &lt;code&gt;"NO_REPLY…"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;"NO REPLY"&lt;/code&gt;, &lt;code&gt;"NO_REPLY please"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The punctuation-only row follows from the order of operations. The initial trimmed string is nonempty, so it passes the blank check. Removing its punctuation leaves an empty string, which satisfies neither later condition. There is no second blank check.&lt;/p&gt;

&lt;p&gt;These distinctions have an observable consequence in the runner. For a successful result without an attachment URL, a true silence check emits a line for persistence with &lt;code&gt;status&lt;/code&gt; set to &lt;code&gt;silent&lt;/code&gt; and empty content. The original token disappears from that line. The member has already been marked as having spoken, and this branch ends without planning a handoff. An attachment URL bypasses this silence branch, while a truthy error takes an earlier error branch.&lt;/p&gt;

&lt;p&gt;A plain &lt;code&gt;NO&lt;/code&gt; is therefore ambiguous. It can be a substantive negative answer in ordinary language, or an accepted prefix of the control token. The function has only the characters to work with. The handoff prompt asks for the complete token, but that instruction does not narrow what the parser accepts.&lt;/p&gt;

&lt;p&gt;I would use an explicit structured outcome carrying a reply-or-silent discriminator separately from text. That is a design proposal, absent from this implementation. It would allow a negative answer to remain content without asking capitalization to settle its meaning. The receiving code would still need to validate the discriminator and define how silence interacts with attachments and errors.&lt;/p&gt;

&lt;p&gt;Before changing the protocol, I would keep the table as regression fixtures and add runner-level assertions for stored content and consumed turns. A parser change can alter which answers readers see even when the generated words stay exactly the same.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Why an Agent Mention Needs a Round-Trip Test</title>
      <dc:creator>Zack Chew</dc:creator>
      <pubDate>Tue, 22 Sep 2026 06:24:19 +0000</pubDate>
      <link>https://dev.to/zackchew/why-an-agent-mention-needs-a-round-trip-test-5gi6</link>
      <guid>https://dev.to/zackchew/why-an-agent-mention-needs-a-round-trip-test-5gi6</guid>
      <description>&lt;p&gt;An agent-routing prompt should advertise only handles that its resolver can send back to the intended member. Generating a plausible handle covers half that contract. The other half requires resolving it against the actual group membership and checking the returned identity.&lt;/p&gt;

&lt;p&gt;I build OpenClaw Launch. Its group-routing helper makes this check explicit. The behavior described here belongs to that helper; other systems can define mentions differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two transformations, one destination
&lt;/h2&gt;

&lt;p&gt;The first transformation starts with a display name. &lt;code&gt;mentionHandle&lt;/code&gt; keeps Unicode letters and numbers, underscores, and hyphens. It removes spaces and other punctuation. This produces a token that can appear after an &lt;code&gt;@&lt;/code&gt; without breaking at a space.&lt;/p&gt;

&lt;p&gt;Resolution applies another transformation. &lt;code&gt;resolveMentions&lt;/code&gt; extracts tokens containing the same allowed characters. It then uses &lt;code&gt;slug&lt;/code&gt; to lowercase the token and remove everything except Unicode letters and numbers. Underscores and hyphens survive handle generation but disappear during matching.&lt;/p&gt;

&lt;p&gt;That difference creates possible collisions. Distinct display names can produce handles that compare identically. A successful string transformation gives no assurance that the destination is unique.&lt;/p&gt;

&lt;p&gt;Consider this tiny illustrative example with invented test labels. Member &lt;code&gt;m1&lt;/code&gt; is named &lt;code&gt;Cedar Lab!&lt;/code&gt;. Its generated handle is &lt;code&gt;CedarLab&lt;/code&gt;, and &lt;code&gt;@CedarLab&lt;/code&gt; resolves to &lt;code&gt;m1&lt;/code&gt; when that is the only matching member. Add member &lt;code&gt;m2&lt;/code&gt;, named &lt;code&gt;Cedar-Lab&lt;/code&gt;. Both display names now have the slug &lt;code&gt;cedarlab&lt;/code&gt;. Resolving either generated handle produces no recipient because the match is ambiguous. These examples show the resolver’s expected behavior.&lt;/p&gt;

&lt;p&gt;The resolver deliberately skips a token unless exactly one member matches. It first compares complete display-name slugs. Only when that produces no matches does it try individual whitespace-separated words from display names. A short mention can therefore work when its word match is unique. An ambiguous complete-name match never proceeds to that fallback.&lt;/p&gt;

&lt;p&gt;This ordering deserves its own test. A member whose entire normalized name matches a token takes precedence over members that contain the token as one word. Testing only familiar short names would miss that distinction.&lt;/p&gt;

&lt;p&gt;Unicode letters are supported by the regular expressions, so a name does not need to use Latin characters. There is still a narrower boundary here. The helper performs no Unicode normalization, and its allowed categories exclude combining marks. Precomposed accented letters and visually similar decomposed sequences can consequently transform differently. Include both forms if your naming interface accepts them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resolve the handle back to its intended member
&lt;/h2&gt;

&lt;p&gt;The prompt builder closes the round trip before advertising another member. It generates that member's handle, resolves &lt;code&gt;@handle&lt;/code&gt; against the full membership list, and requires exactly one result with the same member ID. Checking the ID matters. Merely finding some unique recipient would allow a handle to point at the wrong person.&lt;/p&gt;

&lt;p&gt;Using the full membership list also matters. A member who is unavailable for this turn can still make another name ambiguous. Removing unavailable members before checking uniqueness would validate against a different namespace from the resolver's actual input.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test routing separately from delivery
&lt;/h2&gt;

&lt;p&gt;Recommended tests can follow these boundaries directly. For each advertised handle, assert that resolution returns exactly its intended ID. Include spaces and punctuation in the fixtures, then add colliding names. Check an empty generated handle separately. Exercise Unicode names and decomposed accents, and verify that repeated mentions return a member only once.&lt;/p&gt;

&lt;p&gt;After resolution, test recipient eligibility independently. &lt;code&gt;selectRecipients&lt;/code&gt; excludes the sender and members already recorded as having spoken. A correctly resolved mention can therefore produce no scheduled recipient.&lt;/p&gt;

&lt;p&gt;Those checks cover the helper contract. A separate end-to-end test should carry the advertised handle through generated reply text, recipient selection, and actual delivery. Inspecting these functions alone cannot establish that the last step happened.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>testing</category>
      <category>ai</category>
    </item>
    <item>
      <title>Get a Second Opinion from Hermes and OpenClaw in One Chat</title>
      <dc:creator>Zack Chew</dc:creator>
      <pubDate>Sun, 13 Sep 2026 11:40:54 +0000</pubDate>
      <link>https://dev.to/zackchew/get-a-second-opinion-from-hermes-and-openclaw-in-one-chat-4ei5</link>
      <guid>https://dev.to/zackchew/get-a-second-opinion-from-hermes-and-openclaw-in-one-chat-4ei5</guid>
      <description>&lt;p&gt;Compare both bots' replies in one conversation, without copying the first answer into another chat.&lt;/p&gt;

&lt;p&gt;In a live test, a group chat was asked for two opinions on a simple question: should a new startup use Postgres or MongoDB?&lt;/p&gt;

&lt;p&gt;OpenClaw answered first. Then it brought Hermes into the conversation to give its own recommendation. The user had not typed an @mention or copied the answer into another chat.&lt;/p&gt;

&lt;p&gt;Both picked Postgres, but explained the choice differently. OpenClaw focused on database features. Hermes focused on how uncertain a startup's future queries can be. The useful part was being able to read both replies, with each one attributed to the bot that produced it.&lt;/p&gt;

&lt;p&gt;I build OpenClaw Launch, and this is now possible in the website's group chat: you can put Hermes and OpenClaw bots in one conversation and let them pass a question to each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the conversation works
&lt;/h2&gt;

&lt;p&gt;A group has a default bot: the first one you select when creating it. Send a message without addressing anyone, and that bot gets the first turn.&lt;/p&gt;

&lt;p&gt;It can answer directly. When another perspective is useful, it can mention another member of the group. That sends the receiving bot your original question together with the first bot's reply. The receiving bot then answers under its own name in the same conversation.&lt;/p&gt;

&lt;p&gt;You can also address a specific bot yourself with its @mention. Asking for a second opinion gives the default bot a clear reason to involve someone else, without requiring you to route every message manually.&lt;/p&gt;

&lt;p&gt;For someone who already asks two agents to review the same decision, this puts the exchange in one place. You can follow the question, the handoff, and the response without moving the first answer between separate chats.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it with your own bots
&lt;/h2&gt;

&lt;p&gt;Start with a running Hermes bot and a running OpenClaw bot in your OpenClaw Launch account.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the dashboard's chat sidebar and click the + button.&lt;/li&gt;
&lt;li&gt;Choose “Create group chat.”&lt;/li&gt;
&lt;li&gt;Give the group a name and select the bots to include. Pick your preferred default responder first.&lt;/li&gt;
&lt;li&gt;Create the group and send a question that would benefit from a second perspective.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A useful first prompt is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Give me your recommendation on this decision, explain your assumptions, and ask another bot in this group for a second opinion.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Add the decision and the relevant facts underneath it. For a writing task, include the draft. For a technical choice, describe the constraints. The more self-contained the question, the less the receiving bot has to guess.&lt;/p&gt;

&lt;p&gt;Look for a reply attributed to the second bot. That is how you can tell it actually joined the exchange.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give each bot a clear job
&lt;/h2&gt;

&lt;p&gt;A second opinion is the easiest place to start because the request has a clear endpoint. One bot gives its recommendation, another examines it, and you decide what to do with the answers.&lt;/p&gt;

&lt;p&gt;You can make the request more specific as well. Here are two examples to try:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review a draft: ask one bot to propose a version, then ask another to identify unclear wording or unsupported claims.&lt;/li&gt;
&lt;li&gt;Review a plan: ask one bot to outline the steps, then ask another to look for missing prerequisites and assumptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are suggested workflows, not measured results. What the bots can contribute depends on their models, instructions, and available tools. Naming a bot “researcher” does not give it access to sources it cannot already reach.&lt;/p&gt;

&lt;p&gt;For a first group, I would start with two bots and one concrete question. It is easier to judge whether the extra reply helped when you know what you wanted it to check.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is shared, and what stays separate
&lt;/h2&gt;

&lt;p&gt;The group gives you one visible conversation. Each bot remains a separate agent with its own setup. Creating a group does not merge their private chat histories, files, or tools.&lt;/p&gt;

&lt;p&gt;The handoff carries your question and the sending bot's reply. If a task depends on a document or detail from elsewhere, include the necessary information or make it accessible to the bot that needs it.&lt;/p&gt;

&lt;p&gt;The second bot also sees the first bot's answer. This is a second perspective in a conversation; it is not a blind evaluation. Agreement does not prove a conclusion is correct, and disagreement still needs your judgment.&lt;/p&gt;

&lt;p&gt;Each additional bot response involves another agent run, so it adds model usage. Group chat bounds the number of handoffs and prevents the same member from being called repeatedly within one user turn. That keeps the exchange finite; it does not make additional replies free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a question you already ask twice
&lt;/h2&gt;

&lt;p&gt;If you already take a draft, a plan, or a technical decision to more than one agent, try that same task in a group. Read what each bot adds and whether its assumptions hold up.&lt;/p&gt;

&lt;p&gt;Hermes and OpenClaw group chat is available on &lt;a href="https://openclawlaunch.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-09-12-hermes-openclaw-group-chat" rel="noopener noreferrer"&gt;OpenClaw Launch&lt;/a&gt;. Create a group with your bots and ask for a second opinion.&lt;/p&gt;

&lt;p&gt;The question I want to explore next is which pairings add useful information, and when a single bot would have been enough.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>OpenClaw + GLM 5.3 Flash — Opus-Class Scores at Flash Cost</title>
      <dc:creator>Zack Chew</dc:creator>
      <pubDate>Thu, 27 Aug 2026 14:14:22 +0000</pubDate>
      <link>https://dev.to/zackchew/openclaw-glm-53-flash-opus-class-scores-at-flash-cost-kic</link>
      <guid>https://dev.to/zackchew/openclaw-glm-53-flash-opus-class-scores-at-flash-cost-kic</guid>
      <description>&lt;p&gt;For a week an anonymous model called ox-alpha sat at the top of OpenRouter and OpenCode with nobody knowing who made it. On 26 August 2026 Z.ai (Zhipu AI) revealed it as GLM 5.3 Flash and open-sourced the weights under MIT the same day. Here is what it actually is, what the benchmarks support, and how to run it on an OpenClaw agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What GLM 5.3 Flash Is
&lt;/h2&gt;

&lt;p&gt;GLM 5.3 Flash is a mixture-of-experts model with 320 billion total parameters and about 18 billion active per token. It is the first natively multimodal model in the GLM-5 series — text, images and video go in, text comes out — and unlike GLM 5.3, which was a post-training re-tune of GLM 5.2's base, it starts from a newly trained base model.&lt;/p&gt;

&lt;p&gt;Despite the name, it is not a distilled small sibling of GLM 5.3. It is a different architecture aimed at a different goal: keep frontier-level capability while cutting the cost of serving it. Z.ai reports that against GLM 5.3 it reduces attention compute by 3.01x and KV cache size by 4.44x.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hybrid sparse + linear attention — linear attention models local dependencies, a lightweight sparse indexer retrieves global context. Z.ai calls it the first open-source frontier model to combine the two.&lt;/li&gt;
&lt;li&gt;mHC (Manifold-Constrained Hyper-Connections) for scaling efficiency, plus IndexPool, which compresses four indexer key vectors into one to keep 1M-token contexts affordable.&lt;/li&gt;
&lt;li&gt;30T-token multimodal pre-training corpus, and 45 layers against the 92 of the similarly sized GLM-4.5.&lt;/li&gt;
&lt;li&gt;MIT license, weights published at launch — a notable contrast with GLM 5.3, which shipped API-first with Zhipu saying weights would follow about two weeks later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The ox-alpha Reveal
&lt;/h2&gt;

&lt;p&gt;Z.ai confirms it tested the model anonymously as &lt;code&gt;ox-alpha&lt;/code&gt; on OpenCode and OpenRouter before release to collect unbiased user feedback, and that it became the most popular model of that week. Both of those are Z.ai's own account of its pre-launch testing rather than an independent audit. Z.ai also states that all of that traffic was served on Chinese AI chips, on an SGLang-based inference stack it built for the architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Benchmark Numbers
&lt;/h2&gt;

&lt;p&gt;Artificial Analysis scores GLM 5.3 Flash at an intelligence index of 57.5, with 71.5 on coding and 58.2 on agentic tasks. Placed next to Claude Opus 4.8 on the same index, the shape of the result is specific rather than a blanket win:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Intelligence&lt;/th&gt;
&lt;th&gt;Coding&lt;/th&gt;
&lt;th&gt;Agentic&lt;/th&gt;
&lt;th&gt;Price (in / out per 1M)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GLM 5.3 Flash&lt;/td&gt;
&lt;td&gt;57.5&lt;/td&gt;
&lt;td&gt;71.5&lt;/td&gt;
&lt;td&gt;58.2&lt;/td&gt;
&lt;td&gt;$0.075 / $0.25 (promo; $0.15 / $0.50 list)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4.8&lt;/td&gt;
&lt;td&gt;57.3&lt;/td&gt;
&lt;td&gt;74.3&lt;/td&gt;
&lt;td&gt;49.4&lt;/td&gt;
&lt;td&gt;$5.00 / $25.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM 5.3&lt;/td&gt;
&lt;td&gt;59.5&lt;/td&gt;
&lt;td&gt;74.8&lt;/td&gt;
&lt;td&gt;59.1&lt;/td&gt;
&lt;td&gt;$1.40 / $4.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM 5.2&lt;/td&gt;
&lt;td&gt;52.6&lt;/td&gt;
&lt;td&gt;68.8&lt;/td&gt;
&lt;td&gt;45.7&lt;/td&gt;
&lt;td&gt;$1.40 / $4.40&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read that honestly: GLM 5.3 Flash is level with Opus 4.8 on the composite index, ahead on agentic work, and behind on coding. The price gap against Opus is roughly 1/70 on input and 1/100 on output at today's promotional rate — still about 1/33 and 1/50 once it reverts to list. And it is not ahead of GLM 5.3 on any of the three: it is close, for about 5% of GLM 5.3's token cost today and around 11% at list price.&lt;/p&gt;

&lt;p&gt;Z.ai's own reported results, which are vendor numbers and should be read as such, put it at 63.4 against GLM 5.2's 46.2 on DeepSWE v1.1, and 48.8 against 26.2 on AutomationBench. On Z.ai's internal Code Bench v1.0 at max effort it reports 29.0 against Opus 4.8's 29.5.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing, and the Part That Expires
&lt;/h2&gt;

&lt;p&gt;The headline price is a limited-time discount, not the list price. Z.ai's published rates per million tokens:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;List&lt;/th&gt;
&lt;th&gt;Limited-time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;$0.15&lt;/td&gt;
&lt;td&gt;$0.075&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cached input&lt;/td&gt;
&lt;td&gt;$0.03&lt;/td&gt;
&lt;td&gt;$0.015&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;$0.25&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Budget against the list price if you are planning a workload that has to survive the promotion ending. Even at list, $0.15 / $0.50 is roughly a tenth of what GLM 5.3 costs. Cached-input storage is currently free for a limited time as well.&lt;/p&gt;

&lt;p&gt;If you subscribe to the GLM Coding Plan instead of paying per token, Z.ai gives GLM 5.3 Flash three times the quota of GLM 5.3 under its points system, and charges half points off-peak and all weekend.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Run GLM 5.3 Flash on OpenClaw Launch
&lt;/h2&gt;

&lt;p&gt;GLM 5.3 Flash is available through OpenRouter as &lt;code&gt;z-ai/glm-5.3-flash&lt;/code&gt; and directly from Z.ai as &lt;code&gt;glm-5.3-flash&lt;/code&gt;. Both routes work with a bring-your-own-key setup:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deploy an agent — about 30 seconds. Bring-your-own-key model selection needs a paid plan; the free trial runs on a fixed set of free models, so use it to check the product, not this model.&lt;/li&gt;
&lt;li&gt;In your dashboard, add your &lt;a href="https://openrouter.ai/keys" rel="noopener noreferrer"&gt;OpenRouter key&lt;/a&gt; (or a direct Z.AI key) under BYOK settings.&lt;/li&gt;
&lt;li&gt;Open the model picker and type glm 5.3 flash. Searching reveals the live provider catalog, not just the curated shortlist, so the model appears as soon as your provider lists it — no redeploy, no config file.&lt;/li&gt;
&lt;li&gt;Select it. The change applies to the running agent immediately.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tip: switch between GLM 5.3 Flash, GLM 5.3, DeepSeek and Claude at any time from the dashboard or with the &lt;code&gt;/model&lt;/code&gt; chat command. A common setup is GLM 5.3 Flash as the everyday driver — cheap enough to leave running on a busy group chat — with a frontier model reserved for hard reviews.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-Hosted Configuration
&lt;/h2&gt;

&lt;p&gt;Running OpenClaw on your own server? Point the default agent at the model in your &lt;code&gt;openclaw.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"providers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"openrouter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sk-or-..."&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"primary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openrouter/z-ai/glm-5.3-flash"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm the current slug on &lt;a href="https://openrouter.ai/models" rel="noopener noreferrer"&gt;openrouter.ai/models&lt;/a&gt; before deploying rather than copying it from any guide, including this one — provider IDs shift between releases and a stale slug surfaces as a model-not-found error. Using a direct Z.AI key instead? Configure it as an OpenAI-compatible provider with its own base URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Things That Will Surprise You
&lt;/h2&gt;

&lt;p&gt;Thinking cannot be turned off. Reasoning is mandatory on this model — Z.ai's API accepts only &lt;code&gt;thinking.type: "enabled"&lt;/code&gt;, and OpenRouter reports reasoning as mandatory with a default effort of &lt;code&gt;max&lt;/code&gt;. If you are used to disabling reasoning to cut latency and output tokens on cheap models, that lever does not exist here. Budget for reasoning tokens in your output cost.&lt;/p&gt;

&lt;p&gt;Z.ai's recommended settings are unusual. Temperature &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;top_p 0.95&lt;/code&gt;, &lt;code&gt;reasoning_effort: max&lt;/code&gt;, and &lt;code&gt;thinking.clear_thinking: false&lt;/code&gt;. For streaming, enable both &lt;code&gt;stream&lt;/code&gt; and &lt;code&gt;tool_stream&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The context ceiling is provider-dependent. OpenRouter advertises up to 1,310,720 tokens across providers but the top provider serves 1,048,576 with a 131,072 max completion. Long-context agent runs should be planned against the endpoint you are actually billed by, not the maximum in the catalog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running the Weights Yourself
&lt;/h2&gt;

&lt;p&gt;The weights are MIT-licensed and published as &lt;a href="https://huggingface.co/zai-org/GLM-5.3-Flash" rel="noopener noreferrer"&gt;zai-org/GLM-5.3-Flash&lt;/a&gt; on Hugging Face, with official serving recipes for SGLang, vLLM, TokenSpeed and KTransformers. 320B total parameters is still a serious hosting commitment even at 18B active — the practical local path is a quantised community build rather than the full BF16 checkpoint. If you want the agent running today, an API key is the shorter road.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Pick It
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pick&lt;/th&gt;
&lt;th&gt;When&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GLM 5.3 Flash&lt;/td&gt;
&lt;td&gt;High-volume agent work, long-running tool loops, screenshot- or video-driven tasks, anything where per-token cost decides whether you can leave it running&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM 5.3&lt;/td&gt;
&lt;td&gt;You want the strongest GLM on hard coding and security review and the cost difference does not bind&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4&lt;/td&gt;
&lt;td&gt;Text-only workloads where you already have DeepSeek keys and pipelines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus&lt;/td&gt;
&lt;td&gt;Coding is the whole job and the last few benchmark points are worth two orders of magnitude on the bill&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The interesting case is the one that was not viable before: an agent that watches a chat, calls tools all day, and reads screenshots, running continuously without the token bill becoming the reason you turn it off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy with GLM 5.3 Flash
&lt;/h2&gt;

&lt;p&gt;Get an agent running on a model that matches Opus 4.8 on the intelligence index for a fraction of the token price, in about 30 seconds. Bring your own OpenRouter or Z.AI key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openclawlaunch.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-08-27-glm-5-3-flash" rel="noopener noreferrer"&gt;Deploy an agent at openclawlaunch.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I run OpenClaw Launch, a small hosted service for OpenClaw and Hermes agent bots, which is where the setup steps above come from.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>llm</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Hermes Agent System Requirements — RAM, CPU, Disk, Python, OS 2026</title>
      <dc:creator>Zack Chew</dc:creator>
      <pubDate>Sat, 22 Aug 2026 12:06:23 +0000</pubDate>
      <link>https://dev.to/zackchew/hermes-agent-system-requirements-ram-cpu-disk-python-os-2026-56mp</link>
      <guid>https://dev.to/zackchew/hermes-agent-system-requirements-ram-cpu-disk-python-os-2026-56mp</guid>
      <description>&lt;p&gt;Hermes Agent runs comfortably on modest hardware for chat-only workloads, but the browser toolset and large model contexts push memory and disk fast. Here's the minimum, the recommended, and where the bottlenecks actually are in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  At a Glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Minimum&lt;/th&gt;
&lt;th&gt;Recommended&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RAM&lt;/td&gt;
&lt;td&gt;1 GB&lt;/td&gt;
&lt;td&gt;2–4 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU&lt;/td&gt;
&lt;td&gt;1 vCPU&lt;/td&gt;
&lt;td&gt;2 vCPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disk&lt;/td&gt;
&lt;td&gt;2 GB&lt;/td&gt;
&lt;td&gt;10 GB+ (with browser toolset)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;3.11&lt;/td&gt;
&lt;td&gt;3.12 or 3.13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;Installed for you — only the browser toolset uses it&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OS&lt;/td&gt;
&lt;td&gt;Linux / macOS / Windows / WSL2&lt;/td&gt;
&lt;td&gt;Linux x86_64 or arm64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None (models are remote)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network&lt;/td&gt;
&lt;td&gt;Outbound 443&lt;/td&gt;
&lt;td&gt;Outbound 443 + inbound for webhooks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  RAM
&lt;/h2&gt;

&lt;p&gt;We host Hermes Agent, so rather than estimate, we measured. Across &lt;strong&gt;31 live Hermes containers&lt;/strong&gt; on our fleet, resident memory came in at a &lt;strong&gt;median of 282 MB&lt;/strong&gt;, with a minimum of 139 MB and a maximum of 858 MB. Those are real resident figures, not values clamped by a container limit — the containers are capped at 2–4 GB and nothing was close to its ceiling.&lt;/p&gt;

&lt;p&gt;The number that matters for sizing is the peak, not the median. A container caught mid-response — actually generating, tools running — touched &lt;strong&gt;1.1 GB&lt;/strong&gt;. That is the figure to size against, because it is what your box has to absorb on a busy turn. Large context windows (Claude 200k, Gemini 1M) push the working set up transiently in the same way.&lt;/p&gt;

&lt;p&gt;A separate browser container adds only &lt;strong&gt;8–95 MB&lt;/strong&gt; at idle, which is far less than people expect — the cost of the browser toolset is mostly disk and burst, not steady-state memory.&lt;/p&gt;

&lt;p&gt;For a single-user VPS, 2 GB is comfortable. For multi-user managed hosting, plan on ~1 GB per concurrent active container.&lt;/p&gt;

&lt;p&gt;Worth knowing before you over-buy: the browser toolset is &lt;strong&gt;not on by default&lt;/strong&gt;. It ships as a core toolset but stays inactive until you add &lt;code&gt;browser&lt;/code&gt; to &lt;code&gt;toolsets&lt;/code&gt; in your config. So the higher numbers on this page are a ceiling you opt into, not the baseline you start from — a stock install sizes against the chat-only figures.&lt;/p&gt;

&lt;h2&gt;
  
  
  CPU
&lt;/h2&gt;

&lt;p&gt;Hermes Agent is mostly I/O bound — it waits on model responses, network webhooks, and disk reads. 1 vCPU is enough for low-volume use; 2 vCPU helps when the browser toolset is rendering pages or skills do CPU-heavy parsing (PDF, video).&lt;/p&gt;

&lt;p&gt;Measured on the same 31 containers: an idle Hermes agent sits at &lt;strong&gt;0.2–0.7% CPU&lt;/strong&gt;. It is doing essentially nothing while it waits. But a container actively generating a response was caught at &lt;strong&gt;over 100% — a full core saturated&lt;/strong&gt;. That gap is the whole story of sizing Hermes: idle cost is close to zero, so what you are really buying is headroom for concurrent bursts. One agent that is busy 5% of the time and 20 idle agents cost about the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disk
&lt;/h2&gt;

&lt;p&gt;The base install is small (under 500 MB), but the workspace at &lt;code&gt;~/.hermes&lt;/code&gt; grows with chat history, embeddings, and any files your agent touches. Enabling the browser toolset pulls a full Playwright Chromium plus per-session profile data, which is the single biggest jump in disk use. For reference, the official multi-arch Docker image is roughly 900 MB compressed before any of your data. Plan on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2 GB&lt;/strong&gt; — minimum, chat-only, ephemeral workspace&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10 GB&lt;/strong&gt; — comfortable for browser toolset + memory store&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;20 GB+&lt;/strong&gt; — if you keep long chat history and large skill data&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Python Version (Not Node.js)
&lt;/h2&gt;

&lt;p&gt;Hermes Agent is a &lt;strong&gt;Python&lt;/strong&gt; project, and this trips people up constantly because so much of the agent ecosystem is Node. The requirement is &lt;strong&gt;Python 3.11 or newer, below 3.14&lt;/strong&gt; — the upper bound exists because Rust-backed dependencies like &lt;code&gt;pydantic-core&lt;/code&gt; don't ship wheels for 3.14 yet.&lt;/p&gt;

&lt;p&gt;You mostly don't install Python yourself. The official installer provisions it through &lt;code&gt;uv&lt;/code&gt; without sudo, so a clean box needs no manual Python setup at all.&lt;/p&gt;

&lt;p&gt;Node.js does get installed — the installer bundles v22, and the official Docker image builds on Node 26 — but it is a &lt;em&gt;secondary&lt;/em&gt; dependency, not a version you choose. It exists to run the browser automation (&lt;code&gt;agent-browser&lt;/code&gt;, resolved via &lt;code&gt;npx&lt;/code&gt; on first use) and the WhatsApp bridge. If you never enable the browser toolset, Node sits unused. So "what Node version does Hermes need?" is the wrong question to size a box around; Python is the runtime that matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  OS Support
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linux&lt;/strong&gt; — first-class, x86_64 and arm64&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS&lt;/strong&gt; — Intel and Apple Silicon, dev environments only&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows&lt;/strong&gt; — natively, via the PowerShell installer; WSL2 also works&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker&lt;/strong&gt; — the official image works on any OS that runs Docker&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  GPU? No.
&lt;/h2&gt;

&lt;p&gt;Hermes Agent does &lt;strong&gt;not&lt;/strong&gt; run local model inference. Model calls go to remote providers (OpenRouter, Anthropic, OpenAI, etc.) over HTTPS. You do not need a GPU. If you want local inference, point Hermes at a local Ollama or LM Studio endpoint — the GPU lives on the inference server, not the Hermes box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Network
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outbound 443&lt;/strong&gt; to your model provider (required)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inbound 80/443&lt;/strong&gt; if you accept channel webhooks (Telegram, Slack, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outbound to ClawHub / skill registries&lt;/strong&gt; if installing skills at runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sizing Cheat Sheet
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Personal bot, chat-only&lt;/strong&gt;: 1 vCPU / 1 GB RAM / 5 GB disk — any $4–5/mo VPS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personal bot + browser toolset&lt;/strong&gt;: 1 vCPU / 2 GB RAM / 10 GB disk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team bot, 5–10 concurrent users&lt;/strong&gt;: 2 vCPU / 4 GB RAM / 20 GB disk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production, 50+ concurrent&lt;/strong&gt;: 4 vCPU / 8 GB RAM / dedicated node&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Skip the Sizing
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://openclawlaunch.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-08-22-hermes-sizing" rel="noopener noreferrer"&gt;OpenClaw Launch&lt;/a&gt; hosts Hermes Agent on right-sized containers with the browser toolset, memory store, and channel webhooks pre-wired. Plans from $3/mo.&lt;/p&gt;

&lt;p&gt;Originally published at &lt;a href="https://openclawlaunch.com/guides/hermes-agent-system-requirements" rel="noopener noreferrer"&gt;openclawlaunch.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>devops</category>
      <category>docker</category>
    </item>
    <item>
      <title>Pinning an agent harness is harder than pinning its package</title>
      <dc:creator>Zack Chew</dc:creator>
      <pubDate>Sat, 15 Aug 2026 13:26:09 +0000</pubDate>
      <link>https://dev.to/zackchew/pinning-an-agent-harness-is-harder-than-pinning-its-package-nhd</link>
      <guid>https://dev.to/zackchew/pinning-an-agent-harness-is-harder-than-pinning-its-package-nhd</guid>
      <description>&lt;p&gt;DeepSeek shipped its own agent harness this week. MIT, developer preview, and the architecture is the interesting part: everything in it is a plugin, including the pieces you would expect to be the program.&lt;/p&gt;

&lt;p&gt;We had a reason to look closely, because we put it into a container image that other people run. That means pinning it, and pinning it turned out to be a different job from pinning the package.&lt;/p&gt;

&lt;h2&gt;
  
  
  The launcher is thin
&lt;/h2&gt;

&lt;p&gt;dsh is a small commander-based launcher. It parses a few flags of its own, then hands the rest of the argv to a booted app that has its own parser. Almost nothing you care about is in the launcher.&lt;/p&gt;

&lt;p&gt;That matters because dsh depends on its own family through caret ranges. Pin @deepseek-ai/dsh at an exact version and you still get @deepseek-ai/dsh-base and @deepseek-ai/dsh-headless at ^0.1.0-rc.6. The permission rows, which decide what the agent may touch, ship inside dsh-base as a patch layer. The parsing that decides whether your task text is a task or a flag lives in dsh-headless.&lt;/p&gt;

&lt;p&gt;So the failure mode is quiet. Rebuild the image a week later, after either dependency publishes, and the behaviour of every run changes. Meanwhile dsh --version prints exactly the version you pinned, and every test that checks the version passes.&lt;/p&gt;

&lt;p&gt;The fix is a build-time assert on the whole family rather than the launcher alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two dashes, not one
&lt;/h2&gt;

&lt;p&gt;The second thing cost an hour. Running a task by hand works the way the docs show:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dsh --profile headless "run the tests"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Send the same task through a runner that builds argv programmatically and it arrives as flags instead of a prompt. The launcher consumes one -- separator and the booted app consumes another, so a task passed positionally needs both:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dsh --profile headless -- -- "run the tests"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The reason this is worth writing down rather than shrugging at is the silent-success case. If the task text happens to begin with something that parses as a flag, you do not get an error. You get exit code 0, no output, and a run that did nothing. That is the worst shape a bug can have in an unattended pipeline, because nothing downstream notices.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the sandbox actually does
&lt;/h2&gt;

&lt;p&gt;The permission mode moves both the approval policy and the sandbox together, which is convenient right up until you assume the sandbox is doing something it is not. In our image it is not. The default confinement relies on bwrap, which is absent there, and on Landlock, which is unreadable in that context. On macOS the same setting confines through Seatbelt and genuinely does what it says.&lt;/p&gt;

&lt;p&gt;So the honest description of a container run is that the confinement is advisory. That is fine when the container is the boundary you are relying on, which it is for us, but it is worth knowing which layer is actually holding the line rather than assuming it is the one named in the config.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this leaves it
&lt;/h2&gt;

&lt;p&gt;None of this is a complaint about a package that has been public for a couple of days and says plainly that it is a developer preview. It is what a plugin architecture costs on the operations side: when everything is a plugin, the version number of the thing you installed stops describing the thing you are running.&lt;/p&gt;

&lt;p&gt;If you want to try it without any of the above, it is npx and a key. If you want it to behave the same next month, assert the family.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>opensource</category>
      <category>node</category>
    </item>
    <item>
      <title>Five things I disabled before installing a vendor's agent runtime</title>
      <dc:creator>Zack Chew</dc:creator>
      <pubDate>Thu, 13 Aug 2026 08:08:31 +0000</pubDate>
      <link>https://dev.to/zackchew/five-things-i-disabled-before-installing-a-vendors-agent-runtime-1djo</link>
      <guid>https://dev.to/zackchew/five-things-i-disabled-before-installing-a-vendors-agent-runtime-1djo</guid>
      <description>&lt;p&gt;Two services I connected recently both call the thing they ship a "skill". One is a hosted endpoint. The other is a zip file. The review those two need has almost nothing in common, and I do not think the word is doing anyone any favours.&lt;/p&gt;

&lt;p&gt;Luckin Coffee runs an MCP server at their own domain. My agent sends JSON-RPC over HTTPS, and their code stays on their machines. The questions there are the familiar ones. What can it see, what scopes did I grant, can it spend my money.&lt;/p&gt;

&lt;p&gt;Quark Drive, Alibaba's consumer cloud storage, ships a package instead. You download a zip, unpack Node scripts, and those scripts run inside your agent's process with your filesystem and your egress. The question is no longer what you granted. It is what that code does while it sits there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credit where it is due
&lt;/h2&gt;

&lt;p&gt;Quark distributes the runtime from its own manifest and CDN, and authorization goes through an official OAuth endpoint scoped for agents. The token lands in the user's own instance and nobody proxies it.&lt;/p&gt;

&lt;p&gt;That matters because the alternative, which I have also written adapters for, is scraping a website's internal endpoints and praying they do not rotate. A vendor that publishes a real package and a real OAuth flow is doing the right thing.&lt;/p&gt;

&lt;p&gt;Which is exactly why it is worth reading the package instead of assuming.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is inside is a CLI's habits
&lt;/h2&gt;

&lt;p&gt;I unpacked version 1.0.11 and read it. What I found is what a desktop command line tool would reasonably ship.&lt;/p&gt;

&lt;p&gt;Telemetry sampling is hardcoded at 1, so every event goes up. One call hands the raw user query to the telemetry client. Another reports a session id. The startup chain includes a self updater.&lt;/p&gt;

&lt;p&gt;For a tool you open, use, and close, all four are defensible. Full-rate telemetry on a young product is how you find bugs. A self updater means users get fixes without being told to upgrade.&lt;/p&gt;

&lt;p&gt;Now move the same code into a process that runs for months, holds a user's cloud storage token, and shares an address space with other skills.&lt;/p&gt;

&lt;p&gt;The raw query stops being a search string. In an agent it is frequently the user's actual sentence, which carries filenames and people and reasons. And the self updater means the code you reviewed on Tuesday is not necessarily the code running on Friday. On a desktop that is a feature. For something holding a user's files, I would like to know when it changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the install actually does
&lt;/h2&gt;

&lt;p&gt;Version pinned at 1.0.11. Archive URL and SHA-256 both hardcoded. Download, hash, and abort on mismatch before anything is unpacked.&lt;/p&gt;

&lt;p&gt;After unpacking, copy exactly two files, &lt;code&gt;scripts/quark-drive.cjs&lt;/code&gt; and &lt;code&gt;scripts/hash-worker.cjs&lt;/code&gt;, after asserting both exist. The upstream &lt;code&gt;install.sh&lt;/code&gt; never runs.&lt;/p&gt;

&lt;p&gt;Then five targeted edits to the runtime:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;sampleRate:1&lt;/code&gt; becomes &lt;code&gt;sampleRate:0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;the telemetry client constructor becomes a &lt;code&gt;Proxy&lt;/code&gt; whose every method is a no-op&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;setRawQuery&lt;/code&gt; call becomes a discard&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;setSessionId&lt;/code&gt; call becomes a discard&lt;/li&gt;
&lt;li&gt;the self updater is removed from the startup chain&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A wrapper sits outside all of it and refuses &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;--verbose&lt;/code&gt;, &lt;code&gt;--session-input&lt;/code&gt;, &lt;code&gt;--session-id&lt;/code&gt; and &lt;code&gt;--raw-query&lt;/code&gt; with exit code 2. Execution goes through &lt;code&gt;env -i&lt;/code&gt; so the child gets &lt;code&gt;HOME&lt;/code&gt;, &lt;code&gt;PATH&lt;/code&gt;, &lt;code&gt;LANG&lt;/code&gt;, &lt;code&gt;BROWSER=false&lt;/code&gt;, &lt;code&gt;CI=1&lt;/code&gt; and nothing else.&lt;/p&gt;

&lt;p&gt;Upgrades stage into a temp directory, move the old tree aside, and roll it back if the swap fails. The user's existing &lt;code&gt;config.json&lt;/code&gt; holds their OAuth token, so it is checked with &lt;code&gt;lstat&lt;/code&gt; for being a regular file under 1 MiB before being copied forward, into a 700 directory at 600.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part worth stealing
&lt;/h2&gt;

&lt;p&gt;Every one of those five edits asserts an exact occurrence count before it applies. Three for the sampling pattern, one each for the rest. If the count is off, the install throws with the label and the number it actually found.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;unexpected quark runtime: self updater (0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is why that matters more than the edits themselves. When upstream refactors, a naive string replace matches nothing and reports success. The install completes, the tree looks right, and the telemetry and self updater are running exactly as they always were. You are now shipping a build you believe is hardened and is not.&lt;/p&gt;

&lt;p&gt;Counting turns that silent success into a loud failure. I would rather the install break and make me read the new version than have it quietly hand me a false sense of what I disabled.&lt;/p&gt;

&lt;p&gt;That generalizes past this package. Any time you patch someone else's code as part of a build, assert the shape you expected to find. A patch that no-ops is worse than a patch that fails, because only one of them tells you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question I ask now
&lt;/h2&gt;

&lt;p&gt;Services decoupling from platforms is real. Capability ships as a skill, every agent can read it, and the aggregator in the middle stops being mandatory.&lt;/p&gt;

&lt;p&gt;What changed underneath is where the integration lives. Calling someone's API and hosting someone's code are different risks wearing the same word. The worst case for the first is that you do not get your data. The worst case for the second is behaviour you did not ask for, running next to everything your agent can reach.&lt;/p&gt;

&lt;p&gt;So the first thing I want to know about a new skill is whose machine it runs on. For a hosted endpoint, read the scopes and find out whether it can spend money. For a package, find out whether the self updater can be turned off, what it reports, and whether you can pin a version and verify it.&lt;/p&gt;

&lt;p&gt;The Quark package works well once it is pinned. Search, upload, download, share and save all behave. Its AI summarization sends the selected file's contents back to Quark, which is the sort of thing a user should get to decide for themselves rather than discover later.&lt;/p&gt;

&lt;p&gt;I run a small hosted service for agent bots and this is one of about 135 connectors we maintain, so I read a lot of these packages. &lt;a href="https://openclawlaunch.com?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-08-12-agent-runtime" rel="noopener noreferrer"&gt;openclawlaunch.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>ai</category>
      <category>security</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Nous Portal, Explained: Plans, Models, Tools, and Hermes Cloud</title>
      <dc:creator>Zack Chew</dc:creator>
      <pubDate>Sun, 02 Aug 2026 12:36:29 +0000</pubDate>
      <link>https://dev.to/zackchew/nous-portal-explained-plans-models-tools-and-hermes-cloud-9hh</link>
      <guid>https://dev.to/zackchew/nous-portal-explained-plans-models-tools-and-hermes-cloud-9hh</guid>
      <description>&lt;h2&gt;
  
  
  What is Nous Portal?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://portal.nousresearch.com" rel="noopener noreferrer"&gt;Nous Portal&lt;/a&gt; launched on April 27, 2026 as Nous Research’s subscription product for users who want to run Hermes Agent without managing API keys for every model and tool provider. One subscription replaces logins to a model gateway plus Firecrawl, FAL, Krea, Browser Use, OpenAI audio, and Modal — Portal routes all of those behind a single authenticated session. Since then it has also grown a hosting product, Hermes Cloud, covered below.&lt;/p&gt;

&lt;p&gt;The free tier is $0/mo and carries $0 in monthly credits — it gives you the free-model catalog and standard rate limits only. Every paid tier adds a credit budget with a 10% bonus, the bundled Tool Gateway, and higher rate limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portal plans
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free: $0/mo, $0 monthly credits (free models only), no rollover, 50 RPM / 500K TPM&lt;/li&gt;
&lt;li&gt;Plus: $20/mo, $22 in credits, $10 rollover cap, 400 RPM / 4M TPM&lt;/li&gt;
&lt;li&gt;Super: $100/mo, $110 in credits, $50 rollover cap, 800 RPM / 8M TPM&lt;/li&gt;
&lt;li&gt;Ultra: $200/mo, $220 in credits, $100 rollover cap, 1,600 RPM / 16M TPM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also skip the subscription and top up credits directly (custom amount via Stripe); pay-as-you-go keys without a plan run at 180 RPM / 720K TPM. Plan details live on the Portal &lt;a href="https://portal.nousresearch.com/info" rel="noopener noreferrer"&gt;info page&lt;/a&gt;. Prices verified August 1, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Nous Portal Exists
&lt;/h2&gt;

&lt;p&gt;Running a capable AI agent on your own infrastructure used to mean signing up for and paying multiple providers: a model provider (Anthropic, OpenAI), a web search provider (Tavily or Exa), an image generation provider (FAL), a TTS provider, and optionally a browser automation provider. Each one has its own dashboard, billing, and quota. For users who just want to run Hermes Agent and use it, that’s a lot of plumbing.&lt;/p&gt;

&lt;p&gt;Nous Portal collapses that into one subscription. You pay one bill, you authenticate once, and Hermes Agent uses your Portal subscription to call models and tools automatically.&lt;/p&gt;

&lt;p&gt;Self-host it, put it on Portal’s own Hermes Cloud, or deploy a managed Hermes Agent here in about 30 seconds — no VPS, no Docker, no credit minimum.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openclawlaunch.com/hermes-hosting?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-08-02-nous-portal" rel="noopener noreferrer"&gt;Deploy a Hermes agent&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Included
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Models
&lt;/h2&gt;

&lt;p&gt;Portal lists 248 models plus 29 embedding models — Anthropic Claude, OpenAI GPT, Google Gemini, Meta Llama, Mistral, DeepSeek, Qwen, xAI Grok, and Nous Research’s own Hermes series, among others. Nous states plainly on its own info page that this catalog is &lt;a href="https://portal.nousresearch.com/info" rel="noopener noreferrer"&gt;powered by OpenRouter&lt;/a&gt;, and the model links on the Portal site point at openrouter.ai. Worth knowing before you compare: for third-party models you are paying Portal to sit in front of OpenRouter, not to replace it.&lt;/p&gt;

&lt;p&gt;Nous’s own models are the exception — Hermes-4.3–36B, Hermes-4–70B and Hermes-4–405B (128K context each) run on Nous’s own inference backend at inference-api.nousresearch.com/v1, which is OpenAI-compatible. That endpoint also supports x402 payments in Solana USDC (beta), which lets you make pay-per-request calls with no account and no API key at all.&lt;/p&gt;

&lt;p&gt;Some models are free for Portal subscribers; others bill against your monthly credit budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool Gateway (paid tiers)
&lt;/h2&gt;

&lt;p&gt;Paid Portal subscribers get automatic access to bundled tools, with no extra API keys needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web search &amp;amp; scraping — Firecrawl, billed at $0.0005 per credit&lt;/li&gt;
&lt;li&gt;Image generation — FAL (FLUX 2 Pro, Nano Banana Pro, Ideogram v3, Recraft v4, Qwen Image) and Krea, roughly $0.005-$0.26 per image&lt;/li&gt;
&lt;li&gt;Video generation — FAL, covering Veo 3.1, Kling v3, Seedance 2.0, PixVerse v6 and LTX-2 ($0.0017-$0.44 per unit)&lt;/li&gt;
&lt;li&gt;Speech in and out — OpenAI audio: Whisper transcription at $0.0063 per audio minute, plus GPT-4o transcribe and TTS billed per token&lt;/li&gt;
&lt;li&gt;Browser automation — Browser Use at $0.0011 per session minute, plus $4.20/GB proxy bandwidth&lt;/li&gt;
&lt;li&gt;Code execution — Modal sandboxes at $0.0495 per CPU-hour and $0.0084 per GiB-hour&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools route through Nous Research’s gateway. Hermes Agent picks them up automatically when you authenticate with a Portal subscription, no per-tool config required. Every tool call bills against the same credit balance as your models, so a heavy image or video session eats the same budget your inference does.&lt;/p&gt;

&lt;h2&gt;
  
  
  xAI Grok integration (May 2026)
&lt;/h2&gt;

&lt;p&gt;On May 15, 2026, Nous Research and xAI shipped a Grok integration that lets X Premium+ subscribers use their existing Grok subscription inside Hermes Agent — without paying separately for Grok API access. Grok 4.3, Grok TTS, and Grok Imagine all become available through the OAuth flow. See &lt;a href="https://openclawlaunch.com/news/nous-research-grok-subscribers-hermes-agent-tools" rel="noopener noreferrer"&gt;the launch coverage&lt;/a&gt; for details, or the upstream &lt;a href="https://hermes-agent.nousresearch.com/docs/guides/xai-grok-oauth" rel="noopener noreferrer"&gt;xAI Grok OAuth guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hermes Cloud — Nous now hosts the agent too
&lt;/h2&gt;

&lt;p&gt;The biggest change since Portal launched: it is no longer only a key-and-credits product. &lt;a href="https://portal.nousresearch.com/cloud" rel="noopener noreferrer"&gt;Hermes Cloud&lt;/a&gt; deploys a hosted Hermes Agent on a dedicated instance with its own workspace and dashboard, billed hourly from your Nous credit. It is currently in preview.&lt;/p&gt;

&lt;p&gt;You pick a size, and the instance price covers compute and storage only — inference and tool usage bill separately on top:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small: 1GB RAM, 2 vCPU, 5 concurrent sessions. $0.29/day running (about $8.70/mo), $0.03/day stopped&lt;/li&gt;
&lt;li&gt;Medium: 2GB RAM, 4 vCPU, 10 concurrent sessions. $0.56/day running (about $16.80/mo), $0.03/day stopped&lt;/li&gt;
&lt;li&gt;Large: 4GB RAM, 8 vCPU, 20 concurrent sessions. $1.09/day running (about $32.70/mo), $0.03/day stopped&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stopping an instance drops it to the storage-only rate and keeps your data, so an idle agent costs about $0.90/mo to keep alive. Deploying requires an active subscription or a credit balance — the Cloud page states a $10 minimum, while the info page’s getting-started steps say $2, so budget for the higher number. Nous picks the region closest to you from Amsterdam, Stockholm, Mumbai, Paris, Dallas, Frankfurt, Los Angeles, London, Tokyo, Chicago, Singapore, San Jose, Sydney and Toronto.&lt;/p&gt;

&lt;p&gt;Feature-wise it is what you would expect from a first-party host: one-click deploy, natural-language scheduling, Telegram / Discord / Slack / email / CLI channels against one shared memory, and an isolated hardened container per agent. On billing, the one rule Nous states unambiguously is the two-rate split: you pay the running rate while the instance is on and the storage rate while it is stopped.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch: Nous Portal in 90 seconds
&lt;/h2&gt;

&lt;p&gt;One note before you watch: this was recorded in July 2026, when Portal advertised a 300+ model catalog and five Tool Gateway backends. Nous has since restated the catalog as 248 models and added a sixth backend (Modal sandboxes) plus Hermes Cloud. The walkthrough of the setup flow is still accurate; the numbers above it are the current ones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=VvkBFyF14kk" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=VvkBFyF14kk&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Connect Nous Portal to Hermes Agent
&lt;/h2&gt;

&lt;p&gt;Two paths, depending on whether you’re self-hosting Hermes Agent or running it on managed infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-hosted Hermes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Subscribe at &lt;a href="https://portal.nousresearch.com" rel="noopener noreferrer"&gt;portal.nousresearch.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Generate a Portal API key from the dashboard&lt;/li&gt;
&lt;li&gt;In Hermes Agent, run hermes with no arguments to enter interactive setup, or edit your config.yaml&lt;/li&gt;
&lt;li&gt;Select Nous Portal as the provider and paste the API key&lt;/li&gt;
&lt;li&gt;Hermes will list available models from your subscription — pick your default&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once configured, the Tool Gateway features (search, image gen, TTS, browser) are picked up automatically — you don’t need separate API keys for Firecrawl, FAL, or Browser Use anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do You Actually Need Portal?
&lt;/h2&gt;

&lt;p&gt;Depends on where Hermes runs.&lt;/p&gt;

&lt;h3&gt;
  
  
  You self-host Hermes
&lt;/h3&gt;

&lt;p&gt;Portal is worth it. One login replaces a model provider, Firecrawl, FAL, a TTS key and Browser Use — and the Tool Gateway comes with it. The setup steps are above.&lt;/p&gt;

&lt;h3&gt;
  
  
  You’d rather not run a server
&lt;/h3&gt;

&lt;p&gt;You now have two managed options, and it is worth being straight about that. Hermes Cloud is Nous’s own, from $0.29/day plus inference — the tightest possible integration with Portal, though it is in preview and you need a credit balance or a subscription before you can deploy anything. &lt;a href="https://openclawlaunch.com/hermes-hosting?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-08-02-nous-portal" rel="noopener noreferrer"&gt;OpenClaw Launch’s Hermes hosting&lt;/a&gt; is the alternative: deploy in about 30 seconds with no credit minimum and no card for the free trial, run either Hermes Agent or OpenClaw from the same account, and reach channels Hermes Cloud doesn’t list — WhatsApp and WeChat included. Bring a Portal key if you want, or use our managed models and skip Portal entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nous Portal vs OpenRouter vs Per-Provider Keys
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Nous Portal
&lt;/h3&gt;

&lt;p&gt;Pros: One auth; bundled tools; free models for subscribers; tight Hermes integration&lt;/p&gt;

&lt;p&gt;Cons: Locked to Nous as the gateway; routing markup on paid model calls&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenRouter
&lt;/h3&gt;

&lt;p&gt;Pros: One API key for 300+ models; granular per-model spend control; it is what Portal routes third-party models through anyway&lt;/p&gt;

&lt;p&gt;Cons: No bundled tools (search / image / video / speech / browser need separate keys)&lt;/p&gt;

&lt;h3&gt;
  
  
  Per-provider keys
&lt;/h3&gt;

&lt;p&gt;Pros: Direct billing relationship; no gateway markup; full provider features&lt;/p&gt;

&lt;p&gt;Cons: 5+ separate sign-ups, dashboards, and bills to manage&lt;/p&gt;

&lt;p&gt;The right answer depends on shape of usage. For a single user running Hermes full-time, Nous Portal’s bundled tools usually win on convenience. For teams running production agents at scale, direct provider keys often come out cheaper.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Is Nous Portal free?
&lt;/h2&gt;

&lt;p&gt;There is a free tier, but be clear on what it gives you: $0/mo with $0 in monthly credits, capped at 50 RPM / 500K TPM, and limited to the free-model catalog. It is not a trial of the paid product — the Tool Gateway and the paid model catalog both sit behind a subscription or a credit top-up. Plus at $20/mo is the real entry point, and it returns $22 in credits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do I need a Nous Portal subscription to use Hermes Agent?
&lt;/h2&gt;

&lt;p&gt;No. Hermes Agent is open source and free; you can run it with any provider you like — OpenRouter, direct Anthropic / OpenAI / Google keys, local models via Ollama, or Nous Portal. Portal is one option among many, not a requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  What models are free on Nous Portal?
&lt;/h2&gt;

&lt;p&gt;Nous Research rotates a list of free-for-subscribers models, typically including their own Hermes model series and select open-weight models from other labs. The current list is in the Portal dashboard — it changes from month to month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I use my X Premium+ Grok subscription with Hermes through Portal?
&lt;/h2&gt;

&lt;p&gt;Yes, since May 15, 2026. The xAI Grok OAuth flow connects your existing X Premium+ subscription to Hermes Agent, giving you Grok 4.3, Grok TTS, and Grok Imagine without separate API billing. See the &lt;a href="https://hermes-agent.nousresearch.com/docs/guides/xai-grok-oauth" rel="noopener noreferrer"&gt;upstream OAuth guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Hermes Cloud, and how is it different from a Portal subscription?
&lt;/h2&gt;

&lt;p&gt;A Portal subscription buys models, tools and credits. Hermes Cloud is the hosting layer on top: it runs the agent itself on a Nous-managed instance, billed hourly from the same credit balance, from $0.29/day for the Small size plus whatever inference and tools you use. You can hold a Portal subscription without ever using Hermes Cloud — plenty of people just point a self-hosted Hermes at their Portal key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is Hermes Cloud cheaper than managed Hermes hosting elsewhere?
&lt;/h2&gt;

&lt;p&gt;On the instance line alone it looks inexpensive, but compare the whole bill. Hermes Cloud’s day rate excludes inference and tool usage, and you need a credit balance or an active subscription before you can deploy at all. It is also still in preview. If you want to try managed Hermes without funding a balance first, &lt;a href="https://openclawlaunch.com/hermes-hosting?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-08-02-nous-portal" rel="noopener noreferrer"&gt;our Hermes hosting&lt;/a&gt; has a free trial and no credit minimum — and you can compare the two honestly from there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does OpenClaw Launch support Nous Portal?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://openclawlaunch.com/hermes-hosting?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026-08-02-nous-portal" rel="noopener noreferrer"&gt;OpenClaw Launch’s Hermes hosting&lt;/a&gt; runs Nous Hermes models on managed OpenClaw infrastructure today via OpenRouter — no Portal key needed. Native Hermes Agent framework hosting is also live today — pick Hermes as your framework in the configurator and deploy in about 30 seconds.&lt;/p&gt;

&lt;p&gt;Originally published at &lt;a href="https://openclawlaunch.com/guides/nous-portal" rel="noopener noreferrer"&gt;openclawlaunch.com/guides/nous-portal&lt;/a&gt;, where it is kept up to date.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>selfhosted</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
