"Verify the desktop-notification hook's runtime prerequisites and per-OS channel configuration for this machine. Use when: 'set up desktop-notification', 'configure desktop-notification', 'is desktop-notification working', notifications silently aren't firing, or the hook reported a missing prerequisite. Actions: check (read-only verification, default) | apply (resolve what check found). Re-runnable and safe."
Install
npx skillscat add melodic-software/claude-code-plugins/plugins-desktop-notification-skills-setup Install via the SkillsCat registry.
This skill verifies the desktop-notification hook's runtime prerequisites and per-OS channel configuration by reading the hook scripts and running system probes, reporting results as a PASS/FAIL/INFO table. It solves the problem of notifications silently failing due to missing dependencies or misconfiguration. Use it when setting up, configuring, or troubleshooting desktop notifications, particularly when the hook reports missing prerequisites.
Purpose
Thin check-centric setup per the uniform contract: check inspects and reports, apply
resolves. This plugin owns no consumer-project configuration — the only tunables are the
four native userConfig toggles (master + one per channel), and every remaining
prerequisite is a system tool or an OS package. So apply is pure guidance-and-verify
with no write path: it installs nothing and edits nothing.
Action routing: no argument or check runs the check; apply runs the check first, then
offers the resolution for each finding. Both are non-interactive — never prompt when the
action is given.
check (read-only)
The hook scripts are the single source of truth for what they require and how they degrade:${CLAUDE_PLUGIN_ROOT}/hooks/desktop-notification.sh and the shared${CLAUDE_PLUGIN_ROOT}/hooks/hook-utils.sh. Read them first — probe what they actually
do, don't recite this file. Then run each probe via Bash and report a PASS/FAIL/INFO table
with one remediation line per FAIL. Do not modify anything.
When the plugin's toggle is disabled, every prerequisite absence downgrades from FAIL to
INFO — the hook exits through its enabled-gate before probing anything, so a deliberately
disabled plugin is not broken. Report the probes informationally and note that re-enabling
restores the FAIL semantics.
- Bash version — check
${BASH_VERSION}against the hook's documented floor (README
Requirements: Bash 3.2+). INFO when below 5.0:EPOCHREALTIMEis unset there, so the
opt-in telemetry envelope is skipped while notifications still fire — a degrade, not a
failure. jq—command -v jq. FAIL if absent: without it the hook can neither classify the
notification nor emit its terminal sequence, so it surfaces a once-per-sessionsystemMessagenotice and drops every notification for the session.- Per-OS
os_toastdependency — detect the current OS family withuname -sand probe
ONLY that family's requirement (the hook'scase "$(uname -s)"does exactly this):- Linux —
command -v notify-send(libnotify). FAIL only if theos_toastchannel is
enabled and it is absent; otherwise INFO. Absent → theos_toastchannel is a
documented silent no-op; remediation is the README's install hint (libnotify-binon
Debian/Ubuntu,libnotifyon Fedora). The terminal channels are unaffected. - macOS (Darwin) — INFO:
osascriptis built-in, no dependency. Note the first toast
prompts to allow notifications for the terminal app. - Windows / other — INFO: the hook has no
os_toastbranch on this platform (a
fire-and-forget process leaves no live activator host for a WinRT toast). Theterminal_notifyOSC 9 channel carries attention here; nothing to install.
- Linux —
- Channel toggles — report the effective value of all four native booleans (unexpanded
or empty means the defaulttrue): master${user_config.desktop_notification_enabled},${user_config.desktop_notification_bell_enabled},${user_config.desktop_notification_terminal_notify_enabled}, and${user_config.desktop_notification_os_toast_enabled}. Call out when the master toggle is
off (the whole hook is muted) or when the only channel that would fire on this OS is
disabled. - Hook registration — INFO: confirm the plugin is enabled for this project
(/plugin→ Installed) rather than parsing settings files.
apply (idempotent)
Run check, then for each FAIL or actionable INFO offer the resolution — this skill installs
nothing and writes nothing, so every remediation is a pointer the user acts on:
- missing
jq/ old Bash — the platform install instructions from the README Requirements
section. This skill never installs system packages. - missing
notify-send(Linux,os_toastenabled) —sudo apt install libnotify-bin
(Debian/Ubuntu) orsudo dnf install libnotify(Fedora), per the README's per-OS table.
Guidance only — the user runs it. - a toggle is off — direct to
/plugin configure desktop-notification(interactive,
any time). Headless:--configonly applies on a fresh install (ignored once
installed), so reconfigure viaclaude plugin uninstall desktop-notification -s <scope>thenclaude plugin install desktop-notification@<marketplace> -s <scope> --config <key>=true.
Both commands default to-s user— pass the install scopeclaude plugin listreports for
this plugin, and run from that project's directory for aproject/localscope. Defaulting
instead uninstalls a separate user-scope record while the effective install stays in place, so
the reinstall lands at a scope that does not load. Uninstalling also drops the storedpluginConfigsentry, so the reinstall must re-supply every one of the four toggles whose
value should stay non-default, not only the one being flipped; record the current values before
uninstalling, because afterwards there is nothing left to read them from. These options are
personaluserConfigvalues, so this skill never writes user settings orpluginConfigs.
After the user reports acting on any system-tool remediation, re-run the relevant check
probe and report its actual result — never claim resolved on the user's say-so alone.
Re-running apply when everything already passes changes nothing and reports "already
configured".
What this skill does NOT do
- Install
jq,libnotify, or any system package, and never writes user settings orpluginConfigs—applyis guidance-and-verify with no write path. - Fire a notification — a
permission_promptoridle_promptexercises the hook end-to-end. - Modify the plugin cache or the hook scripts.