Saltar al contenido
📨

claude-channel-daemon

El daemon que convierte Slack en una terminal de Claude Code remota. Suscripción Max, sin API credits.

Cuando OpenClaw quedó congelado por decisión de Anthropic (OAuth Max no podía vivir en herramientas de terceros), tuvimos que rehacer el puente entre Slack y Claude Code en local.

La idea simple

Un daemon de usuario que escucha eventos de Slack, los traduce a invocaciones de Claude Code CLI nativo, y devuelve la respuesta al canal. Sin OpenClaw, sin gateway, sin API credits. Suscripción Max y autenticación OAuth del CLI hacen todo el trabajo.

Por qué importa

Tener Claude Code en Slack significa que las apps del portfolio pueden recibir órdenes desde el móvil sin abrir VS Code. "Resume el último runlog", "abre PR de FEAT-026", "deploya Ganga24" — se escriben en un canal y se ejecutan en el servidor.

El equivalente "hosted" cuesta API credits cada minuto. El daemon corriendo contra Max es coste fijo, no por uso.

Cómo está construido

  • systemd user service — sobrevive a logouts SSH (linger habilitado).
  • Socket Mode de Slack — sin webhook público, todo via WebSocket persistente.
  • Owner por canal — cada canal declara su agente (claude-daemon, openclaw, none). Toggle sin tocar código.
  • Sandbox per project — el CLI corre en el directorio del proyecto vinculado al canal. Sin riesgo de cruzar contextos.

La trampa que aprendimos

source nvm.sh bajo set -euo pipefail aborta silenciosamente si el default alias es lts/* sin LTS instalado. Tres semanas de crons muertos sin alerta porque el script terminaba con exit 3 y nadie lo miraba. Lección: derivar el bin de Node desde un symlink propio (~/.local/bin/node), no del shell init.