Hermes Agent

Nous Portal changed its routing promise after a 2.3× Anthropic cache-cost report

A Hermes Agent report measured 39% Anthropic prompt-cache hits through Nous Portal versus 100% through OpenRouter, with identical work costing $1.07 against $0.47. A same-day docs change now says Portal routing varies by model and excludes OpenRouter-specific extensions from its contract.

← Back to homeOriginal source ↗

NousResearch/hermes-agent issue #71576 is the inspected primary source: “[Bug]: Nous Portal does not apply provider sticky routing for Anthropic models — prompt caches are written but never read (39% vs 100% hit rate, ~2.3x cost).” The report ran 20 concurrent conversations per backend and eight turns each, leaving 140 cache-eligible turns. Anthropic Sonnet 4.6 returned 55 cache hits through Portal and 140 through OpenRouter. The author reports $1.07 versus $0.47 for identical work, despite lower nominal Portal token prices, because cache writes cost more than reads. Stable session_id, x-session-id, prompt_cache_key, and default conversation hashing all failed to restore affinity at realistic 25-second gaps. The effect did not generalize cleanly: GLM retained 78% through Portal versus 84% direct despite more candidate providers. Anthropic responses alone also omitted provider and usage.cost metadata. The issue closed as a documentation-contract dispute; PR #72342 removed claims that all Portal traffic goes through OpenRouter and says OpenRouter-specific request extensions are outside the Portal API contract.

The facts

- NousResearch/hermes-agent issue #71576 was created 2026-07-25T20:37:48Z and updated 2026-07-27T00:53:30Z; state is closed. - NousResearch/hermes-agent returned 220937 GitHub stars, 25622 open issues, default branch main, and last push 2026-07-27T01:02:16Z. - Latest tagged-release baseline checked: v2026.7.20 published 2026-07-20T18:35:55Z. - The report ran 20 concurrent conversations per backend and eight turns each, leaving 140 cache-eligible turns. - Anthropic Sonnet 4.6 returned 55 cache hits through Portal and 140 through OpenRouter. - The author reports $1.07 versus $0.47 for identical work, despite lower nominal Portal token prices, because cache writes cost more than reads. - Stable session_id, x-session-id, prompt_cache_key, and default conversation hashing all failed to restore affinity at realistic 25-second gaps. - The effect did not generalize cleanly: GLM retained 78% through Portal versus 84% direct despite more candidate providers.

What changed

The report ran 20 concurrent conversations per backend and eight turns each, leaving 140 cache-eligible turns. Anthropic Sonnet 4.6 returned 55 cache hits through Portal and 140 through OpenRouter. The author reports $1.07 versus $0.47 for identical work, despite lower nominal Portal token prices, because cache writes cost more than reads. Stable session_id, x-session-id, prompt_cache_key, and default conversation hashing all failed to restore affinity at realistic 25-second gaps. The effect did not generalize cleanly: GLM retained 78% through Portal versus 84% direct despite more candidate providers. Anthropic responses alone also omitted provider and usage.cost metadata. The issue closed as a documentation-contract dispute; PR #72342 removed claims that all Portal traffic goes through OpenRouter and says OpenRouter-specific request extensions are outside the Portal API contract. The primary record was inspected with its timestamps, state, body, and adjacent project records. ClawCharts supplied the assignment list; it does not establish the claim.

Why it matters

The correction changes what users can safely infer from a 200 response. Prompt caching is economic behavior, and a router that writes caches without reliably revisiting them can make a discount route more expensive. Documentation can resolve a contract mismatch, but it does not erase measured spend or restore observability. The operational test is whether persisted state, visible control, and runtime behavior agree at the handoff where authority changes.

Current

Issue #71576 and docs PR #72342 were closed after inspection. The latest Hermes Agent tag remained v2026.7.20. The public record supports a changed promise, not a code fix for sticky routing. A separate merged denial circuit breaker shows current attention to bounded retries and control costs, but it is not evidence about Portal affinity. Repository metadata, current issues and pull requests, release baseline, Hacker News discovery, and the rendered ranking row were checked. Weak search residue and historically used source spines were not promoted.

Evidence

The primary URL is https://github.com/NousResearch/hermes-agent/issues/71576. Supporting links are inspected current project records that establish implementation, adjacent direction, or boundary conditions. Dates, reproductions, test totals, and deployment observations remain attributed to their authors unless this brief explicitly says they were independently rerun.

Source boundary

Open work is described as open, closed work as closed, and operator reports as reports. Closure can reflect a documentation decision or triage outcome; it is not silently translated into a shipped code fix. Ranking explains why the project was scanned; it does not prove correctness, adoption, or package behavior.

Operator take

Benchmark each provider family with realistic inter-turn spacing, record cached token counts and effective cost, and treat undocumented upstream extensions as unavailable. Do not assume a routing intermediary preserves another vendor’s session semantics. Preserve a before-state receipt and verify the narrowest invariant where state changes. Do not broaden permissions or delete state merely because the visible symptom is inconvenient.

Caveat

Public project records are mutable. Source state was captured at publication time, and later revisions may change status, scope, or evidence. No source here authorizes automatic mutation of a reader’s deployment.

Source inspected; source state, environment, and release boundary remain explicit.