Hermes Agent
Hermes separates service processes, preview workers and config truth
Hermes proposes excluding service-managed PIDs from gateway orphan reaping, documents teardown for preview Chrome workers and tracks a config command that writes a valid reasoning setting while warning that it is unknown. The common problem is lifecycle truth.
NousResearch/hermes-agent PR #85743 is the inspected primary source: “fix(gateway): exclude service-managed PIDs from orphan reaping.” The related records below were inspected as supporting context rather than independent confirmation.
The facts
- NousResearch/hermes-agent PR #85743 was created 2026-08-14T01:25:19Z and was open at inspection; its title is “fix(gateway): exclude service-managed PIDs from orphan reaping.” - NousResearch/hermes-agent PR #85742 was created 2026-08-14T01:24:59Z and was closed at inspection; its title is “docs(hyperframes): document preview teardown to stop leaked Chrome workers.” - NousResearch/hermes-agent issue #85741 was created 2026-08-14T01:22:50Z and was open at inspection; its title is “[Bug]: hermes config set agent.reasoning_effort emits a false unrecognized-key warning.” - The repository reported 230152 stars, 31857 open issues, default branch main, and last push 2026-08-14T01:30:15Z. - The latest tagged-release baseline checked was v2026.8.13 published 2026-08-13T20:37:37Z.
What changed
NousResearch/hermes-agent PR #85743 reports: Summary _reap_unsupervised_gateway_orphans() kills every gateway PID found by find_gateway_pids() on hosts without systemd (macOS launchd, Windows Scheduled Task). This includes **service-managed gateways that are NOT orphans** — they are supervised by launchd/systemd and should never be killed during a stale-process sweep. The function's own docstring says exclude_pids is for "service-managed PIDs that should not be killed during a stale-process sweep", but it only excludes its own PID — not service-managed ones. Root Cause _reap_unsupervised_gateway_orphans() calls find_gateway_pids(exclude_pids=own) where own only contains {os.getpid()} plus extra_exclude. find_gateway_pids() includes _get_service_pids() in its results (line 634), but those service-managed PIDs are NOT in the exclusion set — so they get reaped. Fix Add own |= _get_service_pids() to the exclusion set before scanning, wrapped in try/except for robustness. This preserves the #77276 orphan protection while excluding launchd/systemd-supervised gateways. True orphans (reparented leftovers not present in launchctl list / systemctl) are still found and reaped. Changes hermes_cli/gateway.py: Add 5 lines in _reap_unsupervised_gateway_orphans() to exclude _get_service_pids() from the reap target set. Test Plan [x] Syntax check passes [x] Module imports correctly [ ] On macOS with launchd gateway: verify desktop serve startup no longer kills the gateway [
NousResearch/hermes-agent PR #85742 reports: Summary A stray npx hyperframes preview server left CPU pinned for days — load average 141 on a machine that should idle near zero. Traced it to leaked chrome-headless-shell render workers, not any hermes browser subsystem. hyperframes preview is a **long-lived** next-server that keeps Chrome render workers resident. On GPU-less hosts (WSL, containers, CI) each idle worker falls back to software WebGL (swiftshader) whose GPU process busy-spins a CPU core. The skill never told the agent preview was long-lived, so leaving it running — and stacking workers — was the default outcome. render is one-shot and self-cleaning; preview is not. This is a docs/skill fix. The leaking code lives in the external heygen-com/hyperframes package; hermes only ships the skill that invokes it. Changes **SKILL.md** — flag preview as a long-lived server in the quick reference; add a **Cleanup** section with teardown commands and a matching pitfall. **references/troubleshooting.md** — add a **Runaway CPU from leftover preview workers** entry: symptom, diagnose (pgrep -af chrome-headless-shell), fix, avoid. Test plan [ ] Docs render; intra-doc anchors (#cleanup, #runaway-cpu-from-leftover-preview-workers) resolve. [ ] Teardown commands are correct: pkill -f "hyperframes.*preview" frees port 3002; pgrep -af chrome-headless-shell
NousResearch/hermes-agent issue #85741 reports: Bug Description agent.reasoning_effort is a documented and runtime-consumed configuration key, but setting it through hermes config set emits an unrecognized-key warning. The value is still saved to config.yaml and returned by hermes config get, so the problem is the false warning rather than persistence or runtime behavior. This report concerns the scalar global key agent.reasoning_effort, not the per-model agent.reasoning_overrides mapping. The documentation only excludes nested reasoning_overrides entries from hermes config set because model names may contain dots. Steps to Reproduce 1. Run: 2. Observe the warning. 3. Confirm that the value was saved: Expected Behavior Because agent.reasoning_effort is a documented and runtime-supported key, it should be saved without an unrecognized-key warning. If /reasoning high --global is intentionally the only supported setter, the CLI should direct users to that command instead of saying Hermes may not read the saved value. Actual Behavior The value is saved, but the CLI prints: hermes config get agent.reasoning_effort subsequently returns: shell hermes debug share output can be attached if needed. shell ` Root Cause Analysis (optional) _No response_ Proposed Fix (optional) _No response_ Are you willing to submit a PR for this? [x] I'd like
Why it matters
Operators cannot trust recovery if a cleanup pass kills supervised work, previews leak workers or a successful configuration change reports failure. Each surface needs an authoritative owner and receipt. The operator test is whether visible state, retained state and authority still describe the same event after retries, switching or restart.
Current
The primary record was open when captured on 2026-08-14. The tagged-release baseline was v2026.8.13 published 2026-08-13T20:37:37Z. Repository metadata, full source bodies, current pull requests and issues, releases, Google News, Hacker News, Lobsters, Metamesh and the rendered ClawCharts row were inspected. ClawCharts selected the subject; it did not prove the claim.
Evidence
The primary URL is https://github.com/NousResearch/hermes-agent/pull/85743. Supporting records are https://github.com/NousResearch/hermes-agent/pull/85742 and https://github.com/NousResearch/hermes-agent/issues/85741. Source bodies, timestamps and states are preserved in the daily evidence bundle. Test counts and reproductions remain attributed to their authors unless identified as independently rerun.
Source boundary
Open work is described as open, closed work as closed, and operator reports as reports. A pull request is evidence of proposed or reviewed direction, not proof of a shipped release. Search residue, package mirrors and historically published source spines were excluded.
Operator take
Make supervision provenance machine-readable, require preview teardown on every exit path and align config validation with the schema that the runtime actually loads. Preserve a before-state receipt, make the smallest reversible change, and verify the original failure independently.
Caveat
Public project records are mutable. Status, scope and evidence can change after publication. This brief records the inspected state and does not authorize changes to a reader’s deployment.
Source inspected; source state, environment and release boundary remain explicit.