Communitygithub.com

configurar-notificaciones

Configura integraciones de notificaciones (Telegram, Discord, Slack) mediante lenguaje natural.

¿Qué es configurar-notificaciones?

Esta habilidad permite configurar notificaciones para que el usuario reciba alertas cuando las sesiones de Claude Code finalicen, necesiten entrada o completen tareas en segundo plano. Es compatible con Telegram, Discord y Slack, guiando al usuario a través de un proceso interactivo basado en preguntas y respuestas en lenguaje natural. La habilidad detecta automáticamente el proveedor de notificaciones según la solicitud del usuario y utiliza comandos Bash y herramientas como jq para leer, modificar y escribir la configuración en el archivo `.omc-config.json`. También ofrece validación de tokens, pruebas de notificaciones y la posibilidad de usar variables de entorno como alternativa. Está diseñada para agentes como Claude Code y se apoya en una ruta de decisión clara para cada proveedor, mejorando significativamente la experiencia del desarrollador al automatizar la configuración de canales de comunicación críticos.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Yeachan-Heo/oh-my-claudecode/tree/main/skills/configure-notifications

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Configurar Notificaciones

Configura las integraciones de notificaciones de OMC para que recibas alertas cuando las sesiones finalicen, necesiten entrada o completen tareas en segundo plano.

Enrutamiento

Detecta qué proveedor desea el usuario según su solicitud o argumento:

  • Si el activador o argumento contiene "telegram" → sigue la sección de Telegram
  • Si el activador o argumento contiene "discord" → sigue la sección de Discord
  • Si el activador o argumento contiene "slack" → sigue la sección de Slack
  • Si no se especifica ningún proveedor, usa AskUserQuestion:

Pregunta: "¿Qué servicio de notificaciones te gustaría configurar?"

Opciones:

  1. Telegram - Token de bot + ID de chat. Funciona en dispositivos móviles y de escritorio.
  2. Discord - Webhook o token de bot + ID de canal.
  3. Slack - URL de webhook entrante.

Configuración de Telegram

Configura las notificaciones de Telegram para que OMC pueda enviarte mensajes cuando las sesiones finalicen, necesiten entrada o completen tareas en segundo plano.

Cómo Funciona Esta Habilidad

Esta es una habilidad de configuración interactiva en lenguaje natural. Guía al usuario a través de la configuración haciendo preguntas con AskUserQuestion. Escribe el resultado en ${CLAUDE_CONFIG_DIR:-~/.claude}/.omc-config.json.

Paso 1: Detectar Configuración Existente

CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"

if [ -f "$CONFIG_FILE" ]; then
  HAS_TELEGRAM=$(jq -r '.notifications.telegram.enabled // false' "$CONFIG_FILE" 2>/dev/null)
  CHAT_ID=$(jq -r '.notifications.telegram.chatId // empty' "$CONFIG_FILE" 2>/dev/null)
  PARSE_MODE=$(jq -r '.notifications.telegram.parseMode // "Markdown"' "$CONFIG_FILE" 2>/dev/null)

  if [ "$HAS_TELEGRAM" = "true" ]; then
    echo "EXISTING_CONFIG=true"
    echo "CHAT_ID=$CHAT_ID"
    echo "PARSE_MODE=$PARSE_MODE"
  else
    echo "EXISTING_CONFIG=false"
  fi
else
  echo "NO_CONFIG_FILE"
fi

Si se encuentra una configuración existente, muestra al usuario lo que está configurado actualmente y pregunta si desea actualizar o reconfigurar.

Paso 2: Crear un Bot de Telegram

Guía al usuario para crear un bot si no tiene uno:

Para configurar las notificaciones de Telegram, necesitas un token de bot de Telegram y tu ID de chat.

CREAR UN BOT (si no tienes uno):
1. Abre Telegram y busca a @BotFather
2. Envía /newbot
3. Elige un nombre (ej., "Mi Notificador OMC")
4. Elige un nombre de usuario (ej., "mi_bot_omc")
5. BotFather te dará un token como: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz

OBTENER TU ID DE CHAT:
1. Inicia un chat con tu nuevo bot (envía /start)
2. Visita: https://api.telegram.org/bot<TU_TOKEN>/getUpdates
3. Busca "chat":{"id":TU_ID_DE_CHAT}
   - Los IDs de chat personales son números positivos (ej., 123456789)
   - Los IDs de chat de grupo son números negativos (ej., -1001234567890)

