XYZ Windows Notify — 通用AI代理技能
该技能使任何AI代理(Antigravity、Claude、GPT、Cursor、Trae、Pi、Grok 等)能够触发原生的 Windows Toast 通知(兼容 Windows 10 和 Windows 11),通过 PowerShell BurntToast 实现自定义品牌、百分比里程碑和动态图标管理。
🚀 通过 Skills CLI 安装
npx skills add xyz-rainbow/xyz-windows-notify
🦄 捆绑资产与智能图标解析
该技能在 assets/icons/ 目录中捆绑了默认品牌图标(assets/icons/unicorn.jpg 和 assets/icons/icon.jpg)。
发送通知时,遵循以下 智能解析层级:
- 显式参数:通过
-AppLogo "path/to/custom_icon.png"提供的路径。 - 技能捆绑图标:技能目录内的本地路径(例如
<skill_dir>/assets/icons/unicorn.jpg)。 - 旧版捆绑图标:
<skill_dir>/assets/unicorn.jpg(用于向后兼容)。 - 用户自定义图标目录:环境用户路径(例如
$env:USERPROFILE\Pictures\Icons\custom.png,如果存在)。 - 优雅降级:如果不存在任何图片文件,则不使用
-AppLogo发送原生Windows通知。
🤖 AI代理自定义图标与生成指南
使用该技能的AI代理应主动管理视觉反馈:
1. 上下文图标选择
- 通用/默认:使用
assets/icons/unicorn.jpg或assets/icons/icon.jpg。 - 数据库/备份:如果存在专用图标(例如
assets/icons/backup.png或assets/icons/database.png),优先使用。 - 部署/服务器:使用火箭/服务器图标。
- 错误/严重警报:使用警告/盾牌图标。
2. 建议与生成新图标
- 图标存储位置:将新图标保存在
assets/icons/<name>.png(技能或仓库文件夹内)或用户的图标目录($env:USERPROFILE\Pictures\Icons\)中。 - 图标规格:
- 格式:
PNG或JPG(正方形1:1宽高比)。 - 推荐尺寸:
256x256或512x512像素。 - 透明或干净的纯色背景。
- 格式:
- 主动式AI协议:
- 当开始新的重复性工作流程(例如新的游戏服务器监控、视频渲染管道或数据同步)时,检查
assets/icons/中是否存在匹配的图标。 - 如果不存在主题图标,建议:
“我注意到我们还没有 [任务名称] 的专用Toast图标。您是否希望我生成一个自定义256x256图标,并保存到
assets/icons/[name].png?” - 使用图像生成工具(例如
generate_image)或在用户批准后获取合适的资产。
- 当开始新的重复性工作流程(例如新的游戏服务器监控、视频渲染管道或数据同步)时,检查
💻 PowerShell 集成
Import-Module BurntToast
# 解析默认/捆绑图标(含向后兼容)
$CandidateIcons = @(
"$PSScriptRoot\assets\icons\unicorn.jpg",
"$PSScriptRoot\assets\unicorn.jpg",
"$env:USERPROFILE\Pictures\Icons\custom.png"
)
$AppLogo = $CandidateIcons | Where-Object { Test-Path $_ } | Select-Object -First 1
# 发送带降级处理的通知
if ($AppLogo) {
New-BurntToastNotification `
-Text "🦄 任务里程碑:50%", "已处理 1,024 MB / 2,048 MB" `
-AppLogo $AppLogo `
-Sound 'Default'
} else {
New-BurntToastNotification `
-Text "📊 任务里程碑:50%", "已处理 1,024 MB / 2,048 MB" `
-Sound 'Default'
}
🐍 Python 集成模式
import subprocess
import os
def send_toast(title: str, message: str, icon_path: str = None):
# 候选图标路径(含向后兼容)
base_dir = os.path.dirname(__file__)
user_icon = os.path.expanduser("~/Pictures/Icons/custom.png")
candidates = [
icon_path,
os.path.join(base_dir, "assets", "icons", "unicorn.jpg"),
os.path.join(base_dir, "assets", "unicorn.jpg"),
user_icon
]
selected_icon = next((c for c in candidates if c and os.path.exists(c)), None)
if selected_icon:
ps_cmd = f"Import-Module BurntToast; New-BurntToastNotification -Text '{title}', '{message}' -AppLogo '{selected_icon}' -Sound 'Default'"
else:
ps_cmd = f"Import-Module BurntToast; New-BurntToastNotification -Text '{title}', '{message}' -Sound 'Default'"
subprocess.run(["powershell", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command", ps_cmd], capture_output=True)
# 生命周期中的示例用法
send_toast("🚀 任务开始", "正在扫描工作区文件并计算校验和...")
send_toast("📊 进度:50%", "已处理 1,024 MB / 2,048 MB")
send_toast("✅ 任务完成(100%)", "成功处理了 2,100 个文件!")
🌐 多代理全局配置
要使该技能在机器上的所有代理中可用,请确保将此文件夹符号链接或复制到以下位置:
- Antigravity / Gemini:
~/.gemini/config/skills/windows-notify/ - Claude Desktop / Code:
~/.claude/skills/windows-notify/ - Cursor / Trae / 全局代理:
~/.agents/skills/windows-notify/