Source: joeynyc-hermes-skins-readme-2026-05-22.md — full README.md verbatim, fetched 2026-05-22. Repo: github.com/joeynyc/hermes-skins. Stars: 380. License: MIT. Language: Python. Upstream agent: NousResearch/hermes-agent. Author: joeynyc (community, not affiliated with Nous Research).

Community-curated visual-theme bundle for the Hermes CLI agent. 15 custom skins (Pirate, Vault-Tec, Bubblegum 80s, Skynet, Lain, Neonwave, Sakura, Netrunner, Mythos, Nous, Mother, DOS, Telemate, Empire, Catppuccin) plus reference documentation for the 7 built-in skins shipped with Hermes itself (default, ares, mono, slate, poseidon, sisyphus, charizard). Skins control visual presentation only — banner colors, spinner faces/verbs, response-box labels, branding text, tool-activity prefix, ASCII art banners. “They don’t affect personality or behavior — just how things look.” YAML config under ~/.hermes/skins/<name>.yaml with default-skin inheritance (any unset value cascades from default, so partial skins work fine; unknown skin names silently fall back to default). Activation: /skin <name> (session) or display: skin: <name> in ~/.hermes/config.yaml (permanent). 28 configurable color keys per skin per the project’s SCHEMA.md.

What’s in the bundle

15 custom skins added by joeynyc:

SkinOne-lineVisual register
PirateBlack-and-white pirate flag, Jolly Roger braille artMono on black
Vault-TecFallout retro-future — green phosphor CRT on blackGreen-on-black CRT
Bubblegum 80s1980s bubblegum — bright pastels + neon accentsPastel/neon
SkynetCyberdyne Systems military AI, glowing-eye pyramidRed-to-white gradient
LainSerial Experiments Lain NAVI computer, Wired protocolPink-to-white
NeonwaveSynthwave perspective grid, retro-futurePink-to-cyan
SakuraCherry-blossom tree with falling petalsSoft pinks + whites
NetrunnerCyberpunk netrunner, skull + neural connectionCyan ICE-breaking on black
MythosAGI meets Greek mythology, Eye of ProvidenceGreek blue + gold
NousNous Research tribute, anime mascot, brand color #DD8E35Warm amber + gold
MotherWeyland-Yutani MU-TH-UR 6000 + HAL 9000 lensAmber CRT phosphor
DOSMS-DOS Norton Commander dual-pane file managerEGA 16-color cyan/yellow/white
TelemateDOS BBS terminal v4.2x — ATDT dial, CONNECT 57600Cyan status bar, modem-era
EmpireDeath Star firing-control console, targeting gridImperial red + ash gray + starfield
CatppuccinCatppuccin Mocha, peeking ASCII cat, kaomoji spinnersMauve/pink/peach/lavender on dark

7 built-in skins (already in every Hermes install — README documents them for reference): default (gold + kawaii), ares (crimson + bronze war-god), mono (grayscale monochrome), slate (developer-focused cool blue), poseidon (deep blue + seafoam), sisyphus (austere grayscale with persistence), charizard (burnt orange + ember volcanic).

Each custom skin ships with: a <name>.yaml config file, a screenshots/<name>.png preview, and uses the same 28-color-key schema documented in the repo’s SCHEMA.md.

Install + activate

