windows-toast-notify

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

Hermes Agent 在 CLI 模式下,当需要用户回答问题(clarify)或批准危险命令(approval)时,默认只在终端内弹出模态面板。如果用户切屏做别的事,可能长时间不知道 Agent 在等自己。 本技能通过 Windows 原生 toast 通知解决这一问题——每当 Agent 调用 clarify 或触发 approval 时,桌面右下角自动弹出通知,附带提示音。

一句话选型结论

按资料字段整理

windows-toast-notify是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_088ddb4f/windows-toast-notify
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_088ddb4f仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791625181
正文体量7.6 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
windows-toast-notify当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

7.6 KB
模型实际读到的说明书原文,来自技能仓库

Windows Toast Notify for Hermes CLI

Fire a Windows toast notification when Hermes CLI needs user input —
either a clarify question or a dangerous-command approval — so the user
doesn't have to watch the terminal.

CLI mode has zero built-in notification capability (unlike the Desktop app).
This skill bridges that gap using winotify (Python) + shell hooks.

When to Load

  • User wants toast notifications when Hermes asks a question or needs approval
  • User wants to verify existing toast setup is working
  • Toasts stopped appearing and need debugging

Architecture

Three layers, bundled in this skill:

hermes-hook-notify.py   ← hook bridge: reads stdin JSON from Hermes, dispatches
  ↓ calls (same directory)
hermes-notify.py        ← toast emitter: winotify → Windows toast
  ↓ registered in
config.yaml             ← hooks: pre_tool_call(clarify) + pre_approval_request
Script Location Role
scripts/hermes-notify.py This skill's scripts/ dir Pure toast emitter. Takes title + body args, fires winotify toast.
scripts/hermes-hook-notify.py This skill's scripts/ dir Hook bridge. Reads JSON payload from stdin, extracts event info, calls hermes-notify.py. Paths resolved via __file__ — no hardcoding.
scripts/setup.py This skill's scripts/ dir One-command setup. Finds Hermes venv, installs winotify, registers hooks in config.yaml.

Setup (one command)

python scripts/setup.py

Then restart the session (/reset or relaunch Hermes). The setup script:

  1. Discovers the Hermes venv Python via %LOCALAPPDATA%\hermes\hermes-agent\venv
  2. Installs winotify into that venv (skips if already present)
  3. Reads config.yaml (found via hermes config path)
  4. Writes hook entries for pre_approval_request and pre_tool_call (matcher: clarify)
  5. Prints the exact paths used so the user can verify

After setup, fully quit and relaunch Hermes. Shell hooks are loaded at
startup; mid-session changes have no effect. /reset only resets the
conversation — it does NOT re-register hooks. Close the terminal window
(or Ctrl+C) and start Hermes again.

Verification

After restarting, verify the pipeline end-to-end:

1. Toast emitter (bottom layer)

"<venv-python>" "<skill-dir>/scripts/hermes-notify.py" "测试" "toast 发射器直测"

Should see "toast sent" and a toast popup.

2. Hook bridge (manual payload)

echo '{"hook_event_name":"pre_tool_call","tool_name":"clarify","tool_input":{"question":"测试 clarify toast"}}' | python "<skill-dir>/scripts/hermes-hook-notify.py"
echo '{"hook_event_name":"pre_approval_request","command":"rm -rf /tmp/test"}' | python "<skill-dir>/scripts/hermes-hook-notify.py"

Both should pop a toast. Hook script outputs {}.

3. Live clarify (full pipeline)

Ask the agent to call clarify. A toast should appear before the question prompt.

4. Live approval (full pipeline)

Run a dangerous command (e.g. rm -rf /tmp/test). A toast should appear before the approval prompt.

