| name | hermes-skins-customization |
| description | Create and apply custom visual themes (skins) for the Hermes CLI agent, including colors, ASCII art, spinners, and branding. |
| triggers | ["customize Hermes appearance","create a Hermes skin","change Hermes theme","apply custom Hermes colors","make a new Hermes visual theme","style the Hermes CLI","design Hermes ASCII banner","modify Hermes spinner text"] |
Hermes Skins Customization
Skill by ara.so — Hermes Skills collection.
Custom visual themes for the Hermes CLI agent. Skins control banner colors, ASCII art, spinner text, response labels, and branding — not behavior or personality.
Installation
git clone https://github.com/joeynyc/hermes-skins.git
cd hermes-skins
mkdir -p ~/.hermes/skins
cp skins/*.yaml ~/.hermes/skins/
Quick Start
Apply a Skin
/skin pirate
echo "display:
skin: pirate" >> ~/.hermes/config.yaml
Browse Available Skins
Check ~/.hermes/skins/ or the repository's skins/ directory:
- pirate — Jolly Roger skull-and-crossbones
- vault-tec — Fallout green CRT terminal
- bubblegum-80s — Neon pastels and radical vibes
- skynet — Cyberdyne red military AI
- lain — Serial Experiments Lain NAVI aesthetic
- neonwave — Synthwave grid horizon
- sakura — Cherry blossom tree
- netrunner — Cyberpunk neural interface
- mythos — Eye of Providence Greek mythology
- nous — Nous Research amber and gold
- mother — Weyland-Yutani MU-TH-UR 6000
- dos — Norton Commander dual-pane
- telemate — DOS BBS terminal
- empire — Death Star targeting console
- catppuccin — Mocha pastels with ASCII cat
Built-in skins: default, ares, mono, slate, poseidon, sisyphus, charizard
Creating a Custom Skin
Minimal Skin Example
Create ~/.hermes/skins/cyberpunk.yaml:
name: cyberpunk
description: Neon terminal theme with magenta and cyan accents
colors:
banner_border: "#FF00FF"
banner_title: "#00FFFF"
banner_accent: "#FF1493"
prompt: "#FF00FF"
user_input: "#00FFFF"
response_box_border: "#FF00FF"
response_label_text: "#000000"
response_label_bg: "#00FFFF"
spinner:
thinking_verbs: ["jacking in", "decrypting", "uploading", "syncing neural net"]
branding:
agent_name: "CYBERDECK AI"
response_label: " ⚡ NETRUN "
prompt_symbol: "▶ "
Note: Undefined keys inherit from the default skin.
Full Skin Example
For production skins, define all 28 color keys to avoid mismatched defaults:
name: neon-city
description: Full cyberpunk theme with neon blues and hot pinks
colors:
banner_border: "#FF006E"
banner_title: "#00F5FF"
banner_accent: "#FFBE0B"
banner_subtitle: "#8338EC"
banner_meta: "#FB5607"
prompt: "#FF006E"
user_input: "#00F5FF"
response_box_border: "#FF006E"
response_label_text: "#000000"
response_label_bg: "#00F5FF"
response_text: "#FFFFFF"
tool_prefix: "#FFBE0B"
tool_name: "#8338EC"
tool_details: "#FB5607"
info: "#00F5FF"
warning: "#FFBE0B"
error: "#FF006E"
success: "#3A86FF"
[, , , ]
Configuration Reference
Color Keys (All 28)
Banner Section
banner_border — Border characters
banner_title — Main title text
banner_accent — Accent elements
banner_subtitle — Subtitle text
banner_meta — Version/meta info
Prompt Section
prompt — Prompt symbol color
user_input — User-typed text
Response Section
response_box_border — Response box border
response_label_text — Label text color
response_label_bg — Label background
response_text — Response content
Tool Activity
tool_prefix — Tool prefix icon
tool_name — Tool name
tool_details — Tool details/args
System Messages
info — Info messages
warning — Warning messages
error — Error messages
success — Success messages
Interactive UI
status_bar_bg — Status bar background
status_bar_text — Status bar text
status_bar_highlight — Status bar highlights
completion_menu_bg — Autocomplete menu background
completion_menu_text — Menu text
completion_menu_selected_bg — Selected item background
completion_menu_selected_text — Selected item text
completion_menu_border — Menu border
Banner Art
Use multiline strings with braille Unicode (⠀⠁⠂...⣿) or ASCII art:
banner:
art: |
╔════════════════════════════════╗
║ █████╗ ██╗ ║
║ ██╔══██╗██║ ║
║ ███████║██║ ║
║ ██╔══██║██║ ║
║ ██║ ██║██║ ║
║ ╚═╝ ╚═╝╚═╝ ║
╚════════════════════════════════╝
Spinner Configuration
spinner:
faces: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]
thinking_verbs:
- "processing"
- "analyzing"
- "computing"
- "calculating"
- "synthesizing"
Branding Text
branding:
agent_name: "MY AI ASSISTANT"
welcome_message: "System initialized. Ready for input."
goodbye_message: "Shutting down. Goodbye."
prompt_symbol: "➜ "
response_label: " RESPONSE "
tool_activity_prefix: "→ Tool:"
Common Patterns
Dark Theme Template
name: my-dark-theme
description: High-contrast dark theme
colors:
banner_border: "#00FF00"
banner_title: "#FFFFFF"
banner_accent: "#00FF00"
banner_subtitle: "#AAAAAA"
banner_meta: "#666666"
prompt: "#00FF00"
user_input: "#FFFFFF"
response_box_border: "#00FF00"
response_label_text: "#000000"
response_label_bg: "#00FF00"
response_text: "#E0E0E0"
tool_prefix: "#00FF00"
tool_name: "#FFFF00"
tool_details: "#CCCCCC"
info: "#00AAFF"
warning: "#FFAA00"
error: "#FF0000"
success: "#00FF00"
status_bar_bg: "#1A1A1A"
status_bar_text: "#00FF00"
status_bar_highlight: "#FFFFFF"
completion_menu_bg: "#2A2A2A"
completion_menu_text: "#E0E0E0"
completion_menu_selected_bg:
Retro CRT Terminal
name: retro-crt
description: Amber phosphor CRT terminal
colors:
banner_border: "#FFAA00"
banner_title: "#FFCC44"
banner_accent: "#FFAA00"
banner_subtitle: "#CC8800"
banner_meta: "#AA6600"
prompt: "#FFAA00"
user_input: "#FFCC44"
response_box_border: "#FFAA00"
response_label_text: "#000000"
response_label_bg: "#FFAA00"
response_text: "#FFCC44"
tool_prefix: "#FFAA00"
tool_name: "#FFCC44"
tool_details: "#CC8800"
info: "#FFCC44"
warning: "#FFAA00"
error: "#FF6600"
success: "#FFDD66"
status_bar_bg: "#000000"
status_bar_text: "#FFAA00"
status_bar_highlight: "#FFCC44"
completion_menu_bg: "#1A0A00"
completion_menu_text: "#FFCC44"
[, , , ]
[, , ]
Minimal Monochrome
name: minimal-mono
description: Clean grayscale aesthetic
colors:
banner_border: "#FFFFFF"
banner_title: "#FFFFFF"
banner_accent: "#CCCCCC"
banner_subtitle: "#AAAAAA"
banner_meta: "#888888"
prompt: "#FFFFFF"
user_input: "#EEEEEE"
response_box_border: "#CCCCCC"
response_label_text: "#000000"
response_label_bg: "#FFFFFF"
response_text: "#DDDDDD"
tool_prefix: "#CCCCCC"
tool_name: "#FFFFFF"
tool_details: "#AAAAAA"
info: "#BBBBBB"
warning: "#CCCCCC"
error: "#FFFFFF"
success: "#AAAAAA"
status_bar_bg: "#1A1A1A"
status_bar_text: "#CCCCCC"
status_bar_highlight: "#FFFFFF"
completion_menu_bg: "#2A2A2A"
completion_menu_text: "#CCCCCC"
completion_menu_selected_bg:
[, , , ]
[, , ]
Skin Loading Order
Hermes loads skins with this priority:
~/.hermes/skins/<name>.yaml (user custom)
- Built-in skins in
skin_engine.py
default skin (fallback)
Missing values inherit from default. Unknown skin names silently fall back to default.
Troubleshooting
Skin Not Loading
ls -la ~/.hermes/skins/
cat ~/.hermes/skins/myskin.yaml | grep "^name:"
python3 -c "import yaml; yaml.safe_load(open('~/.hermes/skins/myskin.yaml'))"
Colors Not Applying
- Define all 28 color keys — partial definitions inherit mismatched defaults
- Use hex format
#RRGGBB (6 digits)
- Test in a terminal with true color support
ASCII Art Rendering Issues
banner:
art: |
Line 1
Line 2
Line 3
banner:
art: "Line 1\nLine 2"
Spinner Not Changing
/skin reload
Testing Your Skin
hermes --skin myskin
/skin myskin
Generate Screenshots
If contributing to the repository:
cd hermes-skins
python3 generate_screenshots.py
Best Practices
- Always define all 28 colors for production skins
- Test ASCII art with different terminal widths
- Use descriptive thinking verbs that match the theme
- Keep branding text concise — long labels break layouts
- Validate YAML syntax before submitting PRs
- Include a description in the YAML and README
Resources