Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Un agente en tu bolsillo: Crea un Chatbot en Te...

Un agente en tu bolsillo: Crea un Chatbot en Telegram que pueda hacer cualquier cosa

Cada vez estamos más acostumbrados a trabajar con agentes de IA para resolvernos tareas a ayudarnos con procesos.

Pero nos encontramos ante dos situaciones:

- Aplicaciones web con capacidades limitadas
- Agentes en nuestra máquina que no podemos usar lejos del ordenador

¿Y si pudiéramos tener lo mejor de los dos mundos?

En esta charla te explicaré cómo usar el modo headless de los CLIs agénticos para, en pocos minutos, conectar tu Telegram con tu máquina y poder hacer cualquier cosa que se te ocurra. Literalmente.

- Manejar tu calendario, emails, tareas, repositorios, notas, Drive, Notion...
- Desarrollar cualquier producto, e incluso publicar releases desde tu teléfono
- Instalar nuevas funcionalidades que le permitan realizar más tareas
- ¿Y por qué no? Mejorarse a si mismo de manera remota

Aquí el límite es tu imaginación. ¿Te animas a descubrir cómo?

Avatar for Antonio Leiva

Antonio Leiva

June 09, 2026

More Decks by Antonio Leiva

Other Decks in Education

Transcript

  1. COMMIT 2026 Un agente en tu bolsillo De bot de

    Telegram a agente personal con De bot de Telegram a agente personal con arnés propio. arnés propio. Antonio Leiva DevExpert - Formación IA para Desarrolladores Antonio Leiva @antonioleivag @devexpert_io
  2. CAMBIO DE PLAN Esta charla empezó siendo sobre un CLI.

    Ahora va sobre construir un agente. Antonio Leiva @antonioleivag @devexpert_io
  3. El truco envejeció mal PLAN ORIGINAL Telegram + CLI headless

    Mandas un mensaje, el CLI trabaja, Telegram responde. PROBLEMA REAL El backend manda demasiado Cambian cuotas, auth, permisos y modos no interactivos. La demo queda atada al proveedor. Lo interesante ya no es “qué CLI invoco”. Es qué arnés necesita el modelo para trabajar bien. Antonio Leiva @antonioleivag @devexpert_io
  4. LA HISTORIA DE HOY Vamos a darle mejoras a un

    bot pequeño hasta que se convierta en agente. Antonio Leiva @antonioleivag @devexpert_io
  5. RUNTIME DEL AGENTE La decisión es dónde vive el motor.

    OPENCLAW Pi SDK embebido HERMES POR DEFECTO Runtime propio OPENCLAW Y HERMES OPCIONAL Codex app-server OTROS BACKENDS CLI o SDK Antonio Leiva @antonioleivag @devexpert_io
  6. Versión 0: Pi solo responde Lo más tentador es conectar

    Telegram a Pi y pasarle el mensaje tal cual. PROMESA “Le escribo desde el móvil y hace cosas.” Antonio Leiva @antonioleivag @devexpert_io
  7. El primer código Pi ya hace de motor. Para usarlo

    a diario, le faltan identidad, contexto, memoria y límites. 9 bot.start() 1 const bot = new Bot(process.env.TELEGRAM_TOKEN!) 2 const { session } = await createAgentSession({ cwd: process.cwd() }) 3 4 bot.on("message:text", async (ctx) => { 5 const answer = await askPi(session, ctx.message.text) 6 await ctx.reply(answer) 7 }) 8 Antonio Leiva @antonioleivag @devexpert_io
  8. En cuanto le pides algo real Identidad No tiene personalidad

    estable. Contexto No sabe para quién trabaja ni dónde está. Acción No sabe qué puede tocar ni cuándo parar. Responder mensajes es fácil. Encargarse de algo ya pide más piezas. Antonio Leiva @antonioleivag @devexpert_io
  9. Harness engineering DEFINICIÓN PRÁCTICA Diseñar qué ve, qué puede hacer,

    qué recuerda y cuándo pide permiso. Pi pone el runtime. El arnés decide cómo se usa. Antonio Leiva @antonioleivag @devexpert_io
  10. El plan de mejoras Corazón SOUL.md Visor USER + AGENTS

    Manos Tools + skills Mochila MEMORY.md Escudo Approvals + sandbox Cada mejora resuelve un fallo del bot inicial y añade una pieza de código. Antonio Leiva @antonioleivag @devexpert_io
  11. Mejora 1: corazón IDENTIDAD ESTABLE SOUL.md le da personalidad. Aquí

    dejamos por escrito cómo queremos que actúe cuando no estamos encima. Antonio Leiva @antonioleivag @devexpert_io
  12. SOUL.md QUÉ RESUELVE El bot deja de improvisar su personalidad

    en cada mensaje. El corazón marca el tono, los límites y las decisiones por defecto. 1 # SOUL.md 2 3 Eres un agente personal cercano, directo y con b 4 5 Hablas en español natural. 6 No das vueltas innecesarias. 7 Si haces una broma, que ayude a que la respuesta Antonio Leiva @antonioleivag @devexpert_io
  13. Pi ya no recibe texto suelto 14 const { session

    } = await createAgentSession({ 15 cwd: agentDir, 16 resourceLoader: loader, 17 }) 1 const agentDir = join(homedir(), ".config", "agente-bolsillo") 2 3 const soul = await readFile(join(agentDir, "SOUL.md"), "utf8") 4 5 const loader = new DefaultResourceLoader({ 6 cwd: agentDir, 7 agentDir, 8 appendSystemPromptOverride: (base) => [ 9 ...base, 10 soul, 11 ], 12 }) 13 Antonio Leiva @antonioleivag @devexpert_io
  14. Mejora 2: visor de contexto USUARIO + ENTORNO Ahora sabe

    para quién trabaja y dónde está. El mismo mensaje puede requerir decisiones distintas según usuario, canal, proyecto o permisos. Antonio Leiva @antonioleivag @devexpert_io
  15. USER.md y AGENTS.md USER.md describe a la persona. AGENTS.md describe

    las reglas del entorno. 1 # USER.md 2 3 El usuario es Antonio Leiva. 4 5 - Fundador de DevExpert. 6 - Formación y divulgación sobre IA para desarrol 7 - Imparte AI Expert y formaciones in-company. 1 # AGENTS.md 2 3 En Telegram responde siempre con texto plano. 4 5 No uses marcadores como **, *, #, > o `. 6 7 Para publicar en X, el mensaje debe empezar por Antonio Leiva @antonioleivag @devexpert_io
  16. Código: cargar contexto por piezas 7 const loader = new

    DefaultResourceLoader({ 8 cwd: agentDir, 9 agentDir, 10 appendSystemPromptOverride: (base) => [...base, soul, user, agents], 11 }) 1 const agentDir = join(homedir(), ".config", "agente-bolsillo") 2 3 const soul = await readFile(join(agentDir, "SOUL.md"), "utf8") 4 const user = await readFile(join(agentDir, "USER.md"), "utf8") 5 const agents = await readFile(join(agentDir, "AGENTS.md"), "utf8") 6 Antonio Leiva @antonioleivag @devexpert_io
  17. Mejora 3: manos TOOLS + SKILLS Ya puede usar herramientas.

    La tool hace la acción. La skill explica cómo abordar una tarea que se repite. Antonio Leiva @antonioleivag @devexpert_io
  18. SKILL.md : procedimientos cargables QUÉ RESUELVE No quieres reexplicar workflows

    cada vez que aparece una tarea parecida. Una skill deja listo el procedimiento que el agente debe seguir. 1 --- 2 name: x-publish 3 description: Publish short text or image posts t 4 --- 5 6 # X Publish 7 8 1. Draft a short post. 9 2. Run the bundled publish script. 10 3. Return the URL printed by the script. Antonio Leiva @antonioleivag @devexpert_io
  19. Código: dejar las skills al alcance de Pi 13 const

    { session } = await createAgentSession({ 14 cwd: agentDir, 15 resourceLoader: loader, 16 }) 1 const agentDir = join(homedir(), ".config", "agente-bolsillo") 2 const skillsDir = join(agentDir, "skills") 3 4 const loader = new DefaultResourceLoader({ 5 cwd: agentDir, 6 agentDir, 7 skillsOverride: ({ skills, diagnostics }) => ({ 8 skills: skills.filter((skill) => skill.filePath.startsWith(skillsDir)), 9 diagnostics, 10 }), 11 }) 12 Antonio Leiva @antonioleivag @devexpert_io
  20. Mejora 4: mochila de memoria CONTINUIDAD Recuerda lo que cambia

    la siguiente decisión. Guardamos preferencias y decisiones que deberían influir en la siguiente conversación. Antonio Leiva @antonioleivag @devexpert_io
  21. MEMORY.md 1 # MEMORY.md 2 3 ## Preferencias 4 -

    Responder en texto plano cuando venga de Teleg 5 - Posts en X: directos, sin hashtags salvo que A 1 # AGENTS.md 2 3 La memoria del agente vive en `MEMORY.md`. 4 5 Cuando Antonio te pida recordar algo explícitame 6 añádelo a `MEMORY.md`. 7 8 Mantén recuerdos breves y concretos. Antonio Leiva @antonioleivag @devexpert_io
  22. Mejora 5: escudo PERMISOS Puede actuar con límites claros. Publicar,

    borrar, ejecutar comandos o tocar archivos sensibles no debería depender de que el modelo “se porte bien”. Antonio Leiva @antonioleivag @devexpert_io
  23. Cómo lo hacen otros agentes TOOL POLICY Qué puede usar

    Allowlist o denylist de tools: leer, escribir, ejecutar comandos, navegar, publicar. SANDBOX Dónde se ejecuta Workspace aislado, Docker, VM o filesystem limitado para contener la acción. APPROVAL LAYER Cuándo pregunta Si una tool toca algo externo o sensible, el runtime pide confirmación antes de seguir. En nuestra demo hacemos la versión mínima: antes de publicar en X, Telegram exige un “Confirmo”. Antonio Leiva @antonioleivag @devexpert_io
  24. El arnés completo Canal Telegram Agent Runtime Contexto SOUL ·

    USER · AGENTS Skills SKILL.md Memoria MEMORY.md Modelo Pi SDK Tools Approvals Antonio Leiva @antonioleivag @devexpert_io
  25. El recorrido completo Telegram no es el agente. Es la

    puerta de entrada. 1 Mensaje Telegram solo trae el turno. 2 Arnés Carga identidad, usuario, reglas, memoria y skills. 3 Runtime Pi ejecuta el modelo con tools. 4 Frontera Approval antes de acciones sensibles. 5 Salida Respuesta, acción o recuerdo actualizado. Antonio Leiva @antonioleivag @devexpert_io