git log --author=686f6c61 -- hermes-agent
Contributions to Hermes Agent
- ossHermes Agent
Teknium salvages my PR #97466 in #108695 and explicitly acknowledges its origin. Commit `2bc9ed9f239a7600120840b1ec47a469b3912a03` preserves my Git authorship and a `Co-authored-by` trailer naming me: this represents one contribution. The change redacts credentials in MCP probe errors and header display, covering the CLI and dashboard. The carrier adapts the patch to the current module layout. PR #108695 merged on 13 September 2026 at 03:49 UTC and this commit is on main. Original proposal #97466 was closed as superseded by the salvage, not separately merged; issue #97460 was also closed. Original proposal: https://github.com/NousResearch/hermes-agent/pull/97466.
- ossHermes Agent
During the profile-isolation review, Teknium explicitly mentions my PR #102343 as a reasonable Windows environment-block hygiene improvement. The review also states that it does not fix state.db binding on main and leaves it for a Desktop workstream. #108074 merged on 11 September 2026, but does not incorporate my proposal or contain commits authored or co-authored by me. This entry credits only the explicit mention and technical assessment of the proposal. Original proposal: https://github.com/NousResearch/hermes-agent/pull/102343.
- ossHermes Agent
Commit `53398ff` prevents `inflight.assistant` from wrapping the structured rows of a resumed turn, removing the duplicated presentation of reasoning and tool calls. It is one of the commits from my PR #76744 that landed through salvage PR #77713 with my Git authorship preserved. This entry credits only the “no sandwich” correction; the carrier's other commits have separate articles.
- ossHermes Agent
Commit `dbefd27` hardens same-turn carry by requiring a genuinely structure-bearing row before retaining inflight state, avoiding false positives on plain transcripts. It landed on main through #77713 with my Git authorship preserved as part of the #76744 salvage. It is documented separately because it introduces its own validity boundary in reconciliation.
- ossHermes Agent
Commit `2ecc1db` scopes removal of the plain dump to the active turn's live tail after the latest user message. This prevents resume-time deduplication from altering historical regions unrelated to the current turn. It landed on main through #77713 with my Git authorship preserved, originating in #76744.
- ossHermes Agent
Commit `7a4d047`, authored by @OutThisLife, refactors reconciliation helpers around one shared live-tail terminology and boundary. The commit includes `Co-authored-by: 686f6c61 <github@00b.tech>` and landed through #77713. This entry records that specific co-authorship separately from the three commits in the same carrier where my primary Git authorship is preserved.
- ossHermes Agent
Commit `8a29703` propagates `prompt_caching.cache_ttl=off` into stub-policy paths, closing the remaining route that still enabled caching despite the opt-out. It originated in my PR #76113 and landed on main through salvage PR #76622 with my Git authorship preserved. The carrier's other three commits are documented as separate articles.
- ossHermes Agent
Commit `8ee5174` consolidates cache-disable stubs around `blank_cache_policy_stub`, removing variants that could diverge across agent paths. It landed on main through #76622 with my Git authorship preserved and @JoaoMarcos44 as co-author. It is a separate contribution from the later `cache_ttl=off` wiring.
- ossHermes Agent
Commit `8e1a351` explicitly preserves `None` for `cache_disabled` when MoA has no agent, retaining the “no local decision” semantics instead of coercing it to a false boolean. It landed through #76622 with my Git authorship preserved and is a distinct correction within the same carrier.
- ossHermes Agent
Commit `67db870` removes the `pytest` import left unused after the cache-disable tests were reorganized. It is a small but verifiable change that landed through #76622 with my Git authorship preserved; it is presented as its own article under the one-contribution-per-commit criterion.
- ossHermes Agent
An attribution infrastructure chore in the Hermes Agent repo: it adds the contributors/emails/github@00b.tech file mapping to 686f6c61, prepared ahead of the PR #76113 salvage (cache_ttl=off / MoA stubs) so the contributor attribution audit passes when the cherry-picked commits land on main. Without that mapping, the audits that verify the salvage commits belong to a registered contributor could fail to recognize the authorship of the fixes.
- ossHermes Agent
In the gateway, split delivery of long payload-less replies duplicated or swallowed the final send. I opened PR #78556 fixing the same issue independently. The fix that landed on main (#79669, merged) closes my PR and explicitly credits me for the independent diagnosis of the bug; the merged code was another contributor's, with my diagnosis acknowledged in the credits.
- ossHermes Agent
Fixed the bug where, on adopting an env credential mid-run, `_try_refresh_env_client_credentials` did not call `sync_credential_pool_entry_id()` and the agent kept pointing at the old pool entry; on a 429, `mark_exhausted_and_rotate` resolved by `credential_id` (ignoring the disagreeing `api_key_hint`) and quarantined the healthy key for days while the exhausted one stayed live. The fix works across three layers: rebind the pool entry id right after adopting the env credential (run_agent.py), trust the `api_key_hint` when it disagrees with `credential_id` (agent/credential_pool.py) and regression tests at both layers (79/79 passing). The original PR (#79180) was closed without merging and the same work landed on main via #82149, with my authorship preserved on `bf7c716`. Fixes #79156.
- ossHermes Agent
The automatic endpoint rewrite in `_to_openai_base_url` rewrote `/anthropic` → `/v1` for any host, breaking Anthropic-only gateways like Bailian (`/apps/anthropic` became `/apps/v1` → 404) and producing false positives when `api.minimax` appeared in the path. The policy is inverted to a dual-surface host allowlist (MiniMax family; the ZAI `/paas/v4` mapping is kept): Anthropic-only gateways keep their path. This PR's fixup anchors the marker to the host via urlparse (exact or subdomain suffix match). It is the class-wide completion of the point fix #85466: it reaches the aux-iteration call sites and the API-key branch where no `api_mode` is in scope, which per-site guards could not. The original PR (#83782) was closed without merging and the same work landed on main via #85532, with my authorship preserved on `0d24c4f`. Fixes #83642. Tests: 20/20, 3 sabotage-verified.
- ossHermes Agent
My PR #78323 (fix(state): verify FTS rebuild write path; spool pending-cap overflow) found and correctly diagnosed both transcript-spool defects: the ordering bug (recovery walks sorted(glob("*.json")) and uuid4 names re-insert out of order after a burst of pending-cap spools) and the fidelity bug (its append_kwargs loop is the direct attempt at the fidelity bug). PR #84785, opened by another contributor as a supersede of #78323, explicitly credits that diagnosis ("found both of these defects first, and diagnosed both correctly") and explains it is not a mechanical rebase but work on the current code: commit de0f20ff05b landed the runtime spool independently and rewrote the regions my PR touched, leaving both defects still live on main. The fix orders by (ts, seq, filename) mirroring drain_transcript_spool, preserves the structured fields and stops the session replay after the first failure (10 new tests). Not a merge of my own: it is issue/diagnosis credit.
- ossHermes Agent
Password-gated remote file listing used a native bearer, but `saveGatewayFile` always mounted the OAuth cookie partition: a cookieless session could list files and still receive 401 on download. Commit `cce0427`, authored by @OutThisLife with my co-authorship, aligns download authentication with REST and adds bearer, cookie, and session-token regressions. It landed through #90546 and supersedes #89013. Fixes #88987.
- ossHermes Agent
Commit `b7b6ee0`, authored by @OutThisLife with `Co-authored-by: 686f6c61`, extracts and names `resolveGatedDownloadAuth`. The function makes bearer-then-cookie precedence and the session-token fallback for token/local gateways explicit, allowing the decision to be tested without running the full download. It landed through #90546 as a separate contribution from functional fix `cce0427`.
- ossHermes Agent
Commit `4ccc4b6` prevents the post-`hermes update` cold start from launching a standalone gateway when Desktop already owns lifecycle through `serve`. `_desktop_owns_gateway_lifecycle()` checks the spawn ledger and this install's Python processes, guarding both planning and the final spawn. It originated in my PR #76745 and landed through #92698 with my Git authorship preserved. Fixes #76129.
- ossHermes Agent
Commit `f406777`, authored by Teknium with my co-authorship, adds token/subcommand-based control-plane classification and a live E2E for the cold-start skip. It hardens fix #76129 against false positives and validates real Windows behavior. It landed through #92698 as a follow-up separate from commit `4ccc4b6`, where my primary authorship is preserved.
- ossHermes Agent
Fixed the leak where a session detached from its WebSocket mid-turn could remain indefinitely in `_sessions`, with `ended_at` set to NULL and its agent retained in memory. `_schedule_ws_orphan_reap` armed one timer; if it fired while `running` was still active, the reaper exited without rescheduling. My fix rearms the grace period until the session can be released and adds a fake-timer regression. It landed through #93361 with my authorship preserved on main commit `30a3766`. Fixes #85578.
- ossHermes Agent
Commit `a837c7a` introduces `asRpcError()` and routes both `host.requestProfile` and `host.request` through shared normalization, so a plain rejection with a numeric `name` no longer crashes React 19 when it calls `trim()`. It originated in my PR #94621 and landed through #95016 with my Git authorship preserved. The additional frozen/sealed-object protection belongs to another commit with its own article. Fixes #94471.
- ossHermes Agent
Commit `961635c` completes error normalization by copying unsafe rejections into a new `Error` instead of mutating `name`. It preserves the original value in `cause` and covers frozen/sealed objects and cross-realm values. It landed through #95016 with my Git authorship preserved. Teknium confirmed in #94621 that this frozen-rejection copy was exactly right.
- ossHermes Agent
Commit `0c69cac` terminates on quit only the remote `hermes serve --isolated` process whose ownership can be proven through `backend.lock.json` and `cleanupStale`, before cancelling the forward and closing SSH. It also prevents reconnect callbacks from spawning another backend during shutdown. It originated in my PR #94628 and landed through #95085 with my Git authorship preserved. Windows-specific skip instrumentation belongs to another commit with its own article. Fixes #91668.
- ossHermes Agent
Commit `8085614` adds the specific log explaining when and why Windows Desktop skips teardown of a remote SSH connection. The signal distinguishes an intentional skip from missed cleanup when investigating surviving processes. It landed through #95085 with my Git authorship preserved, separate from commit `0c69cac`, which implements owned-backend termination.
- ossHermes Agent
Commit `f1755cc` makes Close All remove tiles from the shared `__bots_workspace__` bucket in `hermes.desktop.sessionTiles.v2`, preventing `$sessionTiles` from rehydrating them after a profile switch or Desktop restart. It originated in my PR #94213 and landed through #95648 with my Git authorship preserved. Protection against mutation during traversal belongs to commit `0ecbf1c`, documented separately. Fixes #94137.
- ossHermes Agent
Commit `0ecbf1c` makes `closeAllOpenSessionTiles()` snapshot the group pane ids before it starts closing panes. This prevents layout-tree mutations during traversal from skipping tabs while leaving tiles in other zones untouched. It originated in #94213 and landed through #95648 with my Git authorship preserved, as a separate contribution from the base Close All persistence fix.
- ossHermes Agent
Commit `bdbb41b` adapts salvaged staleness-probe tests to the current options-object `kickoff` signature. It does not introduce another product behavior, but it is a verifiable integration commit with my Git authorship preserved in #95648. It is presented as its own article under the one-contribution-per-commit criterion without misrepresenting it as a third functional Close All fix.
- ossHermes Agent
Fixed the presentation duplicate that appeared when a group retained an identity qualified by an old loopback source (`127.0.0.1:port`) while Desktop also showed the same profile from This device. `preferReachableSameNameRows()` removes only the unreachable sidebar copy when a reachable row with the same name exists; `$lastRoster`, group seats, and mentions retain every `(connectionId, profile)` identity. Ghosts, lone unreachable rows, two live same-name sources, and connect-on-demand sources keep their semantics. My PR #95371 landed through salvage PR #95979, merged on 27 August 2026, which re-verified that the bug remained after the quarantine/no-loopback fixes, explicitly credits @686f6c61, and preserves authorship on main commit `21054b7`. The original suite passed 576 tests and the salvage's focused verification passed 45/45. Fixes #92286.
- ossHermes Agent
Fixed the bug where reopening an already-mounted Bot Chat showed a stale snapshot: `deliver="bot-chat:<profile>"` deliveries wrote to the canonical session while its WebSocket was down, but `forceResume` sent the resume request through the main route and `resumeTile` returned the warm runtime without consulting REST. Explicit reopen now calls `resumeTile({ refreshTranscript: true })`, fetches the latest messages, and reconciles them into the tile cache, publishing only when it changes; ordinary remounts retain the fast path. My PR #96215 landed through salvage PR #96650, merged on 28 August 2026 with explicit credit and authorship preserved on main commit `6ac193e`. The original PR passed 59 focused tests and the salvage passed 113/113 with clean TypeScript. Fixes #96183.
- ossHermes Agent
Fixed the automatic-compression false trigger in Codex Responses sessions with native compaction and a valid checkpoint. Preflight applied `estimate_request_tokens_rough` to the full durable history —about 1.16 million tokens against a 765k threshold in the reported case— even though the effective request, pruned around the checkpoint, contained only about 110–152k. `estimate_native_responses_preflight_tokens()` now reuses the transport eligibility gate, converts the payload, applies `prune_pre_checkpoint_items()`, and estimates that wire; when eligibility cannot be proven or conversion fails, it retains the conservative generic estimate. Auxiliary compression is unchanged. My PR #96217 landed through salvage PR #96644, merged on 28 August 2026 with authorship preserved on main commit `e6b4f37`. This entry credits only that fix; the later route-predicate refactor included in #96644 is @teknium1's work. Focused validation passed 97 tests. Fixes #96155.
- ossHermes Agent
Fixed the liveness false negative for satellite profiles with `gateway.multiplex_profiles` enabled. Because those profiles have no `gateway.pid`, runtime lock, or service unit of their own, `_builtin_gateway_liveness()` returned `false` even while the default multiplexer was processing their cron store; following the warning installed a profile gateway that the start guard rejected with exit 78 and KeepAlive restarted in a loop. The fix extracts `named_profile_served_by_running_multiplexer()` from the start guard to share the exact same PID, configuration, environment-precedence, and allowlist checks, then uses it as a fallback only when no local PIDs exist. My PR #97558 landed in full through salvage PR #99441, merged on 31 August 2026 with explicit credit and authorship preserved on main commit `e703717`. The patch retains the original four-file scope, and focused validation passed 26 tests. Fixes #97120.
- ossHermes Agent
Closed the re-entrant quit race that remained in Desktop SSH shutdown after #95085. `teardownSshConnection` removes the `sshConnections` entry before awaiting the remote kill; meanwhile, `backendShutdown.finally()` calls `app.quit()` again, and the second `before-quit` treated the empty map as completed teardown and allowed Electron to exit before cleanup finished. The fix synchronously records a single `sshQuitTeardownPromise`, also blocks while that promise remains in flight, and retains the six-second bound before retrying quit. The regression matrix covers active connections, pending bootstrap, an empty map with a kill in flight, completed teardown, and an empty state. PR #95636 was live-validated with Windows Desktop against a Linux SSH gateway (97 tests passed, 1 skipped) and merged into `main` on 31 August 2026 as `37fc92a`, with my authorship preserved. PR #108186, merged on 11 September 2026, explicitly acknowledges preserving my SSH teardown guarantee. This is an additional reference to this earlier work; the new commits in #108186 do not carry my authorship or co-authorship. Reference: https://github.com/NousResearch/hermes-agent/pull/108186.
- ossHermes Agent
Design, diagnosis, and technical-reconciliation contribution to #97963. My PR #99657 identified that `HygieneTurnHoldExceeded` revoked the detached worker's commit admission and armed a 60-second cooldown: with summary models spending the first 10 seconds on reasoning, the system burned that prefix every turn and compression never published. I proposed retaining admission without extending the user-visible turn bound and also surfaced that this availability boundary fell through to the generic warning. Teknium's PR #99742 explicitly credits both contributions; merged commit `9de9d76` preserves the `surfaced by @686f6c61 in PR #99657` comment in `gateway/run.py`. During carrier review I identified and accepted its decisive safety improvement over my patch: retain admission only after capturing a safe watermark, then restore retry-after if the worker exits without committing. I closed #99657 as superseded. This is not a cherry-pick or my authored commit: the safe `commit_watermark_fenced` implementation and its callback belong to #99742.
- ossHermes Agent
Fixed the placeholder title on restored tabs whose pane has not mounted and whose session is no longer present in recents or the project tree. My PR #94212 offered two paths: persisting the title on the tile and looking up older untitled tabs by id. Merged PR #101260 retains only the latter: `startUnrestoredTileTitleBackfill()` waits for the gateway to open, looks up each tile without a `runtimeId`, `workspaceTabTitle`, or loaded row once through `resolveStoredSession(id, tile.ownerRoute)`, then lets `$sessions` update the label. Teknium explicitly dropped persistence because `workspaceTabTitle` also marks the canonical Bot Chat. Main commit `8d6a286` includes my co-authorship and the PR credits the #94212 salvage; this entry does not claim the discarded half.
- ossHermes Agent
Diagnosis, triage, and technical-reconciliation contribution to #100523. My PR #100542 was the first claim: it showed that `message_agent` acknowledged dispatch before its subprocess hit the single-owner fence and lost the payload, then proposed retaining it until Desktop released the session. When #100544 appeared, I publicly noted that routing the DM through the live owner was a better product than waiting for detach. Teknium's PR #101293 adopts that direction: it finds the profile's live Bot Chat and submits the message through `prompt.submit`; when delivery cannot proceed, it surfaces `target_busy` instead of hiding the failure. Main commit `d29a793` includes me as a co-author and the PR credits me as the “first claimant.” The in-process delivery architecture comes from #100544 and the final implementation from #101293; this entry does not present my closed PR's polling approach as merged.
- ossHermes Agent
Commit `0e5ff99` fixes the permanent “Waiting for gateway connection” loop triggered when `json.dumps(..., ensure_ascii=False)` left a lone surrogate in a frame and Starlette raised `UnicodeEncodeError` while encoding it as UTF-8. `_sanitize_ws_text()` makes every payload encodable; if `send_text()` still rejects a frame with that error, `_safe_send_many()` skips only that send, continues with later frames, and does not mark the transport closed. Other socket failures retain the defensive close behavior. The change adds regressions for clean text, sanitization, continuity after the invalid frame, and unrelated errors. It originated in my PR #97622 and landed through salvage PR #101666 with my Git authorship preserved; this entry credits only my commit, not the maintainer's later refactor wiring the transport to the shared sanitizer.
- ossHermes Agent
Main commit `c0aaa238f6` replaces the in-memory identity of the last priced message with a stable content fingerprint and stores the usage anchor in `model_config._usage_anchor`. Database history reloads and sessions resumed in a fresh process can therefore recover provider-reported token counts and estimate only messages appended afterwards. `agent/usage_anchor.py` centralizes capture, persistence, restoration, and validation; compression, native Codex rewrites, and session resets invalidate the anchor, while a restore with incompatible history discards the persisted value. It originated in my PR #99585, was adapted to the new agent layout, and landed through #104555 with my Git authorship preserved. `ea731d2f3a` is the same patch under its PR SHA and is counted here only once. This entry credits anchor persistence and restoration; the remaining changes in #104555 have their own authors.
- ossHermes Agent
Main commit `db96c8ced7da`, authored by FalconOrtiz with `Co-authored-by: 686f6c61`, integrates a durable cross-process mailbox so the live Bot Chat owner consumes deliveries through its normal prompt-turn path. It preserves stable IDs, rejects reuse with different content, orders admission and retains immutable terminal receipts. Delivery is pinned to the profile, owner and compression lineage; it waits for the current turn and queued human prompts, and prevents automatic replay of started or ambiguous operations after restart. It landed through #105442, which credits my durable admission work in #100319 and adapts FalconOrtiz's #101564 proposal on top of earlier routing work in #100544. This entry recognizes my co-authorship in that commit. #100319 remains open for the general queue supporting CLI or unsupported owners and later retries, behavior this merge does not include.
- ossHermes Agent
Main commit `f44b0fd34295a730e217251c0861a601259208b3` treats each selection as a (provider, model) pair. Reconciliation after Refresh Models checks the selected provider catalog; it keeps the selection when that provider is absent or unconfigured and only falls back when its populated catalog no longer offers the model. The current-selection check mark and keyboard navigation use the same identity, including display names and custom aliases. Regression tests cover shared model IDs across providers and refreshes that must not call onSelectModel. It originated in my PR #99575 and landed through salvage PR #107283, merged on September 10, 2026, with 686f6c61 as the Git author. Salvage SHA `550158f35038` represents the same patch and is counted only once. The maintainer confirmed preserved authorship; the original PR and issue #99389 were closed.
- ossHermes Agent
My PR #97645 addresses Honcho session summaries that retain planning preambles or reasoning blocks and are reinjected under “Session Summary” as trusted memory. The fix keeps the useful body after a closing think tag and omits summaries that contain only planning or remain contaminated. Sanitization covers fetching, formatting, honcho_context and cache reads to prevent stale contaminated content from resurfacing. Regression tests cover summary handling and preservation of the cached peer card. Erosika included this work in #103889 as commit `2b538090bf859a93ab7136edec791d036acbb597`, preserving my Git authorship and explicitly thanking @686f6c61 (#97645). The new salvage #109327 by kshitijk4poor recovers #103889 and preserves my authorship in cherry-pick `f1f220021c73196ae46987340401e739376a2159`; its description explicitly credits the five adopted contributors. As of 13 September 2026, #109327 remains open: this work is still awaiting merge into main. This is the same sanitization contribution, counted once; the other changes in both carriers belong to their respective authors. Original proposal: https://github.com/NousResearch/hermes-agent/pull/97645. First carrier: https://github.com/NousResearch/hermes-agent/pull/103889.
- ossHermes Agent
Commit `4346cdcdc21b` (16 September 2026 20:11 UTC). The `list_profile_names()` enumerator — used by cron Bot Chat delivery targets and kanban hints — listed every directory under profiles/, so a stale process re-creating a deleted profile's directory (`profiles/<name>/logs`, `state.db`) made `bot-chat:<name>` reappear as a delivery target. The other enumerators (`list_profiles`, `profiles_to_serve`, `HostedRoomService.local_profiles`) already honored the tombstone; this one now uses the same live-only walk. Live probe (fresh HERMES_HOME, real create/delete, real cron_delivery_targets): base lists `bot-chat:worker` after the stale re-mkdir; head lists only default/ops. Co-authorship confirmed with ryrenz.
- ossHermes Agent
Commit `8717a0bd3975` (16 September 2026 20:06 UTC). A job row in the Scheduled jobs (Routines) pane is a grid item with default `min-width: auto`, so a long nowrap title made the row ~530px inside the 250px pane. The pane's overflow clipped the enable/disable Switch and delete control off the right edge and the title was hard-cut with no ellipsis (#91623); the next-run label on the metadata line lost its tail the same way (#89534). `min-w-0` on the card and both lines let the row shrink to the pane, the title ellipsizes, and the schedule pill / next-run label wrap onto two lines instead of being cut mid-word. Closing the pane with its ✕ remembered dismissal in `hermes.desktop.dismissedPanes.v1`, and nothing ever showed the pane again — it only exists by being registered while Bot Mode is on screen, so the pane was gone until a full layout reset (#102224). The plugin now drops that remembered Close each time it registers the pane (new `host.undismissPane` door — un-dismiss + adopt only), so re-entering the Bots tab brings the pane back as the collapsed right-edge tab. Live-tested in real Electron app with e2e/bot-routines-pane-narrow.spec.ts (fails on origin/main, passes here); the row's Switch toggles the job in place (#95031 already fixed by 253b9d78c). Co-authorship confirmed with MicroWearld and worlldz.
- ossHermes Agent
Commit `43ab8c91a0f3` (17 September 2026 17:49 UTC, direct authorship). Salvage of #114317, issue #114290, merged to main as PR #114960 (18 Sep 17:45 UTC). Prior commit `444c75c10a` moved titleBar.center into workspace panel header on full pages, but components remounted on every chat↔page navigation. Fix: titlebar-controls.tsx renders the slot unconditionally on every non-overlay route, and page-owned controls (kanban board switcher) get their own WORKSPACE_PAGE_HEADER_AREA. Preserves original intent without remounts. Tests: titleBar.center component effect setup runs once, cleanup never across `/` → `/skills` → `/`, stays visible on page route. Salvage leverages the original #114317 proposal while keeping the layout improvement from `444c75c10a`. Co-salvage with teknium under #114960.
- ossHermes Agent
Commit d32dacf85564 (28 Aug 21:42 UTC, direct authorship 686f6c61). Merged in PR #114968 (19 Sep 03:37). The ui_meta projection sliced messages at 1200 chars with no signal that the body continued. Fix: stamp truncated payloads while staying within the existing per-message budget. Lets the client UI know a message is incomplete without causing layout overflow.
- ossHermes Agent
PR #117106 (open, 1 commit, direct authorship 686f6c61). Salvage of #97467 (original #97316). When a consolidation batch fails, the response no longer echoes the entire store back — only the consolidated state. Reduces overhead and latency. Critical in long sessions with large historical memory that require frequent consolidation.
- ossHermes Agent
PR #126357 (merged 1 Oct 06:57, author 686f6c61). fix(desktop): Linux tray survives minimization. On Wayland/X11 Linux, minimizing the main window could destroy the notification tray, cutting off quick access to session controls. Fix preserves the tray during minimize/restore. Critical for background workflows and session-keep-alive in desktop Linux.
- ossHermes Agent
PR #121507 (merged 1 Oct 07:57, 2 commits author 686f6c61: 0a7a0f8d4e84, 645bb146c681). fix(desktop): tray flag for dbus-native 0.15 compatibility. System tray handling on Linux moved to dbus-native 0.15, which requires a specific flag in tray config. Without the fix, system tray does not initialize correctly on new environments. 2 commits: first the flag, second coverage test with dbus mock.
- ossHermes Agent
PR #128419 (merged 30 Sep 02:14, co-authored 686f6c61, SHA b5a5ef7c1683). fix(desktop): local paths survive session restart. Local paths for cache, temp, etc. configured in desktop were lost on restart. Fix preserves these paths in persistent config, preventing the system from falling back to default paths that might be in protected areas or inaccessible.
- ossHermes Agent
PR #127248 (merged 30 Sep 02:45, co-authored 686f6c61, SHA 7327624d3500). fix(tags): add final punctuation to MEDIA tag display. MEDIA category tags were displayed without final punctuation, causing visual inconsistency with other tags. Fix adds uniform punctuation. Minor formatting contribution but improves UI coherence.
- ossHermes Agent
PR #101076 (merged 30 Sep 03:56, author 686f6c61, SHA 7ceda46ba43a). fix(git): clean dead markers from remote-tracking branch updates. When git updates remote branches (fetch/pull), it can leave dead markers in refs if a branch was deleted. Fix cleans these orphaned refs, preventing accumulation. Critical for long-lived repos with many ephemeral branches.
- ossHermes Agent
PR #128394 (merged 1 Oct 06:05, co-authored 686f6c61, SHA 55102bbcbfc2). fix(ui): show first message when tapping "show earlier" button. When loading earlier messages, the system would scroll but not clearly show the first message. Fix ensures the first history message is visible after pressing "show earlier".
- ossHermes Agent
PR #130048 (merged 1 Oct 08:01, author 686f6c61, SHA 9a9680218c58). fix(shortcuts): selection shortcut only works on active tab. The keyboard shortcut for select-all (Ctrl+A) was responding on all tabs simultaneously. Fix limits the shortcut to the active tab only, preventing accidental selections in background tabs.
- ossHermes Agent
PR #130015 (merged 1 Oct 09:06, 3 commits author 686f6c61: 743d3a4119e3, d753222ee793, c356d1df829d). feat(themes): Classic palette support and Thought rendering. Added support for Classic color palette with special rendering for reasoning blocks (Thought). 3 commits: first palette definition, second theme integration, third Thought block rendering.
- ossHermes Agent
PR #129955 (merged 1 Oct 09:34, 2 commits author 686f6c61: 348cf3336086, 7d997e8fc08b). feat(ui): response cards for single and multiple answer modes. Introduction of response-card components specific to single or multiple answer modes. Cards adapt to response mode: compact display for single answer, grid layout for multiple. 2 commits: first card component, second integration in response flow.
- ossHermes Agent
Commit 0aed3e9a (27 Sep, author 686f6c61). fix(worktree): fetch origin bases with a tracking refspec. In PR #126191 (merged 28 Sep). When fetching origin bases for worktrees, the fetch was not using a tracking refspec, causing remote branches to not be tracked correctly. Fix adds tracking refspec in the fetch so origin/* branches are registered and persisted. Critical for narrow clones with tag-pinned checkouts where remote branch tracking is fundamental to branch resolution.
- ossHermes Agent
Commit 4296bc6e (25 Sep, author 686f6c61). fix(desktop): skip the managed CLI in the Linux launcher. In PR #126650 (merged 28 Sep, OutThisLife as integrator). The Linux launcher in desktop attempts to use Hermes's managed CLI, but in some environments this causes version or installation conflicts. Fix detects and skips the managed CLI, using the available system CLI instead. Allows the desktop launcher to work on Linux distributions with alternative installations or without the managed CLI.
- ossHermes Agent
Commit 36bab6f98d (24 Sep, co-authored 686f6c61). test(state): drive the Restart Manager scan through an injected rstrtmgr. The Restart Manager coverage test (process restart manager) injects a mocked rstrtmgr object to test all restart-scan logic without relying on actual system behavior. Increases code coverage and test determinism in CI. Critical to audit that restarts are detected and handled correctly in state.
- ossHermes Agent
Commit 4033c97d35 (24 Sep, author 686f6c61). fix(xai): honor model.base_url when the pool row is still the registry host. When xAI configures a custom model.base_url but the pool row still points to the registry host, the client must honor the custom base_url, not use the registry one. Fix ensures that user configuration is respected even when there's inconsistency between pool row and base_url. Critical for deployments using remote registries with custom endpoints.
- ossHermes Agent
Commit 67900a0b30 (21 Sep, author 686f6c61). fix(sessions): spare pinned rows in the startup orphan sweep. The orphan session sweep on startup (cleanup of sessions without owner or tasks) was incorrectly closing pinned sessions too, which are deliberately persisted. Fix excludes pinned sessions from the sweep, allowing them to restore on the next startup. Essential for long-running sessions that need guaranteed persistence.
- ossHermes Agent
PR #120312 (merged Sep 23, 2026, co-authored 686f6c61, SHA 5fb9ec7). fix(cron): a pinned job never falls back to the global fallback chain. Closes #111805 and #105183. When a cron job has its own provider, model or URL (pinned), it should not fall back to another provider's global fallback chain. Stricter fix: a pinned cron does not walk any global fallback chain if its provider/model/URL is different. Previously accepted a fallback if the model was the same. Includes control test ported in the commit.
- ossHermes Agent
PR #120750 (merged Sep 23, 2026, co-authored 686f6c61, SHA d7e4b9d1). fix(desktop): keep the boot probe waiting while a cold-starting backend is alive. Closes #96213. The boot probe (diagnostic that runs on desktop startup) was not properly waiting for a cold-starting backend to finish initializing. Fix keeps the probe waiting while the cold backend is alive, preventing premature disconnections and probe failures during cold-start. Includes cleanup of test when unmounting language provider (without affecting probe's 30s global budget).
- ossHermes Agent
PR #114232 (merged Sep 21, 2026). fix(gateway): retain partial answers after returned errors. Co-authored-by: 686f6c61 + Jeffgithub0029 + brooklyn. SHA cf2ab2a2. The gateway discarded partial answers when a completion error occurred, losing already-streamed valid data. Fix preserves the partial-answer flag on failed completion frames and maintains a replay body when no text deltas arrive. Covers OpenCode terminal-stream reproductions (#85724) without altering existing routing safeguards. Adapted from #76112.
- ossHermes Agent
PR #117490 (author 686f6c61, SHA db87dbc9). fix(cli): treat credential-resolution 429 as quota, not auth. Fixes #117482. The CLI treated 429 errors (rate limit/quota) as authentication failures, causing confusing error messages. Fix reclassifies 429 as quota exhaustion, allowing the CLI to retry appropriately and return correct error messages. Critical for APIs using strict rate limiting.
- ossHermes Agent
Recent commit (10h ago, author 686f6c61). When memory consolidation fails, omit current_entries from response — reduces overhead and latency. Critical in long sessions with large history requiring frequent consolidation.
- ossHermes Agent
Commit Sep 13 (author 686f6c61). fix(honcho): omit reasoning-contaminated session summaries. When session summaries are generated from reasoning-mode sessions, they can be contaminated with info that shouldn't be in the summary. Fix omits contaminated summaries. Preserves session history integrity.
- ossHermes Agent
Commit Sep 10 (author 686f6c61). fix(desktop): keep model picker on the selected provider. When user selected a provider in the model picker, the selection was not retained after navigation or refresh. Fix preserves provider selection across sessions. Improves UX by avoiding involuntary resets.
- ossHermes Agent
Commit Sep 6 (author 686f6c61), salvage #99585. feat(compression): usage anchor survives DB reloads and process restarts. The compression anchor (reference point for how much was compressed) did not survive DB reloads or process restarts. Fix ensures the anchor persists, allowing the context-compression system to keep functioning correctly without state loss. Critical for long sessions where context compresses iteratively.
- ossHermes Agent
PR #117496 (open, salvage of #117353). 2 commits direct authorship 686f6c61: a1d2c9a746a3 + 70440f08862d. fix(backup): stops archiving the Browser Use CLI browser_profiles credential directory. Problem: when archives are created, browser profiles (with stored credentials) were included, exposing sensitive data. Solution: exclude browser_profiles from archives. Second commit scopes the exclusion to profile-home roots only to avoid conflicts. Resolves #117346 with salvage approach from #117353.
- ossHermes Agent
Commit c89be4c52d (4 Sep 15:15 UTC, direct authorship 686f6c61). Salvage of #102967. The cron bot-chat delivery child inherited the scheduler's cwd; when that directory was removed (a kanban worker whose scratch workspace was reaped by completion cleanup), the child died in ensure_project_root_on_path with FileNotFoundError. Fix: _run_bot_chat_turn pins the child's cwd to the target home (HERMES_HOME), which the lane has already verified exists. ensure_project_root_on_path now resolves entries tolerating a gone cwd, so any hermes invocation from a dead directory still starts (second half of #102941). Tests drive the CLI entry point and the delivery spawn seam from a deleted cwd.
- ossHermes Agent
PR #116916 (open, 2 commits, direct authorship 686f6c61). Salvage of #102967 (original #102941). When the scheduler's working directory is deleted, bot-chat delivery does not fail — the CLI can start from a gone directory without error. Gracefully handles stale cwd references and allows automatic recovery. Critical resilience in deployments where working directories are recycled or cleaned.
- ossHermes Agent
Teknium merged my residual queue proposal (PR #100319) in commit `5d8390d1a4b33d65beff6afbafeb6ffc9424060c` (PR #111273, 15 September 2026 00:29 UTC). The commit message contains "Credits 686f6c61's residual queue proposal in #100319" and the PR body mentions "Credits @686f6c61 for #100319". The change implements management of never-started turns with persistent claims and admission-order drainage after release, preserving authority of existing supported-owner receipts. Support for cron fallback to custom-root and live-owner delivery on later cycles. The fix deliberately does not add general retry of failed subprocesses: a failed/timeout child may already have executed. No Co-authored-by trailer; credit is exclusively in commit message text and PR body. Related: #100319, #104066, #105460, #105323, #109750, #109767.