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 #51094 —
feat(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 #51103 —
fix(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 #51072 —
feat(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 #51506 —
feat(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 #51096 —
fix(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 #51259 —
feat(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 #51261 —
feat(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 #51539 —
fix(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
.oggwith 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-assistantflag forhermes slack manifestemits 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. Newdisplay.reasoning_stylesetting (code | blockquote | subtext). Discord defaults tosubtext(small grey metadata). (6cc07b6c) - Thread-starter dedup. Prevents double dispatch when
_auto_create_thread()triggers a secondMESSAGE_CREATEevent. Preseeds the dedup cache with the thread ID to suppress the duplicate. (807bdc17)
Telegram
- CLOSE_WAIT fd leak fixed. Wired
platform_httpx_limitsinto PTB'sHTTPXRequestacross 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.
- PR #51553 — (0c79992d)
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.
- PR #51509 — (02050859)
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.
- PR #51507 — (23c47371)
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.
- PR #51093 — (a6b670d4)
/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.
- (05c896cf)
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.
- (56b4ef74)
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.
- (45540cfb)
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.
- (2977e745)
Windows installer: removed unused job
- (c820eb6a)
📦 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_effortsupport;xhigh→maxunlocks 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.