Runaway-Loop Caps, 60fps Desktop, and Artifacts - Hermes Agent, July 27

X API v2 is fully paywalled (402 on search and lookup). This roundup is sourced from GitHub merged PRs in the 84-hour window covering Friday through Monday, July 27.
Runaway-loop caps, ported from Claude Code
PR #66600 (+286/-0 in 4 files) adds session-wide runaway-loop caps: a session can make at most 200 web search calls and spawn at most 200 subagents before those tools are refused. The turn stops cleanly - the model gets an explanatory message instead of an opaque failure.
The feature ports Claude Code's CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION and CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION from v2.1.212 (Week 29, July 13-17 2026). Hermes already had per-turn loop detection through ToolCallGuardrailController, but nothing capped these two runaway-prone tools over the life of a session.
Unattended contexts - cron jobs, gateway sessions, kanban workers - are where this matters most. A stuck agent in a loop burns API budget with no human to interrupt it. The caps are tunable in config.yaml.
Desktop hits 60fps on real sessions
PR #72504 (+1,379/-59 in 20 files, by OutThisLife) lands measured renderer performance on live instances driven over CDP. Three changes deliver the gains:
- Reflow-gated pinning stops a re-render cascade when the transcript hasn't changed. The sidebar sash drag went from 11.5 fps (p95 101ms, 60/60 frames over 33ms) to 59-60 fps (p95 18ms, 1/60 frames over 33ms).
- Adaptive flush batches DOM writes so typing with 2 live streams runs at a stable 60 fps instead of dropping to ~26 fps when the transcript backs up.
- Stream-aware backfill only renders the tail of a long session on switch instead of rebuilding the full transcript, cutting session-switch latency from 2-4 seconds to ~200ms.
Diagnostic scripts in apps/desktop/scripts/diag-*.mjs let operators profile their own sessions.
First-class desktop artifacts
PR #72345 (+1,766/-47 in 25 files) gives Hermes Desktop first-class artifacts. Substantial generated content - full HTML documents, large SVGs, long code - promotes out of the transcript into a compact card. Each artifact opens in a dedicated right-rail viewer with version history, a sandboxed live preview, and a preview/source toggle.
The alternative was dumping hundreds of lines of code into the conversation. Artifacts keep the transcript readable and give each generated asset its own lifecycle.
Public subagent lifecycle API for plugins
PR #72501 (+1,058/-151 in 6 files) exposes a typed, capability-safe public API - ctx.subagent_lifecycle with launch, status, wait, cancel, result, and reconnect - routed through the same delegation engine that delegate_task uses. Plugin authors no longer need to reach into internal tool surfaces. Salvages a prior attempt at #63359.
CLI startup: 14s to 1.8s
From Friday: PR #71637 (+371/-14 in 2 files) cuts hermes -w startup from ~14s to ~1.8s. The bottleneck was _prune_stale_worktrees running synchronously before the banner - shelling out to git several times per candidate worktree. On a repo with dozens of accumulated worktrees, it accounted for 18.5s of a 20.6s cold start. Parallelizing the prune and caching the results drops it to under 2s.
Also merged
- #59267: Blind
tool_callinvocations of deferred tools that omit required arguments now return the parameter schema instead of dispatching into an opaque downstream failure. Port of ironclaw#5149 (+199/-4). - #72403:
subagent_stophook payloads now carry an ordered, redactedtool_call_historyfor each child - tool name, bounded input metadata, byte counts, and outcome (+247/-4, salvages #62011). - #63517:
/approvals [smart|manual|off]now reads or changes the persistent profile approval policy across CLI, gateway, TUI, and Desktop (+454/-2). - #71552: Stream-only provider support and uniform compression stream ceiling (+417/-95).
- #71404: Relay Phase 3 - native prompt UX with approvals, confirms, and clarify pickers (+963/-1).
- #71162:
@sessionlinks resolve to session titles you can click in Desktop (+843/-34).
73 feature and performance PRs merged in the 84-hour window. Desktop performance, plugin APIs, and tool-guardrail hardening are the dominant themes.