contribution/compass
NousResearch/hermes-agent

Hermes Agent

411 signals · 364 observation events

Open repository ↗

The agent that grows with you

230.0K stars45.5K forksPythonMITaiai-agentai-agentsanthropicchatgptclaudeclaude-codecodexkeyword: Hermes Agent
PROJECT NEWS

Release, roadmap, and discussion

All news →
NousResearch/hermes-agent

Hermes Agent

Coding-Agent Infrastructure
Latest stable

Hermes Agent v0.20.0 (2026.8.3)

v2026.8.3
  • ✨ Highlights
  • Talk to Hermes — streaming, conversational voice with barge-in — Voice mode used to mean: speak, wait for the whole reply to generate, then listen to one long audio file. Now Hermes speaks clause-by-clause as the response streams, you can i
  • Wake words and hands-free control — Say your own open-vocabulary wake phrase ("hey Hermes", or anything you pick) and Hermes starts listening — detection runs on-device, so no audio leaves your machine while it waits. Multi-profile voice ro
  • Voice on every platform — Send a voice note to Hermes on WhatsApp, Feishu, DingTalk, LINE, QQ, Photon, or Weixin and it's transcribed and answered; auto-TTS replies are delivered platform-aware (opus where platforms want opus, captions atta
  • Research you can trust — grounded citations with fact-checking — The new grounded-citations skill makes Hermes produce research where every claim is backed by a verifiable source: quotes are matched against the actual page text (not halluci
Original release notes ↗

Publicly indicated next

  • No public prerelease or open milestone found.

Prereleases and milestones indicate public plans; they are not delivery commitments.

Observation trail

  1. changedupdatedAt, state
  2. discoveredinitial snapshot
  3. changedupdatedAt, metrics
  4. changedupdatedAt, state
  5. changedupdatedAt, metrics
  6. discoveredinitial snapshot
  7. changedupdatedAt, labels
  8. changedupdatedAt, labels, state
  9. changedupdatedAt, labels
  10. changedupdatedAt, labels
  11. changedupdatedAt, metrics
  12. changedupdatedAt, labels
  13. discoveredinitial snapshot
  14. discoveredinitial snapshot
  15. discoveredinitial snapshot
  16. discoveredinitial snapshot
  17. changedtext, updatedAt, metrics
  18. changedupdatedAt
  19. discoveredinitial snapshot
  20. discoveredinitial snapshot
  21. discoveredinitial snapshot
  22. discoveredinitial snapshot
  23. changedupdatedAt, metrics
  24. changedtext, updatedAt
  25. discoveredinitial snapshot
  26. discoveredinitial snapshot
  27. discoveredinitial snapshot
  28. discoveredinitial snapshot
  29. changedupdatedAt, metrics, labels
  30. discoveredinitial snapshot
11 shown
pull request

fix(kanban): inherit ALL routing columns in notify-sub inheritance

## Summary Child kanban tasks now inherit EVERY routing/delivery column of their parent's notify subscription — `chat_type`, `user_id_alt`, `delivery_mode`, and `delivery_metadata` included. Fixes #73030. Root cause: `_inherit_notify_subs()` (the link_tasks / triage-decompose / create-with-parents path) copied only platform/chat/thread/user/profile. A DM-ori

importance 0@teknium1closedtype/bugcomp/cronplatform/telegramP3sweeper:risk-session-stateOriginal evidence ↗
pull request

fix(kanban): terminalize iteration exhaustion

## Summary - make Kanban iteration-budget exhaustion terminal for the exact run/revision instead of routing it through retryable wall-clock timeout handling - preserve workspace/evidence, record `retryable=false` and `resume_policy=never`, and prevent automatic claim/unblock of the exhausted card - notify and wake the owner for replan while retaining the exi

importance 0@stigrunaropentype/bugcomp/agentcomp/gatewaycomp/cronP3Original evidence ↗
pull request

fix(whatsapp): strip the multi-device suffix when normalizing bot ids

## Bug Baileys hands the bridge its own identity **with a device index** — `sock.user.id` is `"15551234567:17@s.whatsapp.net"` — while inbound `mentionedJid` entries and `contextInfo.participant` arrive **without** one. Both normalizers (`normalizeWhatsAppId` in `bridge_helpers.js`, `_normalize_whatsapp_id` in `whatsapp_common.py`) folded the first `:` into

importance 0@NehoraiHadadopentype/bugduplicatecomp/gatewayplatform/whatsappP2Original evidence ↗
pull request

feat(providers): discover pip-installed model providers via entry points (salvage #81419)

## Summary `pip install`ed model-provider plugins now register their providers and show their models in the registry, matching filesystem-plugin behavior — gated by the same `plugins.enabled` opt-in the general PluginManager enforces. Salvages #81419 by @albertodepaola (cherry-picked, authorship preserved) with hardening on top. ## Changes - `providers/__ini

importance 0@teknium1opentype/featurecomp/agentcomp/pluginsP3Original evidence ↗
pull request

fix(sessions): keep gateway reset continuations listable (salvage #84009)

## Summary Sessions created after a gateway reset (`/new`, idle/daily timeout, suspension, expired resume recovery) are listable again in every session surface — `/sessions`, `hermes sessions list`, desktop sidebar, dashboard — and are no longer classified as ephemeral (cascade-delete-class) children. Root cause: since d2a4d373eb, gateway resets write `paren

importance 0@kshitijk4pooropentype/bugcomp/clicomp/gatewayP1sweeper:risk-session-stateOriginal evidence ↗
pull request

fix(agent): reject stale 32K metadata underreports for MiniMax (extends Kimi guard)

## Summary MiniMax M2-family models wrongly capped at 32K: stale third-party metadata underreports them as 32,768 (real window 204,800), and both the persisted cache and the OpenRouter/Nous fallback paths trusted it — tripping the 64K minimum and breaking previously-working setups after upgrade. This extends the existing Kimi 32K-underreport guard to a share

importance 0@teknium1opentype/bugcomp/agentprovider/minimaxP2Original evidence ↗
pull request

fix(agent): guard against non-positive context_length poisoning the cache

## Summary A cached `context_length` of 0 (corrupted cache, failed probe, manual edit) poisoned the whole resolution chain: `0 is not None` short-circuits step 1, so the compressor and every downstream display got context_length=0 forever. This refuses to persist non-positive values and drops any pre-existing non-positive entry so it re-resolves. Salvages #2

importance 0@teknium1openOriginal evidence ↗
pull request

fix(cron): honest fallback/timeout/drift alerts + drift-guard alert-once

Cron failure alerts stop lying about fallback chains, timeouts, and drift — and drift alerts fire once per job instead of once per tick. Salvage of #85011 (@victor-kyriazakos), which itself carries #81579 (@georgell-ceo); reconciled with #72056 (@sashmatash), the earliest submission of the drift-alert-delivery half. All contributor authorship preserved via c

importance 0@teknium1openOriginal evidence ↗
pull request

fix(agent): write context-length cache atomically

## Summary The context-length cache was written with a plain truncating `open(path, "w")` — a crash/kill mid-dump leaves empty or partial YAML, and the next load swallows the parse error and returns `{}`, silently wiping every persisted context length. Both writers now use the existing `atomic_yaml_write()` (temp file + fsync + `os.replace`). Salvages #40919

importance 0@teknium1openOriginal evidence ↗
pull request

fix(xai): preserve xhigh effort and priority service_tier for Grok 4.6

## Summary Grok 4.6 is the first xAI Responses model to accept `reasoning.effort=xhigh` and xAI Priority Processing (`service_tier`), but Hermes' provider-wide xAI guards silently clamped xhigh→high and stripped `service_tier` for every Grok model — so 4.6 users were silently downgraded. This model-gates both guards on the 4.6 family and exposes the `/fast`

importance 0@teknium1openOriginal evidence ↗
pull request

fix(tools): symlink-safe exclusive creation for all spill/cache writers

## Summary Spill-file writes can no longer be redirected through a planted symlink, and raw pre-redaction spills are now owner-only instead of world-readable. Root cause: all four spill/cache writers (terminal overflow tee, hook context spill, web_extract full-text store, subagent summary spill) used plain `open()`/`Path.write_text` into predictable director

importance 0@teknium1openOriginal evidence ↗