A Hermes Agent plugin that adds Pushover as a notification platform. Outbound-only — sends push notifications, no inbound message handling.
It also provides opt-in agent lifecycle notifications (finished, questions, errors, approvals, blockers) delivered via Pushover and/or native desktop notifications.
- Network: sends HTTPS POST requests to
https://api.pushover.net/1/messages.json(Pushover's API) with your app token, user key and the notification text. No other network calls, no telemetry. - Notification content: when lifecycle notifications are enabled, excerpts of the agent's replies, questions, errors and terminal commands awaiting approval are sent to Pushover. Use
PUSHOVER_NOTIFY_QUESTION=minimalto send generic messages instead. - Shell commands: runs
notify-sendonly when native notifications are enabled (PUSHOVER_NOTIFY_NATIVE=trueor/notifications enable native). - Files written:
$HERMES_HOME/logs/pushover_hermes_plugin.log(plugin log),$HERMES_HOME/plugin-data/pushover-hermes-plugin/settings.json(enable/disable state saved by/notifications save), and$HERMES_HOME/.env(only when you run the interactive setup wizard). - Background processes: none.
- Python 3.11+
aiohttp >= 3.9, < 4- A Pushover account with an app token and user key
- Optional:
notify-send(libnotify) for native desktop notifications
hermes plugins install lightx/pushover-hermes-plugin --enablegit clone https://github.com/lightx/pushover-hermes-plugin.git
cd pushover-hermes-plugin
hermes plugins install file://$(pwd) --enableThis installs the plugin and enables it in a single step. To install without enabling:
hermes plugins install file://$(pwd) --no-enablehermes plugins list # table: enabled / disabled / not enabled
hermes plugins enable pushover-hermes-plugin # add to allow-list
hermes plugins disable pushover-hermes-plugin # remove from allow-list
hermes plugins update pushover-hermes-plugin # pull latest
hermes plugins remove pushover-hermes-plugin # uninstallUpgrading from 1.0.x: the plugin was renamed from
pushover-platformtopushover-hermes-plugin. Replacepushover-platformwithpushover-hermes-plugininplugins.enabled(config.yaml), otherwise the gateway silently skips the plugin.
After installing, restart the gateway:
hermes gateway restart --system # or: sudo hermes gateway restart --systemexport PUSHOVER_APP_TOKEN=your_app_token # from pushover.net/apps
export PUSHOVER_USER_KEY=your_user_key # from pushover.net front pagegateway:
platforms:
pushover:
enabled: true
api_key: <PUSHOVER_APP_TOKEN>
token: <PUSHOVER_USER_KEY>
extra:
device: "" # optional: restrict to a specific device nameNote: environment variables always take precedence over config.yaml values.
hermes gateway setupSelect Pushover from the platform list. The wizard prompts for your credentials and writes them to ~/.hermes/.env.
Restrict which Pushover user keys can receive notifications:
export PUSHOVER_ALLOWED_USERS=user_key_1,user_key_2 # comma-separated
export PUSHOVER_ALLOW_ALL_USERS=true # disable restrictionOff by default. Enable with:
export PUSHOVER_NOTIFY_ENABLED=true # Pushover lifecycle notifications
export PUSHOVER_NOTIFY_NATIVE=true # native desktop notifications (notify-send)| Variable | Default | Meaning |
|---|---|---|
PUSHOVER_NOTIFY_STATES |
all |
Space-separated subset of finished questions errors pre-approval post-approval blockers, or usual (everything except post-approval) / all |
PUSHOVER_NOTIFY_QUESTION |
full |
Detail level: full, summary, or minimal (no agent text sent) |
PUSHOVER_NOTIFY_DEVICE |
— | Restrict lifecycle notifications to one Pushover device |
blockers covers blocked kanban tasks and, on Hermes releases newer than v0.21.5, the masked sudo password prompt (the command will time out if nobody answers). On older releases the sudo alert is silently unavailable.
Hooks used: post_llm_call, pre_approval_request, post_approval_response, pre_tool_call, post_tool_call, on_human_input_request.
/notifications status show current state
/notifications test pushover|native send a test notification
/notifications enable pushover|native turn a channel on
/notifications disable pushover|native turn a channel off
/notifications save persist enable/disable state across restarts
Plugin logs are written to ~/.hermes/logs/pushover_hermes_plugin.log.
The log level defaults to logging.level from ~/.hermes/config.yaml:
logging:
level: DEBUG # inherited by pushover pluginTo override only for this plugin (useful for verbose debug without affecting other logs):
export PUSHOVER_LOG_LEVEL=DEBUGAfter changing the log level, restart the gateway:
hermes gateway restart --system- Messages are truncated to 1024 characters (Pushover API limit)
- Images are sent as a text message containing the URL and caption
metadata["title"]is forwarded as the notification title when presentPUSHOVER_HOME_CHANNEL(defaults toPUSHOVER_USER_KEY) is the home channel forsend_message(target="pushover"),hermes send -t pushoverand crondeliver=pushover;pushover:<user-or-group-key>targets a specific key- Fire-and-forget — no reply handling
Lifecycle notifications, native notifications, the /notifications command, setup wizard and CI were contributed by Cosmin Diaconu.
MIT — provided as-is, no warranty.