Catalog
NousResearch/hermes-themes

NousResearch

hermes-themes

Author a Hermes color theme that skins every surface.

global
New~1.7k
v1.0Saved Jul 22, 2026

Hermes Themes Skill

Author a Hermes skin — one YAML file that themes the CLI, the TUI, and the desktop GUI at once. The skin engine (hermes_cli/skin_engine.py) resolves the active skin and the gateway pushes it to every surface, so a file dropped in ~/.hermes/skins/ is the theme analogue of a plugin: no code, all surfaces. This skill covers writing a good skin and activating it; it does not build GUI theme editors or ship built-in presets.

When to Use

  • The user asks for a custom look ("make me a synthwave theme", "dark forest vibes", "match my brand colors") for Hermes itself.
  • The user wants the CLI/TUI/desktop to share one coordinated palette.
  • The user wants to iterate live ("that coral is too loud, make it teal") — edit the active skin's YAML and every surface repaints as your tool finishes.

Prerequisites

  • Write access to the Hermes home dir — ~/.hermes by default, or $HERMES_HOME / the active profile's dir. Skins live in <hermes-home>/skins/.
  • Native tools: write_file (create the YAML), read_file / search_files (inspect existing skins), terminal (activate via hermes config set).

How to Run

  1. Pick a lowercase, hyphen-safe name (e.g. synthwave).
  2. Copy templates/skin.yaml and fill in the palette (keep every key — missing keys inherit the default skin).
  3. write_file it to <hermes-home>/skins/<name>.yaml.
  4. Activate it (see Procedure). Confirm the change landed.

Quick Reference — element → key

Hex (#rrggbb). Theming is semantic: one key colors every element that plays that role, so match the element to its key. To recolor a specific element, set the key in its row (element-specific keys fall back to the shared one when unset).

Visible element Key to set Falls back to
App background (whole TUI + GUI) background terminal default
Tool-call marker (, tool spinner) ui_tool ui_accent
Thinking / reasoning text ui_thinking banner_dim
Accent — headings, links, chevrons, Σ ui_accent / banner_accent
Heading / primary text banner_title / ui_primary
Body / label text, user messages ui_text / banner_text, ui_label
Muted / secondary, tree connectors banner_dim
Borders, rules, gutters ui_border / banner_border
Prompt symbol color prompt banner_text
Success / warn / error ui_ok / ui_warn / ui_error
Status bar text + usage status_bar_text, status_bar_good/warn/bad/critical
Diff add/remove (line + word) diff_added / diff_removed / diff_added_word / diff_removed_word built-in
Code syntax (string/number/keyword/comment) syntax_string / syntax_number / syntax_keyword / syntax_comment accent/text/border/muted
Completion menu completion_menu_bg / completion_menu_current_bg / …_meta_bg

Note the sharing: ui_accent colors tool markers and headings/links/chevrons, so to recolor only tool calls (the classic "change the gold ") set ui_tool. branding (agent_name, prompt_symbol, welcome, goodbye, help_header), spinner, and tool_prefix are optional flavor; full schema in hermes_cli/skin_engine.py.

Procedure

  1. Design the palette. Choose a background first, then an ui_accent that clears WCAG AA against it (~4.5:1) so labels stay legible — the GUI enforces contrast but a low-contrast accent still looks washed out. Keep ui_ok/ui_warn/ui_error recognizably green/amber/red.
  2. Write the file to <hermes-home>/skins/<name>.yaml. Every top-level colors key from the template should be present.
  3. Apply it yourself — never hand-edit config.yaml. Run the safe writer via terminal:
    hermes config set display.skin <name>
    
    The gateway's skin watcher notices the change and repaints every surface live within ~a second — CLI, TUI, and desktop — and the skin appears in Appearance / Cmd-K / /skin. You apply it; do NOT tell the user to run /skin (they still can, but it's your job). The writer emits valid YAML — a hand-edit can corrupt the file and break the live gateway (including /).
  4. Confirm the new look landed and tell the user how to revert: run hermes config set display.skin default (or they can /skin default).

Tweak the active look (change one thing)

When the user wants to adjust the CURRENT look ("make the tool cyan", "warmer background"), use the one deterministic command — it edits the ACTIVE skin's ONE key in place, so everything else (background included) is untouched:

