Hermes lands a stateless one-shot LLM RPC and a cross-platform computer-use preflight

Two PRs by OutThisLife landed in the NousResearch/hermes-agent repo in the last 24 hours. Both fill in gaps that were visible only to people who had already tried to build on top of Hermes Agent.
PR #51261 adds a llm.oneshot RPC that lets any UI surface or standalone tool call the model without touching session history or breaking prompt caching. PR #51072 adds a cross-platform readiness preflight to the desktop app so you can see whether the computer_use toolset is actually wired up on this machine, instead of finding out when the agent fails to click.
The one-shot problem
The full agent loop has a fixed cost. Every turn pays for the system prompt, the conversation history, the loaded skill set, and the prompt-cache prefix. For a long session the prefix is the win. For a single generative chore - a commit message from a diff, a rename suggestion, a one-line summary - that fixed cost is waste.
OutThisLife's PR description states it cleanly: a "one-shot is a single stateless model call that runs outside any conversation. It never touches session history, never breaks prompt caching, and returns plain text." UI surfaces need this for small generative chores.
The implementation is in agent/oneshot.py (158 lines), with tui_gateway/server.py gaining 79 lines to expose it as a gateway RPC and tests/agent/test_oneshot.py covering 110 lines of behavior.
| File | Lines added | Role |
|---|---|---|
| agent/oneshot.py | +158 | Stateless model call core |
| tui_gateway/server.py | +79 | llm.oneshot RPC endpoint |
| tests/agent/test_oneshot.py | +110 | Coverage |
| Total | +347 | PR #51261 |
The key invariant is that one-shots leave the session alone. A UI asking "summarize this diff" mid-session would otherwise either pollute the conversation history (wasting context window) or force a parallel agent run (wasting cost). The RPC sidesteps both. The caller gets a string back, the session's prompt-cache prefix stays intact for the next user turn.
Computer-use preflight
Computer Use already worked through the desktop backend. Enabling the computer_use toolset installs cua-driver via Settings → Skills & Tools → Toolsets. The catch was that there was no in-app way to see whether the driver was actually ready to drive this machine. The PR description calls this out: "it was tribal knowledge."
PR #51072 adds a Settings panel at apps/desktop/src/app/settings/computer-use-panel.tsx (239 lines) that runs a preflight check before you ever invoke the toolset. The check covers macOS, Windows, and Linux, and surfaces three things: whether cua-driver is installed, whether it has the permissions it needs, and whether the underlying automation stack on this OS is accessible.
| File | Lines added | Role |
|---|---|---|
| apps/desktop/.../computer-use-panel.tsx | +239 | Settings UI panel |
| tools/computer_use/permissions.py | +189 | OS permission checks |
| hermes_cli/main.py | +62 | CLI preflight command |
| hermes_cli/web_server.py | +58 | Web preflight endpoint |
| apps/desktop/src/types/hermes.ts | +45 | Shared type definitions |
| apps/desktop/src/hermes.ts | +19 | Desktop client wiring |
| apps/desktop/src/app/skills/index.tsx | +4 | Skills page link |
| Total | +616 | PR #51072 |
The cross-platform piece is the substantive change. tools/computer_use/permissions.py (189 lines) holds the OS-specific permission probes. macOS needs Accessibility + Screen Recording; Windows needs the UI Automation runtime; Linux needs XTest or Wayland depending on the session. Each one returns a structured result the UI can render, with the specific missing capability named. Before this PR, all three failure modes looked identical to the user - "computer use doesn't work."
What the gateway gets
The tui_gateway/server.py change is small but architecturally meaningful. The TUI gateway already exposes session-scoped RPCs. Adding llm.oneshot as a session-independent RPC means anything connected to the gateway - the desktop app, the CLI, a future mobile client, an external integration - can request a stateless model completion through one endpoint. The same one. The 79 lines are mostly schema and error handling; the actual call delegates to agent/oneshot.py.
For the desktop specifically, this is what the "summarize this thread" and "suggest a title" buttons in the composer would call. Without it, those features either spin up a hidden agent (heavy) or skip the model entirely (cheap, lower quality).
The discovery signal
Smelter Labs AI's tweet on June 23 surfaced both PRs in a single post: "Computer-use got a cross-platform driver for macOS, Windows, and Linux. One-shot LLM calls now have a gateway RPC." That tweet got 1 like and 14 impressions. The technical signal-to-noise on that one is high relative to the engagement. The rest of the day's feed was milestone claims (160K stars, 1T tokens/day) and link-only posts to YouTube videos.
The Smelter digest URL links the tweet to the GitHub commits directly, which is the pattern that makes release announcement posts tractable. The tweet is the discovery vector; the PR diffs are the depth.
[^1]: Smelter Labs AI. "HERMES AGENT: 5 substantial commits in the last 24h." X. 2026-06-23. [^2]: OutThisLife. "feat(agent): one-shot LLM helper + llm.oneshot gateway RPC (PR #51261)." GitHub. Merged 2026-06-23. [^3]: OutThisLife. "feat(computer-use): add a cross-platform readiness preflight to the desktop (PR #51072)." GitHub. Merged 2026-06-22.