Paso 3: Recoger el Token del Bot

Usa AskUserQuestion:

Pregunta: "Pega el token de tu bot de Telegram (de @BotFather)"

El usuario escribirá su token en el campo "Otro".

Validar el token:

  • Debe coincidir con el patrón: dígitos:alfanumérico (ej., 123456789:ABCdefGHI...)
  • Si no es válido, explica el formato y vuelve a preguntar

Paso 4: Recoger el ID de Chat

Usa AskUserQuestion:

Pregunta: "Pega tu ID de chat de Telegram (el número de la API getUpdates)"

El usuario escribirá su ID de chat en el campo "Otro".

Validar el ID de chat:

  • Debe ser un número (positivo para personal, negativo para grupos)
  • Si no es válido, ofrece ayuda para encontrarlo:
# Ayudar al usuario a encontrar su ID de chat
BOT_TOKEN="TOKEN_PROPORCIONADO_POR_USUARIO"
echo "Obteniendo mensajes recientes para encontrar tu ID de chat..."
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates" | jq '.result[-1].message.chat.id // .result[-1].message.from.id // "No se encontraron mensajes - envía /start a tu bot primero"'

Paso 5: Elegir el Modo de Parseo

Usa AskUserQuestion:

Pregunta: "¿Qué formato de mensaje prefieres?"

Opciones:

  1. Markdown (Recomendado) - Negrita, cursiva, bloques de código con sintaxis Markdown
  2. HTML - Negrita, cursiva, código con etiquetas HTML

Paso 6: Configurar Eventos

Usa AskUserQuestion con multiSelect:

Pregunta: "¿Qué eventos deberían activar las notificaciones de Telegram?"

Opciones (multiSelect: true):

  1. Fin de sesión (Recomendado) - Cuando una sesión de Claude finaliza
  2. Entrada necesaria - Cuando Claude espera tu respuesta (ideal para tareas largas)
  3. Inicio de sesión - Cuando comienza una nueva sesión
  4. Continuación de sesión - Cuando el modo persistente mantiene la sesión activa

Selección predeterminada: fin-de-sesión + pregunta-al-usuario.

Paso 7: Escribir la Configuración

Lee la configuración existente, combina los nuevos ajustes de Telegram y vuelve a escribir:

CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"

if [ -f "$CONFIG_FILE" ]; then
  EXISTING=$(cat "$CONFIG_FILE")
else
  EXISTING='{}'
fi

# BOT_TOKEN, CHAT_ID, PARSE_MODE se recogen del usuario
echo "$EXISTING" | jq \
  --arg token "$BOT_TOKEN" \
  --arg chatId "$CHAT_ID" \
  --arg parseMode "$PARSE_MODE" \
  '.notifications = (.notifications // {enabled: true}) |
   .notifications.enabled = true |
   .notifications.telegram = {
     enabled: true,
     botToken: $token,
     chatId: $chatId,
     parseMode: $parseMode
   }' > "$CONFIG_FILE"

Agregar configuración específica de eventos si el usuario no seleccionó todos los eventos:

Para cada evento NO seleccionado, deshabilitarlo:

# Ejemplo: deshabilitar inicio-de-sesión si no fue seleccionado
echo "$(cat "$CONFIG_FILE")" | jq \
  '.notifications.events = (.notifications.events // {}) |
   .notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"

Paso 8: Probar la Configuración

Después de escribir la configuración, ofrece enviar una notificación de prueba:

Usa AskUserQuestion:

Pregunta: "¿Enviar una notificación de prueba para verificar la configuración?"

Opciones:

  1. Sí, probar ahora (Recomendado) - Enviar un mensaje de prueba a tu chat de Telegram
  2. No, lo probaré después - Omitir la prueba

Si se prueba:

BOT_TOKEN="TOKEN_PROPORCIONADO_POR_USUARIO"
CHAT_ID="ID_DE_CHAT_PROPORCIONADO_POR_USUARIO"
PARSE_MODE="Markdown"

RESPONSE=$(curl -s -w "\n%{http_code}" \
  "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
  -d "chat_id=${CHAT_ID}" \
  -d "parse_mode=${PARSE_MODE}" \
  -d "text=Notificación de prueba de OMC - ¡Telegram está configurado!")

HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | head -1)

if [ "$HTTP_CODE" = "200" ]; then
  echo "¡Notificación de prueba enviada con éxito!"
else
  echo "Falló (HTTP $HTTP_CODE):"
  echo "$BODY" | jq -r '.description // "Error desconocido"' 2>/dev/null || echo "$BODY"
fi

Reporta éxito o fallo. Problemas comunes:

  • 401 No autorizado: El token del bot no es válido
  • 400 Solicitud incorrecta: chat no encontrado: El ID de chat es incorrecto, o el usuario no ha enviado /start al bot
  • Error de red: Verifica la conectividad con api.telegram.org

Paso 9: Confirmar

Muestra el resumen de la configuración final:

Notificaciones de Telegram Configuradas

  Bot:        @nombre_de_tu_bot
  ID de Chat: 123456789
  Formato:    Markdown
  Eventos:    fin-de-sesión, pregunta-al-usuario

Configuración guardada en: ~/.claude/.omc-config.json

También puedes configurar esto mediante variables de entorno:
  OMC_TELEGRAM_BOT_TOKEN=123456789:ABCdefGHI...
  OMC_TELEGRAM_CHAT_ID=123456789

Para reconfigurar: /oh-my-claudecode:configurar-notificaciones telegram
Para configurar Discord: /oh-my-claudecode:configurar-notificaciones discord
Para configurar Slack: /oh-my-claudecode:configurar-notificaciones slack

Alternativa de Variables de Entorno

Los usuarios pueden omitir este asistente por completo configurando variables de entorno en su perfil de shell:

export OMC_TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
export OMC_TELEGRAM_CHAT_ID="123456789"

Las variables de entorno son detectadas automáticamente por el sistema de notificaciones sin necesidad de .omc-config.json.


Configuración de Discord

Configura las notificaciones de Discord para que OMC pueda avisarte cuando las sesiones finalicen, necesiten entrada o completen tareas en segundo plano.

Cómo Funciona Esta Habilidad

Esta es una habilidad de configuración interactiva en lenguaje natural. Guía al usuario a través de la configuración haciendo preguntas con AskUserQuestion. Escribe el resultado en ${CLAUDE_CONFIG_DIR:-~/.claude}/.omc-config.json.

Paso 1: Detectar Configuración Existente

CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"

if [ -f "$CONFIG_FILE" ]; then
  # Verificar configuración existente de discord
  HAS_DISCORD=$(jq -r '.notifications.discord.enabled // false' "$CONFIG_FILE" 2>/dev/null)
  HAS_DISCORD_BOT=$(jq -r '.notifications["discord-bot"].enabled // false' "$CONFIG_FILE" 2>/dev/null)
  WEBHOOK_URL=$(jq -r '.notifications.discord.webhookUrl // empty' "$CONFIG_FILE" 2>/dev/null)
  MENTION=$(jq -r '.notifications.discord.mention // empty' "$CONFIG_FILE" 2>/dev/null)

  if [ "$HAS_DISCORD" = "true" ] || [ "$HAS_DISCORD_BOT" = "true" ]; then
    echo "EXISTING_CONFIG=true"
    echo "WEBHOOK_CONFIGURED=$HAS_DISCORD"
    echo "BOT_CONFIGURED=$HAS_DISCORD_BOT"
    [ -n "$WEBHOOK_URL" ] && echo "WEBHOOK_URL=$WEBHOOK_URL"
    [ -n "$MENTION" ] && echo "MENTION=$MENTION"
  else
    echo "EXISTING_CONFIG=false"
  fi
else
  echo "NO_CONFIG_FILE"
fi

Si se encuentra una configuración existente, muestra al usuario lo que está configurado actualmente y pregunta si desea actualizar o reconfigurar.

Paso 2: Elegir el Método de Discord

Usa AskUserQuestion:

Pregunta: "¿Cómo te gustaría enviar las notificaciones de Discord?"

Opciones:

  1. Webhook (Recomendado) - Crea un webhook en tu canal de Discord. Simple, no necesita bot. Solo pega la URL.
  2. API de Bot - Usa un token de bot de Discord + ID de canal. Más flexible, requiere una aplicación de bot.