# 1. Clone (or curl individual skins):
git clone https://github.com/joeynyc/hermes-skins ~/Downloads/hermes-skins
mkdir -p ~/.hermes/skins
cp ~/Downloads/hermes-skins/skins/*.yaml ~/.hermes/skins/
 
# 2. Activate session-only:
/skin pirate
 
# 3. Or persist across sessions — add to ~/.hermes/config.yaml:
#   display:
#     skin: pirate

User skins at ~/.hermes/skins/ take priority over built-ins. The Hermes skin engine merges your skin on top of default, so partial skins work — you only need to define keys you want to change.

Key Takeaways

  • Visual-only — strictly cosmetic. The README’s framing makes this an explicit contract: skins do not modify Hermes Agent personality, behavior, memory tier, skill loading, or any agent-loop primitive. Compare against Hermes Skill Bundles (which DO modify behavior via slash-command-driven skill composition). The two extension surfaces are orthogonal: bundles = behavior, skins = appearance.
  • 22 skins total, but only 15 are net-new. 7 of the 22 are built-ins already in every Hermes install — the README’s “Built-in” table documents them for completeness so users know which /skin names will work out-of-the-box vs require copying a .yaml into ~/.hermes/skins/. The bundle’s net-new contribution is the 15 customs.
  • Default-skin inheritance is the load-bearing primitive. “Missing values inherit from the default skin, so you only need to define what you want to change.” That decision is what makes the schema (28 color keys + spinner + branding) ergonomic — a 5-line YAML override is enough to ship a working skin. The full schema only matters when building a complete dark theme that needs status_bar_* and completion_menu_* keys defined (README explicitly flags: dark skins that omit those get mismatched colors from the default theme).
  • Unknown skin names silently fall back — no error. Quoting the README: “Unknown skin names silently fall back to default.” Operator implication: typo in /skin <name> won’t fail loudly; you’ll just see the default theme. The validation tooling (validate_skins.py) is the right surface for catching typos before runtime.
  • Brand-aware aesthetic library. Several skins are direct brand homages — Nous mirrors Nous Research’s #DD8E35 brand color and ships an anime-mascot ASCII art, Mythos uses the Eye of Providence + Prometheus Labs branding (referencing the broader OpenClaw/Anthropic AGI vocabulary), Empire uses canon Imperial red #C8102E. The skin library is implicitly a community-curated visual vocabulary for the Hermes ecosystem.
  • Two complementary install pathways. Session-only /skin <name> is appropriate for trying themes (“show me the empire one”); the persistent display: skin: in ~/.hermes/config.yaml is the operator’s daily-driver. The README’s example uses pirate for both — useful as a smoke test that the install path landed correctly.
  • Python tooling is small but useful. Two scripts: validate_skins.py (schema validation against SCHEMA.md) and generate_screenshots.py (regenerate previews from updated YAML). The latter is the contribution gate — PRs must include a generated screenshot. Implication: any operator iterating on their own skin can use the generator to produce a sharable preview without screenshotting their terminal manually.
  • Low star count is structural, not signal-of-quality. 380 stars at fetch — modest by GitHub standards but high signal-to-noise for a hermes-agent-specific surface. The upstream NousResearch/hermes-agent is the gating distribution; skin libraries downstream of any single agent’s CLI naturally cap at a small fraction of that. Compare against Hermes Skill Bundles (a behavior-side primitive that ships with Hermes itself — broader audience by definition).
  • Adjacent to the frontend-slides plugin’s preset-bank thesis. Both projects converge on the same operator pattern — a curated bank of visual presets, opinionated about aesthetics, with low-friction switching. Skin discovery is easier (single slash command) than slides-preset discovery; both ship with a “default” the rest are diffed against.
  • Community, not Nous Research first-party. Author joeynyc is a community contributor; the project is not Nous Research’s. The upstream Hermes agent is Nous Research’s. If you’re tracking what Nous officially ships, this bundle is downstream — but it’s the canonical community visual-theme registry at ingest time (there isn’t a competing fork with comparable coverage).

Where this fits

Topic surfaceDescriptionRelationship
Hermes Agent topic landingPublic landing page, course material, security model, user storiesSkins is a new operator-side surface added here
Hermes Skill BundlesBehavior-side primitive — slash-command-driven skill compositionOrthogonal: bundles = behavior, skins = appearance
Hermes Security ModelDefense-in-depth platform securityUnrelated: skins don’t touch credential / sandbox / dangerous-command pathways
Hermes Codex App-Server RuntimeRuntime delegation to Codex CLI for openai/* turnsUnrelated runtime concern — skins apply regardless of which runtime is active
Nate Herk’s Hermes 1-Hour CourseOperator walkthrough — install, Telegram, cronsCompanion surface — install Hermes per the course, then layer skins on top
Hermes User StoriesCatalog of real-world Hermes deploymentsOperator personalization — skins customize the terminal-side surface that operators see daily
Hermes v0.14.0Release notes / changelogSkin engine is in skin_engine.py per the repo’s “How Skins Work” section
frontend-slides pluginCurated visual preset bank for HTML slide decksSame operator pattern at a different surface — preset bank, opinionated aesthetics, low-friction switching

Try It

  1. Smallest install (one Hermes session): git clone https://github.com/joeynyc/hermes-skins ~/Downloads/hermes-skins && mkdir -p ~/.hermes/skins && cp ~/Downloads/hermes-skins/skins/*.yaml ~/.hermes/skins/ then /skin pirate from inside a Hermes session. Cycle through /skin vault-tec, /skin sakura, /skin nous to compare before picking one to persist.
  2. Persist your daily driver: once you’ve picked a favorite, edit ~/.hermes/config.yaml and add display:\n skin: <name>. Restart Hermes — the skin loads on every session now.
  3. Customize an existing skin: copy any .yaml to ~/.hermes/skins/<your-name>.yaml, edit the name: field to match the filename, tweak only the keys you want to change. The unset keys inherit from default automatically.
  4. Author your own: start with the README’s 5-line cyberpunk example, layer in a banner ASCII art (braille art is the project’s house style), then run python3 generate_screenshots.py from a clone to regenerate the preview. If you ship it as a PR, the contribution gate requires defining all 28 color keys (per SCHEMA.md) + the generated screenshot.
  5. For dark themes: explicitly define status_bar_* and completion_menu_* color keys. The README flags this as the most common dark-skin contributor pitfall — omit them and you’ll get mismatched colors from the default (light-ish) theme.
  6. Sanity-check your install: the project ships validate_skins.py — run it against ~/.hermes/skins/ before reporting “the skin doesn’t work.” Unknown skin names silently fall back to default, so a validation failure is the only way to catch typos in name: keys vs filenames.

Open Questions

  • Did Nous Research bless any of these as the “official” community skin library? The README cross-links to NousResearch/hermes-agent but doesn’t claim official endorsement. Worth checking the Nous discord / hermes-agent README for any community-skin pointers.
  • Skin marketplace via Browse.sh? The 2026-05-21 wiki note on the Hermes Browse.sh integration mentions a runtime skill hub for installable browser skills. Is there an equivalent surface emerging for visual themes — a one-command hermes skins install <name> instead of git-clone-and-copy? Not yet, but the integration model is there.
  • Schema versioning. If Hermes adds a new color key in a future release, partial skins from this bundle inherit the default for the new key — no breakage. But fully-defined skins (all 28 keys) would need updating to use the new key. No versioning policy is documented; worth tracking on future Hermes releases (e.g., does v0.15.0 break any of these skins?).
  • Conflict with default-skin precedence rules. The README says user skins take priority over built-ins. What happens if a user-skin filename collides with a built-in name (e.g., user creates ~/.hermes/skins/default.yaml)? Probably overrides built-in default — but the consequence is that every unspecified skin then inherits from the user’s override. Not documented; potentially surprising.
  • The Mythos skin’s Prometheus Labs branding. Mythos uses “Prometheus Labs” branding and Eye of Providence imagery — references the Mythos OpenBSD demo aesthetic family. Coincidence or homage? Worth noting if anyone external misreads the skin as “official Mythos branding.”