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
## 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
## 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
## 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
## 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
## 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
## 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
## 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
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
## 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
## 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`
## 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