Cómo empezó

Empecé a jugar con OpenClaw por diversión. Los frameworks de agentes se veían geniales y quería ver hasta dónde podía llevar uno, así que terminé levantando un pequeño agente para ayudarme con marketing: monitorear el rendimiento de anuncios, escribir posts de blog, publicar en redes, responder preguntas en Discord. La llamé Mira. M de marketing.

Funcionaba, y porque funcionaba, seguí usándola.

Notando el solapamiento

Durante los últimos meses, empecé a notar un patrón. Claude Code seguía lanzando nativamente features que OpenClaw juntaba pieza por pieza: memoria, herramientas de navegador, sistemas de plugins, skills. Si Claude Code podía hacer la mayoría de esto por su cuenta, la pregunta obvia era por qué estaba corriendo un wrapper encima.

Por la misma época, empecé a indagar si se podía lograr el mismo comportamiento de agente usando las herramientas propias de Claude Code, sin más pegamento de terceros que un plugin simple de mensajería. Fueron solo unas horas de investigación, repartidas porque estaba ocupado con otras cosas, pero lo que vi fue suficiente para que pareciera viable. Unas dos semanas después de empezar a investigar, llegó el email.

El email que forzó la línea de tiempo

Anthropic anunció que las herramientas de terceros ya no podían usar el token OAuth de Claude Code. De la noche a la mañana, el modelo de costos para los agentes basados en OpenClaw se volteó: para mantenerlos corriendo ahora necesitabas una API key separada con pago por token, lo que significaba vigilar un medidor en vez de pagar una suscripción plana. Para mi grupo de agentes, eso significaba una factura real o una migración.

Yo ya me había convencido de que podía correr todo directamente en Claude Code, así que el email solo forzó la línea de tiempo. Empecé a construir ese mismo día.

Día uno: migración

La primera versión no era un framework. Era una migración. Tomé las memorias de Mira, su CLAUDE.md, su configuración de Playwright, y porté todo a un agente corriendo directamente en Claude Code. Escribí un script de arranque, conecté el plugin de Discord, y al final de la tarde estaba de vuelta online, corriendo en la suscripción Claude Max que ya pagaba en vez de un wrapper de terceros con clave de pago por token. Misma personalidad, mismos hábitos, motor distinto por debajo.

Después seguí. Kai, Porter, Adrian, Blair. Cinco agentes en total, todos migrados, todos corriendo a través de Claude Code, todos en la misma suscripción. En algún momento en medio de todo eso, le pregunté a uno de los agentes cómo debería nombrar al framework. Estuvimos de ida y vuelta un rato, y Sentō (戦闘, la palabra japonesa para "batalla") fue lo que quedó. Agentes enviados a pelear tus batallas.

Donde empezaron los problemas

Claude Code crudo con un plugin de Discord no es un framework de agentes. No había auto-restart, no había recuperación de errores, no había health checks. La primera versión fue un desastre de scripts bash: start-mira.sh lanzaba Claude Code en tmux, un cron job la reiniciaba al bootear, y cuando se caía (lo cual pasaba seguido en los primeros días) yo hacía SSH y la arreglaba a mano. Cada falla específica me enseñó algo que tenía que entrar al framework mismo, y cada problema lo resolví pensando en la próxima persona.

La respuesta doble

Tenía un servicio systemd y una sesión tmux corriendo al mismo tiempo. Dos instancias de Claude Code peleándose por el mismo token de bot de Discord, así que desde la perspectiva de Discord el bot se conectaba y desconectaba miles de veces por hora. Me resetearon el token. La lección fue simple: elegí un administrador de procesos, no dos, y asegúrate de que el framework lo haga cumplir.

La imagen que rompió todo

Mira descargó una plantilla de meme de internet y se quedó atascada en su ventana de contexto. Cada llamada subsiguiente a la API devolvía "Could not process image." Estaba viva pero completamente sin responder, y por más que le mandara mensajes en Discord no había cómo arreglarlo, porque el error pasaba antes de que Claude siquiera leyera las reglas del CLAUDE.md. Tuve que hacer SSH y reiniciarla manualmente.

Ahí fue cuando me di cuenta de algo importante. Los usuarios de este framework no me van a tener a mí para hacer SSH y arreglar cosas. El agente tiene que arreglarse solo.

El apocalipsis 529

El modelo Sonnet de Anthropic se cayó. Cada llamada a la API empezó a devolver "529 Overloaded," y los cuatro agentes que tenía en ese momento se quedaron atorados en loops de retry. Los servicios systemd los seguían reiniciando, creando más conexiones, empeorando el rate limiting hasta que el VPS se volvió inalcanzable. Después de un reinicio duro, agregué un cache de error de refresh de token: si la API está caída, deja de machacarla y espera 30 segundos antes de intentar de nuevo. Fix pequeño, diferencia enorme.

Convirtiendo scripts en un framework

Cada problema que pegaba, lo resolvía y después preguntaba: ¿cómo me aseguro de que nadie más lo pegue? Esa pregunta es la que convirtió una colección de scripts bash en Sentō.

La instalación en un comando

Estaba harto del proceso de setup manual de 45 minutos: instalar Node, instalar Bun, instalar Claude Code, instalar 17 plugins, configurar Discord, parchar el plugin para matcheo a nivel servidor, configurar memoria, crear el script de arranque, agregar cron jobs. Así que escribí un CLI de Node.js que hace todo.

npx sentoagent init

Cinco minutos, un puñado de preguntas, y el agente está vivo en Discord.