Design Principles

  1. No hardcoded user paths. Scripts discover venv Python via %LOCALAPPDATA% and resolve sibling scripts via __file__. The only path the user touches is running setup.py.
  2. Scripts bundled in skill. No manual file creation. setup.py handles registration.
  3. duration=long (25s) — default "short" (5s) is too easy to miss.
  4. Audio cue — plays Windows Default notification sound so the user is alerted even when not looking at the screen.
  5. Timestamp suffix — each toast body ends with (HH:MM:SS) to bypass Windows same-AppId toast suppression (consecutive toasts from the same AppId within ~30-60s are silently dropped).
  6. subprocess.run (blocking), not Popen — ensures the toast subprocess finishes before the hook returns. Popen's child can be orphaned when the parent's subprocess.run(capture_output=True) captures the hook's stdout and moves on.
  7. stdout → DEVNULL — hook runs silently, doesn't pollute agent output. Switch to PIPE when debugging.

Pitfalls

winotify

  • AUMID trap. Raw PowerShell WinRT ToastNotificationManager.Show() returns success but Windows silently drops the toast if no AppUserModelID is registered. winotify handles AUMID registration automatically (creates a Start Menu shortcut on first run). This is why winotify was chosen over raw PowerShell.
  • Must install into Hermes venv, not system pip. The venv Python is the one that runs hook scripts. setup.py handles this automatically.

Hook bridge

  • Do NOT use sys.executable. Shell hooks are spawned via subprocess.run(argv, shell=False). The python on PATH may resolve to a uv-managed Python without winotify, not the Hermes venv Python. The hook script must discover the venv Python via %LOCALAPPDATA%. setup.py hardcodes the discovered path into the hook script at setup time so the hook doesn't need to search at runtime.
  • pre_approval_request payload fields are in extra, not top-level. shell_hooks._serialize_payload() puts non-standard kwargs (command, description, pattern_key, etc.) into payload["extra"]. Check both payload.get("command") and payload.get("extra", {}).get("command").
  • subprocess.DEVNULL hides errors. When debugging, temporarily replace stdout=DEVNULL, stderr=DEVNULL with stdout=PIPE, stderr=PIPE + proc.communicate() to capture actual errors.

Hooks registration

  • hermes config set cannot write list-valued hooks. Setting hooks.pre_tool_call to a JSON array produces a quoted YAML string that the hooks parser silently ignores. Always manually edit the YAML file. setup.py does this.
  • Hooks need /reset to take effect. Shell hooks are registered at startup.
  • hermes hooks list may report "No shell hooks" on Windows. It reads from ~/.hermes/config.yaml by default, but the actual config may be at %LOCALAPPDATA%\hermes\config.yaml. Check with hermes config path.

Windows toast behavior

  • Same-AppId toast suppression. Windows silently drops consecutive toasts from the same AppId within ~30-60s. The timestamp suffix in hermes-notify.py bypasses this.
  • Windows notifications must be enabled. Settings → System → Notifications → "Get notifications from apps and other senders" must be ON.
  • Focus Assist / Do Not Disturb will suppress toasts. Check Windows settings.
  • Session-approved patterns skip the hook. When the user chooses "session" or "always" for a dangerous command, is_approved() short-circuits and pre_approval_request does not fire. Only "allow once" re-fires the hook every time. This is by design — the hook observes the prompt, not every execution.

Debugging

If toasts don't appear, debug in this order:

  1. Is winotify installed in the venv? Run <venv-python> -c "import winotify; print('ok')".
  2. Does the emitter work? Run hermes-notify.py directly with test args.
  3. Does the hook bridge work? Pipe JSON payload manually (see Verification step 2).
  4. Are hooks registered? Check config.yaml has the hooks: block with correct paths.
  5. Is the hook actually firing? Add file-based logging to hermes-hook-notify.py (append timestamped lines to a log file), because hook stdout/stderr are captured by shell_hooks._spawn() and not shown to the user.

常见问题

5 问
答案由本站依据条目字段整理
windows-toast-notify怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_088ddb4f/windows-toast-notify。安装方式为未标注。装完刷新技能列表或重开客户端。

windows-toast-notify支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

windows-toast-notify权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

windows-toast-notify收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

windows-toast-notify用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。