Source: liftaris-herm-tui-2026-05-22.md — full README verbatim, fetched 2026-05-22. Repo: github.com/liftaris/herm. NPM package: herm-tui. Version: v1.7.1 (released 2026-05-22, same day as fetch). Stars: 189. License: MIT. Language: TypeScript 99.6%. Author: liftaris.

Dashboard TUI for Hermes Agent — tabbed, mouse-aware terminal interface built with OpenTUI (React renderer) and Bun. Talks to the same gateway the Hermes CLI uses; not a replacement for Hermes, an alternative frontend for it. Author’s framing: “I wanted Hermes capabilities with an OpenCode style interface. Herm uses the same TUI framework OpenCode is built with, OpenTUI, and also exposes dashboard style tabs that centralizes everything I need to do in Hermes in my interface of choice — the terminal.” Etymology: herm /hɜːm/ = ancient Greek boundary marker pillar topped with a sculpted head of Hermes — the name plays on Hermes-Agent ↔ Herm-the-TUI as boundary surfaces.

What you get

Chat: streaming output, markdown, inline images via chafa, LaTeX→unicode, diff chips, tool-call expansion, animated ASCII avatar.

11 dashboard tabs (Ctrl+K palette + slash-popover + @-refs):

TabWhat it does
sessionsAll current + past Hermes sessions, switch in-place
contextInspect current Hermes context window
agentsMulti-agent view across profiles
analyticsHermes usage metrics
skillsBrowse + invoke skills (composes with Skill Bundles)
cronView + edit Hermes cron jobs
toolsetsInspect registered tool sets per session
configHermes config.yaml editing surface
env.env overrides
memoryHermes memory inspection (Core / Session Search / External)
kanbanBuilt-in kanban for the Hermes goals/kanban primitive

Operator ergonomics:

  • Profile switching without leaving the TUI (multiprofile Hermes operators — see also the Codex runtime article for CODEX_HOME isolation)
  • Fully rebindable keys via /keys, opencode-compatible keymap
  • Theme picker
  • Resume last session: herm -c

Install

Needs Hermes Agent + Bun installed first.

bunx herm-tui              # try without installing
bun add -g herm-tui        # stable
npm i -g herm-tui          # also fine
bun add -g herm-tui@next   # bleeding edge (every dev push)
herm                       # fresh session
herm -c                    # resume last session

From source:

git clone https://github.com/liftaris/herm.git
cd herm && bun install
bun run src/index.tsx

Herm looks for ~/.hermes by default; set HERMES_HOME if your profile lives elsewhere. See .env.example for rarely-needed overrides.

Key Takeaways

  • An alternative frontend for Hermes, not a fork or replacement. Herm reads/writes the same ~/.hermes/ profile directory the Hermes CLI uses. Switching between hermes and herm is lossless. Operator implication: try Herm without committing — your CLI sessions stay accessible.
  • Built by an OpenCode refugee. Author’s motivation note is explicit — they used OpenCode (the OpenAI agent platform with the original OpenTUI dashboard) and built Herm because they wanted that exact UX shape against Hermes. The keymap is opencode-compatible and the framework is the same. If you’ve used OpenCode, your muscle memory carries over.
  • OpenTUI + Bun + React is the stack. OpenTUI is anomalyco’s React-renderer TUI framework (same author as OpenCode itself). Bun runs the TypeScript directly. The implication: the project’s velocity is bounded by OpenTUI / Bun upstream — fast as both, fragile to either if breaking changes ship.
  • 11 dashboard tabs is the load-bearing differentiator. The Hermes CLI is REPL-shaped — one stream of conversation. Herm tabs centralize every Hermes surface in one window: sessions, context, agents, analytics, skills, cron, toolsets, config, env, memory, kanban. For operators who currently bounce between the CLI + their editor + the ~/.hermes/ filesystem, that consolidation is the value.
  • Animated ASCII avatar + LaTeX→unicode + inline images via chafa. Aesthetics are a stated goal. chafa (terminal-image-renderer) inline-renders images attached to chat. LaTeX in responses converts to unicode for terminal display. Diff chips visualize file changes from tool calls. None of these are required for the agent to work — they’re all UX-quality differentiators that compound with Hermes Skins (which theme the agent banner inside whatever TUI hosts it).
  • @-refs for file/diff context. The slash-popover surfaces files and diffs as inline references — type @somefile.md in a Hermes prompt and the file’s contents attach as context. Same UX as Cursor’s @ mentions, ported to the Hermes operator surface. Worth pairing with Hermes MemoryKit’s focus-brief builder (Herm provides the input convenience; MemoryKit handles the retrieval-routing discipline downstream).
  • 189 stars + v1.7.1 + released 2026-05-22 = mature trajectory. Mid-version-1 release tag + 189 stars indicates more than a weekend hack — version 1.7.x suggests this has shipped through ~7 minor revisions. Most active Hermes UI project at ingest time.
  • Three-way comparison against Hermes Console (Obsidian) and the bare CLI:
