<?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>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>
