XYZ Windows Notify — Habilidad Universal para Agentes de IA
Esta habilidad permite que cualquier agente de IA (Antigravity, Claude, GPT, Cursor, Trae, Pi, Grok, etc.) active notificaciones toast nativas de Windows (compatible con Windows 10 y Windows 11) usando PowerShell BurntToast con marca personalizada, hitos de porcentaje y gestión dinámica de iconos.
🚀 Instalación mediante la CLI de Skills
npx skills add xyz-rainbow/xyz-windows-notify
🦄 Activos incluidos y resolución inteligente de iconos
Esta habilidad incluye marca predeterminada en su directorio assets/icons/ (assets/icons/unicorn.jpg y assets/icons/icon.jpg).
Al enviar una notificación, sigue esta jerarquía de resolución inteligente:
- Parámetro explícito: Ruta proporcionada mediante
-AppLogo "ruta/al/icono_personalizado.png". - Icono incluido en la habilidad: Ruta local dentro del directorio de la habilidad (ej.
<directorio_habilidad>/assets/icons/unicorn.jpg). - Icono incluido heredado:
<directorio_habilidad>/assets/unicorn.jpg(para compatibilidad hacia atrás). - Directorio de iconos personalizados del usuario: Ruta de usuario del entorno (ej.
$env:USERPROFILE\Pictures\Icons\personalizado.pngsi existe). - Fallback elegante: Notificación nativa de Windows sin
-AppLogosi no existe ningún archivo de imagen.
🤖 Directrices para agentes de IA sobre iconos personalizados y generación
Los agentes de IA que operen con esta habilidad deben gestionar activamente la retroalimentación visual:
1. Selección contextual de iconos
- General / Predeterminado: Usar
assets/icons/unicorn.jpgoassets/icons/icon.jpg. - Base de datos / Copias de seguridad: Si existen iconos especializados (ej.
assets/icons/backup.pngoassets/icons/database.png), priorizarlos. - Despliegues / Servidor: Iconos de cohete / servidor.
- Errores / Alertas críticas: Iconos de advertencia / escudo.
2. Sugerir y generar nuevos iconos
- Dónde guardar iconos: Almacenar nuevos iconos en
assets/icons/<nombre>.png(dentro de la habilidad o carpeta del repositorio) o en el directorio de iconos del usuario ($env:USERPROFILE\Pictures\Icons\). - Especificaciones del icono:
- Formato:
PNGoJPG(relación de aspecto cuadrada 1:1). - Dimensiones recomendadas:
256x256o512x512píxeles. - Fondo transparente o sólido limpio.
- Formato:
- Protocolo proactivo de IA:
- Al iniciar un nuevo flujo de trabajo recurrente (ej. un nuevo monitor de servidor de juegos, pipeline de renderizado de video o sincronización de datos), verificar si existe un icono coincidente en
assets/icons/. - Si no existe un icono temático, proponer:
"Noté que no tenemos un icono específico para [Nombre de la tarea]. ¿Te gustaría que genere un icono personalizado de 256x256 y lo guarde en
assets/icons/[nombre].png?" - Usar herramientas de generación de imágenes (ej.
generate_image) u obtener activos apropiados tras la aprobación del usuario.
- Al iniciar un nuevo flujo de trabajo recurrente (ej. un nuevo monitor de servidor de juegos, pipeline de renderizado de video o sincronización de datos), verificar si existe un icono coincidente en
💻 Integración con PowerShell
Import-Module BurntToast
# Resolver icono predeterminado / incluido (con compatibilidad hacia atrás)
$CandidateIcons = @(
"$PSScriptRoot\assets\icons\unicorn.jpg",
"$PSScriptRoot\assets\unicorn.jpg",
"$env:USERPROFILE\Pictures\Icons\personalizado.png"
)
$AppLogo = $CandidateIcons | Where-Object { Test-Path $_ } | Select-Object -First 1
# Enviar notificación con fallback
if ($AppLogo) {
New-BurntToastNotification `
-Text "🦄 Hito de tarea: 50%", "Procesados 1,024 MB de 2,048 MB" `
-AppLogo $AppLogo `
-Sound 'Default'
} else {
New-BurntToastNotification `
-Text "📊 Hito de tarea: 50%", "Procesados 1,024 MB de 2,048 MB" `
-Sound 'Default'
}
🐍 Patrón de integración con Python
import subprocess
import os
def send_toast(title: str, message: str, icon_path: str = None):
# Rutas candidatas de icono con compatibilidad hacia atrás
base_dir = os.path.dirname(__file__)
user_icon = os.path.expanduser("~/Pictures/Icons/personalizado.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)
# Ejemplo de uso a lo largo del ciclo de vida
send_toast("🚀 Tarea iniciada", "Escaneando archivos del espacio de trabajo y calculando sumas de verificación...")
send_toast("📊 Progreso: 50%", "Procesados 1,024 MB de 2,048 MB")
send_toast("✅ Tarea completada (100%)", "¡2,100 archivos procesados exitosamente!")
🌐 Configuración global multi-agente
Para que esta habilidad sea accesible desde todos los agentes en la máquina, asegúrate de que esta carpeta esté enlazada simbólicamente o copiada en:
- Antigravity / Gemini:
~/.gemini/config/skills/windows-notify/ - Claude Desktop / Code:
~/.claude/skills/windows-notify/ - Cursor / Trae / Agentes globales:
~/.agents/skills/windows-notify/