Skip to content

TsekNet/hermes

Repository files navigation

hermes logo

hermes

Cross-platform web-based notification service. One binary. One web UI. Every platform.

codecov License: MIT GitHub Release


hermes notification

hermes 1 renders system notifications inside a pretty Wails v2 webview instead of platform-specific toasts. Defines configs in JSON or YAML and produces consistent-looking notifications across Linux, macOS, and Windows.

Disclaimer: This was created as a fun side project, not affiliated with any company.

Install

Download from Releases and run the installer:

Platform Install
Windows Execute hermes.msi
Linux sudo dpkg -i hermes.deb
macOS Open hermes.pkg (universal, Intel + Apple Silicon)

Quick start

# Start the service daemon
hermes serve

# Send a notification (blocks until user responds)
hermes notify '{"heading":"Restart Required","message":"Please restart.","buttons":[{"label":"Restart","value":"restart","style":"primary"}]}'

# Or use --config
hermes --config notification.json

# List active notifications
hermes list

# View notification history (inbox)
hermes inbox
hermes inbox --json

# Show a demo notification (no service needed)
hermes demo

Localization

hermes --locale ja --local testdata/localized-restart.json

Local mode (no service)

hermes --local '{"heading":"Test","message":"Quick local test."}'
hermes --local testdata/restart-notification.json

Deferrals

hermes notify '{"heading":"Restart","message":"Please restart.","defer_deadline":"24h","max_defers":3,"buttons":[{"label":"Defer 1h","value":"defer_1h","style":"secondary"},{"label":"Restart","value":"restart","style":"primary"}]}'

The service tracks deferrals per notification, persisted to disk. When the user defers, the notification reappears after the specified interval — even across service restarts. After max_defers or defer_deadline, the notification auto-actions.

Features

Feature Description
Buttons & dropdowns Primary, secondary, danger styles. Dropdown menus for defer options.
Deferrals User can defer N times within a deadline. State persists across restarts.
Image carousel Embed slides/screenshots via HTTPS URLs or data URIs. Arrow key navigation.
Filesystem watch Monitor paths for changes (e.g. wait for install receipt). UI updates live.
Do Not Disturb Detects OS Focus/DND mode. Default: wait and retry. Also: skip or ignore.
Settings URIs url:ms-settings:windowsupdate (Windows), url:x-apple.systempreferences:... (macOS). Platform-filtered at runtime.
Countdown timer Auto-action after timeout. Configurable value returned to calling script.
Inbox / history Completed notifications are persisted. View past actions via hermes inbox (UI or JSON). Auto-pruned by age and count.
Offline queue Service unreachable? Notification is persisted locally and delivered on next startup. Exit 203.
Priority Control delivery order (0-10). Higher priority notifications drain first.
Escalation ladder Progressive urgency after repeated deferrals — shorter timeout, warning color, urgency text.
Action chaining Map user responses to automatic follow-up actions (cmd: or url: prefix).
Quiet hours Time-based delivery suppression. Overnight ranges supported.
Localization heading_localized / message_localized maps + --locale flag for multi-language notifications.
Dependencies Sequential workflows: notification B waits for notification A to complete.
Broadcast Run as SYSTEM/root, auto-delivers to all active user sessions. No wrapper scripts needed.

Why web-based

Native notifications hermes
Look Different on every OS Identical everywhere -- your HTML/CSS
Interactivity Limited (approve/dismiss) Buttons, dropdowns, countdown, links
Branding OS-controlled Fully yours -- colors, layout, fonts
Portability Rewrite per platform Single HTML/CSS/JS, ships in the binary

Documentation

  • Examples -- screenshots of every notification type
  • Usage -- JSON/YAML config, subcommands, flags, exit codes
  • Architecture -- service daemon, gRPC, deployment, packages
  • Broadcast -- SYSTEM/root to user delivery
  • Development -- building, testing, dev workflow
  • Platforms -- webview engines, per-OS deployment

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

License

MIT

Footnotes

  1. Named after Hermes, the Greek messenger god.