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):
| Tab | What it does |
|---|---|
| sessions | All current + past Hermes sessions, switch in-place |
| context | Inspect current Hermes context window |
| agents | Multi-agent view across profiles |
| analytics | Hermes usage metrics |
| skills | Browse + invoke skills (composes with Skill Bundles) |
| cron | View + edit Hermes cron jobs |
| toolsets | Inspect registered tool sets per session |
| config | Hermes config.yaml editing surface |
| env | .env overrides |
| memory | Hermes memory inspection (Core / Session Search / External) |
| kanban | Built-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_HOMEisolation) - 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 sessionFrom source:
git clone https://github.com/liftaris/herm.git
cd herm && bun install
bun run src/index.tsxHerm 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 betweenhermesandhermis 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-compatibleand 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). @-refsfor file/diff context. The slash-popover surfaces files and diffs as inline references — type@somefile.mdin 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:
| Surface | Where it lives | Best for |
|---|---|---|
Hermes CLI (hermes) | Standalone terminal | Solo operator, ssh-into-VPS workflows, Nate Herk’s course setup |
| Herm (this article) | Standalone terminal, TUI dashboard | Operators who want all Hermes surfaces in one window, OpenCode UX preference |
| Hermes Console | Inside Obsidian vault | Operators 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
| Surface | Description | Relationship |
|---|---|---|
| Hermes Agent landing | Public landing | Herm is a new UI/frontend surface added here |
| Hermes Console (Obsidian) | Hermes-in-Obsidian terminal | Sister UI surface — Herm is the standalone version, Console is the in-Obsidian version |
| Hermes Skins (joeynyc) | Visual themes for Hermes CLI | Composable — skins theme the Hermes agent banner inside the Herm TUI |
| Hermes Skill Bundles | Slash-command skill composition | Composable — bundles run inside whichever frontend hosts Hermes (Herm exposes the skills tab for browsing) |
| Hermes MemoryKit (duclamvan) | 8-layer memory routing | Composable — Herm’s memory tab inspects Hermes memory; MemoryKit extends the model with routing |
| Hermes Codex App-Server Runtime | Runtime delegation to Codex CLI | Composable — Herm hosts whichever runtime Hermes is configured for |
| Hermes Agent 1-Hour Course (Nate Herk) | Operator setup walkthrough | Sister surface — Nate’s course is VPS+CLI shaped; Herm is the desktop-TUI shape against the same agent |
Try It
- Smallest commitment:
bunx herm-tui(no install). Trial the TUI against your existing~/.hermes/profile. Compare to your usual CLI workflow. - If you like it, install stable:
bun add -g herm-tuithenherm. Switch between Herm and the CLI freely — both speak the same gateway. - Resume across sessions:
herm -cpicks up where you left off. Useful for operators who don’t keep the terminal open 24/7. - 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.
- Customize keymap: if you came from OpenCode, the default keymap is already opencode-compatible. Otherwise edit via
/keys— fully rebindable. - 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).
Related
- Hermes Agent — topic landing — public Hermes topic surface
- Hermes Console (Obsidian) — sister UI surface for Obsidian-first operators
- Hermes Desktop (macOS) — sister UI surface for Mac-native operators; SSH-direct native SwiftUI app, host stays source of truth
- Hermes Skins (joeynyc) — visual themes that apply inside Herm’s terminal pane
- Hermes Skill Bundles — slash-command skill composition (composable inside Herm’s
skillstab) - Hermes MemoryKit (duclamvan) — memory-routing extension (composable inside Herm’s
memorytab) - Hermes Codex App-Server Runtime — runtime delegation (composable inside whichever frontend hosts Hermes)
- Hermes Agent 1-Hour Course (Nate Herk) — sister operator-setup walkthrough
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
analyticstab 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.