Hermes Agent

Hermes proposes Desktop session spaces independent of working directories

Hermes proposes labeled Desktop session spaces that can bind to gateway channels without treating the current directory as identity. Related launcher and context-policy changes tighten which executable and context files Desktop actually uses.

← Back to homeOriginal source ↗

NousResearch/hermes-agent issue #91182 is the inspected primary source: “Desktop: session spaces (labels) independent of cwd, bindable to gateway channels.” The related records below were inspected as supporting context rather than independent confirmation.

The facts

- NousResearch/hermes-agent issue #91182 was created 2026-08-21T00:24:19Z and was open at inspection; its title is “Desktop: session spaces (labels) independent of cwd, bindable to gateway channels.” - NousResearch/hermes-agent PR #91183 was created 2026-08-21T00:33:28Z and was open at inspection; its title is “fix(tui): honor per-platform context-file policy for Desktop.” - NousResearch/hermes-agent PR #91179 was created 2026-08-21T00:07:36Z and was open at inspection; its title is “fix(desktop): prefer PATH hermes over env-shebang argv[0] in launcher entry.” - The repository reported 233547 stars, 33991 open issues, default branch main, and last push 2026-08-21T00:23:14Z. - The latest tagged-release baseline checked was v2026.8.18 published 2026-08-18T07:26:46Z.

What changed

NousResearch/hermes-agent issue #91182 reports: Summary Please add **session spaces**: named labels for grouping/filtering Desktop sessions that do **not** require a distinct folder/cwd. A space should optionally **bind to a gateway channel** (platform + chat_id, e.g. a Buzz channel UUID) so the same attention bucket is used on Desktop and on the messaging lane. Today those are two different taxonomies, and the only Desktop grouping primitive with a human name is **Project**, which is a workspace (unique primary path). This is not a request for more Hermes Projects, nor for topic folders on disk. Problem Desktop **Grouping → Project** organizes by the Projects registry. Creating a project with a primary path that already belongs to another project is rejected (folder already belongs to project '…'; switch to it instead of creating a duplicate). Forcing duplicates (allow_duplicate_path) copies the same repo subtree in the sidebar. That is correct for **code workspaces**. It is the wrong primitive when: Many conversations share **one** repo / vault / cwd (same AGENTS.md, same tools). The user still wants to **launch and find** chats by attention domain (health, investing, infra, …). The long-term UI for those domains is **Buzz (or other gateway) channels**, each of which already has a stable chat_id and its own gateway session key. Workarounds (title prefixes, pins, 12 dummy folders) either do not group in the sidebar

NousResearch/hermes-agent PR #91183 reports: Summary Desktop sessions launched from the Hermes install tree can inherit that tree's AGENTS.md, even when the active profile is not a coding profile. Honor the existing gateway.platforms..skip_context_files policy in the TUI/Desktop agent factory, preserving SOUL identity and memory for configuration-driven skips. Keep HERMES_IGNORE_RULES as the deliberately stronger all-rules escape hatch. Changes tui_gateway/server.py — add _context_file_policy() and wire it into _make_agent. The resolution mirrors the messaging gateway's per-platform handling in gateway/run.py (including tolerating the list shape hermes gateway setup writes for gateway.platforms). tests/tui_gateway/test_desktop_skip_context_files.py — new regression tests: config-driven skip (SOUL + memory retained), TUI non-application, gateway.platforms list-shape compatibility, and HERMES_IGNORE_RULES precedence. website/docs/user-guide/configuration.md — document the per-platform skip_context_files setting under Context Files. Motivation A Desktop backend launched from the Hermes install tree resolves its cwd as the repo root, so the contributor AGENTS.md (~85KB) gets injected into every fresh session even for non-coding profiles. The profile-level agent.skip_project_context key is not consumed by the Desktop factory; the existing generic mechanism is the gateway's per-platform policy. Wiring Desktop to that same policy fixes the class of problem without adding a profile-specific pathway, and protects prompt-cache performance — the skip happens at construction, not by mutating prompts afterward. Test Plan scripts/run_tests.sh tests/tui_gateway/test_desktop_skip_context_files.py — 4/4 pass scripts/run_tests.sh tests/tui_gateway/ — 70 files, 524 tests passed, 0 failed Live verification on a profile with the setting

NousResearch/hermes-agent PR #91179 reports: Summary On Linux, the XDG desktop entry installed by hermes desktop (via hermes_cli/linux_desktop_entry.py) gets its Exec= line from resolve_hermes_bin() in hermes_cli/relaunch.py. That function prefers sys.argv[0] when it resolves to an executable file. When the user launches hermes desktop from a terminal through the repo's raw launcher script ( /hermes, shebang #!/usr/bin/env python3), argv[0] is that script — so the generated hermes.desktop entry points back at it. That works from a login shell (the venv is on PATH), but **desktop launchers run with a bare environment**: /usr/bin/env python3 resolves to the system interpreter, which lacks Hermes' dependencies. The app dies on the first import (ModuleNotFoundError: No module named 'dotenv') before any window appears — clicking the icon silently does nothing, while launching from a terminal works fine. Since hermes desktop rewrites the entry on every launch, hand-editing Exec= doesn't stick; the fix has to be in the resolver. Fix In resolve_hermes_bin(): when argv[0] is an absolute executable whose shebang is #!/usr/bin/env..., prefer the PATH-resolved hermes entry point (the venv wrapper, whose shebang carries an absolute interpreter path), falling back to argv[0] when the PATH lookup finds nothing. Behavior is unchanged for real binaries (venv wrappers, nix store paths, etc.). Reproduction 1. Run./hermes desktop from a checkout (repo script, not the venv binary). 2. Check ~/.local/share/applications/hermes.desktop → Exec= /hermes desktop.

Why it matters

A working directory is a poor conversation identity once Desktop, gateway channels and multiple projects share a runtime. Stable spaces can separate navigation from ownership, but only if launcher and context policy resolve consistently. The operator test is whether the system remains bounded and its receipts still describe the action after failure, retry or restart.

Current

The primary record was open when captured on 2026-08-21. The tagged-release baseline was v2026.8.18 published 2026-08-18T07:26:46Z. Repository metadata, full source bodies, current pull requests and issues, releases, Google News, Hacker News, Lobsters, Metamesh and the rendered ClawCharts row were inspected. ClawCharts selected the subject; it did not prove the claim.

Evidence

The primary URL is https://github.com/NousResearch/hermes-agent/issues/91182. Supporting records are https://github.com/NousResearch/hermes-agent/pull/91183 and https://github.com/NousResearch/hermes-agent/pull/91179. Source bodies, timestamps and states are preserved in the daily evidence bundle. Test counts and reproductions remain attributed to their authors unless identified as independently rerun.

Source boundary

Open work is described as open, closed work as closed, and operator reports as reports. A pull request is evidence of proposed or reviewed direction, not proof of a shipped release. Search residue, package mirrors and historically published source spines were excluded.

Operator take

Make the session-space identifier durable, bind it explicitly to gateway channels, and verify launcher selection and context policy across restart and directory changes. Preserve a before-state receipt, make the smallest reversible change, and verify the original failure independently.

Caveat

Public project records are mutable. Status, scope and evidence can change after publication. This brief records the inspected state and does not authorize changes to a reader’s deployment.

Source inspected; source state, environment and release boundary remain explicit.