Skip to content

fix(utils): recover Windows renames contended by an open handle - #84852

Merged
OutThisLife merged 2 commits into
mainfrom
bb/atomic-replace-windows-sharing
Aug 12, 2026
Merged

OutThisLife merged 2 commits into
mainfrom
bb/atomic-replace-windows-sharing

Conversation

@OutThisLife

Copy link
Copy Markdown
Contributor

What does this PR do?

Consolidates five open PRs that all fix one bug: on Windows, atomic_replace() only falls back for EXDEV/EBUSY, so a rename onto a file that any other handle holds open raises and the write is lost. CPython opens files without FILE_SHARE_DELETE, so an ordinary reader is enough.

Two reported symptoms, same root cause:

  • gateway/run.py::_persist_active_agents rewrites gateway_state.json at every turn boundary while gateway/status.py readers poll it — the exception is swallowed, status updates are dropped silently, and .tmp files accumulate.
  • hermes_cli/auth.py::_save_auth_store lets it propagate, so the desktop app shows agent init failed: [WinError 5] Access is denied and the session never opens.

The fix classifies winerror 5/32/33 as contention candidates, retries the rename with jittered backoff (a retry that wins keeps the write fully atomic), and only rewrites in place when the handle outlives the budget.

Two things the cluster got wrong

1. The error code is 5, not 32. Every PR in this cluster that gated on ERROR_SHARING_VIOLATION (32) keyed on a code the bug does not produce. Measured on Windows 11 build 26200 / CPython 3.11:

TARGET open for read (in-process)     winerror=5     <- the actual bug
TARGET open by ANOTHER PROCESS        winerror=5     <- gateway_state.json
TARGET open for append/write          winerror=5
SOURCE (tmp) open for read            winerror=32    <- 32 needs the SOURCE held

ERROR_SHARING_VIOLATION is what a held source reports. A held target — the entire bug — reports ERROR_ACCESS_DENIED. @kevin182 reported exactly this on #57777.

2. You cannot classify denial up front. The natural narrowing is to probe the target with os.access and treat "writable" as contention. It does not work — os.replace needs delete-child rights on the parent directory, so a directory-level denial reports the target as writable:

parent dir ACL: deny delete-child+write   os.access(tgt,W)=True   -> misclassified as transient
target is a directory                     os.access(tgt,W)=True   -> misclassified as transient

So this PR does not guess. Contention and genuine denial take the same bounded path; a real denial exhausts the budget, fails the in-place rewrite too, and is re-raised unchanged with its pending temp file intact. A permissions bug stays diagnosable instead of being converted into a silent success.

Why in-place rewrite instead of shutil.copyfile

copyfile truncates the target to zero before refilling it. With a 4-thread poller during an 8 MB copy, readers observe a 0-byte file — for auth.json that is an empty credential store, i.e. this fallback can cause the very failure it is meant to prevent.

Writing through the existing file (single os.write + ftruncate) removes that window and, as a bonus, preserves the target's ACL — which os.replace does not, since the temp file's inherited ACL wins. Verified: no 0-byte read observed, ACL preserved. EXDEV/EBUSY keep the original copy fallback; they are a different failure and never clear on retry.

Budget sizing

Measured, not guessed. Sized so realistic holds stay atomic without punishing a permanently-held target (gateway_state.json pays this on every turn):

budget held 100ms held 200ms persistent reader (100 writes)
6 × 20..400ms atomic atomic 129.5s (1295ms/write)
4 × 20..100ms atomic atomic 31.5s (315ms/write)
3 × 20..50ms atomic rewrite 15.0s

4 × 20..100ms keeps identical atomic coverage at ~4.4× better throughput under a persistent reader.

Related Issue

Fixes #57775

Supersedes #57777, #79793, #73807, #45022, #36921

Credit to every author in the cluster — this keeps @lEWFkRAD's retry-then-fallback architecture (the only shape that handles both transient and persistent readers), @ruochu88s's {5,32,33} winerror set, and @lost9999's jittered_backoff reuse. Also to @kevin182, whose same-process thread-collision analysis and WinError 5 evidence on #57777 is what identified the misclassification.

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)

