{"repo":"NousResearch/hermes-agent","public_id":"112358","display_label":"MoA aggregator prompt cache billing and routing fixes","summary":"Multiple fixes targeting how the MoA aggregator handles prompt cache identity, routing, and persistence across tool steps and iterations. A related issue documents unexpected re-billing behavior when tool history grows and cache fails to stay pinned to the system prompt.","subsystem":null,"counts":{"members":6,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":3,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":113175},"resolution":{"state":"resolved","by":"pr-115606"},"freshness":{"state":"verified","last_verified_at":"2026-09-19T03:56:36+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.3333333333333333},"fix_edges":[{"issue_number":112358,"pr_number":113175,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":112358,"pr_number":113784,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":112358,"pr_number":115606,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":112358,"title":"MoA aggregator: prompt cache hits stay pinned to the system prompt; growing tool history re-billed every call (~$147 in 49 min)","url":null,"state":"closed"},{"kind":"pr","number":112360,"title":"fix(moa): preserve Nous aggregator cache routing","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"026551488f3","number":0},{"kind":"commit","value":"170d616ca69","number":0},{"kind":"pr","value":"#112358","number":112358},{"kind":"pr","value":"#113175","number":113175},{"kind":"pr","value":"#113784","number":113784},{"kind":"pr","value":"#113175","number":113175},{"kind":"pr","value":"#113175","number":113175}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":112400,"title":"fix(moa): reuse transport cache identity for Nous aggregator calls","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"026551488f3","number":0},{"kind":"commit","value":"170d616ca69","number":0},{"kind":"pr","value":"#112358","number":112358},{"kind":"pr","value":"#113175","number":113175},{"kind":"pr","value":"#113784","number":113784},{"kind":"pr","value":"#113175","number":113175}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":113175,"title":"fix(moa): aggregator prompt cache no longer collapses to the system prompt on every tool step (#112358)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/moa_loop.py","tests/agent/test_failover_identity.py","tests/agent/test_moa_aggregator_prefix_stability.py","website/docs/user-guide/features/mixture-of-agents.md"]},{"kind":"pr","number":113784,"title":"fix(moa): Anthropic-wire aggregator keeps the cache prefix through the task on iteration 1 (closes remaining atoms of #112358)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/anthropic_message_convert.py","agent/moa_loop.py","tests/agent/test_anthropic_adapter.py","tests/agent/test_moa_aggregator_prefix_stability.py","website/docs/user-guide/features/mixture-of-agents.md"]},{"kind":"pr","number":115606,"title":"fix(moa): aggregator recovers from strict-alternation 400s per destination (closes remaining atoms of #112358)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/chat_completion_helpers.py","agent/error_classifier.py","agent/moa_alternation.py","agent/moa_loop.py","agent/turn_failure_copy.py","tests/agent/test_error_classifier.py","tests/agent/test_moa_alternation_recovery.py","website/docs/user-guide/features/mixture-of-agents.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}