Skip to content

Releases: CliffWade/hermes-desktop-theme-pack

v1.3.0: Themes in your web dashboard

Choose a tag to compare

@CliffWade CliffWade released this 12 Aug 13:36

Hermes Theme Pack v1.3.0

Themes in your web dashboard, plus a hover-card readability overhaul.

The Theme Switcher now lives in hermes dashboard as a full tab, and every
hover surface on the Desktop Themes page is guaranteed readable.

What's new

  • Web dashboard Themes tab: a dashboard plugin bundle (manifest tab +
    IIFE) gives hermes dashboard a Themes tab listing every installed skin
    with one-click apply, reusing the same backend API as the Desktop page.
    Themes group into ☀ Light / ☾ Dark sections with counts and tabs; every
    paired theme shows its twin with a flip button; applying a skin also
    repaints the web dashboard by writing a dashboard-theme YAML from the
    skin's palette and activating it.
  • Full Desktop toolbar in the tab: search (including palette colors
    like "purple" or #7b2d8e), All/Light/Dark tabs with per-polarity counts,
    Follow system (auto twin switch on OS scheme change), category filter,
    Random, and + Add theme (paste-YAML install with the same validation as
    the Desktop page).
  • Truly responsive theme cards: the dashboard grid uses the same fluid
    formula as the Desktop page (repeat(auto-fit, minmax(min(100%, 240px), 1fr))): cards wrap by minimum width at every window size, collapse to a
    single column on narrow panels, and fill the last row. Container queries
    adapt spacing to the tab's actual panel width, with viewport fallbacks for
    small and 4K screens.
  • Desktop-style compact cards: 4px accent bar, tiny 10px swatches,
    whole-card apply, floating swap/copy actions, NEW badge for freshly
    installed themes; layout classes are self-contained with no host Tailwind
    dependency.
  • Hover detail panel: hovering a theme card in the dashboard tab shows
    a right-docked panel with the name, description, accent bar, and up to 12
    labeled color swatches; docs/preview.html ships the same behavior so the
    static gallery matches the live app.
  • Readable themed tooltips: every tooltip on the Desktop Themes page
    now uses the app's themed Tip component (auto-inverting with the theme)
    instead of native title= attributes, which rendered as unreadable
    white-on-pale text.
  • Guaranteed-readable hover preview mockup: the preview panel's mini UI
    mockup clamps every text/background pair to >= 4.5:1 WCAG contrast
    (gamma-corrected luminance), uses the theme's real status-bar colors from
    full_colors, and nudges bubble surfaces until text clears the bar.
    Themes may pair decorative colors however they like; the preview never
    renders unreadable text.
  • Readable panel chrome: polarity tags, twin labels, and descriptions
    moved from the faint tertiary token (54% opacity) to secondary (74%);
    the 8px footer labels demand a 7:1 contrast floor; floating surfaces are
    opaque (the panel and modal no longer let the theme grid bleed through);
    the polarity tag says each word once ("☀ Light", not "Light ☀ light").

Bug fixes

  • Themes restored to the sidebar: a duplicate readableOn declaration
    was a hard SyntaxError under the runtime loader's strict-mode ESM import
    (CJS parsing tolerates duplicates, so node --check missed it). The whole
    plugin was failing to load; a gate test now rejects duplicate module-level
    declarations.
  • Hover panel docked right again: the panel used right-6 top-24
    utility classes that the app's Tailwind purge strips; positioning is now
    inline (right: 24px; top: 96px).
  • Cards respond to window width: replaced the fixed layout with a
    responsive grid (thanks @jdtimothy, #5).
  • Theme Switcher setup docs clarified for Desktop-over-SSH (thanks
    @jdtimothy, #3).

Important

Instant dashboard repaint uses the SDK.theme.apply bridge, which ships on
the hermes-agent fork branch feat/dashboard-theme-apply-sdk. On hosts
without the bridge the tab falls back to a reload hint; a stock hermes update resets main and drops the bridge by design (graceful degradation).

How to get it

  • Desktop plugin: bash install.sh in the repo, or copy
    desktop-plugin/theme-switcher/plugin.js to
    ~/.hermes/desktop-plugins/theme-switcher/ and reload desktop plugins
    (⌘K → "Reload desktop plugins").
  • Dashboard tab: sync plugins/theme-switcher/dashboard/dist/ to the
    running dashboard's plugin directory, or restart hermes dashboard.

Verified

  • 21/21 tests pass (WCAG gate, twin invariants, plugin ESM hygiene, panel
    chrome, opaque surfaces, polarity tag, responsive grid)
  • Strict-ESM parse + loader simulation register the plugin with the sidebar
  • CI green on the release commit

Hermes Theme Pack v1.2.0

Choose a tag to compare

@CliffWade CliffWade released this 10 Aug 21:21

Hermes Theme Pack v1.2.0

CLI/TUI light-dark pairing blocks on every theme — all 100 themes now ship an opposite-polarity palette so the CLI and TUI repaint coherently when the terminal polarity differs from the theme's canvas.

This mirrors the desktop app's colors/darkColors pairing and closes the last gap in cross-surface compatibility: a Hermes skin now themes the CLI, the TUI, and the desktop app identically in both polarities.

What changed

  • All 100 themes gain light_colors (dark themes) or dark_colors (light themes) blocks
  • Derived palettes when a theme has no literal twin — polarity flips, accent hue stays, WCAG contrast re-enforced
  • Literal twins share palettes (ayu, catppuccin, dracula, everforest, github, gruvbox, kanagawa, lcars, lemon, material, nord, one, rosepine, sage, solarized, vanilla, vscode)
  • Community themes get pairing blocks appended without touching hand-authored content
  • Polarity from luminance, not name prefixesminimal-bone (light bg, non-light name) now gets the correct dark pairing
  • New invariant test: every theme carries an opposite-polarity block with banner_text ≥ 4.5:1 against the paired background

Verified

  • 9/9 tests pass
  • Regeneration is idempotent
  • CLI skin engine consumes the pairing blocks natively
  • CI green

v1.1.0 — 100 themes, fully paired

Choose a tag to compare

@CliffWade CliffWade released this 07 Aug 19:24

🎉 100 themes. Perfectly balanced. Fully paired.

The Hermes Theme Pack hits the century mark: 100 curated color themes, exactly 50 light / 50 dark, every single one WCAG contrast-checked and paired with its light/dark twin.

✨ What's new in 1.1.0

  • Every theme has a twin. Click the ⇄ button on any card to flip the same vibe to the opposite polarity — dark to light, light to dark. 50 pairs, 100 themes, zero stragglers.
  • Follow system light/dark. A toggle in the Theme Switcher that auto-applies the active theme's twin when macOS switches appearance. Flip your Mac to dark mode at sunset and the theme follows.
  • 14 new pairs since v1.0.0 — the icons of the developer theme world:
Dark Light
One Dark One Light
Solarized Solarized Light
Gruvbox Gruvbox Light
Tokyo Night Tokyo Day
Catppuccin Mocha Catppuccin Latte
Nord Nord Light
Rosé Pine Rosé Pine Dawn
Kanagawa Wave Kanagawa Lotus
Everforest Everforest Light
Ayu Ayu Light
GitHub Dark GitHub Light
Material Material Light
VSCode Dark+ VSCode Light+
LCARS LCARS Light
Dracula Dracula Light
…plus Cozy Paper, twin themes for the community set, and more

📦 How to get it

git clone https://github.com/CliffWade/hermes-desktop-theme-pack.git
cd hermes-desktop-theme-pack
./install.sh

Then open Themes in the Hermes desktop app sidebar — every skin is there: search (including palette colors like "purple" or #7b2d8e), hover preview, one-click apply, undo, random, install-from-YAML, copy-YAML, statusbar chip, and ⌘K palette entry.

🧪 Quality, enforced

  • Every theme passes the WCAG AA contrast gate (primary text ≥ 6:1, accents ≥ 4.5:1)
  • CI runs the full test suite, validates YAML, checks the generator drift, and syntax-checks the plugin on every commit
  • The twin-pair invariant test refuses to merge a theme without its counterpart

100 down. The next milestone writes itself.

Hermes Theme Pack 1.0.0

Choose a tag to compare

@CliffWade CliffWade released this 03 Aug 22:50

First stable release of the Hermes Theme Pack. 34 themes across 7 categories, every one passing the WCAG AA contrast gate.

Themes

  • 34 themes, 7 categories: Dark, Light, Vibrant, Nature, Minimal, Retro, Community
  • 10 community themes ported from BeardedChop/hermes-skins-pack: vaporwave-mall, stained-glass, shadow-thief, void-sunset, redwood, newsprint-noir, peach-fuzz, slate-mist, steel-thread, warm-ash
  • Every theme passes WCAG AA: primary text 6:1, accents/secondary 4.5:1, enforced by an independent test suite
  • One YAML skin themes the CLI, TUI, and desktop app at once

Theme Switcher desktop plugin

  • Themes page in the app sidebar: every installed skin in one grid with real palettes
  • Light/dark grouping with counts
  • Search by name, description, and palette color ("purple" or #7b2d8e)
  • Hover preview mockup before applying
  • One-click apply, undo, random
  • Install a theme by pasting YAML
  • Statusbar chip showing the active theme
  • ⌘K → "Themes: Open"

Built-in desktop integration

  • Pack themes register into the native Appearance settings, Cmd-K, and /skin via THEMES_AREA
  • Copy YAML button on every user theme card for sharing

Quality & community

  • CI on every PR: YAML validation, WCAG test suite, generator drift check, plugin syntax check
  • CONTRIBUTING.md with the format, contrast contract, and verification walkthrough
  • README count-invariant test keeps the docs honest

Full history: CHANGELOG.md