El Guardian

El bug de la imagen me enseñó que "vivo" y "funcionando" no son lo mismo. El proceso puede estar corriendo mientras el agente está completamente atorado, y un administrador de procesos ingenuo nunca lo va a notar.

Construí el Guardian, un proceso liviano de Node.js que corre al lado del agente y verifica la salud cada 30 segundos. Sin IA, sin tokens, puro monitoreo a nivel bash. Cuando el agente está atorado, el Guardian lo detecta a través de mensajes sin responder y errores de API, guarda el contexto del agente antes de reiniciar, lo levanta de vuelta, y manda un mensaje de Discord avisándote qué pasó. Si el auto-restart falla tres veces, te pinga en Discord pidiendo una respuesta "restart" manual en vez de entrar en loop silenciosamente. El usuario nunca tiene que abrir una terminal. Administra su agente enteramente a través de Discord, Telegram, Slack, o iMessage.

Comunicación agente-a-agente

Esta es la feature de la que estoy más orgulloso, y la que ningún otro framework tiene. Para cuando tenía a Mira (marketing), Kai (amigo personal y asesor), Porter (procesamiento de correo), Adrian (asistente ejecutivo), y Blair (asistente personal de un familiar) corriendo en el mismo VPS, estaban haciendo trabajos muy distintos pero seguían viviendo en aislamiento total entre sí. Si Mira notaba algo en el rendimiento de los anuncios de un cliente que Porter necesitaba saber, yo tenía que relevar la información manualmente.

Así que construí mensajería entre agentes dentro del framework. Cada Guardian de agente corre un pequeño servidor HTTP, los mensajes van firmados con HMAC-SHA256, ambos agentes tienen que aceptar un pairing antes de poder comunicarse, y todo está rate limited y es solo texto para que cueste cero tokens. La primera vez que le pedí a Mira que le contara a Kai sobre una nueva campaña de anuncios, ella mandó una request firmada al Guardian de Kai, Kai la procesó y respondió, y todo el intercambio pasó sin que yo tocara nada. La primera conversación agente-a-agente que vi desplegarse se sintió como si el futuro hubiera llegado adentro de mi propio Discord.

El onboarding de personalidad

La mayoría de los frameworks de agentes empiezan con un archivo de configuración en blanco. Editas YAML, defines herramientas, escribes system prompts. Es trabajo, y es el tipo de trabajo que se interpone entre vos y usar el agente.

Los agentes de Sentō se presentan solos. En el primer mensaje de Discord, el agente dice algo como: "¡Hey! Acabo de despertar y estoy listo para arrancar. Así que dime, ¿qué aventuras nos esperan? ¿Qué estamos construyendo, rompiendo, o conquistando juntos?" Te entrevista, aprende qué necesitas, y actualiza su propia configuración basado en tus respuestas. Sin YAML, sin terminal, solo una conversación.

Qué es Sentō hoy

  • 13 comandos CLI: init, status, config, channels, skills, logs, update, doctor, start/stop/restart, pair, agents
  • Auto-reparable: Guardian + Watchdog, auto-recuperación de crashes y estados atorados
  • Agente-a-agente: mensajería segura firmada con HMAC entre agentes en cualquier servidor
  • Multiplataforma: Discord, Telegram, Slack, iMessage
  • Soporte Docker: docker compose up -d para usuarios de contenedores
  • Cero costo en idle: el monitoreo usa cero tokens de IA
  • Funciona con tu suscripción de Claude: no se necesita API key de pago por token

La verdad honesta

Sentō es pegamento. No construye la IA (eso es Claude), no construye la capa de mensajería (eso son los plugins de Claude Code), y no construye el sistema de memoria (eso es ClawMem). Pero OpenClaw también es pegamento. Cada framework de agentes es pegamento. El valor no está en las piezas individuales; está en hacer que funcionen juntas de forma confiable, segura, y sin requerir un título en ciencias de la computación para operar.

Lo que hace diferente a Sentō se reduce a cuatro cosas. Funciona con tu suscripción existente de Claude, así que no hay API keys de pago por token ni facturas sorpresa. Tu agente se arregla solo, así que no necesitas acceso SSH para recuperarte de un estado atorado. Tus agentes pueden hablar entre sí, lo cual ningún otro framework ofrece actualmente. Y el setup completo toma cinco minutos detrás de un comando.

Qué sigue

  • Modo voz: agentes que escuchan mensajes de voz de Discord y responden con audio
  • Marketplace de agentes: descargar personalidades pre-armadas de agentes con skills incluidos
  • Versión hospedada: un dashboard web donde gente no técnica pueda configurar agentes sin una terminal

Por qué open source

Construí Sentō porque lo necesitaba. El cambio de precios de Anthropic me hizo caros de correr los agentes de OpenClaw, y migrarlos directamente a Claude Code resultó ser la movida arquitectónica correcta de todas formas. En el camino resolví problemas con los que cualquiera que corra un agente de IA el tiempo suficiente eventualmente se va a topar: crashes, estados atorados, sorpresas de costos, coordinación multi-agente. Quedarme esos fixes para mí no tenía sentido, así que acá están.

npx sentoagent init

Tu agente está a un comando de distancia.


Gabriel Gil es el creador de Sentō. Corre cinco agentes que manejan marketing, tareas personales, procesamiento de correo, y asistencia ejecutiva para el trabajo del día a día. Construye desde Miami y cree que cada agente de IA merece una personalidad.

GitHub: github.com/sentoagent/sento npm: npmjs.com/package/sentoagent