Hoy te voy a contar una historia que empieza con una idea brillante y termina con una buena dosis de frustración. Resulta que se me ocurrió construir mi propio agente de inteligencia artificial. Lo llamé Anacleto, está escrito en Rust, y la idea era tener un coordinador de agentes que delegara tareas según lo que le pidieras. El tiempo, el tiempo, y un puñado de bugs después, me he encontrado con que estoy aprendiendo mucho más de lo que pasa entre bambalinas que de lo que el agente realmente llega a hacer. Y es que cuando le das una instrucción a un agente de IA —ya sea OpenCode, Claude, Hermes o el que tú quieras— no hay magia. Lo que hay es una coreografía compleja de mensajes que van y vienen, eventos que se disparan, herramientas que se invocan y un modelo de lenguaje que procesa todo después de que el agente lo haya pretratado. En este episodio abro la caja negra y te cuento exactamente qué hay dentro. Te explico el viaje completo de un mensaje: desde que escribes el prompt hasta que obtienes la respuesta. Cómo funciona el streaming, cómo el modelo "piensa en voz alta" con los reasoning events, cómo decide qué herramientas usar con las tool calls, y cómo todo se monta en una batidora que reconstruye la información antes de enviarla al modelo. Y sí, el modelo no razona, simplemente predice. Pero la gracia está en que ahora no solo habla, también actúa. El modelo recibe una lista de herramientas disponibles y decide por sí mismo cuál usar según el contexto. No es programación tradicional de "si pasa A, usa la herramienta A". Es el modelo el que, basándose en su entrenamiento, predice qué herramienta le dará la mejor respuesta. Y luego está el problema. El bucle. El modelo devuelve tool calls, el agente ejecuta las herramientas, vuelve a llamar al modelo, y así una y otra vez hasta que se alcanza el máximo de pasos y todo se para. No sé si es un problema de cómo he definido las llamadas, del motor o de las skills. Llevo días toqueteando, probando, cambiando cosas, y todavía no tengo claro dónde está el fallo. Lo que sí tengo claro es que unas skills bien preparadas dan mejores resultados que un modelo más potente. Y esa lección, por sí sola, ya ha valido la pena. Porque al final, la calidad de las instrucciones que le das al agente importa más que el modelo que uses por debajo. Te cuento también por qué elegí Rust y Ratatui para la interfaz, en lugar de lo típico en Python o TypeScript. Spoiler: me lié más con el lenguaje que con el objetivo final, como suele pasar. Y te presento a los subagentes de Anacleto: uno para el tiempo, otro para noticias, otro para chistes, otro para investigar... cada uno con su propia personalidad y herramientas. Capítulos del episodio: Capítulos del episodio: 0:00 - Introducción: abriendo la caja negra de los agentes de IA2:19 - El viaje de un mensaje: del prompt al modelo de lenguaje3:49 - Arquitectura de agentes: coordinador, subagentes y la TUI en Rust6:11 - El motor como director de orquesta: roles system, user, assistant y tool8:27 - System prompt y optimización: delegación en subagentes especializados11:13 - Streaming y server-sent events: cómo se construye la respuesta token a token14:20 - Razonamiento y tool calls: el modelo predice, no piensa, pero actúa17:59 - El bucle de herramientas: el problema de la delegación infinita en Anacleto20:56 - Skills, subagentes desechables y sistema de permisos25:16 - Demostración práctica de Anacleto: tiempo, chistes y noticias29:22 - Conclusiones, redes y despedida Más información y enlaces en las notas del episodio 🌐 Aquí lo puedes encontrar todo 👉 https://atareao.es✈️ Telegram (el grupo) 👉 https://t.me/atareao_con_linux✈️ Telegram (el canal) 👉 https://t.me/canal_atareao🦣 Mastodon 👉 https://mastodon.social/@atareao🐦 Twitter 👉 https://twitter.com/atareao🐙 GitHub 👉 https://github.com/atareao