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 The dashboard's managed-files API protected sensitive files (`.env`, `config.yaml`, credential stores) on the **read** side only — the **write** endpoints (`/api/files/upload`, `/api/files/upload-stream`, `/api/files/mkdir`, delete) would happily **overwrite** those same files. Security gap. ## Change (fail-closed at the chokepoint) - `hermes_cli/
## Summary Adds an **OpenCode Free** model-provider plugin. Free model discovery uses models.dev (`cost.input == 0 AND status != "deprecated"`), matching the opencode CLI's exact filter logic. The free tier requires a real account API key and throttles third-party clients by User-Agent (requests that don't identify as the opencode client get `429 FreeUsageLi
## Summary The access-gateway boundary: verifies externally-issued identity tokens and admits requests to exactly one installation and (when required) one namespace. Fail-closed on every path; caller claims can never select scope. Stacked on #85461 (`ent/core`). Part of the one-wave Enterprise draft series. ## Changes - `enterprise/oag.py`: `TrustConfig` + `
## Summary The v1 `SandboxDriver`: enforces the admitted `SandboxPolicy` via NetworkPolicy + pod securityContext, and independently verifies enforcement by reading the applied objects back before the controller may activate. Partial support is unsupported; unverifiable containment blocks activation. Stacked on #85461 (`ent/core`). Part of the one-wave Enterp
## Summary Brokered secrets: workloads never receive secret values or backend credentials. Every operation is verified fail-closed — active revision only, matching workload identity, secret in the revision snapshot, IAM allow, exact broker, selected driver (no fallback) — then executed backend-side, returning only derived results (possession proofs, scoped s
### Bug Description **Summary:** When users save a custom provider using the `/model` command without specifying a context length, the system doesn't automatically detect and display what context length was actually used. This leaves users uncertain about whether their custom provider has a short or long context window, which is critical for prompt caching b
### Bug Description ## Bug Description Fresh installation of Hermes Agent on CachyOS consistently hangs during the Playwright Chromium installation. The Chromium ZIP downloads successfully and passes integrity verification, but the installer never progresses beyond: ``` pw:install extracting archive ``` The process remains alive indefinitely but makes no fur
IIUC hermes currently queues a background recall for next turn instead of synchronously recalling based on the current user query (for honcho and hindsight at least). `prefetch` right now totally ignores the given query. This means that the recalled information may be completely irrelevant when it is actually injected. If one query is `fix linting`, and the
## Problem When a model emits a *relative* path that textually mirrors the working directory (e.g. `home/user/dev/notes/x.md` — an absolute path missing its leading `/`), `write_file` silently creates a doubled path like `/home/user/dev/home/user/dev/notes/x.md` instead of failing or writing to the intended location. Closes #67185. ## Root cause `_resolve_pa
## Current behavior hermes-agent can read and write files with its terminal tool, but Excel/spreadsheet handling relies on raw Python (`openpyxl`, `pandas`) with no structured abstraction. The agent has to figure out the library, the sheet structure, and error handling from scratch every time. This leads to inconsistent results — formatting is lost on round-
## Problem Hermes agents are increasingly run as **unattended, monetized services** (e.g. sold per-turn over [x402](https://www.x402.org) micropayments), where the *prompt comes from an untrusted buyer*. In that threat model the agent should be able to run **only its own skill scripts** (e.g. `python3 .../skills/<skill>/scripts/foo.py ...`) and nothing else
I read every open issue whose title says timeout/stall/hang/stuck/freeze/deadlock — 77 of them as of yesterday. Most are not 77 bugs. The runtime ones collapse into seven mechanisms, and about a third of the pile isn't a runtime stall at all (it's the installer). Classification below, with what's covered by an in-flight PR and what has nothing. Method: title
### Bug Description On Windows, after a successful `hermes update` (triggered by the Desktop app's update hand-off), the updater prints `✓ Starting Windows gateway after update (PID <n>)` — but the spawned gateway process **dies immediately and silently**: it never writes to `gateway.log`, never creates `gateway.pid`, and leaves no exit record in the gateway
## Summary In `sanitize_api_messages()`, the deduplication pass that removes duplicate `tool_call_id`s (#58327) can produce an empty `tool_calls: []` array on an assistant message when ALL of its tool calls are deduped. Strict providers (DeepSeek v4, newer OpenAI) reject this with HTTP 400: ``` Invalid 'messages[N].tool_calls': empty array. Expected an array
## Summary `agent/account_usage.py::_fetch_codex_account_usage()` assigns Codex quota labels by response position: ```python for key, label in (("primary_window", "Session"), ("secondary_window", "Weekly")): ``` The live Codex usage API does not always preserve that semantic ordering. When only the weekly limit is returned, it can occupy `primary_window`. He
**Version:** v2026.7.20 (also present on current `main`) **Platform:** Windows 11, Python 3.11, pytest run from a native Windows checkout ## Summary `tests/tools/test_local_env_windows_msys.py::TestGitBashCoreutilsOnPath::test_derives_dirs_from_portablegit_layout` and `::test_derives_dirs_from_mingit_usr_bin_layout` fail on any Windows checkout. Both tests a
## Bug Description The turn-end file-mutation verifier can make a demonstrably false claim when a failed `write_file` or `patch` attempt is followed by a successful mutation through `terminal` in the same turn. The verifier currently says the target **"was NOT modified this turn"** and instructs the user to trust that footer over the assistant's summary. How
**Summary** Every `hermes update` (including the desktop in-app update path) leaves `~/.hermes/hermes-agent/.update-incomplete` behind. The next launch prints: > A previous `hermes update` was interrupted mid-install — finishing dependency installation now... and then fails with `✗ Could not auto-recover the interrupted install.` The marker never clears beca
### Bug Description When I mention Hermes in a Buzz channel, it correctly creates a new thread for the conversation. However, subsequent messages in that thread are ignored unless I mention Hermes again. Mentioning Hermes again causes it to create yet another nested thread instead of continuing the existing conversation. This results in one additional thread
## Summary Prompt caching is silently disabled when a Claude model is selected through a **bare runtime alias** (for example `fable` or `opus`) on a third-party provider using `api_mode: anthropic_messages`. The downstream gateway resolves those aliases to canonical Claude models (`claude-fable-5`, `claude-opus-5`), but Hermes evaluates its prompt-cache poli
v0.20.0 (2026.8.3), Windows native. In headless one-shot mode, `--in <dir>` is documented to set the working directory, but when a previous session has a saved cwd, that cwd wins silently: we invoked `hermes -z "…" --in C:\<throwaway-dir> --ignore-user-config` from `C:\<throwaway-dir>` itself, and the agent operated in `C:\dev` (the restored cwd of an earlie
### Problem or Use Case Kanban workers receive a `HERMES_TENANT` env var from the dispatcher (`kanban_db.py:_default_spawn`, ~line 9018) when a task is created with `--tenant <slug>`, but that variable has **no memory-isolation effect**. All workers — regardless of board, tenant, or assignee profile — write to the same flat global memory store (`~/.hermes/me
## What does this PR do? Local-inference providers (oMLX / MLX with a memory guard, and similar Metal/CUDA setups) abort a request when the **prefill memory peak** exceeds a GPU/unified-memory ceiling. Their rejection text often suggests "reduce context length" / "reduce context size", which collides with the context-overflow patterns — so Hermes classifies
## Summary Add policy-aware outbound Signal read receipts as a focused slice of #39043. - keep read receipts **disabled by default** - expose the behavior through `signal.send_read_receipts` in `config.yaml` (no new behavioral env var) - schedule `sendReceipt` only after Signal's story/content/group/mention filters pass and the gateway's authorization callba
## What does this PR do? Webhook route scripts currently receive only payload JSON, so they cannot bind work to the event type and delivery identity that Hermes authenticated. This change passes bounded request metadata through a sanitized environment, rejects script deliveries without an external identity, and applies idempotency before script execution so
**Severity: Critical — affects 100% of Desktop cron sessions on all platforms** ## Symptom Clicking a completed cron job session in the Desktop sidebar or cron tab shows **only the user prompt** — the message that the scheduler auto-submits to start the job. Everything below it — tool calls, tool results, reasoning text, and the LLM's final response — is **i
## Bug Description Local models on the gateway announce an action and end the turn without doing it. A reply like "I'll delegate this to a sub-agent, then bring it up" stops there, with no tool call and no work. Hermes already ships the guard for this, `intent_ack_continuation` (added in #27881), but it does not fire for local models in established sessions.
This issue requests implementation of DeepSeek peak-hour pricing multiplier announced by DeepSeek on 2026-07-26. ## Feature Request DeepSeek announced peak-hour pricing with 2x rate multiplier during: - **01:00 - 04:00 UTC** (daily) - **06:00 - 10:00 UTC** (daily) All other hours: standard rate. ## Current State Hermes has a usage_pricing.py that tracks mode
### Summary At commit `373632e33813c86b1b9b024168a5892af1926b83`, `hermes_cli/kanban_db.py::_inherit_notify_subs()` copies a parent task’s notification subscription to a child but omits the `chat_type` and `delivery_metadata` columns. The same omission remained on `main` when rechecked on 2026-07-27. Subscriptions created by gateway `/kanban create` and tool
## Problem A parent agent can dispatch background work with `delegate_task` and receives a complete `deleg_...` handle, but it has no model-facing way to enumerate, cancel, or redirect that live delegation afterward. Operator surfaces such as `/agents` and the TUI can provide visibility or controls, but a user speaking to the parent through Telegram, another
### Bug Description Starting the latest build of the docker container result on error > Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: exec: "/opt/hermes/docker/entrypoint-dispatch.sh": stat /opt/hermes/
## Bug Description In the desktop sidebar, the "Load more" (`⋯`) row **never appears** when pinned sessions happen to sit *inside* the most-recent recency window — even when dozens of older sessions exist beyond the page. Those older sessions become unreachable from the list UI entirely (FTS search still finds them, but the sidebar list cannot load them). ##
## Bug Description **Hermes Desktop**: switching into a session whose agent is **still running/streaming** makes the transcript bounce up and down for a few frames, then the viewport settles on an **older part of the transcript** while the reply keeps streaming below the fold. The user loses sight of the live turn and must scroll down manually. This is a dis
### Bug Description ## Summary When a cron job is created, it captures a model_snapshot/provider_snapshot of the active model. If that model's quota/plan later becomes exhausted (HTTP 402 from the provider), every subsequent run of the job fails permanently with the same 402 error. The configured fallback_providers chain in config.yaml is NOT consulted for c
## Summary Line-by-line audit of `cli.py` (~18,915 lines) and `hermes_cli/active_sessions.py` at commit `036516d63` for the Windows PowerShell stacked-frame-prompt artifact. I verified each candidate against the actual code before flagging — the well-known vectors (refresh_interval default, _invalidate throttle, erase_when_done, spinner_loop idle sleep) are
### Bug Description After a delegated subagent hits the hard child timeout (`delegation.child_timeout_seconds`), the desktop app's **Agents panel keeps showing it as "running" forever** — spinning spinner, tool badge, counted in the status-bar "Agents N running" indicator — even though the parent conversation already received the timeout error. The row is ne
## What does this PR do? Fixes Langfuse showing $0 cost for subscription-included providers (e.g. `openai-codex`). Both the response-object path and the `post_api_request` dict path were sending explicit zero-valued `cost_details` to Langfuse, which treats them as authoritative and never recalculates from model pricing. ## Related Issue Fixes #43129 ## Type
## What does this PR do? Slack slash commands are **workspace-global and not namespaced**. When two gateway apps live in the same workspace — or Hermes sits alongside any other app using generic names like `/model`, `/new`, `/help` — Slack routes each shared command to whichever app was installed most recently, silently breaking the others. There is no per-a
## What does this PR do? Completes Hermes's native Android/Termux support end to end: immutable Python dependencies, safe update behavior, narrow-terminal TUI UX, and the current Desktop renderer through Termux:X11 plus the phone's normal localhost browser. This is self-contained and rebased directly on current upstream `main`. It does not require another op
## What does this PR do? Codex/Responses turns can return several consecutive `status="incomplete"` responses that carry only **encrypted** reasoning items — no final text, no tool call. The merged reasoning-only nudge (#, grok-4.20 on xai-oauth) only fires when the interim has *nothing to replay* (plain-text reasoning, no `encrypted_content`). Encrypted rea
When the gateway restarts, _rehydrate_session_model_override calls _resolve_runtime_agent_kwargs_for_provider which calls resolve_runtime_provider without passing the model name. The api_mode is resolved from the provider's default transport, not the specific model's required transport. For opencode-go models like mimo-v2.5 that need chat_completions (OpenAI
## Summary Fixes #83683 — on a desktop (re)start the backend force-killed the live messaging gateway but never relaunched it, leaving WeChat/QQ/Telegram silently offline. This is a regression: the old gateway survived restarts (reparented), but the current gateway is a separate `hermes gateway run` process that the orphan-reaper happily killed, with no succe
## Symptom In the macOS desktop app, while the user is typing in the main composer input box, the text caret disappears the instant an agent tool call begins (the "Ran … Nms" tool row renders / the model starts executing a command). Typing resumes only after re-clicking the input. This happens on essentially every assistant turn. It reads to the user as an a
## Goal Eliminate the recurring timeout/hang bug classes structurally. The open backlog contains **400+ issues matching timeout/hang/stuck/wedge**; community triage #84047 collapsed the 77 title-matched runtime stalls into seven mechanisms. Reading those plus the wider set, the failures reduce to **five structural defects** that we currently fix one incident
## Summary Hermes Desktop can briefly show a newly created session for a profile connected to a remote gateway, then lose that session from the sidebar after switching to another profile and back. ## Reproduction 1. Configure the primary Desktop profile against a local backend. 2. Configure a second Desktop profile with a remote gateway override. 3. Switch t
**Platform:** macOS desktop (client built from main, includes #76008), backend on a Linux host over SSH. The agent's tools (terminal / file writes) run inside a **docker sandbox** on that host, so agent-written paths (`/workspace/...`, `/tmp/...`) exist only in the container filesystem — not on the backend host, not on the client. **Repro** 1. The agent writ