Skip to content

ci: run the work lanes on 32-core runners and merge the split jobs - #92009

Merged
ethernet8023 merged 3 commits into
mainfrom
ethie/larger-runners
Aug 22, 2026
Merged

ethernet8023 merged 3 commits into
mainfrom
ethie/larger-runners

Conversation

@ethernet8023

@ethernet8023 ethernet8023 commented Aug 22, 2026 •

Copy link
Copy Markdown
Collaborator

What does this PR do?

Every Linux lane that does real work ran on a 4-core ubuntu-latest. The
Python suite and the JS checks were split into many small jobs to make that
size usable. Each split job repeated the full setup. In most of the JS jobs
the repeated setup cost more than the work.

This PR moves the lanes that do work to larger runners. Then it removes the
splits that existed only to make small runners usable. Then it tunes what is
left, with measurements from the new hardware.

Runners. The work lanes move to ubuntu-latest-32-core. The arm64 image
build moves to ubuntu-latest-32-arm-core, because a build of linux/arm64 on
an x64 host uses emulation. .github/actionlint.yaml declares both labels.
actionlint knows the GitHub-hosted labels only, and an undeclared label reads
as an error that hides the real findings.

Python tests: 12 slices become 1 job on a 96-core runner. Slicing existed
to spread the suite over small runners. It cost a matrix job, a duration
cache, a per-slice artifact and a merge job. 96 cores clear the floor that the
slowest single test file sets, which is about 82s. A second slice divides work
that is already at that floor, and adds a second setup.

JS checks: 14 jobs become 1. The matrix paid about 371s of repeated setup
to spread about 612s of work. One larger runner installs one time. vitest, tsc
and eslint each size their own worker pool from the core count. The three UI
shard scripts and run-ui-shard.mjs are removed, because the unsharded
test:ui covers the same tests.

The JS unit of parallel work is a CHECK, and not a workspace. apps/desktop
is most of the payload, and its own check is a serial && chain. A spread
across workspaces alone therefore leaves that chain as the long pole. The loop
lives in .github/scripts/run-workspace-checks.mjs, so the same sequence runs
on a laptop. It runs 11 units together, buffers the output of each one, and
fails at the end with the full list. npm run --ws check stops at the first
failure.

Four tests depended on shared state, or on a timer that outlived them.
That was safe at 8 workers. It is not safe at 96 or more. They appear in runs
32547184159 and 32551746525:

  • Every pytest subprocess shared one temp root. pytest walks that root at the
    end of a session with cleanup_dead_symlinks(). The walk lists the
    directory, asks whether the pytest-current symlink resolves, then unlinks
    it. A second process replaces that symlink between the question and the
    unlink. The first process then raises FileNotFoundError after all of its
    tests passed. Each subprocess now gets its own temp root.
  • test_config_read_guard scanned the tree with rglob, which descends into
    __pycache__ trees that the guard never inspects. Sibling processes create
    and delete those entries during the run. The scan now uses os.walk and
    prunes before it descends.
  • A PTY test waited for a file to exist, and not for its content. The child
    runs open(out,'wb').write(...), so open() creates the file empty and the
    bytes arrive later. The test now waits for the bytes.
  • ConfirmDialog holds a "done" beat for 600ms, then calls onClose through
    window.setTimeout. The timer had no cleanup. An unmount inside that window
    left it armed, and it then reached setState on a tree that is gone. vitest
    tears the environment down first, so React read window during the update
    and threw ReferenceError: window is not defined. The handle now lives in a
    ref and clears on unmount. Zoomable had the same fault with a 1500ms
    timer.

The worker count comes from measurement. Run 32549672063 timed the whole
suite at six worker counts on the 96-core runner, two repetitions for each:

workers x cores rep 1 rep 2 mean
48 0.5x 138s 139s 138s
96 1.0x 127s 126s 126s
144 1.5x 130s 134s 132s
192 2.0x 132s 133s 132s
240 2.5x 140s 139s 140s
288 3.0x 143s 142s 142s

One worker for each core wins. The shape is the more useful result: 126s to
142s across a 6x range. The suite has sufficient concurrency at this machine
size. The remaining time belongs to the slowest individual files and to the
setup, so a future gain must come from those.

Related Issue

N/A — no issue. This work started from the CI times themselves.

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 🔒 Security fix
  • 📝 Documentation update
  • ✅ Tests (adding or improving test coverage)
  • ♻️ Refactor (no behavior change)
  • 🎯 New skill (bundled or hub)

Changes Made

  • .github/workflows/tests.yml — one 96-core job for the whole Python suite,
    no slicing, HERMES_TEST_WORKERS: 96.
  • .github/workflows/js-tests.yml — one 32-core job, node_modules cached on
    the lockfile, all checks run together.
  • .github/scripts/run-workspace-checks.mjs — new. Runs every workspace check
    together and reports every failure.
  • apps/desktop/package.json — explicit check:test:ui,
    check:test:desktop:platforms and check:test:desktop:all units.
    check:test:plugins joins the plain check script.
  • .github/workflows/docker.yml — 32-core amd64, native 32-core arm64.
  • .github/workflows/nix.yml, rust-tests.yml, e2e-desktop.yml — 32-core.
  • .github/workflows/ci.yaml, tests-os.yml — runner labels.
  • .github/actionlint.yaml — declares the two runner labels.
  • scripts/run_tests_parallel.py — one pytest temp root for each subprocess.
  • tests/hermes_cli/test_config_read_guard.py — os.walk with a prune.
  • tests/tools/test_process_registry_write_stdin_surrogates.py — waits for
    the content of the file.
  • apps/desktop/src/components/ui/confirm-dialog.tsx, zoomable.tsx — clear
    the pending timer on unmount.
  • apps/desktop/src/components/ui/confirm-dialog-unmount.test.tsx — new.
    Confirms, unmounts inside the 600ms window, then advances the clock.
  • Removed: apps/desktop/scripts/run-ui-shard.mjs and the three shard
    scripts.

How to Test

  1. Read the checks of this PR. Every lane must pass on the new runners.
  2. Run node .github/scripts/run-workspace-checks.mjs --list. It reports the
    11 units.
  3. Run node .github/scripts/run-workspace-checks.mjs. Every check runs
    together, and the summary reports the time of each unit.
  4. Run scripts/run_tests.sh. The Python suite passes.

Checklist

Code

  • I've read the Contributing Guide
  • My commit messages follow Conventional Commits (fix(scope):, feat(scope):, etc.)
  • I searched for existing PRs to make sure this isn't a duplicate
  • My PR contains only changes related to this fix/feature (no unrelated commits)
  • I've run pytest tests/ -q and all tests pass
  • I've added tests for my changes (required for bug fixes, strongly encouraged for features)
  • I've tested on my platform: NixOS (Linux 7.1.8), and on the CI runners

Documentation & Housekeeping

  • I've updated relevant documentation (README, docs/, docstrings) — or N/A
  • I've updated cli-config.yaml.example if I added/changed config keys — or N/A
  • I've updated CONTRIBUTING.md or AGENTS.md if I changed architecture or workflows — or N/A
  • I've considered cross-platform impact (Windows, macOS) per the compatibility guide — or N/A
  • I've updated tool descriptions/schemas if I changed tool behavior — or N/A

Verification

  • actionlint reports 9 findings across all workflows. An unmodified HEAD with
    the same config reports the same 9. This change adds none.
  • A wrong label still fails. actionlint reports ubuntu-latest-32-cor and
    ubuntu-latest-32-arm-cores.
  • A replay of the save-durations merge step against a three-artifact layout
    returns all 3178 entries.
  • An expansion of the npm script graph gives the same leaf commands for the
    parallel units and for a plain npm run check, in both directions. Against
    the 13-leg matrix the count is 13 to 11, and the whole difference is the
    three UI shards that collapse into one unsharded check:test:ui.
  • A direct driver of _pytest.pathlib.cleanup_dead_symlinks against one
    shared root raises the same FileNotFoundError on pytest-current as CI. A
    private root for each subprocess removes that condition. 5 subprocesses
    receive 5 distinct roots, and no root survives the attempt.
  • The config guard still catches a planted raw yaml.safe_load of
    config.yaml, and names the planted file.
  • The old PTY wait loses 6 times in 25 runs on an idle 16-core machine. The
    new wait loses 0 times in 25.
  • The PTY test cannot run on the NixOS development machine. That machine has
    no python3 outside the nix store, and the test uses the literal python3.
    The child exits 127 there. CI covers it.

@ethernet8023
ethernet8023 requested a review from a team August 22, 2026 02:27
@ethernet8023 ethernet8023 added the ci-reviewed applied to manually approve dangerous changes label Aug 22, 2026
@github-actions

github-actions Bot commented Aug 22, 2026 •

Copy link
Copy Markdown

૮ >ﻌ< ა ci review

ran on f62878b — perf(ci): set python test workers to one for each core, from

⚠️ Warnings

OSV vulnerability scan · View job

7 known vulnerabilities found in pinned dependencies.

How to fix:

Review the findings in the Security tab. Update the affected dependencies if a patched version is available.


ℹ️ Info

CI-sensitive file review · View job

PR touches sensitive files, but the ci-reviewed label has been added, approving them.

Sensitive files changed:


debug info

CI timings

CI timings · View report · View job

Wall time 2m31s vs 3m52s (-34.9%). 12 job(s) slower, 3 faster, 2 unchanged.

  • OS-specific tests / Windows-only tests: +19.0s
  • Rust tests / cargo test (bootstrap installer): +13.0s
  • Docs Site / docs-site-checks: -13.0s
  • OS-specific tests / macOS-only tests: +8.0s
  • Check contributors / check-attribution: -6.0s