Changes Made

  • utils.py: _WINDOWS_CONTENDED_REPLACE_ERRORS ({5,32,33}), _is_contended_windows_replace_error(), jittered bounded retry, _rewrite_in_place() (no truncate window, ACL-preserving), _copy_fallback() extracted unchanged for EXDEV/EBUSY. A retry that returns EXDEV/EBUSY stops consuming the budget and switches to the copy fallback. jittered_backoff is imported lazily to keep utils free of a package-level agent dependency.
  • tests/test_atomic_replace_symlinks.py: 12 tests. Cross-platform ones simulate winerror 5 and pin the state machine; the four real-handle tests are @pytest.mark.windows_only.

How to Test

scripts/run_tests.sh tests/test_atomic_replace_symlinks.py -q     # 20 passed, 4 windows_only skipped
python -m pytest tests/test_atomic_replace_symlinks.py -m windows_only -q   # on Windows: 4 passed

Manual repro (Windows) — raises PermissionError before, succeeds after:

import utils
utils.atomic_json_write("gateway_state.json", {"active_agents": 1})
with open("gateway_state.json") as reader:
    utils.atomic_json_write("gateway_state.json", {"active_agents": 2})

A note on CI coverage

The three Windows tests on #57777 gated with pytest.skip(os.name != "nt") and carried no marker. scripts/ci/list_os_marked_tests.py greps for the marker name to choose which files the Windows lane imports, so those tests ran on no host at all — the suite was green over zero real coverage, exactly the trap AGENTS.md documents. Fixed here with @pytest.mark.windows_only; confirmed the lane now selects the file.

Verified RED/GREEN on real Windows (11 build 26200, Python 3.11.15) — with utils.py reverted to main:

FAILED test_windows_real_held_read_handle_lands_the_write
FAILED test_windows_real_held_handle_reports_access_denied
FAILED test_windows_atomic_json_write_with_concurrent_reader
E  PermissionError: [WinError 5] Access is denied
3 failed, 1 passed

and with the fix applied: 4 passed. One of those tests pins the winerror-5 premise itself, so if CPython ever changes the code, it surfaces here rather than silently reintroducing the bug.