hermes skin set <key> <hex>      # e.g. hermes skin set ui_tool "#00FFFF"

It edits the active skin's file (a built-in is forked into an editable copy that keeps its full palette), the watcher repaints live, and nothing else moves. Do NOT hand-write a new skin from default for a tweak — that drops the current palette and resets the background. hermes skin set background "#08201f" changes only the background; hermes skin use <name> / hermes skin list switch and enumerate.

Pitfalls

  • Don't hardcode ~/.hermes when a profile is active — resolve the real home from $HERMES_HOME first, falling back to ~/.hermes.
  • Keep #rrggbb hex. Shorthand #rgb, rgb(), and named colors are not guaranteed to parse on every surface.
  • Set background. Without it the GUI has to guess a base surface from text luminance — usable, but you lose control of the app background.
  • Name collisions: a skin named like a desktop built-in (mono, slate, cyberpunk, nous, midnight, ember) won't override that built-in on the GUI. Pick a fresh name.
  • Never hand-edit config.yaml to activate. Use hermes config set display.skin <name> — a stray indent in a manual edit corrupts the file and can break the live gateway (including /). One command, always valid.
  • You apply it, not the user. hermes config set display.skin <name> is enough — the gateway's watcher repaints every surface within ~a second. Don't defer to "type /skin yourself"; that's the old behavior.
  • To change one color, edit the ACTIVE skin — never fork default. Forking default for a tweak drops the current palette: a skin with no background resets the terminal to its own default (often black). Patch the active skin's file in place so background and everything else survive.

Verification

  • read_file the written <hermes-home>/skins/<name>.yaml and confirm valid YAML with the intended name and colors.
  • Run hermes config get display.skin and confirm it reports <name>.
  • The repaint lands as this turn ends — ask the user to confirm the new look.
Files2
2 files · 2.4 KB

Select a file to preview

Overall Score

87/100

Grade

A

Excellent

Safety

92

Quality

86

Clarity

90

Completeness

78

Summary

A skill for authoring Hermes color themes (skins) that uniformly theme the CLI, TUI, and desktop GUI. It guides users to write a YAML configuration file, drop it in the Hermes home directory, and activate it via a safe config writer command. The skill emphasizes semantic theming (one key colors all matching elements), provides a detailed element-to-key mapping table, and includes strict procedures to avoid configuration corruption.

Detected Capabilities

file write (YAML theme files)file read (inspect existing skins, config)terminal command execution (hermes config set, hermes skin set)semantic color theming and validation

Trigger Keywords

Phrases that MCP clients use to match this skill to user intent.

custom theme hermescolor skin designcli appearance customizeunified gui themesynthwave color palette

Use Cases

  • Create a custom branded color theme for Hermes CLI/TUI/GUI
  • Implement a synthwave, dark mode, or high-contrast skin
  • Coordinate a unified color palette across all Hermes surfaces
  • Iterate live on theme colors with immediate visual feedback
  • Match Hermes appearance to organizational branding guidelines

Quality Notes

  • Exceptional clarity: element-to-key mapping table is precise and well-documented, with explicit fallback chains
  • Strong safety practices: explicit warning against hand-editing config.yaml, with justification (corruption risk)
  • Comprehensive pitfalls section addresses common mistakes (hardcoded paths, hex format, name collisions, user role clarity)
  • Live-reload architecture well-explained: users see changes within ~1 second across all surfaces
  • Verification steps are concrete: read YAML, check config, confirm visual change
  • Good emphasis on profile awareness: correctly handles $HERMES_HOME vs ~/.hermes
  • Template file is complete and minimal: provides working example (synthwave) without over-specification
  • Procedure is deterministic: three explicit steps (design → write → apply) with no ambiguity
  • Tweaking workflow (hermes skin set) is clearly distinguished from initial setup
  • One minor clarity gap: 'branding' and 'spinner' keys mentioned as optional but not shown in template values beyond comment
Model: claude-haiku-4-5-20251001Analyzed: Jul 22, 2026

Reviews

Add this skill to your library to leave a review.

No reviews yet

Be the first to share your experience.

Use NousResearch/hermes-themes in your dev environment

Command Palette

Search for a command to run...