@alt-glitch alt-glitch added type/perf Performance improvement or optimization P3 Low — cosmetic, nice to have comp/desktop Electron desktop app (apps/desktop/*) area/nix Nix flake, NixOS module, container packaging sweeper:risk-automation Sweeper risk: may affect CI, automerge, label sync, or maintainer automation labels Aug 22, 2026
@ethernet8023
ethernet8023 force-pushed the ethie/larger-runners branch 2 times, most recently from 209a71f to e437f63 Compare August 22, 2026 05:03
Every Linux lane that does real work ran on a 4-core `ubuntu-latest`. The
Python suite and the JS checks were split into many small jobs to make that
size usable. Each split job repeated the full setup. In most of the JS jobs
the repeated setup cost more than the work.

The work lanes move to larger runners. Then the splits that existed only to
make small runners usable go away.

Python tests: 12 slices become 1 job on a 96-core runner. Slicing cost a
matrix job, a duration cache, a per-slice artifact and a merge job. 96 cores
clear the floor that the slowest single test file sets, which is about 82s. A
second slice divides work that is already at that floor, and adds a second
setup. Duration data from run 32522943054 gives the numbers behind this: 3178
files, 11645s in series.

The worker count is explicit, because `run_tests.sh` defaults to twice the
core count. A later commit sets it from a measurement on this hardware.

JS checks: 14 jobs become 1. The matrix paid about 371s of repeated setup to
spread about 612s of work. One larger runner installs one time. The three UI
shard scripts and `run-ui-shard.mjs` are therefore removed, because the
unsharded `test:ui` covers the same tests.

The unit of parallel work inside that job is a CHECK, and not a workspace.
apps/desktop is most of the payload, and its own `check` is a serial && chain.
A spread across workspaces alone therefore leaves that chain as the long pole.
A package that declares `check:*` sub-scripts gives one unit for each
sub-script. That is the same selection rule the matrix used.

The loop lives in `.github/scripts/run-workspace-checks.mjs`, so the same
sequence runs on a laptop. It runs 11 units together, buffers the output of
each one, and fails at the end with the full list. Children that share one
stdout interleave their lines and make a failure hard to read.
`npm run --ws check` stops at the first workspace that fails.

`check:test:plugins` joins the desktop `check` script. The matrix prefers
`check:*` sub-scripts over the plain `check` script, so `check:test:plugins`
ran only as its own leg. Without this change the merge drops that suite and
the job stays green.

node_modules is cached on the lockfile, and `npm ci` is skipped on an exact
hit. The `cache: npm` option of `setup-node` caches only the ~/.npm tarball
cache, which leaves the extract and the postinstalls to pay again.

The arm64 image build stays on a native arm64 runner. A build of linux/arm64
on an x64 host uses emulation.

The docker test lane caps its workers at the core count. Each of those tests
drives a container, so the docker daemon sets the limit and not the processor.

`.github/actionlint.yaml` declares the runner labels. actionlint knows the
GitHub-hosted labels only, and an undeclared label reads as an error that
hides the real findings.

The `detect` job checks out one file through a sparse checkout, and its
timeout drops to 1 minute. It reads
`scripts/ci/classify_changes.py` and nothing else.

Verification:
- actionlint reports 9 findings across all workflows. An unmodified HEAD with
  the same config reports the same 9. This change adds none.
- A wrong label still fails. actionlint reports `ubuntu-latest-32-cor` and
  `ubuntu-latest-32-arm-cores`.
- Every changed workflow parses, and `name` parses as a string.
- A replay of the `save-durations` merge step against a three-artifact layout
  returns all 3178 entries.
- An expansion of the npm script graph gives the same leaf commands for the
  parallel units and for a plain `npm run check`, in both directions. Against
  the 13-leg matrix the count is 13 to 11, and the whole difference is the
  three UI shards that collapse into one unsharded `check:test:ui`.
- `--list` reports the 11 units, and a full local run completes and reports
  the time of each unit.
- The runner labels cannot be verified here. The first real run is the test.
…urrency

The suite now runs as one job with high per-file concurrency. Four tests
depend on state that they share with their siblings, or on a timer that
outlives them. That was safe at 8 workers. It is not safe at 96 or more.
Runs 32547184159 and 32551746525 show them.

1. Every pytest subprocess shared one temp root.

pytest puts tmp_path under <temproot>/pytest-of-<user>/. At the end of a
session it walks that directory with cleanup_dead_symlinks(). The walk lists
the directory. Then it asks whether the `pytest-current` symlink resolves.
Then it unlinks the symlink. A second process replaces that symlink between
the question and the unlink. The first process then raises FileNotFoundError
after all of its tests passed. Two files failed this way and passed on retry.

scripts/run_tests_parallel.py now gives each subprocess its own temp root
through PYTEST_DEBUG_TEMPROOT, and deletes it after the attempt. No two
processes share a directory. The race has no shared object to act on.

Proof: a direct driver of _pytest.pathlib.cleanup_dead_symlinks against one
root, with a second thread that replaces the symlink, raises the same
FileNotFoundError on 'pytest-current' as CI. A private root for each
subprocess removes that condition. A separate check confirms that 5
subprocesses receive 5 distinct roots, that tmp_path lands inside the private
root, and that no root survives the attempt.

2. The config read guard walked directories that other tests were writing.

tests/hermes_cli/test_config_read_guard.py scanned the tree with rglob. rglob
descends into every directory and filters after that, so it calls scandir() on
__pycache__ trees that the guard never inspects. Sibling processes create and
delete those entries during the run. A directory that disappears in the middle
of a walk raises FileNotFoundError out of rglob.

The scan now uses os.walk. It prunes excluded directories before it descends,
and it ignores a directory that disappears. __pycache__ joins the excluded
set, because bytecode is not source.

The guard still catches what it exists to catch. With a planted raw
yaml.safe_load of config.yaml in hermes_cli/, the test fails and names the
planted file. With a clean tree it passes.

3. A PTY test waited for a file to exist, and not for its content.

tests/tools/test_process_registry_write_stdin_surrogates.py spawns a child
that runs open(out,'wb').write(sys.stdin.buffer.readline()). open() creates
the file empty. The bytes arrive only after the PTY delivers the line. The
wait stopped at out.exists(), which the empty file already satisfies, so the
read returned b'' when the parent won that gap. This test failed both attempts
in CI, and did not pass on retry.

The test now waits for the expected bytes, with a bounded deadline.

Proof: the old wait loses 6 times in 25 runs on an idle 16-core machine. The
new wait loses 0 times in 25.

4. A dialog close timer outlived the test that started it.

ConfirmDialog holds the "done" beat for 600ms after a successful confirm, then
calls onClose. The timer had no cleanup, so an unmount inside that window left
it armed. It then called onClose on a tree that is gone, which reaches
setState in the parent. vitest can tear the environment down first, and React
then reads `window` during the update:

    ReferenceError: window is not defined
     at resolveUpdatePriority (react-dom-client.development.js:1308)
     at dispatchSetState
     at Timeout.t4 [as _onTimeout] session-actions-menu.tsx:574

The frame at session-actions-menu.tsx:574 is the `onClose` prop of
DeleteSessionDialog. The owner of the timer is ConfirmDialog, which now keeps
the handle in a ref and clears it on unmount.

Zoomable had the same fault, with a 1500ms timer that clears a "copied" flag.
copy-button.tsx and tooltip.tsx already clear their timers.

Proof: a new test confirms, unmounts inside the 600ms window, then advances
the clock. Against the old code it fails with "expected onClose to not be
called at all, but actually been called 1 times". Against the new code it
passes.

Verification:
- The affected Python files and the tests of the runner itself pass under
  scripts/run_tests.sh.
- The desktop ui suite passes: 566 files, 5382 tests, and no
  "window is not defined".
- eslint reports 0 errors on apps/desktop. The 118 warnings are the state
  before this change. The two cleanup effects carry an eslint-disable line for
  the ref-mirror rule. They write a timer handle, and not a mirror of a
  reactive value. The rule permits this, and its own comment names the case.
- The PTY test cannot run on the NixOS development machine. That machine has
  no python3 outside the nix store, and the test uses the literal `python3`.
  The child exits 127 there. The fix rests on the 25-run measurement above and
  on CI.
`run_tests.sh` defaults to twice the core count, and the value this branch
started with came from a rule of thumb of 1.5x cores plus a measurement on a
16-core machine. A sweep on the real runner disagrees with both.

Run 32549672063 on the 96-core runner (EPYC 7763, 377GB) timed the whole suite
at six worker counts, two repetitions for each. A warmup run came first, and
retries were off:

    workers   x cores   rep 1   rep 2   mean
       48       0.5x     138s    139s   138s
       96       1.0x     127s    126s   126s   <- fastest
      144       1.5x     130s    134s   132s
      192       2.0x     132s    133s   132s
      240       2.5x     140s    139s   140s
      288       3.0x     143s    142s   142s

One worker for each core wins. Both repetitions agree on the order.

The shape is the more useful result. The range is 126s to 142s across a 6x
range of worker counts. The suite has sufficient concurrency at this machine
size, so nothing above the core count buys anything. The remaining time
belongs to the slowest individual files and to the setup. A future gain must
come from those, and not from this number.

The sweep ran from a temporary workflow that this branch does not keep.
@ethernet8023
ethernet8023 enabled auto-merge (rebase) August 22, 2026 05:38
@ethernet8023
ethernet8023 merged commit 0012dd1 into main Aug 22, 2026
36 checks passed
@ethernet8023
ethernet8023 deleted the ethie/larger-runners branch August 22, 2026 06:25
gabrielcosi pushed a commit to gabrielcosi/home-ops that referenced this pull request Sep 1, 2026
…8.27 ➔ v2026.8.31) (#606)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/gabrielcosi/hermes-agent](https://github.com/NousResearch/hermes-agent) | patch | `v2026.8.27` → `v2026.8.31` |

---

### Release Notes

<details>
<summary>NousResearch/hermes-agent (ghcr.io/gabrielcosi/hermes-agent)</summary>

### [`v2026.8.31`](https://github.com/NousResearch/hermes-agent/releases/tag/v2026.8.31): Hermes Agent v0.21.0 (v2026.8.31)

[Compare Source](https://github.com/NousResearch/hermes-agent/compare/v2026.8.27...v2026.8.31)

##### Hermes Agent v0.21.0 (v2026.8.31)

**Release Date:** August 31, 2026
**Since v0.20.0:** \~5,800 commits · \~2,475 merged PRs · \~5,680 files changed · \~869,000 insertions · \~135,000 deletions · **\~2,100 issues closed** · 760+ contributors

> **The Pantheon Release.** v0.20.0 made Hermes the herald — he spoke, and he carried word to other agents. In v0.21.0 the gods assemble. Bot Mode ships built into the desktop app: a society of named agents with their own faces and group chats, where your bots talk to each other — and to you — like a team, not a toolbox. Around that spine: cron jobs gained memory and continuity so scheduled agents actually learn between runs, subagents can be steered live mid-flight, the MCP surface became a real command center, and the agent can now drive the desktop's own browser. This release rolls up everything from the v0.20.1–v0.20.6 infrastructure patch tags — those windows are fully documented here.

***

##### ✨ Highlights

- **Bot Mode — your agents become a society, built in** — Bot Mode is now a bundled, default-on part of the desktop app: every agent profile gets a name, a deterministic avatar face (with randomize/lock controls), and a place in a shared roster. Create Discord-style group chats where multiple bots and you talk in one room, @&#8203;-mention any bot from the composer, and give rooms names and pictures. Before, "multi-agent" meant plumbing; now it looks like a chat app full of coworkers. ([#&#8203;87886](https://github.com/NousResearch/hermes-agent/pull/87886), [#&#8203;88243](https://github.com/NousResearch/hermes-agent/pull/88243), [#&#8203;89386](https://github.com/NousResearch/hermes-agent/pull/89386), [#&#8203;96726](https://github.com/NousResearch/hermes-agent/pull/96726) — [@&#8203;teknium1](https://github.com/teknium1), [@&#8203;OutThisLife](https://github.com/OutThisLife), [@&#8203;dokterdok](https://github.com/dokterdok))

- **`hermes peer` — bot-to-bot DMs between your agents** — Any Hermes agent can now message any other by handle, across profiles and gateways, from the CLI or from inside a conversation. Ask your research bot to hand findings to your coding bot and get the reply back where you can read it. Replies land in each agent's canonical Bot Chat, so conversations between agents are durable and inspectable, not fire-and-forget. ([#&#8203;88725](https://github.com/NousResearch/hermes-agent/pull/88725), [#&#8203;88178](https://github.com/NousResearch/hermes-agent/pull/88178), [#&#8203;91487](https://github.com/NousResearch/hermes-agent/pull/91487) — [@&#8203;teknium1](https://github.com/teknium1))

- **Cron jobs that remember** — Scheduled jobs stopped being goldfish. Cron agents now load and update persistent memory like every other agent, `continuity=true` carries each run's output into the next (so a monitor can dedupe against what it already reported), every job gets a durable notepad scratchpad, monitor-mode jobs skip the LLM entirely when nothing changed, and cron output can land in a bot's canonical Bot Chat — where the bot actually responds. Your 9am briefing job now knows what it told you yesterday. ([#&#8203;91447](https://github.com/NousResearch/hermes-agent/pull/91447), [#&#8203;80774](https://github.com/NousResearch/hermes-agent/pull/80774), [#&#8203;81139](https://github.com/NousResearch/hermes-agent/pull/81139), [#&#8203;81138](https://github.com/NousResearch/hermes-agent/pull/81138), [#&#8203;91487](https://github.com/NousResearch/hermes-agent/pull/91487) — [@&#8203;teknium1](https://github.com/teknium1), [@&#8203;smwbev](https://github.com/smwbev))

- **Steer your subagents while they run** — `delegate_task` gained live orchestration: list running children, steer one mid-flight with a course correction, or stop it early and keep the partial result. Add optional JSON-schema validation on child outputs, per-delegation cost surfaced in results, and raised defaults (250 iterations, 10 concurrent children) — delegation went from fire-and-pray to actually managed parallel work. ([#&#8203;85232](https://github.com/NousResearch/hermes-agent/pull/85232), [#&#8203;81144](https://github.com/NousResearch/hermes-agent/pull/81144), [#&#8203;81142](https://github.com/NousResearch/hermes-agent/pull/81142), [#&#8203;86506](https://github.com/NousResearch/hermes-agent/pull/86506), [#&#8203;86745](https://github.com/NousResearch/hermes-agent/pull/86745) — [@&#8203;teknium1](https://github.com/teknium1))

- **The MCP command center** — MCP servers and the catalog merged into one coherent desktop page with drag-in "paste anything" import, background health checks that nudge you to re-auth before a tool call fails, a fleet cost/usage overlay showing schema token estimates and 30-day usage per server, and `hermes://` deep links that install an MCP server with explicit confirmation. Managing twenty MCP servers used to be config-file archaeology; now it's a dashboard. ([#&#8203;87525](https://github.com/NousResearch/hermes-agent/pull/87525), [#&#8203;87572](https://github.com/NousResearch/hermes-agent/pull/87572), [#&#8203;87576](https://github.com/NousResearch/hermes-agent/pull/87576), [#&#8203;87579](https://github.com/NousResearch/hermes-agent/pull/87579), [#&#8203;87581](https://github.com/NousResearch/hermes-agent/pull/87581) — [@&#8203;teknium1](https://github.com/teknium1))

- **A CLI power wave** — Ctrl+P opens a fuzzy command palette, the `/model` picker filters as you type, `/status` shows reasoning mode, pending approvals, and context usage, and the status bar can display live cache-hit %, latency, and tokens/sec with per-field toggles. Plus: a global emergency stop, session pin/unpin, rotating task-oriented composer placeholders — and Ghostty-level **terminal pets**, because a companion should have a companion. ([#&#8203;90730](https://github.com/NousResearch/hermes-agent/pull/90730), [#&#8203;90717](https://github.com/NousResearch/hermes-agent/pull/90717), [#&#8203;90745](https://github.com/NousResearch/hermes-agent/pull/90745), [#&#8203;98250](https://github.com/NousResearch/hermes-agent/pull/98250), [#&#8203;98282](https://github.com/NousResearch/hermes-agent/pull/98282), [#&#8203;97666](https://github.com/NousResearch/hermes-agent/pull/97666) — [@&#8203;teknium1](https://github.com/teknium1), and salvaged community work)

- **The agent drives the desktop's browser** — The in-app browser stopped being a window the agent could only look at: Hermes now navigates, clicks, and reads it directly, and pages can be popped out to your system browser with full link context menus. Ask it to walk a docs site or debug a web app and watch it happen inside your own app. ([#&#8203;90197](https://github.com/NousResearch/hermes-agent/pull/90197), [#&#8203;89366](https://github.com/NousResearch/hermes-agent/pull/89366) — [@&#8203;OutThisLife](https://github.com/OutThisLife), [@&#8203;ethernet8023](https://github.com/ethernet8023))

- **Six new providers and a model catalog wave** — Meta Model API (Muse Spark) arrives as a built-in provider, alongside CommandCode, Tencent TokenPlan, Nebius Token Factory, Ramp Router, and Actual Computer. The catalogs picked up GLM-5.3-Flash, qwen3.8-max/flash, Gemini 3.7 Flash, MiniMax M3 free, and Nemotron 3.5 Lightning — and `model_overrides` lets you patch any model's context window or pricing yourself without waiting on a release. ([#&#8203;88565](https://github.com/NousResearch/hermes-agent/pull/88565), [#&#8203;88308](https://github.com/NousResearch/hermes-agent/pull/88308), [#&#8203;97917](https://github.com/NousResearch/hermes-agent/pull/97917), [#&#8203;97916](https://github.com/NousResearch/hermes-agent/pull/97916), [#&#8203;97915](https://github.com/NousResearch/hermes-agent/pull/97915), [#&#8203;85560](https://github.com/NousResearch/hermes-agent/pull/85560) — [@&#8203;teknium1](https://github.com/teknium1) and community)

- **Security hardening across the board** — Protected agent-instruction files (AGENTS.md, skills, memory stores) now always require write approval so a prompt-injected agent can't quietly rewrite its own standing orders. A deep redaction sweep closed secret-leak gaps across terminal errors, `.env` file reads, checkpoints, and ACP logs; the approval system learned Windows destructive commands; and macOS permission grants finally survive updates via a stable TCC signing identity. ([#&#8203;81152](https://github.com/NousResearch/hermes-agent/pull/81152), [#&#8203;80965](https://github.com/NousResearch/hermes-agent/pull/80965), [#&#8203;84428](https://github.com/NousResearch/hermes-agent/pull/84428), [#&#8203;95091](https://github.com/NousResearch/hermes-agent/pull/95091) — [@&#8203;teknium1](https://github.com/teknium1) and community)

***

##### 🏗️ Core Agent & Architecture

##### Providers & Models

- **New providers:** Actual Computer inference ([#&#8203;79644](https://github.com/NousResearch/hermes-agent/pull/79644), salvage of [#&#8203;26491](https://github.com/NousResearch/hermes-agent/issues/26491)), CommandCode with GOAT/Pro/Max plans ([#&#8203;88308](https://github.com/NousResearch/hermes-agent/pull/88308), salvage of [#&#8203;32909](https://github.com/NousResearch/hermes-agent/issues/32909)), Meta Model API (Muse Spark) as a built-in provider plugin ([#&#8203;88565](https://github.com/NousResearch/hermes-agent/pull/88565)), Tencent TokenPlan ([#&#8203;97917](https://github.com/NousResearch/hermes-agent/pull/97917)), Nebius Token Factory ([#&#8203;97916](https://github.com/NousResearch/hermes-agent/pull/97916)), and Ramp Router ([#&#8203;97915](https://github.com/NousResearch/hermes-agent/pull/97915)).
- **Model catalog wave:** qwen3.8-max and qwen3.8-flash ([#&#8203;78024](https://github.com/NousResearch/hermes-agent/pull/78024), [#&#8203;96979](https://github.com/NousResearch/hermes-agent/pull/96979)), Gemini 3.7 Flash ([#&#8203;85526](https://github.com/NousResearch/hermes-agent/pull/85526)), GLM-5.3-Flash across OpenRouter/Nous/z.ai/OpenCode ([#&#8203;95621](https://github.com/NousResearch/hermes-agent/pull/95621), [#&#8203;96293](https://github.com/NousResearch/hermes-agent/pull/96293)), MiniMax M3 + Inkling free SKUs ([#&#8203;96264](https://github.com/NousResearch/hermes-agent/pull/96264)), Nemotron 3.5 Lightning ([#&#8203;84645](https://github.com/NousResearch/hermes-agent/pull/84645)), Meta Muse Spark 1.2 ([#&#8203;88600](https://github.com/NousResearch/hermes-agent/pull/88600)).
- **Per-model metadata overrides** via `model_overrides` config — patch context windows, pricing, or capabilities for any model without waiting on a release ([#&#8203;85560](https://github.com/NousResearch/hermes-agent/pull/85560)).
- **Data-training-tier warnings** — a unified selection-guard registry warns you across every picker surface when a model trains on your data ([#&#8203;85917](https://github.com/NousResearch/hermes-agent/pull/85917)).
- **Pip-installed model providers** discovered via entry points — third parties can ship providers as packages ([#&#8203;85504](https://github.com/NousResearch/hermes-agent/pull/85504), salvage [#&#8203;81419](https://github.com/NousResearch/hermes-agent/issues/81419)).
- **Prompt caching engaged for LiteLLM Claude** on the OpenAI wire ([#&#8203;87517](https://github.com/NousResearch/hermes-agent/pull/87517) — [@&#8203;kshitijk4poor](https://github.com/kshitijk4poor)) and api.meta.ai routed through the Responses API for caching ([#&#8203;88601](https://github.com/NousResearch/hermes-agent/pull/88601)).
- **Codex GPT context defaults** back to the verified 272K, with explicit -900k picker variants for the large window ([#&#8203;92797](https://github.com/NousResearch/hermes-agent/pull/92797)).

##### Agent Loop & Reliability

- **Stalled-provider recovery** — a stalled stream no longer leaves Desktop silent or burns the retry budget ([#&#8203;87236](https://github.com/NousResearch/hermes-agent/pull/87236) — [@&#8203;fangliquanflq](https://github.com/fangliquanflq)).
- **MoA hardening cluster** — the Mixture-of-Agents facade now survives client rebuilds, stream retries, provider rotation, and fallback/restore without leaking prepared requests to native clients ([#&#8203;90212](https://github.com/NousResearch/hermes-agent/pull/90212) and siblings).
- **Structured-output resilience** — auxiliary calls translate `response_format` for Anthropic wires and retry when a provider rejects structured output ([#&#8203;89589](https://github.com/NousResearch/hermes-agent/pull/89589) — [@&#8203;ethernet8023](https://github.com/ethernet8023)).
- **Compression: lean tail mode** + a compaction recall eval harness to measure what compression actually preserves ([#&#8203;87326](https://github.com/NousResearch/hermes-agent/pull/87326)).
- **Oversized tool results spill to cache** instead of being truncated in sandbox-less sessions ([#&#8203;89028](https://github.com/NousResearch/hermes-agent/pull/89028)).
- **`clarify` asks multiple independent questions in one call** — one form instead of a chain of round-trips ([#&#8203;89467](https://github.com/NousResearch/hermes-agent/pull/89467) — [@&#8203;ethernet8023](https://github.com/ethernet8023)).
- **Verify subsystem** (port from superagent-ai/grok-cli): run-recipe detection + environment manifest so "it works" claims are backed by detected build/test commands ([#&#8203;80686](https://github.com/NousResearch/hermes-agent/pull/80686)).

##### Sessions & State

- **Resumed transcripts never re-append** — `_db_persisted` stamped at row load time ([#&#8203;92539](https://github.com/NousResearch/hermes-agent/pull/92539) — [@&#8203;kshitijk4poor](https://github.com/kshitijk4poor)).
- **SessionDB context-manager protocol** for leak-free DB lifecycles ([#&#8203;88048](https://github.com/NousResearch/hermes-agent/pull/88048) — [@&#8203;jackulau](https://github.com/jackulau)).
- **Instant session naming** from the opening message, with sticky titles across resume ([#&#8203;81985](https://github.com/NousResearch/hermes-agent/pull/81985) — [@&#8203;OutThisLife](https://github.com/OutThisLife)).
- **Session pin/unpin from the CLI** — durable keep flags ([#&#8203;80761](https://github.com/NousResearch/hermes-agent/pull/80761)).

##### 📱 Messaging Platforms (Gateway)

- **Slack native live cards** — real streaming replies via chat.startStream plus opt-in plan/task cards for tool progress ([#&#8203;85476](https://github.com/NousResearch/hermes-agent/pull/85476)); outbound link-preview suppression across native and relay planes ([#&#8203;95142](https://github.com/NousResearch/hermes-agent/pull/95142) — [@&#8203;benbarclay](https://github.com/benbarclay)).
- **Telegram inline picker** — every command and skill searchable via [@&#8203;botname](https://github.com/botname), bypassing Telegram's command-menu cap ([#&#8203;98317](https://github.com/NousResearch/hermes-agent/pull/98317)).
- **Relay matured** — native static/dynamic plugin initialization ([#&#8203;77915](https://github.com/NousResearch/hermes-agent/pull/77915) — [@&#8203;bbednarski9](https://github.com/bbednarski9)), live-card ops with draft streaming + task cards ([#&#8203;85796](https://github.com/NousResearch/hermes-agent/pull/85796) — [@&#8203;victor-kyriazakos](https://github.com/victor-kyriazakos)), session-span segmentation ([#&#8203;85467](https://github.com/NousResearch/hermes-agent/pull/85467)), voice-note STT restored over the relay lane ([#&#8203;95274](https://github.com/NousResearch/hermes-agent/pull/95274) — [@&#8203;benbarclay](https://github.com/benbarclay)), transport dedupe/fail-fast fixes ([#&#8203;89584](https://github.com/NousResearch/hermes-agent/pull/89584)).
- **Gateway control socket** — fleet consumers query the gateway itself (identify/status), and updaters pause gateways gracefully instead of tree-killing them ([#&#8203;92447](https://github.com/NousResearch/hermes-agent/pull/92447), [#&#8203;95695](https://github.com/NousResearch/hermes-agent/pull/95695)).
- **Selective multiplex profile serving** ([#&#8203;83400](https://github.com/NousResearch/hermes-agent/pull/83400)), per-profile MCP lifecycle RPCs ([#&#8203;86473](https://github.com/NousResearch/hermes-agent/pull/86473)), roster previews showing the latest message ([#&#8203;85905](https://github.com/NousResearch/hermes-agent/pull/85905)), concise background-process notifications by default ([#&#8203;85877](https://github.com/NousResearch/hermes-agent/pull/85877)).
- **Turn-reaper stack dumps** — when the watchdog fires, wedged worker stacks are captured for diagnosis ([#&#8203;86248](https://github.com/NousResearch/hermes-agent/pull/86248)), with loop-watchdog tuning knobs wired end-to-end ([#&#8203;92317](https://github.com/NousResearch/hermes-agent/pull/92317)).
- **Split-delivery bug class closed** — swallowed finals and split deliveries fixed as a class ([#&#8203;79669](https://github.com/NousResearch/hermes-agent/pull/79669) — [@&#8203;kshitijk4poor](https://github.com/kshitijk4poor), salvages [#&#8203;78558](https://github.com/NousResearch/hermes-agent/issues/78558)).

##### 🖥️ Desktop App

- **Bot Mode built in** — see Highlights. Full sub-catalog: attributed agent-to-agent message cards ([#&#8203;85855](https://github.com/NousResearch/hermes-agent/pull/85855)), sender-side delivery notices ([#&#8203;85888](https://github.com/NousResearch/hermes-agent/pull/85888)), paint-first hydration for instant wakes ([#&#8203;89510](https://github.com/NousResearch/hermes-agent/pull/89510)), editable group names and room pictures ([#&#8203;89371](https://github.com/NousResearch/hermes-agent/pull/89371)), Routines pane ([#&#8203;88731](https://github.com/NousResearch/hermes-agent/pull/88731)), rebuilt on the app design system ([#&#8203;96726](https://github.com/NousResearch/hermes-agent/pull/96726) — [@&#8203;OutThisLife](https://github.com/OutThisLife)).
- **In-app browser the agent can drive** — the agent uses the desktop's browser tab, not just looks at it ([#&#8203;90197](https://github.com/NousResearch/hermes-agent/pull/90197) — [@&#8203;OutThisLife](https://github.com/OutThisLife)), with external-open + link context menus ([#&#8203;89366](https://github.com/NousResearch/hermes-agent/pull/89366)).
- **Detached update hand-off on every OS** — quit → update → reopen with a single shim window; Windows desktop updates no longer park on "Updating Hermes" ([#&#8203;83634](https://github.com/NousResearch/hermes-agent/pull/83634), [#&#8203;90937](https://github.com/NousResearch/hermes-agent/pull/90937), [#&#8203;95897](https://github.com/NousResearch/hermes-agent/pull/95897)).
- **Quality-of-life wave** — HUD snaps to cursor on ⌘⇧G ([#&#8203;83130](https://github.com/NousResearch/hermes-agent/pull/83130)), paste into the composer without focusing it ([#&#8203;84955](https://github.com/NousResearch/hermes-agent/pull/84955)), per-turn duration badges ([#&#8203;87245](https://github.com/NousResearch/hermes-agent/pull/87245)), readable macOS window translucency ([#&#8203;88744](https://github.com/NousResearch/hermes-agent/pull/88744)), Linux launcher entry ([#&#8203;76456](https://github.com/NousResearch/hermes-agent/pull/76456)), Linux keychain auto-detection ([#&#8203;84903](https://github.com/NousResearch/hermes-agent/pull/84903)), cron + blueprint recipes in the sidebar ([#&#8203;85162](https://github.com/NousResearch/hermes-agent/pull/85162)).
- **Send Diagnostics** — error cards can upload a redacted debug bundle with a support handoff ([#&#8203;92020](https://github.com/NousResearch/hermes-agent/pull/92020)).
- **Seq-stamped event replay** — lossless desktop reconnect over WebSocket ([#&#8203;94219](https://github.com/NousResearch/hermes-agent/pull/94219) — [@&#8203;kshitijk4poor](https://github.com/kshitijk4poor)).
- **God-file decomposition** — the desktop codebase refactored into atomic modules ([#&#8203;89611](https://github.com/NousResearch/hermes-agent/pull/89611) — [@&#8203;OutThisLife](https://github.com/OutThisLife)).

##### 🖥️ CLI & TUI

- See Highlights for the power wave (command palette, fuzzy /model, richer /status, live status-bar metrics, pets).
- **`hermes approval-check`** — dry-run approval verdicts for a command without running it ([#&#8203;81137](https://github.com/NousResearch/hermes-agent/pull/81137)).
- **Session titles in status bars** ([#&#8203;81947](https://github.com/NousResearch/hermes-agent/pull/81947)); subagent model exposed in the auxiliary-models picker ([#&#8203;80463](https://github.com/NousResearch/hermes-agent/pull/80463)).
- **Ctrl+C fixed** — stopped pushing the Kitty keyboard protocol that broke interrupts ([#&#8203;87074](https://github.com/NousResearch/hermes-agent/pull/87074)).

##### 🔧 Tool System & MCP

- **MCP command center** — see Highlights ([#&#8203;87525](https://github.com/NousResearch/hermes-agent/pull/87525) et al.).
- **Interrupted commands no longer poison cwd** — the terminal won't adopt a stale working directory after an interrupt ([#&#8203;85654](https://github.com/NousResearch/hermes-agent/pull/85654) — [@&#8203;ethernet8023](https://github.com/ethernet8023)).
- **Windows rename contention recovery** ([#&#8203;84852](https://github.com/NousResearch/hermes-agent/pull/84852) — [@&#8203;OutThisLife](https://github.com/OutThisLife)); colon-bearing session IDs no longer break sandbox mounts ([#&#8203;93488](https://github.com/NousResearch/hermes-agent/pull/93488), consolidated 6 PRs).
- **Vision output uncapped** — aux vision calls stop clamping max\_tokens ([#&#8203;75253](https://github.com/NousResearch/hermes-agent/pull/75253) — [@&#8203;adikpb](https://github.com/adikpb)).
- **Subagent work protected** — delegate no longer deletes a child's uncommitted work when git inspection fails ([#&#8203;88419](https://github.com/NousResearch/hermes-agent/pull/88419) — [@&#8203;kshitijk4poor](https://github.com/kshitijk4poor)).

##### 🧩 Skills Ecosystem

- **Productivity skill wave** (salvaged from [@&#8203;community](https://github.com/community) proposals): document-to-action-items, meeting-action-items, email-inbox-triage, github-issue-to-pr, weekly-review-planning, competitor-news-monitor, product-price-monitor, social-media-content-calendar ([#&#8203;81185](https://github.com/NousResearch/hermes-agent/pull/81185), [#&#8203;81749](https://github.com/NousResearch/hermes-agent/pull/81749), [#&#8203;81672](https://github.com/NousResearch/hermes-agent/pull/81672), [#&#8203;81708](https://github.com/NousResearch/hermes-agent/pull/81708), [#&#8203;81936](https://github.com/NousResearch/hermes-agent/pull/81936), [#&#8203;81945](https://github.com/NousResearch/hermes-agent/pull/81945), [#&#8203;81906](https://github.com/NousResearch/hermes-agent/pull/81906), [#&#8203;81942](https://github.com/NousResearch/hermes-agent/pull/81942)).
- **HAR-derived API clients** — watch a website once, then call its hidden API directly with no browser ([#&#8203;70823](https://github.com/NousResearch/hermes-agent/pull/70823)).
- **publish-site** — versioned website publishing to GitHub/Cloudflare/Netlify Pages ([#&#8203;72189](https://github.com/NousResearch/hermes-agent/pull/72189)); **session-librarian** for prompt-driven session management ([#&#8203;84917](https://github.com/NousResearch/hermes-agent/pull/84917)); **blocked-page-recovery** fallback ladder ([#&#8203;84906](https://github.com/NousResearch/hermes-agent/pull/84906)); **merge-reconciler** for neutral multi-agent conflict resolution ([#&#8203;83063](https://github.com/NousResearch/hermes-agent/pull/83063)); Box productivity skill ([#&#8203;85767](https://github.com/NousResearch/hermes-agent/pull/85767)); ast-grep codemods ([#&#8203;80892](https://github.com/NousResearch/hermes-agent/pull/80892)); draw-your-font + simple-english optional skills ([#&#8203;80814](https://github.com/NousResearch/hermes-agent/pull/80814), [#&#8203;80811](https://github.com/NousResearch/hermes-agent/pull/80811)); plan-interrogation (evolved grill-me) ([#&#8203;97831](https://github.com/NousResearch/hermes-agent/pull/97831)).
- **Advisory SKILL.md linter on create** ([#&#8203;81896](https://github.com/NousResearch/hermes-agent/pull/81896)); skills-hub live-repo fallback for missing optional skills ([#&#8203;82780](https://github.com/NousResearch/hermes-agent/pull/82780)).

##### ⏰ Cron, Delegation & Multi-Agent

- **Cron memory + continuity** — see Highlights ([#&#8203;91447](https://github.com/NousResearch/hermes-agent/pull/91447), [#&#8203;80774](https://github.com/NousResearch/hermes-agent/pull/80774)).
- **Monitor-mode jobs** with hash-suppressed change detection ([#&#8203;81138](https://github.com/NousResearch/hermes-agent/pull/81138)); per-job durable notepads ([#&#8203;81139](https://github.com/NousResearch/hermes-agent/pull/81139)); pre-dispatch config validation ([#&#8203;81140](https://github.com/NousResearch/hermes-agent/pull/81140)); acked failure signatures stop re-pinging ([#&#8203;95017](https://github.com/NousResearch/hermes-agent/pull/95017)); per-job reasoning-effort pinning ([#&#8203;91244](https://github.com/NousResearch/hermes-agent/pull/91244)); "Trigger now" executes immediately and safely ([#&#8203;70638](https://github.com/NousResearch/hermes-agent/pull/70638) — [@&#8203;smwbev](https://github.com/smwbev)); model-drift impact surfaced in Desktop ([#&#8203;83266](https://github.com/NousResearch/hermes-agent/pull/83266) — [@&#8203;ctaylor86](https://github.com/ctaylor86)).
- **Live subagent orchestration** — see Highlights ([#&#8203;85232](https://github.com/NousResearch/hermes-agent/pull/85232)); structured-output schemas on delegate\_task ([#&#8203;81144](https://github.com/NousResearch/hermes-agent/pull/81144)); batch-quality validation before spawning ([#&#8203;81141](https://github.com/NousResearch/hermes-agent/pull/81141)); truncation markers on capped children ([#&#8203;86641](https://github.com/NousResearch/hermes-agent/pull/86641)).
- **Kanban hardening** — collision-hotspot flagging ([#&#8203;83428](https://github.com/NousResearch/hermes-agent/pull/83428)), split-brain decision-ownership contract ([#&#8203;83424](https://github.com/NousResearch/hermes-agent/pull/83424)), memory-aware dispatch guard ([#&#8203;88115](https://github.com/NousResearch/hermes-agent/pull/88115)), notify/wake delivery modes ([#&#8203;85487](https://github.com/NousResearch/hermes-agent/pull/85487)).

##### 📊 Observability

- **Model/provider usage reporting** and bounded tool-metrics aggregation land as an observability subsystem ([#&#8203;68881](https://github.com/NousResearch/hermes-agent/pull/68881), [#&#8203;68882](https://github.com/NousResearch/hermes-agent/pull/68882) — [@&#8203;afourniernv](https://github.com/afourniernv)), with lifecycle ops bounded so a wedged pipeline can never block the agent ([#&#8203;83514](https://github.com/NousResearch/hermes-agent/pull/83514) — [@&#8203;victor-kyriazakos](https://github.com/victor-kyriazakos)).

##### 🔒 Security & Reliability

- **Protected instruction files** — writes to AGENTS.md/skills/memory always require approval ([#&#8203;81152](https://github.com/NousResearch/hermes-agent/pull/81152)).
- **Redaction sweep** — emission gaps closed across env-name variants, control-splits, process(list), checkpoints ([#&#8203;80965](https://github.com/NousResearch/hermes-agent/pull/80965)); `.env` reads redacted via file-read detection ([#&#8203;80964](https://github.com/NousResearch/hermes-agent/pull/80964)); terminal exception results + ACP stderr ([#&#8203;81675](https://github.com/NousResearch/hermes-agent/pull/81675), [#&#8203;81686](https://github.com/NousResearch/hermes-agent/pull/81686)); SSH target logging ([#&#8203;88232](https://github.com/NousResearch/hermes-agent/pull/88232)).
- **Windows approval coverage** — destructive Windows commands and paths now trip the approval system ([#&#8203;84428](https://github.com/NousResearch/hermes-agent/pull/84428)).
- **Supply-chain response** — the Blender MCP catalog entry and skill were removed after an upstream compromise ([#&#8203;83404](https://github.com/NousResearch/hermes-agent/pull/83404)); plugin installs get Tier-1 security scanning ([#&#8203;80728](https://github.com/NousResearch/hermes-agent/pull/80728)).
- **macOS TCC identity** — permission grants survive every update via `hermes desktop --setup-tcc-identity` ([#&#8203;95091](https://github.com/NousResearch/hermes-agent/pull/95091)).
- **PKCE cookie fix** — SameSite=None over HTTPS with a matching clear path ([#&#8203;83536](https://github.com/NousResearch/hermes-agent/pull/83536) — [@&#8203;benbarclay](https://github.com/benbarclay)).

##### 🏗️ Infrastructure, CI & Packaging

- **Real-OS CI** — macOS and Windows CI lanes with tests gated by real host OS ([#&#8203;77992](https://github.com/NousResearch/hermes-agent/pull/77992) — [@&#8203;ethernet8023](https://github.com/ethernet8023)); work lanes on 32-core runners ([#&#8203;92009](https://github.com/NousResearch/hermes-agent/pull/92009)); review comments + image builds moved out of the hot CI path ([#&#8203;82668](https://github.com/NousResearch/hermes-agent/pull/82668)).
- **Bootstrap installer** no longer waits on pipe EOF ([#&#8203;90941](https://github.com/NousResearch/hermes-agent/pull/90941) — [@&#8203;OutThisLife](https://github.com/OutThisLife)).

##### 🐛 Notable Bug Fixes

- Desktop session races (Stop→edit/resend, submit ownership) fixed as a cluster ([#&#8203;86594](https://github.com/NousResearch/hermes-agent/pull/86594)); workspace-pane idle flicker ([#&#8203;97513](https://github.com/NousResearch/hermes-agent/pull/97513)); assistant-ui boundary recovery ([#&#8203;81232](https://github.com/NousResearch/hermes-agent/pull/81232)).
- Kanban schema re-creation when a cached DB path loses it ([#&#8203;83619](https://github.com/NousResearch/hermes-agent/pull/83619) — [@&#8203;JoaoMarcos44](https://github.com/JoaoMarcos44)).
- Cron jobs no longer inherit a kanban worker's dispatcher identity ([#&#8203;79657](https://github.com/NousResearch/hermes-agent/pull/79657) — [@&#8203;kshitijk4poor](https://github.com/kshitijk4poor)); relay-fronted Slack cron delivery ([#&#8203;85340](https://github.com/NousResearch/hermes-agent/pull/85340) — [@&#8203;victor-kyriazakos](https://github.com/victor-kyriazakos)).
- Model-picker serves cached custom-provider catalogs on no-probe opens ([#&#8203;81973](https://github.com/NousResearch/hermes-agent/pull/81973) — [@&#8203;austinpickett](https://github.com/austinpickett)).
- Docker sandbox MEDIA attachments no longer silently drop ([#&#8203;94509](https://github.com/NousResearch/hermes-agent/pull/94509)); desktop binary attachments delivered into sandbox backends ([#&#8203;81717](https://github.com/NousResearch/hermes-agent/pull/81717)).
- Session-hygiene compaction cooldown escalates on repeat failures ([#&#8203;79741](https://github.com/NousResearch/hermes-agent/pull/79741) — [@&#8203;kshitijk4poor](https://github.com/kshitijk4poor)).
- Provider-injected parameter 400s retried instead of aborting the turn ([#&#8203;91643](https://github.com/NousResearch/hermes-agent/pull/91643)).
- …and roughly two thousand more closed issues' worth — this window averaged \~85 merged PRs per day.

##### ↩️ Reverted in this window (not shipping)

- **Model Council mode (/council)** — landed then reverted; not in this release.
- **DCP context engine** — landed then reverted; not in this release.
- **WS-only gateway server ([#&#8203;94245](https://github.com/NousResearch/hermes-agent/issues/94245))** — merged then reverted ([#&#8203;96118](https://github.com/NousResearch/hermes-agent/issues/96118)); FastAPI remains on the desktop boot path. The seq-stamped event replay ([#&#8203;94219](https://github.com/NousResearch/hermes-agent/issues/94219)) DID ship.
- Electron rolled back to 40.10.2; TCC interpreter anchor removed (superseded by the signing-identity approach that shipped).

##### 👥 Contributors

##### Core Team (Nous Research)

- **[@&#8203;teknium1](https://github.com/teknium1)** — release direction, Bot Mode, MCP command center, cron memory, and \~1,340 merged PRs
- **[@&#8203;kshitijk4poor](https://github.com/kshitijk4poor)** (374 PRs) — gateway delivery classes, session persistence, event replay, MoA/caching fixes
- **[@&#8203;OutThisLife](https://github.com/OutThisLife)** (209 PRs) — desktop architecture, Bot Mode UI, in-app browser, update hand-off
- **[@&#8203;ethernet8023](https://github.com/ethernet8023)** (38 PRs) — OS-gated CI lanes, clarify multi-question, tool cwd safety, aux structured-output resilience
- **[@&#8203;benbarclay](https://github.com/benbarclay)** (17 PRs) — relay voice STT, Slack link previews, PKCE
- **[@&#8203;victor-kyriazakos](https://github.com/victor-kyriazakos)** (15 PRs) — relay live cards, observability bounding
- **[@&#8203;rob-maron](https://github.com/rob-maron)**, **[@&#8203;austinpickett](https://github.com/austinpickett)**, **[@&#8203;jquesnelle](https://github.com/jquesnelle)**, **[@&#8203;shannonsands](https://github.com/shannonsands)** — providers, dashboard, model catalogs, and more

##### Top Community Contributors (by merged PR count)

- **[@&#8203;helix4u](https://github.com/helix4u)** (31 PRs) — wake-word capture, session UX, fix wave across desktop and gateway
- **[@&#8203;fangliquanflq](https://github.com/fangliquanflq)** (17 PRs) — stalled-provider recovery and agent-loop resilience
- **[@&#8203;bbednarski9](https://github.com/bbednarski9)** — relay native plugin integration; **[@&#8203;HexLab98](https://github.com/HexLab98)**, **[@&#8203;xxxigm](https://github.com/xxxigm)**, **[@&#8203;afourniernv](https://github.com/afourniernv)** (observability), **[@&#8203;liuhao1024](https://github.com/liuhao1024)**, **[@&#8203;Christopher-Schulze](https://github.com/Christopher-Schulze)**, **[@&#8203;Adolanium](https://github.com/Adolanium)**, **[@&#8203;webtecnica](https://github.com/webtecnica)**, **[@&#8203;smwbev](https://github.com/smwbev)** (cron Trigger-now), **[@&#8203;ctaylor86](https://github.com/ctaylor86)** (cron drift in Desktop), **[@&#8203;JoaoMarcos44](https://github.com/JoaoMarcos44)** (kanban schema recovery), **[@&#8203;jackulau](https://github.com/jackulau)** (SessionDB context manager), **[@&#8203;adikpb](https://github.com/adikpb)** (vision output caps), **[@&#8203;dokterdok](https://github.com/dokterdok)** (Bot Mode unification), and many more.

##### All Contributors

Huge thanks to every one of the 760+ people who contributed code, co-authored fixes, or had their work salvaged into this release:

[@&#8203;03farren](https://github.com/03farren), [@&#8203;0xarkstar](https://github.com/0xarkstar), [@&#8203;0xGr1mm](https://github.com/0xGr1mm), [@&#8203;0xWhiteMage](https://github.com/0xWhiteMage), [@&#8203;100yenadmin](https://github.com/100yenadmin), [@&#8203;1052326311](https://github.com/1052326311), [@&#8203;29206394](https://github.com/29206394), [@&#8203;2ndNatureAI](https://github.com/2ndNatureAI), [@&#8203;3Nya3](https://github.com/3Nya3),
[@&#8203;3x3xX3N0N](https://github.com/3x3xX3N0N), [@&#8203;404Dealer](https://github.com/404Dealer), [@&#8203;4adwentures](https://github.com/4adwentures), [@&#8203;5Hyeons](https://github.com/5Hyeons), [@&#8203;686f6c61](https://github.com/686f6c61), [@&#8203;69k4xmdfm2-blip](https://github.com/69k4xmdfm2-blip), [@&#8203;6ylqq](https://github.com/6ylqq), [@&#8203;75day](https://github.com/75day), [@&#8203;a-espinoza](https://github.com/a-espinoza),
[@&#8203;A-Snegin](https://github.com/A-Snegin), [@&#8203;a-yeyang](https://github.com/a-yeyang), [@&#8203;a0000001](https://github.com/a0000001), [@&#8203;A2chitect](https://github.com/A2chitect), [@&#8203;abitme](https://github.com/abitme), [@&#8203;abundantbeing](https://github.com/abundantbeing), [@&#8203;acewong7](https://github.com/acewong7), [@&#8203;acgh213](https://github.com/acgh213), [@&#8203;adamcap926](https://github.com/adamcap926),
[@&#8203;addelh](https://github.com/addelh), [@&#8203;adikpb](https://github.com/adikpb), [@&#8203;Adolanium](https://github.com/Adolanium), [@&#8203;adurham](https://github.com/adurham), [@&#8203;adybag14-cyber](https://github.com/adybag14-cyber), [@&#8203;afourniernv](https://github.com/afourniernv), [@&#8203;ag9920](https://github.com/ag9920), [@&#8203;ahmadalzaro1](https://github.com/ahmadalzaro1), [@&#8203;Ahmett101](https://github.com/Ahmett101),
[@&#8203;ai-ag2026](https://github.com/ai-ag2026), [@&#8203;AIalliAI](https://github.com/AIalliAI), [@&#8203;aider4ryder](https://github.com/aider4ryder), [@&#8203;Ailirag](https://github.com/Ailirag), [@&#8203;Aintworth](https://github.com/Aintworth), [@&#8203;airo7](https://github.com/airo7), [@&#8203;AiwendilInTheWoods](https://github.com/AiwendilInTheWoods), [@&#8203;akivavh](https://github.com/akivavh), [@&#8203;AL-ZiLLA](https://github.com/AL-ZiLLA),
[@&#8203;Al3xand3r1987](https://github.com/Al3xand3r1987), [@&#8203;albertodepaola](https://github.com/albertodepaola), [@&#8203;aldoeliacim](https://github.com/aldoeliacim), [@&#8203;aleksclark](https://github.com/aleksclark), [@&#8203;AlexanderPrendota](https://github.com/AlexanderPrendota), [@&#8203;alexdev03](https://github.com/alexdev03), [@&#8203;AlexFucuson9](https://github.com/AlexFucuson9),
[@&#8203;AlexGabbia](https://github.com/AlexGabbia), [@&#8203;AlexMnrs](https://github.com/AlexMnrs), [@&#8203;algf](https://github.com/algf), [@&#8203;Allecpu](https://github.com/Allecpu), [@&#8203;allin2](https://github.com/allin2), [@&#8203;alt-glitch](https://github.com/alt-glitch), [@&#8203;amanning3390](https://github.com/amanning3390), [@&#8203;andrexibiza](https://github.com/andrexibiza), [@&#8203;andyst-dev](https://github.com/andyst-dev),
[@&#8203;angel12](https://github.com/angel12), [@&#8203;angeon922-collab](https://github.com/angeon922-collab), [@&#8203;Angriff36](https://github.com/Angriff36), [@&#8203;aniruddhaadak80](https://github.com/aniruddhaadak80), [@&#8203;annguyenNous](https://github.com/annguyenNous), [@&#8203;anuvratrastogi](https://github.com/anuvratrastogi), [@&#8203;Aoshi-Dev](https://github.com/Aoshi-Dev),
[@&#8203;appletechie](https://github.com/appletechie), [@&#8203;arccat-114](https://github.com/arccat-114), [@&#8203;arcimun](https://github.com/arcimun), [@&#8203;ArthurFranckPat](https://github.com/ArthurFranckPat), [@&#8203;aryaxo](https://github.com/aryaxo), [@&#8203;asdasdadhj](https://github.com/asdasdadhj), [@&#8203;ashah360](https://github.com/ashah360), [@&#8203;AshuJoshi](https://github.com/AshuJoshi), [@&#8203;asimons81](https://github.com/asimons81),
[@&#8203;assimovt](https://github.com/assimovt), [@&#8203;austinpickett](https://github.com/austinpickett), [@&#8203;AVW7](https://github.com/AVW7), [@&#8203;Axmr1](https://github.com/Axmr1), [@&#8203;aydnOktay](https://github.com/aydnOktay), [@&#8203;ayushnangia](https://github.com/ayushnangia), [@&#8203;baihemax](https://github.com/baihemax), [@&#8203;bananawalnut](https://github.com/bananawalnut), [@&#8203;Bartok9](https://github.com/Bartok9),
[@&#8203;bashrusakh](https://github.com/bashrusakh), [@&#8203;bbednarski9](https://github.com/bbednarski9), [@&#8203;BearHuddleston](https://github.com/BearHuddleston), [@&#8203;benbarclay](https://github.com/benbarclay), [@&#8203;benfrank241](https://github.com/benfrank241), [@&#8203;beplee](https://github.com/beplee), [@&#8203;bgrablin](https://github.com/bgrablin), [@&#8203;bka9](https://github.com/bka9), [@&#8203;BkashJEE](https://github.com/BkashJEE),
[@&#8203;BlackishGreen33](https://github.com/BlackishGreen33), [@&#8203;BlakeB254](https://github.com/BlakeB254), [@&#8203;blunkjamie-dev](https://github.com/blunkjamie-dev), [@&#8203;BobClawblaw](https://github.com/BobClawblaw), [@&#8203;bradmarshall987](https://github.com/bradmarshall987), [@&#8203;brian717](https://github.com/brian717), [@&#8203;briandevans](https://github.com/briandevans),
[@&#8203;BrianFranco](https://github.com/BrianFranco), [@&#8203;BrinShadewater](https://github.com/BrinShadewater), [@&#8203;brucexu-eth](https://github.com/brucexu-eth), [@&#8203;BrunoBza](https://github.com/BrunoBza), [@&#8203;buffpesos](https://github.com/buffpesos), [@&#8203;burak33bb](https://github.com/burak33bb), [@&#8203;C-EXCITE-STUDIO](https://github.com/C-EXCITE-STUDIO), [@&#8203;c-pompa](https://github.com/c-pompa),
[@&#8203;cadezhou](https://github.com/cadezhou), [@&#8203;calvinnwq](https://github.com/calvinnwq), [@&#8203;capt-marbles](https://github.com/capt-marbles), [@&#8203;carbongotfound](https://github.com/carbongotfound), [@&#8203;carlotestor](https://github.com/carlotestor), [@&#8203;Carry00](https://github.com/Carry00), [@&#8203;cation98](https://github.com/cation98), [@&#8203;ccowan93](https://github.com/ccowan93),
[@&#8203;cedricziel](https://github.com/cedricziel), [@&#8203;cervantesh](https://github.com/cervantesh), [@&#8203;cfdude](https://github.com/cfdude), [@&#8203;Chadmc9889](https://github.com/Chadmc9889), [@&#8203;CharZhou](https://github.com/CharZhou), [@&#8203;chelsealong](https://github.com/chelsealong), [@&#8203;chesterXalan](https://github.com/chesterXalan), [@&#8203;chillerno1](https://github.com/chillerno1),
[@&#8203;Christopher-Schulze](https://github.com/Christopher-Schulze), [@&#8203;chukirk-svg](https://github.com/chukirk-svg), [@&#8203;cicav](https://github.com/cicav), [@&#8203;citizendev9c](https://github.com/citizendev9c), [@&#8203;cj52973](https://github.com/cj52973), [@&#8203;clarkvines](https://github.com/clarkvines), [@&#8203;ClintonEmok](https://github.com/ClintonEmok), [@&#8203;clyu168](https://github.com/clyu168),
[@&#8203;cmoiccool](https://github.com/cmoiccool), [@&#8203;codexbt](https://github.com/codexbt), [@&#8203;coe0718](https://github.com/coe0718), [@&#8203;Cossackx](https://github.com/Cossackx), [@&#8203;coygeek](https://github.com/coygeek), [@&#8203;crazyhulk](https://github.com/crazyhulk), [@&#8203;CrazyWillBear](https://github.com/CrazyWillBear), [@&#8203;criptogus](https://github.com/criptogus), [@&#8203;cryptoyasenka](https://github.com/cryptoyasenka),
[@&#8203;ctaylor86](https://github.com/ctaylor86), [@&#8203;cvillarroel2](https://github.com/cvillarroel2), [@&#8203;cxxCoolStar](https://github.com/cxxCoolStar), [@&#8203;cycorld](https://github.com/cycorld), [@&#8203;dagbs](https://github.com/dagbs), [@&#8203;damadorPL](https://github.com/damadorPL), [@&#8203;DanBennettUK](https://github.com/DanBennettUK), [@&#8203;DanDo385](https://github.com/DanDo385),
[@&#8203;DannyFengTianYu](https://github.com/DannyFengTianYu), [@&#8203;Dannyzen](https://github.com/Dannyzen), [@&#8203;danspicytaco](https://github.com/danspicytaco), [@&#8203;dante32683](https://github.com/dante32683), [@&#8203;darko-mesaros](https://github.com/darko-mesaros), [@&#8203;daromaj](https://github.com/daromaj), [@&#8203;david-bartos-phrase](https://github.com/david-bartos-phrase),
[@&#8203;davidgut1982](https://github.com/davidgut1982), [@&#8203;DavidMetcalfe](https://github.com/DavidMetcalfe), [@&#8203;davidneyravyr](https://github.com/davidneyravyr), [@&#8203;daxro](https://github.com/daxro), [@&#8203;dcdexhome](https://github.com/dcdexhome), [@&#8203;deacon-botdoctor](https://github.com/deacon-botdoctor), [@&#8203;deadczarvc](https://github.com/deadczarvc), [@&#8203;deaneeth](https://github.com/deaneeth),
[@&#8203;DECRUX9812](https://github.com/DECRUX9812), [@&#8203;deepeet-git](https://github.com/deepeet-git), [@&#8203;deniqlab](https://github.com/deniqlab), [@&#8203;DeseretSaint](https://github.com/DeseretSaint), [@&#8203;dhanesh](https://github.com/dhanesh), [@&#8203;Dhruv7201](https://github.com/Dhruv7201), [@&#8203;dhruvkej9](https://github.com/dhruvkej9), [@&#8203;digitalbase](https://github.com/digitalbase),
[@&#8203;DmytroVolodymyrson](https://github.com/DmytroVolodymyrson), [@&#8203;dokterdok](https://github.com/dokterdok), [@&#8203;Dolverin](https://github.com/Dolverin), [@&#8203;dombejar](https://github.com/dombejar), [@&#8203;doncazper](https://github.com/doncazper), [@&#8203;dougatbuck](https://github.com/dougatbuck), [@&#8203;douxy1994](https://github.com/douxy1994), [@&#8203;dpersek](https://github.com/dpersek), [@&#8203;dplush](https://github.com/dplush),
[@&#8203;Drexuxux](https://github.com/Drexuxux), [@&#8203;drissman](https://github.com/drissman), [@&#8203;dromai](https://github.com/dromai), [@&#8203;dtownsel](https://github.com/dtownsel), [@&#8203;duclucky](https://github.com/duclucky), [@&#8203;Dudeman456](https://github.com/Dudeman456), [@&#8203;Dusk1e](https://github.com/Dusk1e), [@&#8203;dvbaecker](https://github.com/dvbaecker), [@&#8203;e-macgregor](https://github.com/e-macgregor),
[@&#8203;EAbaracus](https://github.com/EAbaracus), [@&#8203;eaglezzz0522-cloud](https://github.com/eaglezzz0522-cloud), [@&#8203;Eapwrk](https://github.com/Eapwrk), [@&#8203;easyvibecoding](https://github.com/easyvibecoding), [@&#8203;echoes666](https://github.com/echoes666), [@&#8203;egilewski](https://github.com/egilewski), [@&#8203;ehz0ah](https://github.com/ehz0ah), [@&#8203;ekinnee](https://github.com/ekinnee), [@&#8203;ekzhang](https://github.com/ekzhang),
[@&#8203;elbukott1](https://github.com/elbukott1), [@&#8203;elisam0](https://github.com/elisam0), [@&#8203;elphamale](https://github.com/elphamale), [@&#8203;ElSnacko](https://github.com/ElSnacko), [@&#8203;embwl0x](https://github.com/embwl0x), [@&#8203;emozilla](https://github.com/emozilla), [@&#8203;EMT5320](https://github.com/EMT5320), [@&#8203;EndeavorYen](https://github.com/EndeavorYen), [@&#8203;Enough1122](https://github.com/Enough1122),
[@&#8203;enwaiax](https://github.com/enwaiax), [@&#8203;epeterpanz](https://github.com/epeterpanz), [@&#8203;EpicIsTheOne](https://github.com/EpicIsTheOne), [@&#8203;eric-senyao](https://github.com/eric-senyao), [@&#8203;ernst-bablick](https://github.com/ernst-bablick), [@&#8203;Eros-ITA](https://github.com/Eros-ITA), [@&#8203;erosika](https://github.com/erosika), [@&#8203;ethernet8023](https://github.com/ethernet8023),
[@&#8203;etzelvon](https://github.com/etzelvon), [@&#8203;EvanProgramming](https://github.com/EvanProgramming), [@&#8203;EvenXieWF](https://github.com/EvenXieWF), [@&#8203;explainanalyze](https://github.com/explainanalyze), [@&#8203;f-trycua](https://github.com/f-trycua), [@&#8203;fanfan343](https://github.com/fanfan343), [@&#8203;fangliquanflq](https://github.com/fangliquanflq), [@&#8203;fattchris](https://github.com/fattchris),
[@&#8203;felix-windsor](https://github.com/felix-windsor), [@&#8203;Finn763](https://github.com/Finn763), [@&#8203;flaviovargasbrandao](https://github.com/flaviovargasbrandao), [@&#8203;Fly-onlyone](https://github.com/Fly-onlyone), [@&#8203;flyingdoubleG](https://github.com/flyingdoubleG), [@&#8203;forkercat](https://github.com/forkercat),
[@&#8203;francialisomlimoeiro](https://github.com/francialisomlimoeiro), [@&#8203;francip](https://github.com/francip), [@&#8203;frankmendes1979](https://github.com/frankmendes1979), [@&#8203;fred0m](https://github.com/fred0m), [@&#8203;frendo](https://github.com/frendo), [@&#8203;frizikk](https://github.com/frizikk), [@&#8203;frohsinnllc](https://github.com/frohsinnllc), [@&#8203;Frowtek](https://github.com/Frowtek),
[@&#8203;fukutake1207](https://github.com/fukutake1207), [@&#8203;fyzanshaik](https://github.com/fyzanshaik), [@&#8203;GarlicGo](https://github.com/GarlicGo), [@&#8203;Gateton](https://github.com/Gateton), [@&#8203;georgell-ceo](https://github.com/georgell-ceo), [@&#8203;gfriesen1](https://github.com/gfriesen1), [@&#8203;gigabyte22](https://github.com/gigabyte22), [@&#8203;gigashad](https://github.com/gigashad), [@&#8203;gijoby](https://github.com/gijoby),
[@&#8203;gitong](https://github.com/gitong), [@&#8203;gkd2323c](https://github.com/gkd2323c), [@&#8203;gnanirahulnutakki](https://github.com/gnanirahulnutakki), [@&#8203;GodsBoy](https://github.com/GodsBoy), [@&#8203;gokay-ai](https://github.com/gokay-ai), [@&#8203;goktugvatandas](https://github.com/goktugvatandas), [@&#8203;golldyck](https://github.com/golldyck), [@&#8203;goodchang77](https://github.com/goodchang77), [@&#8203;GottZ](https://github.com/GottZ),
[@&#8203;grahfmusic](https://github.com/grahfmusic), [@&#8203;gregorustar-maker](https://github.com/gregorustar-maker), [@&#8203;greyvito](https://github.com/greyvito), [@&#8203;gsy324](https://github.com/gsy324), [@&#8203;guanla-zz](https://github.com/guanla-zz), [@&#8203;guilhermeartileshubsai](https://github.com/guilhermeartileshubsai), [@&#8203;guilhermeraiuga](https://github.com/guilhermeraiuga),
[@&#8203;h-mascot](https://github.com/h-mascot), [@&#8203;h8hawk](https://github.com/h8hawk), [@&#8203;Haakam21](https://github.com/Haakam21), [@&#8203;Haik-G](https://github.com/Haik-G), [@&#8203;halaprix](https://github.com/halaprix), [@&#8203;Halldrix](https://github.com/Halldrix), [@&#8203;handnewb](https://github.com/handnewb), [@&#8203;Hangzian](https://github.com/Hangzian), [@&#8203;hanhvs](https://github.com/hanhvs), [@&#8203;hansai-art](https://github.com/hansai-art),
[@&#8203;HAOWANG116](https://github.com/HAOWANG116), [@&#8203;HarishDarko](https://github.com/HarishDarko), [@&#8203;hbentel](https://github.com/hbentel), [@&#8203;helix4u](https://github.com/helix4u), [@&#8203;HenryGHJ](https://github.com/HenryGHJ), [@&#8203;hermias1](https://github.com/hermias1), [@&#8203;HexLab98](https://github.com/HexLab98), [@&#8203;hillimited](https://github.com/hillimited), [@&#8203;Hjharris1](https://github.com/Hjharris1),
[@&#8203;hkfiberlaser-svg](https://github.com/hkfiberlaser-svg), [@&#8203;honor2030](https://github.com/honor2030), [@&#8203;howdeploy](https://github.com/howdeploy), [@&#8203;hsearcy](https://github.com/hsearcy), [@&#8203;huklaa](https://github.com/huklaa), [@&#8203;hustwkr](https://github.com/hustwkr), [@&#8203;hutao562](https://github.com/hutao562), [@&#8203;hxwvaa](https://github.com/hxwvaa), [@&#8203;IAvecilla](https://github.com/IAvecilla),
[@&#8203;icemeng](https://github.com/icemeng), [@&#8203;infinitycrew39](https://github.com/infinitycrew39), [@&#8203;infocentr](https://github.com/infocentr), [@&#8203;InphinitiZ](https://github.com/InphinitiZ), [@&#8203;insane66613](https://github.com/insane66613), [@&#8203;Inspired-by-Atmosphere](https://github.com/Inspired-by-Atmosphere), [@&#8203;intelac](https://github.com/intelac),
[@&#8203;intellectronica](https://github.com/intellectronica), [@&#8203;isak-ialogics](https://github.com/isak-ialogics), [@&#8203;ishanparihar](https://github.com/ishanparihar), [@&#8203;isheng-eqi](https://github.com/isheng-eqi), [@&#8203;Ishman82](https://github.com/Ishman82), [@&#8203;iskysun96](https://github.com/iskysun96), [@&#8203;iso2kx](https://github.com/iso2kx), [@&#8203;itsflownium](https://github.com/itsflownium),
[@&#8203;izumi0uu](https://github.com/izumi0uu), [@&#8203;Jaaneek](https://github.com/Jaaneek), [@&#8203;Jackal991](https://github.com/Jackal991), [@&#8203;jackijianxa](https://github.com/jackijianxa), [@&#8203;jackoconner45](https://github.com/jackoconner45), [@&#8203;jackulau](https://github.com/jackulau), [@&#8203;jaimedhenriques](https://github.com/jaimedhenriques), [@&#8203;james47kjv](https://github.com/james47kjv),
[@&#8203;jbagdonas](https://github.com/jbagdonas), [@&#8203;jcjc81](https://github.com/jcjc81), [@&#8203;jdgg777](https://github.com/jdgg777), [@&#8203;jeeves-assistant](https://github.com/jeeves-assistant), [@&#8203;jeff-mettel](https://github.com/jeff-mettel), [@&#8203;Jefftree](https://github.com/Jefftree), [@&#8203;JElfferich](https://github.com/JElfferich), [@&#8203;jeremyrandria-debug](https://github.com/jeremyrandria-debug),
[@&#8203;JinUltimate1995](https://github.com/JinUltimate1995), [@&#8203;jirathip-k](https://github.com/jirathip-k), [@&#8203;jmmaloney4](https://github.com/jmmaloney4), [@&#8203;JoaoMarcos44](https://github.com/JoaoMarcos44), [@&#8203;joe-rodgers](https://github.com/joe-rodgers), [@&#8203;joe050860](https://github.com/joe050860), [@&#8203;John-Lussier](https://github.com/John-Lussier),
[@&#8203;Johnny-xuan](https://github.com/Johnny-xuan), [@&#8203;johnrazmus](https://github.com/johnrazmus), [@&#8203;johnsonAyo](https://github.com/johnsonAyo), [@&#8203;jonpol01](https://github.com/jonpol01), [@&#8203;JonthanaHanh](https://github.com/JonthanaHanh), [@&#8203;JoshPaulie](https://github.com/JoshPaulie), [@&#8203;Jreevo](https://github.com/Jreevo), [@&#8203;jtstothard](https://github.com/jtstothard),
[@&#8203;Julientalbot](https://github.com/Julientalbot), [@&#8203;justcarlosm](https://github.com/justcarlosm), [@&#8203;justinbowes](https://github.com/justinbowes), [@&#8203;justinjohnson25600](https://github.com/justinjohnson25600), [@&#8203;jwtor7](https://github.com/jwtor7), [@&#8203;k0rnacki](https://github.com/k0rnacki), [@&#8203;kadiratesdev](https://github.com/kadiratesdev),
[@&#8203;Kailigithub](https://github.com/Kailigithub), [@&#8203;kaishi00](https://github.com/kaishi00), [@&#8203;KarateWilly](https://github.com/KarateWilly), [@&#8203;kas-cor](https://github.com/kas-cor), [@&#8203;katie-lpd](https://github.com/katie-lpd), [@&#8203;Kavyrocom](https://github.com/Kavyrocom), [@&#8203;KBANTH](https://github.com/KBANTH), [@&#8203;kchernev](https://github.com/kchernev), [@&#8203;KeaneYan](https://github.com/KeaneYan),
[@&#8203;kernel-t1](https://github.com/kernel-t1), [@&#8203;KeroZelvin](https://github.com/KeroZelvin), [@&#8203;kerpopule](https://github.com/kerpopule), [@&#8203;KHALIDagara](https://github.com/KHALIDagara), [@&#8203;KhanCold](https://github.com/KhanCold), [@&#8203;khanhngoo](https://github.com/khanhngoo), [@&#8203;KIAgent01](https://github.com/KIAgent01), [@&#8203;kim-miram](https://github.com/kim-miram), [@&#8203;kimyxx](https://github.com/kimyxx),
[@&#8203;Kinkoolino-Hermes](https://github.com/Kinkoolino-Hermes), [@&#8203;kinsolee](https://github.com/kinsolee), [@&#8203;kitsonk](https://github.com/kitsonk), [@&#8203;klaus765](https://github.com/klaus765), [@&#8203;koltyj](https://github.com/koltyj), [@&#8203;konsisumer](https://github.com/konsisumer), [@&#8203;kronexoi](https://github.com/kronexoi), [@&#8203;krunkosaurus](https://github.com/krunkosaurus),
[@&#8203;kshitijk4poor](https://github.com/kshitijk4poor), [@&#8203;kudapara](https://github.com/kudapara), [@&#8203;kvnloo](https://github.com/kvnloo), [@&#8203;kweiner](https://github.com/kweiner), [@&#8203;kyssta-exe](https://github.com/kyssta-exe), [@&#8203;Kyzcreig](https://github.com/Kyzcreig), [@&#8203;laithrw](https://github.com/laithrw), [@&#8203;lakshyaag-tavily](https://github.com/lakshyaag-tavily), [@&#8203;landaun](https://github.com/landaun),
[@&#8203;laulopezreal](https://github.com/laulopezreal), [@&#8203;laviesony](https://github.com/laviesony), [@&#8203;lazy-idler](https://github.com/lazy-idler), [@&#8203;LBeghini](https://github.com/LBeghini), [@&#8203;leeclouddragon](https://github.com/leeclouddragon), [@&#8203;Leegenux](https://github.com/Leegenux), [@&#8203;LemonSchneid](https://github.com/LemonSchneid), [@&#8203;LeonardoLGDS](https://github.com/LeonardoLGDS),
[@&#8203;leonphull](https://github.com/leonphull), [@&#8203;LeonSGP43](https://github.com/LeonSGP43), [@&#8203;lepetitprince716-prog](https://github.com/lepetitprince716-prog), [@&#8203;Lesnak1](https://github.com/Lesnak1), [@&#8203;lesterlxt](https://github.com/lesterlxt), [@&#8203;lesyuk](https://github.com/lesyuk), [@&#8203;lEWFkRAD](https://github.com/lEWFkRAD), [@&#8203;lextiz](https://github.com/lextiz), [@&#8203;lgy1027](https://github.com/lgy1027),
[@&#8203;Lidang-Jiang](https://github.com/Lidang-Jiang), [@&#8203;lilShawtty-byte](https://github.com/lilShawtty-byte), [@&#8203;lin-hongkuan](https://github.com/lin-hongkuan), [@&#8203;liuhao1024](https://github.com/liuhao1024), [@&#8203;liusencomic-cyber](https://github.com/liusencomic-cyber), [@&#8203;lkz-de](https://github.com/lkz-de), [@&#8203;loafoe](https://github.com/loafoe), [@&#8203;locker95](https://github.com/locker95),
[@&#8203;LordMelkor](https://github.com/LordMelkor), [@&#8203;lorzl](https://github.com/lorzl), [@&#8203;lost9999](https://github.com/lost9999), [@&#8203;loulanyue](https://github.com/loulanyue), [@&#8203;LovePlayCode](https://github.com/LovePlayCode), [@&#8203;luckygreen](https://github.com/luckygreen), [@&#8203;lukeroberts](https://github.com/lukeroberts), [@&#8203;luoxiao6645](https://github.com/luoxiao6645), [@&#8203;luxles](https://github.com/luxles),
[@&#8203;m1k3s0](https://github.com/m1k3s0), [@&#8203;Mabolla](https://github.com/Mabolla), [@&#8203;MagMueller](https://github.com/MagMueller), [@&#8203;magnus919](https://github.com/magnus919), [@&#8203;magnuslundstedt](https://github.com/magnuslundstedt), [@&#8203;MaheshBhushan](https://github.com/MaheshBhushan), [@&#8203;MarcoFernstaedt](https://github.com/MarcoFernstaedt), [@&#8203;mariobgsp](https://github.com/mariobgsp),
[@&#8203;marketing2981](https://github.com/marketing2981), [@&#8203;markmcd](https://github.com/markmcd), [@&#8203;markmnl](https://github.com/markmnl), [@&#8203;MarkVLK](https://github.com/MarkVLK), [@&#8203;marzukia](https://github.com/marzukia), [@&#8203;Mat-London](https://github.com/Mat-London), [@&#8203;matsvarn](https://github.com/matsvarn), [@&#8203;mattprusak](https://github.com/mattprusak), [@&#8203;MaximCrabbe](https://github.com/MaximCrabbe),
[@&#8203;maxmilian](https://github.com/maxmilian), [@&#8203;mehmetkr-31](https://github.com/mehmetkr-31), [@&#8203;Mengchee118](https://github.com/Mengchee118), [@&#8203;menhguin](https://github.com/menhguin), [@&#8203;metamindedu](https://github.com/metamindedu), [@&#8203;michaelHMK](https://github.com/michaelHMK), [@&#8203;michaelsam94](https://github.com/michaelsam94), [@&#8203;milnerrad](https://github.com/milnerrad),
[@&#8203;MindDragonLabs](https://github.com/MindDragonLabs), [@&#8203;misterdas](https://github.com/misterdas), [@&#8203;mjolley9](https://github.com/mjolley9), [@&#8203;mmcallister8](https://github.com/mmcallister8), [@&#8203;mmcclean-aws](https://github.com/mmcclean-aws), [@&#8203;mmchuangyt-ai](https://github.com/mmchuangyt-ai), [@&#8203;moisesvalero](https://github.com/moisesvalero), [@&#8203;mollusk](https://github.com/mollusk),
[@&#8203;monerostar](https://github.com/monerostar), [@&#8203;Morad37](https://github.com/Morad37), [@&#8203;mrkillbob](https://github.com/mrkillbob), [@&#8203;mrmixx-max](https://github.com/mrmixx-max), [@&#8203;mrsucesso](https://github.com/mrsucesso), [@&#8203;MrTheSoulz](https://github.com/MrTheSoulz), [@&#8203;MustafaK99](https://github.com/MustafaK99), [@&#8203;myk0la-b](https://github.com/myk0la-b), [@&#8203;mzkarami](https://github.com/mzkarami),
[@&#8203;n-leezy](https://github.com/n-leezy), [@&#8203;n1majne3](https://github.com/n1majne3), [@&#8203;NaMinhyeok](https://github.com/NaMinhyeok), [@&#8203;nanami7777777](https://github.com/nanami7777777), [@&#8203;nankingjing](https://github.com/nankingjing), [@&#8203;natebransc](https://github.com/natebransc), [@&#8203;nateEc](https://github.com/nateEc), [@&#8203;Navlem](https://github.com/Navlem), [@&#8203;nbxuhk](https://github.com/nbxuhk),
[@&#8203;nductien](https://github.com/nductien), [@&#8203;Ne0teric](https://github.com/Ne0teric), [@&#8203;NealZhouPanda](https://github.com/NealZhouPanda), [@&#8203;necoweb3](https://github.com/necoweb3), [@&#8203;negroni334](https://github.com/negroni334), [@&#8203;nftpoetrist](https://github.com/nftpoetrist), [@&#8203;nicochase](https://github.com/nicochase), [@&#8203;Nicolas-Formenton](https://github.com/Nicolas-Formenton),
[@&#8203;nicolasdmolina](https://github.com/nicolasdmolina), [@&#8203;nikitaBarkov](https://github.com/nikitaBarkov), [@&#8203;NikolaRHristov](https://github.com/NikolaRHristov), [@&#8203;noahingh](https://github.com/noahingh), [@&#8203;nolanchic](https://github.com/nolanchic), [@&#8203;NorethSea](https://github.com/NorethSea), [@&#8203;notkisk](https://github.com/notkisk), [@&#8203;notwitcheer](https://github.com/notwitcheer),
[@&#8203;NousResearch](https://github.com/NousResearch), [@&#8203;null-runner](https://github.com/null-runner), [@&#8203;ojassharma7](https://github.com/ojassharma7), [@&#8203;oliver-mee](https://github.com/oliver-mee), [@&#8203;olympusbuildz](https://github.com/olympusbuildz), [@&#8203;OmarB97](https://github.com/OmarB97), [@&#8203;ooiuuii](https://github.com/ooiuuii), [@&#8203;openclaww-xz](https://github.com/openclaww-xz),
[@&#8203;opti-josh-holt](https://github.com/opti-josh-holt), [@&#8203;osgeek90](https://github.com/osgeek90), [@&#8203;ousiaresearch](https://github.com/ousiaresearch), [@&#8203;OutThisLife](https://github.com/OutThisLife), [@&#8203;Owen-narcissus](https://github.com/Owen-narcissus), [@&#8203;paoloantinori](https://github.com/paoloantinori), [@&#8203;Parker-Fawcett](https://github.com/Parker-Fawcett),
[@&#8203;pasevin](https://github.com/pasevin), [@&#8203;pasmud](https://github.com/pasmud), [@&#8203;PaulBlackSwan](https://github.com/PaulBlackSwan), [@&#8203;paultaki](https://github.com/paultaki), [@&#8203;peetteerr](https://github.com/peetteerr), [@&#8203;pefontana](https://github.com/pefontana), [@&#8203;Per0-1](https://github.com/Per0-1), [@&#8203;pierrenode](https://github.com/pierrenode), [@&#8203;PINKIIILQWQ](https://github.com/PINKIIILQWQ),
[@&#8203;pittosporum-seu](https://github.com/pittosporum-seu), [@&#8203;pju-hoge](https://github.com/pju-hoge), [@&#8203;plcunha](https://github.com/plcunha), [@&#8203;Pluviobyte](https://github.com/Pluviobyte), [@&#8203;pmos69](https://github.com/pmos69), [@&#8203;pnascimento9596](https://github.com/pnascimento9596), [@&#8203;poisdahl](https://github.com/poisdahl), [@&#8203;potatosalad](https://github.com/potatosalad),
[@&#8203;prashantjain25](https://github.com/prashantjain25), [@&#8203;PRATHAMESH75](https://github.com/PRATHAMESH75), [@&#8203;professorpalmer](https://github.com/professorpalmer), [@&#8203;projetsjsl](https://github.com/projetsjsl), [@&#8203;protas-box](https://github.com/protas-box), [@&#8203;qazasdsdqaza](https://github.com/qazasdsdqaza), [@&#8203;QDung210](https://github.com/QDung210),
[@&#8203;qixuancao](https://github.com/qixuancao), [@&#8203;QuarkAssistant](https://github.com/QuarkAssistant), [@&#8203;quocanh261997](https://github.com/quocanh261997), [@&#8203;ragingbulld](https://github.com/ragingbulld), [@&#8203;rainbowgore](https://github.com/rainbowgore), [@&#8203;rapsealk](https://github.com/rapsealk), [@&#8203;Raven26-VooDoo](https://github.com/Raven26-VooDoo),
[@&#8203;RaviTharuma](https://github.com/RaviTharuma), [@&#8203;RayCharlizard](https://github.com/RayCharlizard), [@&#8203;razultull](https://github.com/razultull), [@&#8203;re-ITRT](https://github.com/re-ITRT), [@&#8203;Reksely](https://github.com/Reksely), [@&#8203;RelaxJonh](https://github.com/RelaxJonh), [@&#8203;repfigit](https://github.com/repfigit), [@&#8203;RGerrish](https://github.com/RGerrish), [@&#8203;RibatTRW](https://github.com/RibatTRW),
[@&#8203;RichardGuan1](https://github.com/RichardGuan1), [@&#8203;RichardHojunJang](https://github.com/RichardHojunJang), [@&#8203;richardhowes](https://github.com/richardhowes), [@&#8203;RickyYii](https://github.com/RickyYii), [@&#8203;rikkarth](https://github.com/rikkarth), [@&#8203;rille111](https://github.com/rille111), [@&#8203;Ringo6107](https://github.com/Ringo6107), [@&#8203;rjhilgefort](https://github.com/rjhilgefort),
[@&#8203;rjvandeve](https://github.com/rjvandeve), [@&#8203;rkfshakti](https://github.com/rkfshakti), [@&#8203;rlaope](https://github.com/rlaope), [@&#8203;Rmohid](https://github.com/Rmohid), [@&#8203;rob-maron](https://github.com/rob-maron), [@&#8203;rodrigogs](https://github.com/rodrigogs), [@&#8203;royalaid](https://github.com/royalaid), [@&#8203;royzhrxy-glitch](https://github.com/royzhrxy-glitch), [@&#8203;rroverin](https://github.com/rroverin),
[@&#8203;rshi0212](https://github.com/rshi0212), [@&#8203;rsk-731](https://github.com/rsk-731), [@&#8203;rtcopenclawgh](https://github.com/rtcopenclawgh), [@&#8203;ruangraung](https://github.com/ruangraung), [@&#8203;rudrakshchahal](https://github.com/rudrakshchahal), [@&#8203;ruochu88s](https://github.com/ruochu88s), [@&#8203;rweddle](https://github.com/rweddle), [@&#8203;ryankhart](https://github.com/ryankhart), [@&#8203;S-Claw](https://github.com/S-Claw),
[@&#8203;Sahil-SS9](https://github.com/Sahil-SS9), [@&#8203;salch-cred](https://github.com/salch-cred), [@&#8203;sam7894604](https://github.com/sam7894604), [@&#8203;samclams](https://github.com/samclams), [@&#8203;saralilyb](https://github.com/saralilyb), [@&#8203;sashmatash](https://github.com/sashmatash), [@&#8203;sasquatch9818](https://github.com/sasquatch9818), [@&#8203;satotakumi](https://github.com/satotakumi),
[@&#8203;ScaleLeanChris](https://github.com/ScaleLeanChris), [@&#8203;SeashoreShi](https://github.com/SeashoreShi), [@&#8203;serefyarar](https://github.com…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/nix Nix flake, NixOS module, container packaging ci-reviewed applied to manually approve dangerous changes comp/desktop Electron desktop app (apps/desktop/*) P3 Low — cosmetic, nice to have sweeper:risk-automation Sweeper risk: may affect CI, automerge, label sync, or maintainer automation type/perf Performance improvement or optimization

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants