NousResearch/hermes-agent · Weekly · Jun 22, 2026 - Jun 28, 2026

Hermes Agent Weekly #X: Desktop Timeline Rail, Honcho OAuth, Skills /learn, CI Overhaul, & Slack Voice Fixes (June 22–28, 2026)

Commits summarized
799
Period
Jun 22 - Jun 28, 2026
Published
Jun 29, 2026

Highlights from 200 commit summaries out of 799 total commits in the period. This is not an exhaustive changelog; it covers the most impactful changes the editorial team identified.

📌 Who should read this

If you use the Hermes desktop app, run gateway integrations (Slack, Discord, Telegram), manage MCP servers, or maintain CI pipelines, this week had several high-impact changes: a new conversation timeline rail, OAuth-based memory provider setup, an engine-free /learn skill command, tighter CI orchestration, and critical fixes for Slack voice messages, Telegram fd leaks, and session deadlocks.

🖥️ Desktop

Timeline rail for long threads

A compact right-edge prompt timeline now appears during long desktop chat sessions. It supports hover previews, click-to-jump, and active/hover row states without opening side panels.

  • PR #51094feat(desktop): add timeline rail for long chat threads (3fffecbd)

Tool previews: manual only, via status stack

Tool-result HTML artifacts no longer auto-open the preview rail. Instead, previewable artifacts are registered into a session-scoped store above the composer, with a toggle to open/close the pane and a file:// browser bridge for external links.

  • PR #51103fix(desktop): manual tool previews via status stack (2a10b838)

Styled tooltips & UI polish

  • Native title tooltips replaced with a styled <Tip /> component (9fd2b2cb)
  • Inline code border dropped, expanded tool block radius halved (2a10b838)

Computer-use preflight

A cross-platform readiness preflight step was added to the desktop for computer-use workflows.

  • PR #51072feat(computer-use): add a cross-platform readiness preflight to the desktop (6780cee6)

🤖 Agent Core

/learn — distill a reusable skill from any description

Open-ended skill learning across every surface. /learn <free text> takes a description of any source (directory, URL, workflow walkthrough, or pasted notes), gathers context using the agent's existing tools, then authors a SKILL.md via skill_manage. No engine, no model-tool footprint, works on any terminal backend.

  • PR #51506feat(skills): /learn — distill a reusable skill (e32ebc6a)

Image history: Anthropic-native shrink

Retry image-size rejections by also rewriting Anthropic base64 image source blocks (not just OpenAI-style image_url parts).

  • PR #51096fix(agent): shrink anthropic-native image history (88e13644)

Structured project facts + RPC

detect_project_facts() now returns a frozen ProjectFacts dataclass, and the project.facts gateway RPC surfaces it to any client. UI and prompt rendering share a single detector so they never drift.

  • PR #51259feat(agent): expose coding-context project facts as structured data + project.facts RPC (af7b7f63)

One-shot LLM helper (llm.oneshot RPC)

A stateless model call that runs outside any conversation—no session history, no prompt cache invalidation. Used for commit messages, rename suggestions, summaries, etc. Ships with a commit_message template.

  • PR #51261feat(agent): one-shot LLM helper + llm.oneshot gateway RPC (211ba9c7)

Tool-call persistence fix

Tool calls are now persisted before the turn-end flush, preventing data loss on concurrent shutdowns.

  • PR #51539fix(agent): persist tool calls before turn-end flush (190b01c5)

Concurrent tool-submit shutdown fix

A race condition during concurrent tool submission at shutdown was resolved.

  • fix(agent): handle concurrent tool submit shutdown (292a456c)

🧠 Memory & Honcho OAuth

Honcho OAuth connect — desktop and CLI flows

A comprehensive OAuth integration for the Honcho memory provider now supports:

  • Zero-CLI loopback OAuth authorization flow
  • Desktop connect link with status display
  • CLI OAuth sign-in with source-tagged authorize links
  • Token refresh with cross-process file-lock guard against grant revocation
  • Per-session identity resolution so auto-generated titles no longer remap live sessions

PR #44335 (ba9e3a49) — 24 commits across 18 files, +1948/−53.

🌐 Gateway (Slack, Discord, Telegram, Relay)

Slack

  • In-app voice messages (audio/mp4) now transcribe correctly. Previously cached as .ogg with mismatched bytes, causing OpenAI STT rejection. Now detects real container from filename/mimetype and routes video/mp4 voice clips through the audio path. (21965841)
  • Fixed dead ext-to-mimetype map for rerouted voice clips; now reports the correct audio MIME matching the cached extension. (5ecf3bf0)
  • New --no-assistant flag for hermes slack manifest emits a flat-DM manifest, so slash commands dispatch inline instead of being trapped in Slack's AI Assistant split-pane. (da80ac00)