Paso 3A: Configuración de Webhook

Si el usuario eligió Webhook:

Usa AskUserQuestion:

Pregunta: "Pega la URL de tu webhook de Discord. Para crear uno: Configuración del Servidor > Integraciones > Webhooks > Nuevo Webhook > Copiar URL"

El usuario escribirá su URL de webhook en el campo "Otro".

Validar la URL:

  • Debe comenzar con https://discord.com/api/webhooks/ o https://discordapp.com/api/webhooks/
  • Si no es válida, explica el formato y vuelve a preguntar

Paso 3B: Configuración de API de Bot

Si el usuario eligió API de Bot:

Haz dos preguntas:

  1. "Pega el token de tu bot de Discord" - De discord.com/developers > Tu App > Bot > Token
  2. "Pega el ID del canal" - Haz clic derecho en el canal > Copiar ID del Canal (requiere Modo Desarrollador)

Paso 4: Configurar Mención (Mencionar Usuario)

Usa AskUserQuestion:

Pregunta: "¿Te gustaría que las notificaciones mencionen a alguien?"

Opciones:

  1. Sí, mencionar a un usuario - Etiquetar a un usuario específico por su ID de usuario de Discord
  2. Sí, mencionar un rol - Etiquetar un rol por su ID de rol
  3. Sin menciones - Solo publicar el mensaje sin mencionar a nadie

Si el usuario quiere mencionar a un usuario:

Pregunta: "¿Cuál es el ID de usuario de Discord a mencionar? (Haz clic derecho en el usuario > Copiar ID de Usuario, requiere Modo Desarrollador)"

El formato de mención es: <@ID_DE_USUARIO> (ej., <@1465264645320474637>)

Si el usuario quiere mencionar un rol:

Pregunta: "¿Cuál es el ID del rol de Discord a mencionar? (Configuración del Servidor > Roles > clic derecho en el rol > Copiar ID del Rol)"

El formato de mención es: <@&ID_DE_ROL> (ej., <@&123456789>)

Paso 5: Configurar Eventos

Usa AskUserQuestion con multiSelect:

Pregunta: "¿Qué eventos deberían activar las notificaciones de Discord?"

Opciones (multiSelect: true):

  1. Fin de sesión (Recomendado) - Cuando una sesión de Claude finaliza
  2. Entrada necesaria - Cuando Claude espera tu respuesta (ideal para tareas largas)
  3. Inicio de sesión - Cuando comienza una nueva sesión
  4. Continuación de sesión - Cuando el modo persistente mantiene la sesión activa

Selección predeterminada: fin-de-sesión + pregunta-al-usuario.

Paso 6: Sobreescritura Opcional del Nombre de Usuario

Usa AskUserQuestion:

Pregunta: "¿Nombre de visualización personalizado del bot? (Se muestra como el nombre del remitente del webhook en Discord)"

Opciones:

  1. OMC (predeterminado) - Mostrar como "OMC"
  2. Claude Code - Mostrar como "Claude Code"
  3. Personalizado - Ingresar un nombre personalizado

Paso 7: Escribir la Configuración

Lee la configuración existente, combina los nuevos ajustes de Discord y vuelve a escribir:

CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"

if [ -f "$CONFIG_FILE" ]; then
  EXISTING=$(cat "$CONFIG_FILE")
else
  EXISTING='{}'
fi

Para el método Webhook:

Construye el objeto de notificaciones con los valores recogidos y combínalo en .omc-config.json usando jq:

# WEBHOOK_URL, MENTION, USERNAME se recogen del usuario
# EVENTS es la lista de eventos habilitados

echo "$EXISTING" | jq \
  --arg url "$WEBHOOK_URL" \
  --arg mention "$MENTION" \
  --arg username "$USERNAME" \
  '.notifications = (.notifications // {enabled: true}) |
   .notifications.enabled = true |
   .notifications.discord = {
     enabled: true,
     webhookUrl: $url,
     mention: (if $mention == "" then null else $mention end),
     username: (if $username == "" then null else $username end)
   }' > "$CONFIG_FILE"

Para el método API de Bot:

