From notify
Use when the user asks about push notifications from Claude Code, mentions Pushover/ntfy, reports "I didn't get notified", wants to enable alerts, or when a sibling plugin (kanban, docsync, memory) needs to call `workbench-notify` for cross-plugin integration.
How this skill is triggered — by the user, by Claude, or both
Slash command
/notify:notify-usageThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The `notify` plugin reaches the user through an external channel (v0.1.0: **Pushover**) when Claude Code needs attention. It exists so "AI stalls, user is AFK" stops happening.
The notify plugin reaches the user through an external channel (v0.1.0: Pushover) when Claude Code needs attention. It exists so "AI stalls, user is AFK" stops happening.
notify-config.json. Use ${ENV_VAR} references.throttle_seconds rule field or don't fire at all.workbench-notify. That's the stable surface.Claude Code event → Notification hook → notify-dispatch.py
│
load config
│
match rule
│
providers/pushover.py
│
HTTPS POST
For sibling plugins:
kanban-autocommit.sh → workbench-notify --title … --message … --priority …
│
--cli mode
│
notify-dispatch.py (same path)
Claude Code fires four Notification event types:
| Event | When |
|---|---|
permission_prompt | Claude wants tool permission (--allowedTools didn't whitelist it). |
elicitation_dialog | Claude is asking the user a question via AskUserQuestion. |
idle_prompt | Claude is idle waiting for the next user prompt. |
auth_success | Authentication flow finished. |
The plugin routes each via the rules[] array in notify-config.json. Unmatched events fall back to default_provider at priority 0.
Two files in ~/.claude-workbench/ (outside any project so nothing leaks into git):
notify-config.json — routing rules, provider flags. Uses ${VAR} references for secrets..env — actual token values. Managed by /notify:setup. chmod 600. Auto-loaded by the dispatcher at every invocation.# ~/.claude-workbench/.env — created by /notify:setup, never by hand
PUSHOVER_USER_KEY=u...
PUSHOVER_APP_TOKEN=a...
Do NOT instruct users to export PUSHOVER_* in their shell rc. The .env file handles it. If a user already has shell exports, those still win (process env takes precedence over the file), so nothing breaks for existing setups — but new setups go through .env.
| Command | Use when |
|---|---|
/notify:setup | First-time install, changing provider tokens, re-linking the CLI. |
/notify:test | Verifying config after setup, or debugging "I didn't get a push". |
/notify:config | Showing path + current effective config; editing rules. |
Before invoking, do capability detection:
if command -v workbench-notify >/dev/null 2>&1 && workbench-notify --health >/dev/null 2>&1; then
workbench-notify --title "Kanban" --message "Started: $title" --priority low
fi
--health proves both the CLI is installed AND the config is valid AND a provider is enabled. Using command -v alone is a common mistake — see SPEC §8.7.
Priority guidance for siblings:
| Situation | Priority |
|---|---|
| Informational (task started, doc updated) | low |
| State change user cares about (task completed) | normal |
| Action needed (BLOCKED, decision required, docsync gate fired) | high |
Never use emergency — it requires a Pushover retry/expire pair this plugin doesn't configure | — |
workbench-notify --health. If that's green, check ~/.claude-workbench/logs/notify-failures.log.~/.claude-workbench/state/notify-throttle.json. A rule's throttle_seconds only throttles within (event, provider); rebooting or rm-ing the state file resets the window.${UPPERCASE_VAR}. Lowercase or $VAR forms are left literal, which is usually the bug.npx claudepluginhub kirinchen/claude-workbench --plugin notifyCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.