Discord

  • Reasoning rendering as -# subtext. New display.reasoning_style setting (code | blockquote | subtext). Discord defaults to subtext (small grey metadata). (6cc07b6c)
  • Thread-starter dedup. Prevents double dispatch when _auto_create_thread() triggers a second MESSAGE_CREATE event. Preseeds the dedup cache with the thread ID to suppress the duplicate. (807bdc17)

Telegram

  • CLOSE_WAIT fd leak fixed. Wired platform_httpx_limits into PTB's HTTPXRequest across all three request-construction branches (fallback, proxy, plain) to tighten keepalive behavior and prevent fd leaks behind HTTP proxies like Cloudflare Warp. (4b7f3826)

Relay

  • Relevance policy declaration. The gateway now projects the agent's mention-gating, free-response, and bot-interaction knobs into the connector's vocabulary at boot via /relay/policy, so excluded chatter never wakes a scaled-to-zero agent. Completes Phase 6 (Team Gateway per-user isolation). (45bc4fb1)

🖥️ TUI / CLI

Background subagent indicators

Both the classic CLI and Ink TUI status bars now show a ⛓ N indicator sourced from tools.async_delegation.active_count(), so you can see at a glance how many background/async subagents are running.

🐛 Bug Fixes (Stability & Sessions)

Gateway session deadlock healing

_session_task_is_stale() failed to detect stale locks when a guard mismatch left orphaned entries. Reordered the cleanup to release-then-delete, so the done-task entry survives long enough for the self-heal path to clear the stale lock.

Live session identity across compression

When a session rotated its ID on compression, the active-session lease was never transferred, causing a second live agent to be spawned against the same DB continuation (forked lineage). Fixed with transfer_active_session() and authoritative lookup on agent.session_id.

MCP: skip killpg when child shares gateway's process group

/reload-mcp could crash the gateway by sending SIGTERM to its own process group. Now skips killpg when the child's pgid matches the gateway's own pgid.

Windows: embedded image stack overflow

Replaced a giant embedded-image regex with a bounded scanner so sessions with multi-megabyte data URLs no longer crash the desktop renderer.

/reload-mcp with guard mismatch model switch prevention

Refuse model switch on a stale checkout to avoid env_float ImportError. (fyzanshaik)

⚙️ CI & Infrastructure

Major CI orchestration refactor

Replaced scattered per-workflow detect-changes patterns with a single ci.yml orchestrator that runs the classifier once, then conditionally calls sub-workflows via workflow_call. A final all-checks-pass job aggregates all results so branch protection only requires one check. Affects 10 PR-gated sub-workflows.

Resilient dependency installs

Network install steps (npm ci, uv sync, toolchain headers) now auto-retry 3x on transient failures via a new reusable retry composite action. Also skips install scripts in typecheck (--ignore-scripts) to eliminate node-pty's flaky header fetch.

PR lane gating

Expensive PR checks (Docker build, full Python suite) only run steps for the lanes the PR touches (python, frontend, site). Skipped steps leave the job green, so required checks never hang.

Docker: skip on PRs

The heavy Docker build+smoke+integration suite (~9-11 min) now runs only on push-to-main and releases. Lint/lockfile checks still run on PRs.

Windows installer: removed unused job

📦 Installer & Browser

Drop system-browser fallback + auto-repair snap override

The installer no longer scans PATH for a system Chrome/Chromium binary. On Snap-based systems, chromium resolves to /snap/bin/chromium whose sandbox blocks the agent's control socket. Now only an explicit user-set AGENT_BROWSER_EXECUTABLE_PATH override is honored, and a /snap/* path is rejected even then. Crucially, already-affected installs are auto-repaired on update by stripping the snap path from .env.

🧪 Testing & Documentation

  • Computer-use: Documented Windows UIPI elevated-window limitation (Medium-integrity agent cannot drive High-integrity windows) (351afd35)
  • Ollama Cloud: Added reasoning_effort support; xhigh→max unlocks DeepSeek V4's 'Max thinking' tier (~2.5× more thinking tokens) (221cd602)
  • Windows gateway scheduled task hardened (433db17c)

This is a highlight report based on 200 of 799 commits in the period. Next week's issue will cover the remaining work.

Repository updates

Follow future updates

Get generated NousResearch/hermes-agent development summaries by email, or follow the weekly and monthly RSS feeds.

Sign in to subscribe by email. RSS feeds are public.

Sign in to subscribe