SurfaceWhere it livesBest for
Hermes CLI (hermes)Standalone terminalSolo operator, ssh-into-VPS workflows, Nate Herk’s course setup
Herm (this article)Standalone terminal, TUI dashboardOperators who want all Hermes surfaces in one window, OpenCode UX preference
Hermes ConsoleInside Obsidian vaultOperators whose primary workflow is Obsidian notes + want selected-text → Hermes pipeline

All three read/write the same ~/.hermes/ profile. Pick by where you spend your time.

Where this fits

SurfaceDescriptionRelationship
Hermes Agent landingPublic landingHerm is a new UI/frontend surface added here
Hermes Console (Obsidian)Hermes-in-Obsidian terminalSister UI surface — Herm is the standalone version, Console is the in-Obsidian version
Hermes Skins (joeynyc)Visual themes for Hermes CLIComposable — skins theme the Hermes agent banner inside the Herm TUI
Hermes Skill BundlesSlash-command skill compositionComposable — bundles run inside whichever frontend hosts Hermes (Herm exposes the skills tab for browsing)
Hermes MemoryKit (duclamvan)8-layer memory routingComposable — Herm’s memory tab inspects Hermes memory; MemoryKit extends the model with routing
Hermes Codex App-Server RuntimeRuntime delegation to Codex CLIComposable — Herm hosts whichever runtime Hermes is configured for
Hermes Agent 1-Hour Course (Nate Herk)Operator setup walkthroughSister surface — Nate’s course is VPS+CLI shaped; Herm is the desktop-TUI shape against the same agent

Try It

  1. Smallest commitment: bunx herm-tui (no install). Trial the TUI against your existing ~/.hermes/ profile. Compare to your usual CLI workflow.
  2. If you like it, install stable: bun add -g herm-tui then herm. Switch between Herm and the CLI freely — both speak the same gateway.
  3. Resume across sessions: herm -c picks up where you left off. Useful for operators who don’t keep the terminal open 24/7.
  4. Multi-profile operators: use the profile-switcher to hop between Hermes profiles (e.g., personal-assistant / coding-assistant / cron-runner) without leaving the TUI. Pairs with the multi-profile CODEX_HOME pattern when running the Codex runtime.
  5. Customize keymap: if you came from OpenCode, the default keymap is already opencode-compatible. Otherwise edit via /keys — fully rebindable.
  6. Compose with other Hermes surfaces: install Skill Bundles for slash-command skill orchestration, Hermes Skins for visual themes inside the terminal Herm hosts, and (if you’re an Obsidian user) Hermes Console for selected-text → Hermes bridging. All four compose cleanly because they each touch a different layer (UI / behavior / appearance / vault-integration).

Open Questions

  • Does OpenCode’s keymap fully transfer? Author claims “opencode-compatible.” Worth verifying which chords carry over and whether any Hermes-specific bindings collide.
  • Theme catalog. Theme picker is mentioned but not enumerated. Worth a refresh once theme list documented.
  • Mobile / SSH performance. Bun + React TUI rendering — does it lag over SSH or low-bandwidth links? The Hermes CLI is robust on remote sessions; Herm’s added rendering layer may not be.
  • Plugin interface. Does Herm expose a way for third-party plugins to add tabs? Not documented. If it does, this is the surface other community projects (like MemoryKit) would extend.
  • OpenTUI / Bun version pinning. Both upstream dependencies are young — version-pin discipline matters for reproducibility. Worth checking package.json on first refresh.
  • Telemetry / analytics tab privacy. The analytics tab exposes Hermes usage metrics. Where are those collected (locally only? phoned home?)? Important for privacy-conscious operators. Default behavior should be flagged on next pass.