Also verified on real Windows: 200 consecutive writes against a permanently-held reader — 0 errors, no temp accumulation; symlinked targets still survive the contended path (#16743).

Checklist

Code

  • I've read the Contributing Guide
  • Conventional Commits (fix(utils):, test(utils):)
  • Searched for existing PRs — found and superseded four
  • Only changes related to this fix
  • Tests pass — 20 passed / 4 skipped locally; 4 passed on native Windows. One pre-existing failure (test_atomic_roundtrip_yaml_save_restores_owner, ModuleNotFoundError: ruamel) reproduces identically on clean main. Ran all 27 test files touching the atomic helpers: 20 failures on this branch vs 21 on main, same ruamel set, none introduced.
  • Added tests for the bug class
  • Tested on Windows 11 build 26200, Python 3.11.15

Documentation & Housekeeping

  • Docstrings updated
  • cli-config.yaml.example — N/A
  • CONTRIBUTING.md / AGENTS.md — N/A
  • Cross-platform impact considered — Windows-gated behind _IS_WINDOWS; POSIX EACCES propagation and the no-retry path for permanent errors are both pinned by tests
  • Tool descriptions/schemas — N/A

OutThisLife and others added 2 commits August 12, 2026 17:25
os.replace onto a file that any other handle holds open is denied on
Windows — CPython opens files without FILE_SHARE_DELETE. atomic_replace
only fell back for EXDEV/EBUSY, so the exception propagated and, because
most callers swallow it, the write was silently dropped. gateway_state.json
loses status updates at every turn boundary while status readers poll it;
auth.json surfaces the same race to the user as 'agent init failed'.

Classify winerror 5/32/33 as contention candidates and retry the rename
with jittered backoff; a retry that wins keeps the write fully atomic.
Only a handle that outlives the budget falls through to a rewrite.

Measured on Windows 11 build 26200 / CPython 3.11: a held *target* handle
reports winerror 5, not 32 — 32 is what a held *source* reports. Keying
recovery on 32 alone misses every real occurrence of this bug.

The codes are ambiguous (a genuine ACL denial is also 5) and cannot be
told apart up front: os.replace needs delete-child rights on the parent
directory, so probing the target with os.access reports a directory-level
denial as writable. Rather than guess, both cases take the same bounded
path and a genuine denial is re-raised unchanged with its pending temp
file intact.

The last-resort rewrite writes through the existing file instead of
shutil.copyfile: a copy truncates the target to zero first, and a
concurrent reader can observe an empty auth.json mid-write. Writing
through the target also preserves its ACL, which os.replace does not.

Co-authored-by: LewfKrad <lEWFkRAD@users.noreply.github.com>
Co-authored-by: ruochu88s <ruochu88s@users.noreply.github.com>
Co-authored-by: lost9999 <lost9999@users.noreply.github.com>
Co-authored-by: guanla-zz <guanla-zz@users.noreply.github.com>
Co-authored-by: zapabob <zapabob@users.noreply.github.com>
The real-handle tests use @pytest.mark.windows_only rather than a bare
pytest.skip(os.name != 'nt'). scripts/ci/list_os_marked_tests.py greps for
the marker NAME to decide which files the Windows lane imports, so a plain
skipif leaves a Windows test running on no host at all — green over zero
coverage, which is what AGENTS.md warns about.

Cross-platform tests simulate winerror 5 (what a held target actually
raises) rather than 32, and pin the state machine: retry-then-rewrite for
each contention code, an in-budget retry keeping the write atomic with no
fallback, a genuine denial propagating after the budget with its temp file
intact, a retry that turns into EXDEV switching to the copy fallback,
ENOSPC and POSIX EACCES propagating with no retry at all, the rewrite
never exposing a truncated file, and the #16743 symlink invariant holding
on the contended path.

On native Windows the lane exercises real held handles end to end, and
pins the winerror-5 premise so a CPython change surfaces here instead of
silently reintroducing the bug.

Co-authored-by: LewfKrad <lEWFkRAD@users.noreply.github.com>
Co-authored-by: ruochu88s <ruochu88s@users.noreply.github.com>
Co-authored-by: lost9999 <lost9999@users.noreply.github.com>
Co-authored-by: guanla-zz <guanla-zz@users.noreply.github.com>
Co-authored-by: zapabob <zapabob@users.noreply.github.com>
@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

૮ >ﻌ< ა ci review

running on f514d54 — test(utils): cover contended Windows renames on the Windows


waiting for more jobs to start…

⚠️ Warnings

OSV vulnerability scan · View job

3 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.

@OutThisLife
OutThisLife enabled auto-merge August 12, 2026 22:28
@OutThisLife
OutThisLife merged commit d2c6af3 into main Aug 12, 2026
45 checks passed
@OutThisLife
OutThisLife deleted the bb/atomic-replace-windows-sharing branch August 12, 2026 22:31
@alt-glitch alt-glitch added type/bug Something isn't working P2 Medium — degraded but workaround exists comp/agent Core agent runtime: loop, agent_init, prompt builder, context-compression, responses endpoint platform/windows Native Windows-specific behavior or breakage sweeper:risk-session-state Sweeper risk: may lose/corrupt/mis-associate session or context state sweeper:risk-platform-windows Sweeper risk: may break or behave differently on native Windows area/auth Authentication, OAuth, credential pools labels Aug 12, 2026
skappafrost pushed a commit to skappafrost/hermes-agent that referenced this pull request Aug 15, 2026
…lace-windows-sharing

fix(utils): recover Windows renames contended by an open handle
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…
melon-xf added a commit to melon-xf/hermes-agent that referenced this pull request Sep 3, 2026
…lace-windows-sharing

fix(utils): recover Windows renames contended by an open handle
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/auth Authentication, OAuth, credential pools comp/agent Core agent runtime: loop, agent_init, prompt builder, context-compression, responses endpoint P2 Medium — degraded but workaround exists platform/windows Native Windows-specific behavior or breakage sweeper:risk-platform-windows Sweeper risk: may break or behave differently on native Windows sweeper:risk-session-state Sweeper risk: may lose/corrupt/mis-associate session or context state type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Windows: atomic_replace drops writes on ERROR_SHARING_VIOLATION (concurrent reader of gateway_state.json et al.)

2 participants