echo "$EXISTING" | jq \
  --arg token "$BOT_TOKEN" \
  --arg channel "$CHANNEL_ID" \
  --arg mention "$MENTION" \
  '.notifications = (.notifications // {enabled: true}) |
   .notifications.enabled = true |
   .notifications["discord-bot"] = {
     enabled: true,
     botToken: $token,
     channelId: $channel,
     mention: (if $mention == "" then null else $mention end)
   }' > "$CONFIG_FILE"

Agregar configuración específica de eventos si el usuario no seleccionó todos los eventos:

Para cada evento NO seleccionado, deshabilitarlo:

# Ejemplo: deshabilitar inicio-de-sesión si no fue seleccionado
echo "$(cat "$CONFIG_FILE")" | jq \
  '.notifications.events = (.notifications.events // {}) |
   .notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"

Paso 8: Probar la Configuración

Después de escribir la configuración, ofrece enviar una notificación de prueba:

Usa AskUserQuestion:

Pregunta: "¿Enviar una notificación de prueba para verificar la configuración?"

Opciones:

  1. Sí, probar ahora (Recomendado) - Enviar un mensaje de prueba a tu canal de Discord
  2. No, lo probaré después - Omitir la prueba

Si se prueba:

# Para webhook:
curl -s -o /dev/null -w "%{http_code}" \
  -H "Content-Type: application/json" \
  -d "{\"content\": \"${MENTION:+$MENTION\\n}Notificación de prueba de OMC - ¡Discord está configurado!\"}" \
  "$WEBHOOK_URL"

Reporta éxito o fallo. Si falla...

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

agent-doc-discipline

Writing-time discipline for documents agents consume (the five surfaces, specs, tickets, .omc/skills/) — every rule checkable and carrying a why, steps before reference, one meaning in one home, no restating what the environment already says. Mandatory at drydock seed generation and the launch C5 sediment pass; opt-in for any other agent-facing doc edit. The companion of minimal-code-discipline: that one disciplines code, this one disciplines papers.

ai-slop-cleaner

Clean AI-generated code slop with a regression-safe, deletion-first workflow and optional reviewer-only mode

ask

Process-first advisor routing for Claude, Codex, Gemini, Antigravity, Grok, or Cursor via `omc ask`, with artifact capture and no raw CLI assembly

ask-navigator

Shipyard

autopilot

Full autonomous execution from idea to working code

autoresearch

Stateful single-mission improvement loop with strict evaluator contract, markdown decision logs, and max-runtime stop behavior

cancel

Cancel any active OMC mode (autopilot, ralph, ultragoal, swarm, ultrapilot, pipeline, team) and clean up retired legacy state

debug

Diagnose the current OMC session or repo state using logs, traces, state, and focused reproduction

deepinit

Deep codebase initialization with hierarchical AGENTS.md documentation

deep-interview

Socratic deep interview with mathematical ambiguity gating before explicit execution approval

drydock

Lay the keel of the shipyard harness in any repo — the 4-pillar shared environment (Context, Rules, Tools, Standards) across 5 surfaces (CLAUDE.md, skills, design-system, mcp/cli, shared context) so that every human and agent inherits the same design language and anyone can ship. Run once per repo; re-run with --check to audit drift.

execute

Carry an approved task through to working, verified code

external-context

Invoke parallel document-specialist agents for external web searches and documentation lookup

graph

Deterministic orchestration graph runtime - declarative DAG pipelines with journal-based crash recovery

harbor

Harbor intake for external work — the captain only handles unresolved decisions. Sweeps incoming issues and PRs, verifies every claim before disposition, reuses every decision already made, and hands the maintainer a docket whose pending items each carry one question with options, recommendation, impact and evidence. Agent-autonomous for facts and for actions covered by standing authorization; signed for every new judgment. Never merges.

hud

Configure HUD display options (layout, presets, display elements)

launch

Shipyard

loft

Loft the shape before cutting steel — answer a design question that prose cannot settle by building a throwaway artifact: a pure logic module in a clickable shell, or structurally different UI variants behind one route. The captain reacts to the artifact; the answer folds into the decision; the artifact never docks. Use when a design question stalls in words, when a navigator map carries a loft ticket, or when a spec discussion reaches

minimal-code-discipline

YAGNI-ladder coding discipline for writing changes — existence-first, reuse before writing, dependency ladder, shortest correct diff, with non-negotiables that must never be minimized away

omc-doctor

Diagnose and fix oh-my-claudecode installation issues

Skills relacionados