Category: Blog

Your blog category

  • Cómo configurar un webhook en Hermes Agent paso a paso

    Cómo configurar un webhook en Hermes Agent paso a paso

    Un compañero me enseñó, orgulloso, su automatización de code review: un cron cada cinco minutos que llamaba a la API de GitHub y, si aparecía un PR nuevo, lanzaba el agente.

    Funcionaba. Más o menos.

    Cuando GitHub tardaba, se duplicaban las revisiones. Cuando el proceso moría de madrugada, nadie se enteraba hasta el lunes.

    El problema no era el agente. Era que estaba preguntando en lugar de escuchar.

    Un webhook en Hermes Agent invierte esa relación: en vez de sondear, dejas que GitHub, GitLab o cualquier servicio que hable HTTP llamen a tu puerta con la firma criptográfica verificada, y el agente reacciona solo cuando de verdad ha pasado algo.

    Una aclaración antes de seguir, porque me lo preguntáis mucho: Hermes Agent es el agente autónomo open source de Nous Research, no un producto mío. Yo hago contenido sobre él porque me parece una de las piezas más interesantes del ecosistema agéntico actual.

    Todo lo que sigue está verificado contra la documentación oficial de Hermes Agent en julio de 2026. El adaptador webhook sigue evolucionando, así que contrasta con la doc si tu instalación es posterior.

    Los 7 pasos para configurar un webhook en Hermes Agent

    1. Activa el adaptador con hermes gateway setup o las variables WEBHOOK_* en ~/.hermes/.env.
    2. Comprueba que el servidor responde en http://localhost:8644/health.
    3. Define la ruta dentro de platforms.webhook.extra.routes en ~/.hermes/config.yaml.
    4. Elige el esquema de firma del proveedor y valida el HMAC (usa el genérico V2).
    5. Dispara la ruta a mano con hermes webhook test antes de conectar el proveedor real.
    6. Marca con deliver_only: true las rutas que no necesitan que el agente razone.
    7. Ajusta y lista las rutas desde la CLI sin volver a editar YAML.

    Tiempo estimado: 15 minutos.
    Necesitas: Hermes Agent instalado, acceso a la configuración de webhooks del proveedor y una URL pública (o un túnel) que llegue a tu puerto.

    Vamos al lío.

    Qué es un webhook en Hermes Agent y qué hace el adaptador

    Un webhook en Hermes Agent es una ruta HTTP que recibe eventos POST de un servicio externo, valida su firma HMAC y los convierte en una ejecución del agente. Lo gestiona el adaptador webhook, que levanta un servidor HTTP y por cada petición hace cuatro cosas en orden:

    1. Valida la firma HMAC del emisor.
    2. Transforma el payload JSON en un prompt para el agente.
    3. Ejecuta el agente con ese prompt.
    4. Enruta la respuesta de vuelta al origen o a otra plataforma que hayas configurado.

    Ese paso 4 es el que la gente subestima. No es solo "recibir eventos": es cerrar el círculo. El PR entra por GitHub y el comentario sale por GitHub. O por Telegram. Tú decides.

    Paso 1: activa el webhook en Hermes Agent

    Puedes activar el adaptador de dos formas: con el asistente interactivo o declarando las variables de entorno. El asistente:

    hermes gateway setup
    

    O directamente las variables de entorno en ~/.hermes/.env:

    WEBHOOK_ENABLED=true
    WEBHOOK_PORT=8644
    WEBHOOK_SECRET=your-global-secret
    
    Variable Default Para qué sirve
    WEBHOOK_ENABLED false Activa el adaptador
    WEBHOOK_PORT 8644 Puerto del servidor HTTP
    WEBHOOK_SECRET (ninguno) HMAC global de fallback

    Respeta la separación: la configuración general vive en ~/.hermes/config.yaml y los secretos en ~/.hermes/.env. El día que compartas tu config con alguien lo vas a agradecer.

    Paso 2: comprueba que el servidor webhook responde

    El adaptador expone un endpoint /health en el puerto configurado. Si devuelve respuesta, está escuchando y puedes seguir:

    curl http://localhost:8644/health
    

    Si esto no responde, no sigas. Todo lo demás depende de que el servidor esté escuchando.

    Paso 3: define tu primera ruta de webhook en config.yaml

    Aquí está el núcleo de todo. Una ruta es un bloque dentro de platforms.webhook.extra.routes en tu config.yaml:

    platforms:
      webhook:
        enabled: true
        extra:
          port: 8644
          secret: "global-fallback-secret"
          rate_limit: 30
          max_body_bytes: 1048576
          routes:
            github-pr:
              events: ["pull_request"]
              secret: "github-webhook-secret"
              prompt: |
                Review this pull request:
                Repository: {repository.full_name}
                PR #{number}: {pull_request.title}
                Author: {pull_request.user.login}
                URL: {pull_request.html_url}
              skills: ["github-code-review"]
              deliver: "github_comment"
              deliver_extra:
                repo: "{repository.full_name}"
                pr_number: "{number}"
    

    Léelo de arriba abajo y tienes la historia completa: escucha eventos pull_request, valida con este secreto, construye este prompt, usa esta skill y devuelve la respuesta como comentario en el PR.

    Estas son las propiedades que puede llevar una ruta:

    Propiedad Obligatoria Para qué sirve
    events No Tipos de evento a aceptar; si lo dejas vacío, acepta todos
    secret Sí* Secreto HMAC de validación
    prompt No Plantilla con dot-notation; si se omite, vuelca el JSON completo
    skills No Skills que se cargan para esa ejecución del agente
    filters No Filtrado declarativo del payload
    script No Ruta a un script de filtro o transformación propio
    deliver No Destino: github_comment, telegram, discord, slack, log
    deliver_extra No Configuración del destino (chat_id, repo, pr_number…)
    deliver_only No Salta el agente y envía el prompt como mensaje literal

    *secret es obligatorio salvo que la ruta herede el secreto global.

    Sobre las plantillas de prompt, cuatro detalles que te van a morder si no los sabes:

    • La dot-notation resuelve rutas anidadas: {pull_request.title} equivale a payload["pull_request"]["title"].
    • Si una clave no existe, se renderiza literalmente como {clave}. No falla, no avisa. Tu prompt simplemente llega con basura dentro. Este es el error número uno.
    • {__raw__} vuelca el payload entero como JSON indentado, truncado a 4000 caracteres. Muy útil mientras exploras un proveedor nuevo, mala idea en producción.
    • Las estructuras anidadas se serializan a JSON y se truncan a 2000 caracteres. Si un prompt te llega cortado por la mitad, es esto.

    Paso 4: valida la firma HMAC del proveedor

    Hermes trae cuatro verificadores de firma. Dos específicos y dos genéricos para todo lo demás:

    • GitHub: cabecera X-Hub-Signature-256, formato sha256=<hex>, HMAC-SHA256 del body.
    • GitLab: cabecera X-Gitlab-Token, comparación literal del secreto.
    • Genérico V2 (el recomendado): cabeceras X-Webhook-Signature-V2 y X-Webhook-Timestamp. El HMAC-SHA256 se calcula sobre <timestamp>.<body> y el timestamp debe caer dentro de ±300 segundos.
    • Genérico V1 (legacy, deprecado): cabecera X-Webhook-Signature, HMAC solo del body y sin protección anti-replay.

    Usa V2. La diferencia no es cosmética: al meter el timestamp dentro del material firmado, una petición capturada deja de servir pasados cinco minutos. Con V1, un payload robado es válido para siempre.

    Y ahora el matiz que separa a quien ha metido esto en producción de quien no: validar el HMAC prueba la identidad del emisor, no que el contenido sea de fiar. Que GitHub firme el evento confirma que viene de GitHub, no que el título del PR no contenga una inyección de prompt escrita por un colaborador externo. Todo campo que venga de fuera se trata como no confiable, siempre. Es la misma disciplina de límites de confianza que aplico al conectar herramientas externas vía servidores MCP.

    Paso 5: prueba la ruta con hermes webhook test

    No configures una ruta y te quedes mirando GitHub a ver si pica. Hermes trae un comando para dispararla a mano:

    hermes webhook test github-issues
    hermes webhook test github-issues --payload '{"issue": {"number": 42}}'
    

    Con --payload controlas exactamente qué recibe la plantilla, así que puedes verificar que tu dot-notation resuelve bien antes de que el evento real llegue.

    Si el ciclo de "defino el comportamiento, lo pruebo, lo ajusto" te suena a especificar antes de implementar, es exactamente eso. Es el mismo enfoque que desarrollo en el libro de Spec-Driven Development: decide el contrato primero, verifica después.

    Paso 6: usa deliver_only para rutas sin coste de LLM

    Esta es mi parte favorita y la más ignorada. No todo evento necesita un LLM detrás.

    routes:
      antenna-matches:
        secret: "antenna-webhook-secret"
        deliver: "telegram"
        deliver_only: true
        prompt: "🎉 New match: {match.user_name} matched with you!"
        deliver_extra:
          chat_id: "{match.telegram_chat_id}"
    

    Con deliver_only: true el prompt renderizado se envía tal cual como mensaje y el agente nunca se invoca. Coste de inferencia: cero.

    Un despliegue terminado, un pago recibido, un test que falla: no necesitas que un modelo razone sobre eso, necesitas que llegue a tu Telegram. Reserva el agente para lo que exige criterio y usa deliver_only para el resto. Es la decisión que más reduce la factura de tu stack de IA agéntica.

    Paso 7: gestiona las rutas desde la CLI de Hermes

    La CLI crea, lista y elimina rutas sin tocar el YAML, que es lo cómodo para iterar:

    hermes webhook subscribe github-issues \
      --events "issues" \
      --prompt "New issue #{issue.number}: {issue.title}\nBy: {issue.user.login}" \
      --deliver telegram \
      --deliver-chat-id "-100123456789" \
      --description "Triage new GitHub issues"
    
    hermes webhook list
    hermes webhook remove github-issues
    

    Códigos de respuesta del webhook y qué significa cada uno

    El adaptador te dice con precisión qué ha pasado. Aprende esta tabla y te ahorras horas:

    Código Significado
    200 Entregado, o duplicado descartado por idempotencia
    401 Firma inválida o ausente
    400 JSON malformado
    404 Ruta desconocida
    413 El body supera max_body_bytes
    429 Rate limit superado
    502 El destino rechazó la entrega

    Dos protecciones que vienen puestas de serie y conviene conocer: el rate limit por defecto es de 30 peticiones por minuto y por ruta (ajustable con rate_limit), y hay una caché de idempotencia de una hora basada en las cabeceras de delivery ID. Ese reenvío duplicado que rompía el cron de mi compañero aquí devuelve 200 y no ejecuta nada.

    Una última nota de seguridad: toda ruta necesita un secreto, propio o heredado del global. INSECURE_NO_AUTH existe, pero solo funciona en loopback (127.0.0.1, localhost, ::1). Está bien pensado: no puedes dejarte una puerta abierta en producción por accidente.

    Empieza por lo pequeño

    Si vas a hacer una sola cosa hoy, que sea esta: activa el adaptador, crea una ruta con deliver_only: true que te avise por Telegram de algo que ahora mismo miras a mano, y déjala corriendo una semana.

    No montes el code review automático el primer día. Comprueba antes que los eventos llegan, que la firma valida y que tus plantillas resuelven. Cuando eso sea aburrido y predecible, le pones el agente detrás.

    La documentación de referencia está en la guía oficial de webhooks de Hermes Agent y el código en el repositorio de NousResearch.

    Y si lo que quieres es el marco completo —cómo pasar de una idea a un producto real apoyándote en agentes sin acabar con un montón de automatizaciones frágiles— eso es justo lo que enseño en el curso Construye con IA, y lo que practicamos cada semana dentro de Dominicode Labs.

    Preguntas frecuentes

    ¿Necesito exponer mi máquina a internet para usar un webhook en Hermes Agent?

    Sí, el proveedor externo tiene que poder alcanzar el puerto donde escucha el adaptador (8644 por defecto), así que necesitas una URL pública o un túnel hacia tu equipo. Para probar en local sin montar nada de eso puedes fijar el secreto de la ruta a INSECURE_NO_AUTH y saltarte la validación de firma, pero Hermes solo lo acepta cuando el gateway escucha en loopback (127.0.0.1, localhost, ::1), precisamente para que no puedas dejarte esa puerta abierta de cara a internet.

    ¿Qué diferencia hay entre la firma genérica V1 y la V2?

    La V2 incluye protección anti-replay y la V1 no. V2 usa las cabeceras X-Webhook-Signature-V2 y X-Webhook-Timestamp, calcula el HMAC-SHA256 sobre <timestamp>.<body> y rechaza cualquier petición cuyo timestamp se salga de ±300 segundos. V1 firma solo el body, está deprecada y una petición capturada sigue siendo válida indefinidamente.

    ¿Puedo recibir webhooks sin gastar tokens de LLM?

    Sí. Añade deliver_only: true a la ruta y Hermes renderiza la plantilla del prompt y la envía como mensaje literal al destino configurado, sin invocar nunca al agente. El coste de inferencia es cero. Es la opción correcta para notificaciones de despliegues, pagos o alertas donde no hace falta ningún razonamiento.

    ¿Qué pasa si el proveedor reenvía el mismo evento dos veces?

    Se descarta. Hermes mantiene una caché de idempotencia de una hora basada en las cabeceras de delivery ID del proveedor, y el duplicado recibe un 200 sin ejecutar el agente de nuevo. Es la protección que hace innecesario el típico registro manual de eventos ya procesados que se monta con sondeo por cron.

    ¿Es obligatorio poner un secreto en cada ruta?

    Sí. Toda ruta necesita un secreto para validar la firma HMAC, aunque puede heredar el valor global definido en WEBHOOK_SECRET o en platforms.webhook.extra.secret en lugar de declarar el suyo propio. Sin secreto válido, las peticiones se rechazan con 401. Lo recomendable es un secreto distinto por ruta.

    Mi webhook devuelve 401, ¿qué reviso?

    Un 401 significa firma inválida o ausente, casi siempre por desajuste entre el secreto configurado en Hermes y el que registraste en el proveedor. Verifica que coinciden exactamente, que el proveedor envía la cabecera esperada (X-Hub-Signature-256 en GitHub, X-Gitlab-Token en GitLab) y, si usas V2, que el reloj del emisor no se desvía más de 300 segundos.

    ¿Webhook o polling con cron para disparar un agente?

    Webhook, salvo que el proveedor no los ofrezca. El polling introduce latencia igual al intervalo del cron, duplica ejecuciones cuando la API tarda en responder y falla en silencio si el proceso muere. El adaptador webhook reacciona en el momento del evento, descarta reenvíos con su caché de idempotencia de una hora y devuelve un código HTTP que dice exactamente qué ha fallado. El cron solo gana cuando el sistema origen no emite eventos.

    ¿Por qué mi prompt llega con {algo} sin sustituir?

    Porque esa clave no existe en el payload. Hermes renderiza literalmente como {clave} cualquier ruta que no resuelva, sin lanzar error. Dispara la ruta con hermes webhook test <nombre> --payload '<json>' para inspeccionar la estructura real, o usa {__raw__} temporalmente para volcar el payload completo y localizar el nombre correcto del campo.


    Por Bezael Pérez — Developer senior con más de 15 años de experiencia y fundador de Dominicode.

  • Kimi K3: el modelo “open source” que no vas a poder correr

    Kimi K3: el modelo “open source” que no vas a poder correr

    El 16 de julio de 2026, por la mañana, me llegaron cuatro mensajes casi idénticos. Todos decían alguna versión de lo mismo: "Bezael, ha salido Kimi K3, ¿esto lo puedo bajar y correrlo en local?".

    Entiendo la ilusión. Moonshot AI lo anunció como el mayor modelo open source del mundo. Y "open source" en la cabeza de cualquier developer significa una cosa muy concreta: lo descargo, lo pongo en mi máquina, dejo de pagar tokens.

    Con este no.

    Kimi K3 tiene 2.8 billones de parámetros. Los pesos son abiertos, sí. Pero abrir los pesos de un modelo de ese tamaño es como regalarte los planos de un portaaviones. Técnicamente lo tienes todo. Prácticamente no lo vas a construir en el garaje.

    Así que la pregunta interesante no es "¿supera a Fable 5?". Esa la contesta cualquier tabla de benchmarks y encima se queda obsoleta en tres semanas. La pregunta que sí te cambia el mes es: ¿me conviene mover mi agente de coding a K3, y a partir de cuándo?

    Vamos con eso.

    ¿Qué es Kimi K3?

    Kimi K3 es el modelo de lenguaje que Moonshot AI (Pekín) lanzó el 16 de julio de 2026. Tiene 2.8 billones de parámetros con pesos abiertos, entrada multimodal de imagen y una ventana de contexto de 1M tokens, con razonamiento siempre activo y sin modo rápido. Moonshot lo distribuye en dos variantes: K3 Max, orientada a chat y agentes, y K3 Swarm Max, para paralelismo a gran escala.

    En el índice independiente de Artificial Analysis, Kimi K3 puntúa 57 y ocupa el puesto #4 de 187 modelos evaluados en el corte de julio de 2026. Ese índice se recalcula cada pocas semanas y tanto la puntuación como el puesto se mueven, así que trata la cifra como una foto fechada, no como una constante. Su precio de API es de $3 por millón de tokens de entrada y $15 por millón de salida, con cache hit a $0.30.

    Hasta ahí la ficha. Lo interesante empieza cuando la cruzas con lo que necesitas tú.

    El "open source" de 2.8T no significa lo que crees

    Haz la cuenta conmigo, porque es aritmética de servilleta y te ahorra la tarde.

    2.8 billones de parámetros. Aun cuantizando agresivamente a 4 bits —medio byte por parámetro— necesitas del orden de 1,4 TB de memoria solo para tener los pesos residentes. Sin contar el KV cache, que con una ventana de 1M tokens no es precisamente pequeño.

    Tu Mac con 128 GB de RAM unificada no entra. Ni el doble. Ni el de tu amigo el del homelab con dos 4090.

    Estás hablando de un rack. De órdenes de magnitud por encima de lo que un dev individual —o una startup pequeña— monta para inferencia propia.

    Entonces, ¿qué gana el mundo con que los pesos sean abiertos? Gana algo real, pero indirecto: cualquier proveedor puede servirlo, nadie te encierra en una única API, y el precio tiende a bajar por competencia entre hosts. Eso es valioso. Pero no es soberanía local. Es no depender de un solo vendor.

    Si lo que buscabas era de verdad correr modelos en tu máquina, esa es otra conversación y la tengo escrita aparte: los mejores modelos de IA para ejecutar en local en 2026. Ahí sí hay opciones que caben en tu hardware.

    Para K3 vas a pagar tokens igual que con cualquier modelo cerrado. La forma más rápida de probarlo sin abrirte cuenta en Moonshot es a través de un router; te expliqué el mecanismo completo en qué es OpenRouter y para qué sirve.

    Kimi K3: qué está verificado y qué es marketing de Moonshot

    Aquí voy a ser quisquilloso a propósito, porque el 90% de lo que se ha publicado sobre él estos días mezcla las dos categorías sin avisarte.

    Lo verificado en fuentes independientes (ficha de Kimi K3 en OpenRouter y Artificial Analysis):

    • Kimi K3 se lanzó el 16 de julio de 2026, desarrollado por Moonshot AI (Pekín).
    • Kimi K3 tiene 2.8T parámetros con pesos abiertos y es multimodal con entrada de imagen.
    • Kimi K3 ofrece una ventana de contexto de 1M tokens.
    • Kimi K3 razona siempre: a día de hoy no existe una versión "rápida sin pensar".
    • El precio de Kimi K3 es de $3 por 1M de tokens de entrada y $15 por 1M de salida, con cache hit a $0.30 (un 90% menos).
    • Kimi K3 obtiene 57 en el Artificial Analysis Intelligence Index, puesto #4 de 187 modelos. La media de modelos comparables está en 31.
    • OpenRouter advierte en la ficha del modelo de que la capacidad upstream de Kimi K3 está limitada y son frecuentes los errores 429.

    Lo que dice el fabricante y no está auditado:

    • SWE-bench Verified 76.8%, Terminal-Bench 2.1 en 88.3, FrontierSWE 81.2.
    • Un Coding Index de 76.24 que lo pondría por encima de Fable 5 — dato que circula de terceros y que aún no aparece en la ficha oficial de Artificial Analysis.
    • Las dos variantes, K3 Max y K3 Swarm Max, las anuncia Moonshot y las recogen los medios, pero no aparecen diferenciadas en la ficha de OpenRouter.

    Y aquí una que no está sin confirmar, sino directamente refutada. Moonshot afirma que K3 compite con Fable 5 y supera a Opus 4.8 y a GPT-5.6. Coge el mismo índice independiente que la propia Moonshot cita y mira la tabla completa:

    Modelo Intelligence Index
    Claude Fable 5 59.9
    GPT-5.6 Sol 58.9
    Kimi K3 57
    Claude Opus 4.8 56

    Lo de superar a Opus 4.8 es cierto. Lo de superar a GPT-5.6 es falso: queda casi dos puntos por debajo de Sol. Y "competir con Fable 5" es defendible si por competir entendemos quedarse a tres puntos, que para un modelo de pesos abiertos es una noticia enorme — pero no es lo mismo que empatar.

    Que quede claro: puesto #4 de 187 no se regala y K3 no es humo. Lo que digo es que las cifras de coding, que son las que más te importan a ti, son hoy marketing sin auditar. Trátalas como hipótesis a validar en tu repo, no como hechos.

    El mercado, en cambio, se lo creyó de golpe: según la prensa financiera, el lanzamiento tumbó acciones de semiconductores y le valió el apodo de "segundo shock DeepSeek".

    El coste real de Kimi K3: el impuesto de la verbosidad

    Este es el dato que más me llamó la atención, y está publicado en la misma ficha de Artificial Analysis que todo el mundo cita para el ranking — pero que casi nadie lee hasta el final.

    Kimi K3 consumió 130 millones de tokens de salida para completar el Intelligence Index. La media de los modelos evaluados es de 63M. La propia ficha lo califica de "very verbose".

    Multiplica: 130M × $15 por millón. Son casi 2.000 dólares de output solo para pasar una batería de evaluación.

    Ahí está el punto. El precio de lista de un modelo no es su coste. Su coste es el precio de lista multiplicado por lo que le da la gana escribir.

    K3 razona siempre, y razona largo: algo más del doble que la media. Haz la traducción a dinero — un modelo de $15/1M que emite 2,06 veces los tokens de la media te sale, en la práctica, como uno de ~$31.

    Sigue estando por debajo de Fable 5 a ~$50. Pero la distancia real es la mitad de la que sugiere la tabla de precios:

    Modelo Output / 1M tokens
    Fable 5 ~$50
    Kimi K3 $15
    GLM-5.2 $3.52
    DeepSeek V4 Pro $0.87

    Parece que K3 está en un punto dulce. Y puede que lo esté. Pero esa tabla es engañosa mientras no le añadas la columna que casi nadie mira: tokens emitidos por tarea resuelta. Artificial Analysis publica el agregado de su índice; lo que ningún benchmark publica es ese número para tus tareas.

    Y ojo con el consuelo del cache: el descuento del 90% a $0.30 juega a favor de K3 en agentes, donde reenvías el mismo contexto una y otra vez. Pero aplica a la entrada, no a la salida. Y tu problema con este modelo es la salida.

    ¿Cuándo conviene migrar tu agente de coding a Kimi K3?

    Te conviene mirarlo en serio si:

    • Trabajas con repos grandes de verdad y el millón de tokens de contexto te ahorra la gimnasia de trocear y resumir. Ahí sí compensa.
    • Haces agentic de horizonte largo, con sesiones de muchos pasos, y el razonamiento permanente reduce las veces que el agente se descarrila a mitad de tarea.
    • Estás pagando facturas de cuatro cifras con un frontier caro, y una reducción de coste por token —aun con la verbosidad descontada— te sale a cuenta.
    • Te importa la portabilidad. Pesos abiertos significa que si mañana un proveedor sube precios, te llevas la carga a otro. Eso es apalancamiento real de negociación.

    No te molestes si:

    • Necesitas latencia estable en producción hoy. Los 429 que advierte OpenRouter no son teóricos: la demanda obligó a Moonshot a parar nuevas suscripciones por saturación de GPUs a los pocos días del lanzamiento. Un agente que falla una de cada siete llamadas no es un agente, es una lotería.
    • Tu caso son tareas cortas y bien acotadas. Vas a pagar razonamiento que no necesitas en cada llamada, sin opción de apagarlo.
    • Ya tienes un harness afinado alrededor de otro modelo.

    Y este último es el punto que más me duele repetir: cambiar de modelo casi nunca es donde está tu ganancia. Lo desarrollé entero en por qué el harness agéntico, no el LLM, es el producto. Tus prompts, tus herramientas, tu gestión de contexto y tus validaciones pesan más en el resultado final que dos puntos de diferencia en un índice.

    Si tu agente falla porque le das mal el contexto, K3 va a fallar igual. Solo que escribiendo más y cobrándotelo.

    Es exactamente lo que trabajamos en el curso de Construye con IA: de la idea al producto con Claude Code — montar el sistema alrededor del modelo, para que el día que salga el siguiente K3 puedas cambiarlo en una línea de configuración y seguir con tu vida.

    Veredicto: ¿merece la pena Kimi K3 hoy?

    Kimi K3 es genuinamente bueno. Puesto #4 de 187 en un índice independiente no se regala, y el precio frente a la gama alta occidental es agresivo de verdad.

    Pero no es el modelo que vas a correr en tu máquina, y su coste real está por encima de lo que sugiere su precio de lista. Dos cosas que el anuncio no te dice.

    Mi posición hoy: lo evalúo, no lo migro. Si dependes de coding en producción, espera a dos señales concretas antes de mover nada: que Artificial Analysis publique el Coding Index en su ficha oficial, y que la capacidad upstream se estabilice. Escribo esto la semana del lanzamiento (20 de julio de 2026); si llegas a este post más tarde, comprueba ambas antes de darlas por pendientes.

    Comparar contra la otra familia frontier también ayuda a calibrar: tienes los números de la de OpenAI en la guía práctica de GPT-5.6 vía API.

    Cómo decidirlo con tus propios datos en una hora

    No te fíes de mi veredicto ni del anuncio de Moonshot. Mide:

    1. Coge diez tareas reales de tu backlog — no de un benchmark. Tareas que ya sabes resolver, para poder juzgar el resultado.
    2. Pásalas por tu modelo actual y por K3, con el mismo harness y los mismos prompts.
    3. Apunta tres columnas por tarea: tokens de salida, coste total y si la tarea quedó resuelta o no.
    4. Compara coste por tarea resuelta, no precio por millón de tokens. Es la única cifra que decide.

    Ese número tuyo vale más que todos los benchmarks del anuncio juntos. Y va a haber sorpresas en las dos direcciones.

    Ese blindaje empieza incluso antes del harness: si escribes la especificación de lo que quieres construir, el modelo pasa a ser una pieza intercambiable. Es la tesis completa del libro de Spec-Driven Development.

    Si haces el experimento, comparte los resultados en Dominicode Labs — estamos juntando mediciones reales de la comunidad, que es exactamente el dato que ningún benchmark publica.

    Preguntas frecuentes sobre Kimi K3

    ¿Qué es Kimi K3?
    Kimi K3 es el modelo de lenguaje de Moonshot AI lanzado el 16 de julio de 2026. Tiene 2.8 billones de parámetros con pesos abiertos, ventana de contexto de 1M tokens, entrada multimodal de imagen y razonamiento permanente. Puntúa 57 en el Artificial Analysis Intelligence Index, puesto #4 de 187 modelos.

    ¿Kimi K3 es realmente open source?
    Los pesos de Kimi K3 son abiertos, pero eso no equivale a poder ejecutarlo. Con 2.8T parámetros, la barrera de hardware lo deja fuera del alcance de cualquier developer o startup pequeña. El beneficio real de esos pesos abiertos es que cualquier proveedor puede servir el modelo: evita el lock-in de vendor y presiona el precio a la baja, pero no da soberanía local.

    ¿Puedo ejecutar Kimi K3 en local?
    En la práctica, no. Con 2.8T parámetros necesitas del orden de 1,4 TB de memoria solo para los pesos, incluso cuantizando a 4 bits. Eso es infraestructura de datacenter, no de escritorio. Los pesos son abiertos, pero eso beneficia a quien pueda servirlos, no a tu portátil.

    ¿Cuánto cuesta Kimi K3?
    $3 por millón de tokens de entrada y $15 por millón de salida, con los cache hits a $0.30 (un 90% de descuento). Ojo: por su verbosidad, el coste efectivo por tarea suele quedar bastante por encima de lo que sugiere esa tarifa.

    ¿Kimi K3 es mejor que Fable 5 para programar?
    Moonshot lo afirma y circula un Coding Index de 76.24 que lo situaría por encima. Ese dato viene de terceros y todavía no aparece en la ficha oficial de Artificial Analysis. En inteligencia general sí hay dato auditado, y no respalda la afirmación: Fable 5 puntúa 59.9 y Kimi K3, 57. En coding concretamente, trátalo como hipótesis hasta que se confirme.

    ¿Cuál es la diferencia entre K3 Max y K3 Swarm Max?
    Según Moonshot, K3 Max está orientado a chat y flujos agénticos convencionales, mientras que K3 Swarm Max está pensado para ejecución paralela a gran escala. Para un agente de coding individual, tu variante es K3 Max.

    ¿Por qué Kimi K3 sale más caro de lo que dice su precio?
    Porque razona siempre y razona largo. Kimi K3 emitió 130M tokens de salida completando el Intelligence Index de Artificial Analysis, frente a una media de 63M — algo más del doble. A $15 por millón de salida, esa verbosidad sitúa el coste efectivo en torno a los $31 por millón. El precio de lista de un modelo no es su coste: su coste es el precio de lista por lo que decide escribir.

    ¿Por qué me devuelve errores 429?
    OpenRouter avisa en la propia ficha del modelo de que la capacidad upstream está limitada tras el lanzamiento. Si lo llevas a producción, necesitas reintentos con backoff y un modelo de fallback configurado.


    Por Bezael Pérez — Developer senior con más de 15 años de experiencia y fundador de Dominicode.

    Analizo lanzamientos como este en detalle en el canal de YouTube de Dominicode.

  • 5 agentes de IA que puedes construir con Hermes para tu negocio

    5 agentes de IA que puedes construir con Hermes para tu negocio

    Cuando hablo con fundadores de startups y desarrolladores sobre agentes de IA, casi todos se imaginan lo mismo: un chatbot de soporte básico en la esquina inferior de su web que responde preguntas frecuentes sacadas de un PDF de texto plano.

    Qué aburrimiento. Y qué desperdicio de tecnología.

    Los agentes de IA no están pensados para ser meros contestadores automáticos. Están diseñados para ejecutar flujos operativos complejos de tu negocio en segundo plano: monitorizar sistemas, calificar prospectos o conciliar facturas de forma 100% autónoma.

    Hoy te quiero enseñar 5 agentes que puedes construir con Hermes (el framework open-source de Nous Research) para delegar las tareas repetitivas de tu negocio y centrarte únicamente en la estrategia y la especificación.


    1. El Operador Autónomo de Comunidad (Soporte + Captación)

    Este es uno de los agentes más demandados. No se limita a responder dudas. Vive en tus canales de Slack, Telegram o Discord y atiende a los usuarios con memoria a largo plazo (recordando lo que habló con cada uno días atrás). Como vimos en nuestro post anterior, un agente de marketing con Notion puede calificar y almacenar leads de forma totalmente autónoma.

    • Cómo opera: Consulta la documentación de tu producto mediante MCP (Model Context Protocol), responde las dudas del usuario y, si detecta interés de compra, inicia una calificación conversacional natural.
    • Acción de negocio: Registra al prospecto en Notion y te envía un resumen por email al final del día con los leads calificados.

    2. El Agente DevOps de Auto-Sanación (Monitoreo + Reparación)

    Tener un desarrollador de guardia para resolver caídas sencillas del servidor a las 3:00 AM es ineficiente y costoso. Un agente de guardia DevOps puede encargarse de la primera línea de defensa.

    • Cómo opera: Monitorea logs y alertas en tu infraestructura en la nube (como Railway o un VPS). Al detectar un error de base de datos o puerto bloqueado, levanta un Sandbox seguro de Docker.
    • Acción de negocio: Ejecuta scripts de diagnóstico, soluciona el fallo de forma aislada y, si es un error inédito, te contacta por Telegram para pedirte instrucciones. Tras recibir la solución, genera una nueva Skill en Python para corregirlo solo la próxima vez.

    3. El Redactor y Programador de Contenidos (Blog + SEO)

    Mantener un blog técnico con posts semanales de alta calidad técnica requiere horas de redacción, auditoría de palabras clave y maquetación. Un agente de contenidos automatiza el pipeline entero.

    • Cómo opera: Dado un tema o palabra clave, redacta el borrador en markdown en estilo directo conversacional, realiza una auditoría SEO y de visibilidad en paralelo y genera una portada Open Graph (thumbnail) en base a tu sistema de diseño.
    • Acción de negocio: Conecta con la REST API de tu CMS (como WordPress) y sube el borrador completo listo para publicar.

    4. El Investigador de Leads y Clientes (Outbound + Ventas)

    El trabajo de buscar prospectos calificados en directorios, registrar sus datos de contacto en una hoja de cálculo y redactar propuestas personalizadas consume gran parte del tiempo de cualquier equipo de ventas.

    • Cómo opera: Scrapea listas de asistentes a eventos tecnológicos o directorios públicos, analiza las webs de las empresas y evalúa si encajan con tu Perfil de Cliente Ideal (ICP).
    • Acción de negocio: Extrae correos, nombres de fundadores y genera un dossier PDF detallado con un ángulo personalizado para realizar la propuesta.

    5. El Asistente de Finanzas y Conciliación Mensual

    Llevar la contabilidad de tu empresa a final de mes suele implicar descargar facturas de múltiples plataformas, buscar transacciones en el banco y meter datos manualmente en un Excel.

    • Cómo opera: Lee tus registros de cobros de plataformas de pago (como Stripe) mediante webhooks, descarga de forma autónoma los PDFs de gastos de tu correo o almacenamiento en la nube y asocia cada factura a su transacción correspondiente.
    • Acción de negocio: Actualiza tu hoja de cálculo mensual de pérdidas y ganancias (P&L) y te alerta si falta alguna factura de soporte de gasto.

    Diseña sistemas que operen, no simples prompts

    El verdadero valor de la IA en 2026 no está en el chat rápido que usas para resolver una duda de código. Está en diseñar agentes de larga duración que se ejecutan de forma de forma persistente e independiente 24/7.

    En el próximo [curso de Agentes IA Autónomos en Producción con Hermes Agent]([ENLACE PENDIENTE]) construimos de principio a fin las plantillas bases y repositorios del Operador de Comunidad y el Agente DevOps de Auto-Sanación.

    Si quieres debatir con otros ingenieros senior sobre cómo desplegar estos flujos operativos en tus propios proyectos, te espero en Dominicode Labs.


    Preguntas Frecuentes (FAQ)

    ¿Por qué usar Hermes Agent para construir estos sistemas?

    Hermes Agent (desarrollado por Nous Research) destaca por su arquitectura diseñada para tareas de largo recorrido. A diferencia de las llamadas a API simples, cuenta con persistencia de memoria SQLite local, soporte nativo de sandboxes de Docker para seguridad y un bucle de auto-mejora que permite que el agente genere sus propias capacidades sobre la marcha.

    ¿Qué nivel de seguridad tienen estos agentes en producción?

    El nivel de seguridad depende del diseño. Al utilizar Docker Sandboxes en Hermes, limitamos la ejecución de código generado por el LLM a contenedores cerrados y efímeros sin red, evitando que un script malicioso pueda borrar datos o comprometer tu servidor principal.

    ¿Se pueden conectar estos agentes a herramientas como Notion o Slack?

    Sí, gracias al Model Context Protocol (MCP). MCP proporciona un estándar abierto que permite conectar de forma directa e inmediata tu agente a Notion, Slack, GitHub, Postgres o Gmail simplemente añadiendo un archivo de configuración JSON.

    ¿Cómo puedo empezar a construir mi primer agente DevOps?

    Puedes empezar por automatizar lecturas de logs. Configura tu agente para que lea las respuestas de un endpoint de health check de tu aplicación y use integraciones de mensajería (Telegram o Slack) para alertarte con datos consolidados cuando detecte respuestas de error 500.


    Por Bezael Pérez — Developer senior con más de 15 años de experiencia y fundador de Dominicode.

  • El Agentic Harness: Por qué un LLM por sí solo no es un producto

    El Agentic Harness: Por qué un LLM por sí solo no es un producto

    Cuando ves la demostración de un brazo robótico industrial realizando una tarea de precisión milimétrica, te quedas maravillado con la tecnología. Sin embargo, ninguna fábrica en su sano juicio dejaría que ese brazo operase de forma autónoma en su línea de montaje si solo consistiera en el motor mecánico.

    Necesita sensores de proximidad, sistemas de parada de emergencia, un software de control de límites y un operario humano supervisando la consola.

    El brazo aporta la fuerza y el movimiento bruto; pero la seguridad, consistencia y utilidad real de la operación dependen del soporte que lo rodea.

    En la inteligencia artificial moderna ocurre exactamente lo mismo. Un modelo de lenguaje (como Claude 3.5 Sonnet o GPT-4o) por sí solo es como ese brazo sin sensores. Para que solucione problemas reales en tu empresa, necesitas envolverlo en un Agentic Harness (Arnés Agéntico).

    Hoy te quiero explicar en qué consiste este concepto arquitectónico y por qué el diseño del arnés es lo que realmente convierte a la IA en un producto de negocio viable.


    El modelo es solo la "inteligencia"

    Existe una falsa creencia de que para automatizar un proceso basta con comprar tokens de API del modelo más grande de la nube y empezar a enviarle instrucciones conversacionales.

    Los LLMs son motores de predicción de texto extraordinarios, pero sufren de carencias críticas que les impiden operar en producción de forma directa:

    1. Carecen de estado: No recuerdan lo que pasó hace cinco minutos a menos que les reenvíes todo el historial (lo que satura el contexto y encarece la consulta).
    2. No controlan su ejecución: Pueden proponer una consulta SQL brillante, pero no tienen la capacidad física de conectarse a tu base de datos para ejecutarla y leer los resultados.
    3. Alucinan bajo presión: Si una herramienta externa les devuelve un error inesperado, el modelo suele inventar un parche absurdo en lugar de detenerse y pedir ayuda.

    Aquí es donde entra el Agentic Harness. El arnés es la infraestructura de software que envuelve al modelo para convertirlo en un agente autónomo, seguro y con memoria persistente.


    Las 4 patas de un Agentic Harness de Producción

    Para que tu arnés agéntico sea robusto y scalables, debe estructurar cuatro capas de soporte bien definidas alrededor de la API del LLM:

    ┌────────────────────────────────────────────────────────┐
    │                    AGENTIC HARNESS                     │
    ├───────────────┬────────────────┬───────────────┬───────┤
    │ Orquestación  │  Persistencia  │  Sandboxing   │ Evals │
    │ y Flujo (Loop)│   y Memoria    │ de Ejecución  │   y   │
    │               │ (SQLite/FTS5)  │    (Docker)   │ Control│
    └───────────────┴────────────────┴───────────────┴───────┘
                                    ▲
                                    │ (Inferencia)
                         [ API de Inferencia LLM ]
    

    1. Orquestación y Control (El Bucle de Decisiones)

    Es el motor lógico que gestiona el ciclo de vida del agente. Se encarga de parsear las peticiones del usuario, construir el prompt de entrada estructurado, llamar al modelo y mapear las respuestas de este hacia herramientas ejecutables. Si la llamada de la herramienta devuelve un error, el loop se encarga de re-intentarlo o alterar el plan de forma autónoma.

    2. Persistencia y Memoria (El Almacén de Estado)

    Evita la amnesia del agente. El arnés debe persistir el estado de la conversación y las variables en una base de datos local (como SQLite con soporte WAL). Si el servidor se apaga o el contenedor de Railway se actualiza por Git-Ops, el agente puede recuperar su memoria y reanudar el flujo en el punto exacto donde se quedó.

    3. Sandboxing de Ejecución (La Seguridad Física)

    Un arnés seguro nunca permite que la IA ejecute código de forma directa en el servidor principal. Como vimos en nuestro post sobre Docker Sandboxing en producción, el aislamiento es la clave. El arnés debe levantar contenedores efímeros cerrados de Docker para que el agente pruebe sus scripts de diagnóstico o compile programas sin poner en riesgo la estabilidad del VPS.

    4. Gobernanza y Evals (El Control Humano)

    El arnés define las fronteras éticas y operativas. Registra logs estructurados para auditorías, escanea prompts entrantes contra inyecciones y, lo más importante, implementa sistemas de autorización (Human-in-the-loop). Si el agente quiere realizar una acción crítica (como eliminar datos o transferir fondos), el arnés congela la ejecución y solicita confirmación al administrador por Telegram.


    Hermes Agent: Un Arnés Agéntico Open-Source

    El framework de Hermes Agent de Nous Research es un excelente ejemplo de un Agentic Harness de producción. No es un modelo de IA; es el andamiaje técnico que te proporciona la persistencia en SQLite, el aislamiento en Docker sandboxes y la interfaz de MCP listos para usar de forma nativa.

    Entender la IA como un sistema completo y no como una simple consulta a una API es la base que enseñamos en el curso de Construye con IA para desarrollar productos robustos. Además, es la arquitectura de infraestructura que implementamos de principio a fin en el nuevo curso de Agentes IA Autónomos en Producción con Hermes Agent.


    Conclusión: Deja de comprar modelos, diseña tu arnés

    Los modelos de lenguaje seguirán bajando de precio y haciéndose más inteligentes cada mes. Son un commodity. El verdadero valor y la propiedad intelectual de tu negocio radican en el diseño de tu Agentic Harness. Al construir un arnés modular, seguro y persistente, garantizas que cualquier modelo (local o en la nube) pueda operar con consistencia para resolver las tareas operativas de tu empresa.

    Si estás estructurando el arnés agéntico para tu negocio y quieres discutir decisiones de arquitectura o seguridad con otros desarrolladores senior de nuestra comunidad, te espero en Dominicode Labs.


    Todo esto descansa sobre una distinción que conviene no dar por sabida: la definición operativa de agente de IA, la que se puede verificar mirando tu código en vez de la etiqueta del producto.

    Preguntas Frecuentes (FAQ)

    ¿Cuál es la diferencia entre LangChain y un Agentic Harness completo?

    ¿Cuál es la diferencia entre LangChain y un Agentic Harness completo? LangChain o LlamaIndex son librerías de software y componentes que te ayudan a estructurar flujos de datos e integraciones. Un Agentic Harness es el sistema en ejecución completo en producción (la arquitectura de servidores, bases de datos de estado, sandboxes aislados de Docker y gateways de mensajería) que aloja y opera al agente de forma continua.

    ¿Por qué la base de datos de persistencia es crítica en el arnés?

    Porque las APIs de inferencia en la nube no guardan historial de conversación real; son totalmente stateless. Sin una base de datos local sólida en el arnés que registre el estado de las sesiones y variables ante cualquier reinicio de servidor, tu agente sufrirá de amnesia agéntica, perdiendo el hilo de su tarea en curso.

    ¿Se pueden integrar políticas de seguridad en el arnés?

    Sí, de hecho es el lugar ideal para hacerlo. Al centralizar el control de ejecución en el arnés, puedes añadir filtros de censura de salida, restringir accesos a carpetas mediante permisos del sistema de archivos y bloquear comandos de consola peligrosos mediante aprobaciones manuales del usuario.

    ¿El arnés agéntico depende de un modelo específico?

    No. Un arnés bien diseñado debe estar totalmente desacoplado del backend de inferencia. Al utilizar APIs compatibles con la interfaz de OpenAI o Anthropic, puedes conectar tu arnés a un servidor local de oMLX en Mac, a Ollama en local, o a modelos propietarios en la nube (como Claude 3.5 o GPT-4) sin reescribir la lógica operativa de tu sistema.


    Por Bezael Pérez — Developer senior con más de 15 años de experiencia y fundador de Dominicode.

  • Guía de Modelos: Los mejores LLMs para correr en local

    Guía de Modelos: Los mejores LLMs para correr en local

    La primera vez que abres Hugging Face, te abrumas. Hay cientos de miles de modelos subidos. Nombres crípticos como Qwen2.5-Coder-7B-Instruct-Q4_K_M.gguf o DeepSeek-R1-Distill-Llama-8B llenan la pantalla de descargas.

    ¿Cuál de todos ellos deberías bajar?

    Si descargas el equivocado, tu ordenador tardará diez segundos en responder cada palabra o, peor aún, la IA empezará a alucinar código absurdo. Correr modelos de IA en local de forma eficiente requiere elegir el modelo adecuado para tu hardware. Como vimos en nuestro post anterior, configurar tu entorno de hardware para LLMs locales es el paso inicial antes de elegir tu modelo de uso diario.

    Hoy te quiero enseñar la guía definitiva con las mejores familias de modelos libres que puedes ejecutar hoy mismo localmente, en qué tareas destaca cada uno y cómo dimensionar su tamaño según tu memoria RAM.


    Las 5 mejores familias de modelos locales

    A día de hoy, el ecosistema de código abierto se ha consolidado en torno a cinco grandes opciones que cubren todas las necesidades de desarrollo y automatización:

    1. Qwen 2.5 Coder (7B y 32B) — El Rey de la Programación

    Desarrollado por Alibaba, es el mejor modelo del mundo para desarrollo de software local en 2026. Su variante de 7B parámetros es tan rápida y precisa que puede correr en cualquier portátil, mientras que el modelo de 32B rivaliza directamente con GPT-4o en generación de código.

    • Ideal para: Autocompletado en IDEs (Cursor/VS Code), refactorizaciones de código y escritura de scripts.

    2. Llama 3 (8B y 70B) — El estándar multipropósito

    El modelo de Meta es la base del ecosistema. Cuenta con un excelente soporte para múltiples idiomas, sigue instrucciones complejas con mucha precisión y está altamente integrado en todos los frameworks de desarrollo.

    • Ideal para: Chatbots generales, análisis de texto, tareas RAG (búsqueda sobre tus documentos locales) y soporte al cliente.

    3. DeepSeek-R1 Distilled (8B y 32B) — Razonamiento avanzado (o1/o3-style)

    Estos modelos han sido entrenados para "pensar antes de hablar". Muestran su cadena de razonamiento y son excepcionales resolviendo problemas lógicos complejos, matemáticas y planificación de arquitectura.

    • Ideal para: Resolver bugs difíciles, planificar especificaciones funcionales y analizar flujos lógicos en bucle.

    4. Mistral & Nemo (7B y 12B) — Ligero y compatible con Herramientas

    La empresa francesa Mistral AI destaca por crear modelos extremadamente compactos con un excelente soporte para la llamada de funciones (Tool Calling).

    • Ideal para: Agentes autónomos (como Hermes Agent) que necesitan interactuar con APIs externas y ejecutar comandos de consola de forma rápida y segura.

    5. Gemma 2 (2B y 9B) — La opción eficiente de Google

    Google ha diseñado una arquitectura muy eficiente que exprime la memoria al máximo. Su modelo de 2B parámetros es perfecto para dispositivos móviles o portátiles antiguos, mientras que la versión de 9B destaca en fluidez de redacción.

    • Ideal para: Dispositivos con recursos limitados (computadores de 16GB de RAM o menos).

    El Secreto del Rendimiento Local: La Cuantización

    No puedes descargar un modelo en su formato original de flotantes (FP16) y esperar que corra en tu ordenador. Ocuparía demasiada memoria. Un modelo de 7B parámetros sin optimizar requeriría más de 14GB de VRAM solo para cargarse en memoria.

    Para solucionar esto, utilizamos cuantización.

    La cuantización consiste en comprimir los pesos del modelo (reduciendo la precisión matemática de 16 bits a 4 u 8 bits).

    El sweet spot indiscutible para la mayoría de desarrolladores es el formato Q4_K_M (cuantización a 4 bits). Reduce el peso en disco del modelo en un 70% (un modelo de 7B pasa de pesar 14GB a ocupar solo 4.5GB en disco) a cambio de una pérdida de precisión matemática prácticamente imperceptible para el usuario.


    Guía rápida de Sizing de memoria RAM/VRAM

    Antes de iniciar cualquier descarga, verifica este mapa de recursos para saber qué modelo puede digerir tu máquina:

    • 16GB de RAM/VRAM: Puedes correr de forma fluida modelos cuantizados de 7B u 8B parámetros (como Qwen 2.5 Coder 7B o Llama 3 8B).
    • 32GB de RAM/VRAM: El entorno perfecto para modelos medianos de 12B a 14B parámetros, o versiones muy optimizadas de modelos de 32B.
    • 64GB de RAM/VRAM o superior: Puedes correr modelos masivos de 32B y 70B parámetros (como Qwen 32B o Llama 70B) que te darán respuestas al nivel de las mejores IAs de pago de la nube.

    Esta lógica de calibración de hardware y selección de modelos locales es la base de las infraestructuras de desarrollo que montamos en el curso de Construye con IA y que llevamos a su máximo rendimiento en el nuevo curso de Hermes Agent.


    Conclusión: Descarga con estrategia

    No descargues el modelo más grande solo porque tiene mejores números en los benchmarks. Un modelo de 7B corriendo a 50 tokens por segundo en tu GPU local siempre te dará una mejor experiencia de desarrollo que un modelo de 70B que satura tu memoria y responde a 1 token por segundo. Encuentra tu equilibrio de hardware, aplica cuantización a 4 bits y monta un entorno de IA local eficiente.

    Si quieres compartir benchmarks de rendimiento de modelos locales en tu propia máquina y conocer qué setups usa nuestra comunidad, te espero en Dominicode Labs.


    Preguntas Frecuentes (FAQ)

    ¿Qué significa el sufijo "Instruct" en los modelos de Hugging Face?

    Los modelos marcados como "Instruct" han sido entrenados específicamente para seguir instrucciones de los usuarios y mantener conversaciones. Los modelos "Base" o nativos solo sirven para completar texto y no son aptos para interfaces de chat o asistentes de código directo.

    ¿Cuál es la diferencia entre los formatos GGUF y safetensors?

    GGUF es un formato contenedor diseñado por el ecosistema de llama.cpp para correr modelos en CPU y GPU locales compartiendo la memoria RAM de forma eficiente. Safetensors es el formato nativo utilizado principalmente por runtimes de Python (como PyTorch o Hugging Face transformers) para entrenamiento e inferencia en tarjetas gráficas dedicadas.

    ¿Se pueden mezclar modelos locales con APIs en la nube?

    Sí. Herramientas de orquestación como Hermes Agent permiten configurar setups híbridos. Puedes configurar tu agente para que use un modelo de código local ultra-rápido (como Qwen 2.5 Coder 7B) para autocompletados y delegue las tareas de planificación complejas a APIs externas como Claude 3.5 Sonnet.

    ¿Los modelos locales pueden dañar mi hardware?

    No. Correr modelos locales consumirá el 100% de los recursos de tu GPU/CPU durante la inferencia, lo que aumentará la temperatura de los componentes y activará los ventiladores de tu máquina. Es un comportamiento totalmente normal bajo cargas de trabajo pesadas de computación.


    Por Bezael Pérez — Developer senior con más de 15 años de experiencia y fundador de Dominicode.

  • Cómo crear una skill con Claude Code que tu agente realmente use

    Cómo crear una skill con Claude Code que tu agente realmente use

    1. Detecta el último tag con git describe --tags --abbrev=0.
      Si no hay tags, usa el primer commit del repo (git rev-list --max-parents=0 HEAD).

    2. Lista los commits desde ese punto:
      git log <tag>..HEAD --pretty=format:"%s|%h|%an"

      Si el repo tiene el script scripts/parse-commits.sh, úsalo en su lugar —
      ya devuelve los commits agrupados por tipo.

    3. Clasifica cada commit por su prefijo (Conventional Commits):

      • feat: → Added
      • fix: → Fixed
      • refactor:, perf:, chore: → Changed
      • Cualquier otro → Otros cambios (inclúyelo, no lo descartes)
    4. Redacta cada línea en español, orientada al usuario final, no al código.
      "feat: add retry logic to http client" se convierte en
      "El cliente HTTP ahora reintenta automáticamente las peticiones fallidas."

    5. Genera la sección nueva del changelog:

      [Sin publicar] – AAAA-MM-DD

      Added

      Fixed

      Changed

    6. CHECKPOINT — antes de tocar el archivo, muéstrame la sección generada
      en el chat y espera mi confirmación explícita. Este paso es obligatorio:
      CHANGELOG.md está versionado y no quiero sorpresas.

    7. Si confirmo, inserta la sección arriba de la última entrada en
      CHANGELOG.md. Si pido cambios, ajusta y vuelve al paso 6.

    8. No hagas commit ni push. Termina mostrando el diff del archivo.

    
    Y el script de soporte, `scripts/parse-commits.sh` — opcional, pero le ahorra a Claude tener que interpretar el output crudo de `git log`:
    
    ```bash
    #!/usr/bin/env bash
    set -euo pipefail
    
    TAG=$(git describe --tags --abbrev=0 2>/dev/null || git rev-list --max-parents=0 HEAD)
    
    git log "${TAG}..HEAD" --pretty=format:'%s' | while read -r line; do
      case "$line" in
        feat:*)     echo "ADDED|${line#feat: }" ;;
        fix:*)      echo "FIXED|${line#fix: }" ;;
        refactor:*) echo "CHANGED|${line#refactor: }" ;;
        chore:*)    echo "CHANGED|${line#chore: }" ;;
        *)          echo "OTHER|${line}" ;;
      esac
    done
    

    Con esto guardado, escribo en el chat "prepara las notas de la release" y Claude Code hace el resto: detecta la skill por la description, corre el script, clasifica, redacta, y me para en seco antes de tocar un archivo versionado.

    Buenas prácticas que aprendí a la fuerza

    Pon checkpoints en todo lo irreversible. Escribir un archivo, hacer push, mandar un mensaje a Slack, borrar algo — cualquier paso caro de deshacer necesita una confirmación explícita en medio de la skill, no al final. Es la diferencia entre revisar un preview y descubrir el desastre ya en producción.

    Deja que la skill delegue en un subagente cuando el trabajo es pesado. Si un paso implica investigar, leer decenas de archivos o generar contenido largo, no lo hagas inline: invoca un subagente especializado para esa parte. Mantiene limpio el contexto de la conversación principal y evita que la skill se vuelva un monstruo de 300 líneas.

    Prueba la skill en conversación real antes de darla por terminada. Escribe la description, úsala tres o cuatro veces con frases distintas y fíjate en cuándo se activa y cuándo no. Ajusta el texto según lo que veas, no según lo que creas que debería pasar. Es la misma lógica de iteración que enseño en el curso Construye con IA: no escribes la spec perfecta a la primera, la afinas contra el comportamiento real del agente.

    Hay un nivel más adelante: agentes que escriben sus propias skills en caliente cuando se topan con un problema nuevo, sin que tú definas nada de antemano. Así funciona el Self-Improving Loop de Hermes Agent — pero esa es una capa distinta a la que cubrimos hoy, donde eres tú quien define el proceso.

    Skills, comandos y subagentes: cuándo usar cada uno

    Herramienta Quién la invoca Contexto Úsala para
    Comando slash Tú, explícitamente (/nombre) El mismo de la conversación Acciones puntuales que disparas a propósito
    Skill Claude, solo, según la description El mismo de la conversación Procesos y conocimiento que se deben aplicar siempre, sin pedirlo cada vez
    Subagente Claude o tú, delegando Ventana aislada, propia Tareas largas o ruidosas que ensuciarían el contexto principal

    No son excluyentes. Mi skill del changelog podría, en un paso intermedio, delegar en un subagente que revise el tono de cada línea antes de mostrarme el preview. Se combinan.

    Qué hacer con esto hoy

    Abre un proyecto donde repitas algo cada semana. Escribe el SKILL.md con una description que incluya las frases exactas que usarías para pedirlo, y un "NO la uses para" explícito. Pruébala tres veces antes de confiar en ella.

    Si el proceso involucra tocar código, escribir archivos o correr comandos, mete un checkpoint. Siempre. La skill que no para a preguntar es la skill que un día te rompe algo en silencio.

    Si quieres ver más skills reales que uso en producción — no solo la del changelog — las voy soltando en Dominicode Labs. Y si prefieres verlo en pantalla en vez de leerlo, en el canal de YouTube tengo el mismo flujo grabado de principio a fin.

    Preguntas frecuentes

    ¿Cuál es la diferencia entre una skill y un subagente en Claude Code?

    Una skill inyecta sus instrucciones en la conversación que ya tienes abierta — no aísla nada. Un subagente corre en una ventana de contexto separada, con su propio system prompt y su propio set de herramientas. Usas una skill para aplicar un proceso o conocimiento de forma consistente; usas un subagente para delegar una tarea larga o ruidosa que ensuciaría el contexto principal. Y una skill puede invocar a un subagente dentro de sus propios pasos — no son excluyentes.

    ¿En qué se diferencia una skill de un comando slash en Claude Code?

    En quién decide invocarla. Un comando slash (.claude/commands/*.md) lo disparas tú a propósito, escribiendo /nombre-del-comando. Una skill la dispara Claude solo, cuando el contexto de la conversación coincide con lo que describe su description en el frontmatter. Si necesitas control total sobre cuándo se ejecuta algo, usa un comando. Si quieres que el agente aplique un proceso sin que se lo tengas que pedir cada vez, crea una skill.

    ¿Dónde debo guardar mis skills, en el proyecto o de forma global?

    Si la skill depende de convenciones específicas de un repo — como el formato exacto del changelog de ese proyecto — guárdala en .claude/skills/ dentro del repo. Si es un proceso que repites en todos tus proyectos (auditar accesibilidad, generar tests, revisar una spec), ponla en ~/.claude/skills/ para que esté disponible en cualquier sesión.

    ¿Cómo sé si Claude realmente activó mi skill y no está improvisando?

    Claude Code indica cuándo carga una skill durante la conversación. Si pides algo que debería activarla y no ves esa señal, es casi siempre un problema de description: o es demasiado vaga, o compite con otra skill que describe algo parecido.

    ¿Puedo tener dos skills que se superpongan en tema sin que se pisen?

    Puedes, pero no deberías. Si dos descriptions cubren un terreno similar, Claude tiene que decidir entre ambas y a veces se equivoca. Es mejor una sola skill bien delimitada que dos que compiten por el mismo trigger.

    ¿Una skill puede invocar a un subagente dentro de sus instrucciones?

    Sí. Puedes escribir un paso que diga explícitamente "delega esta parte en el subagente X" y Claude lo hace como parte del flujo de la skill. Es la combinación que uso cuando un paso requiere investigación o generación larga sin ensuciar el contexto principal.

    ¿Las skills reemplazan al archivo CLAUDE.md del proyecto?

    No. CLAUDE.md es contexto general que Claude lee siempre — arquitectura, convenciones, comandos del proyecto. Una skill es un proceso puntual que se activa solo cuando aplica. Uno da contexto permanente, la otra ejecuta un flujo específico. Se complementan, no se sustituyen.


    Por Bezael Pérez — Developer senior con más de 15 años de experiencia y fundador de Dominicode.

  • Claude Code: Ahorra 90% en tokens con este truco

    Claude Code: Ahorra 90% en tokens con este truco

    Ayer estaba revisando la factura de mi cuenta de Anthropic. Estaba utilizando la nueva CLI de Claude Code para refactorizar un proyecto local y noté que los costes se estaban disparando de forma absurda. Cada pequeña pregunta rápida de "sí" o "no" me estaba costando miles de tokens de entrada completos.

    ¿Cómo era posible? El sistema de Prompt Caching de Anthropic promete ahorrar hasta un 90% de los costes en contextos de conversación repetidos y largos.

    Al investigar la consola de depuración por debajo, descubrí al culpable. Un comportamiento por defecto en el diseño de Claude Code que destruye el caché en cada turno.

    Hoy te quiero explicar el truco de la bandera exclude-dynamic-system-prompt-sections, cómo configurarla en tu máquina y por qué te ahorrará cientos de dólares en tu factura de API de Claude.


    Por qué Claude Code rompe el Prompt Caching por defecto

    Para que el caché de prompts de Claude funcione, la IA necesita que los primeros bloques de texto de tu conversación (el System Prompt y los primeros archivos cargados) sean exactamente idénticos entre una llamada y la siguiente. Si cambia una sola letra o espacio en el System Prompt, el motor de Anthropic invalida el caché y tiene que volver a leer y procesar toda la conversación desde cero, cobrándote la tarifa completa.

    Por defecto, Claude Code intenta ser extremadamente inteligente. Cada vez que le haces una pregunta en la terminal, el CLI inyecta datos dinámicos de tu entorno directamente dentro del System Prompt:

    • La fecha y hora exacta actual (cambia cada segundo).
    • Tu directorio de trabajo actual (cambia si navegas carpetas).
    • El estado de tu repositorio de Git (cambia con cada commit o archivo modificado).

    Como esta información varía constantemente, tu System Prompt es distinto en cada interacción. El resultado: un 0% de efectividad de caché y una factura inflada de tokens de entrada.


    La Solución: Excluir las Secciones Dinámicas

    Para solucionar este desperdicio de tokens, Anthropic introdujo la bandera --exclude-dynamic-system-prompt-sections.

    Cuando ejecutas Claude Code con este parámetro, el CLI modifica su comportamiento arquitectónico: extrae toda la información dinámica y variable (fecha, git status, directorio) del System Prompt y la inyecta al final del User Message (el mensaje que tú escribes).

    De este modo:

    1. El System Prompt queda estático y congelado en la memoria de la API de Anthropic.
    2. Tu tasa de acierto de caché de prompts sube a prácticamente el 100%.
    3. Tus respuestas locales tardan milisegundos en lugar de segundos porque el modelo no tiene que volver a re-procesar los archivos del repositorio en cada turno.

    Cómo configurarlo en tu entorno de desarrollo

    Tienes dos formas de aplicar este hack de ahorro de costes según tu preferencia:

    Opción 1: Ejecución manual en consola

    Simplemente añade la bandera al arrancar la herramienta en tu terminal:

    claude --exclude-dynamic-system-prompt-sections
    

    Opción 2: Configuración persistente (Recomendado)

    Para no tener que escribir la bandera en cada sesión, puedes configurarla por defecto en tu archivo de preferencias global de Claude Code ubicado en ~/.claude/settings.json (o crearlo si no existe):

    {
      "excludeDynamicSystemPromptSections": true
    }
    

    Este tipo de optimizaciones de costes de API a bajo nivel y sintonía fina de prompts es la que enseñamos a dominar en el curso de Construye con IA para evitar sorpresas en facturación. Como vimos en nuestro post sobre desarrollo con IA y Loop Engineering, optimizar las APIs es crucial para mantener un runtime agéntico económico en producción, técnica que aplicamos a fondo en el nuevo curso de Hermes Agent.


    Conclusión: Controla tus llamadas

    Las herramientas agénticas de consola son increíblemente productivas, pero delegar el control de la API sin vigilar cómo se consumen los tokens es un error costoso. Al aplicar la exclusión de prompts dinámicos, garantizas un flujo de desarrollo veloz, económico y optimizado bajo los estándares de caché nativos de Anthropic.

    Si estás utilizando Claude Code en tu día a día y quieres compartir trucos de optimización de costes y automatización con otros desarrolladores senior de nuestra comunidad, te espero en Dominicode Labs.


    Preguntas Frecuentes (FAQ)

    ¿Perderá capacidad Claude Code al quitar esta información del System Prompt?

    No. El modelo sigue recibiendo exactamente la misma información (tu directorio actual, la fecha y el estado de git). La única diferencia es el lugar donde se inyecta esa información dentro del JSON de la llamada a la API. Al estar en el mensaje del usuario, no interfiere con el bloque de caché superior.

    ¿Cuánto dinero real puedo ahorrar con este ajuste?

    En repositorios medianos a grandes (donde el contexto inicial de archivos y reglas de código puede ocupar más de 20.000 tokens), el ahorro puede superar el 80% o 90% en tokens de entrada. En lugar de pagar por procesar 20.000 tokens en cada pregunta, solo pagarás una pequeña tarifa de lectura inicial y céntimos de uso de caché en los turnos posteriores.

    ¿Por qué Claude Code no tiene esta opción activada por defecto?

    Porque prioriza la experiencia de usuario inicial sobre el coste de API. Inyectar metadatos en el System Prompt garantiza que la IA entienda el contexto del sistema de archivos desde la primera palabra de forma muy estricta, aunque resulte ineficiente a nivel financiero para el desarrollador.

    ¿Se puede usar este truco en otros editores como Cursor?

    Cursor gestiona su propio sistema de prompt caching y almacenamiento de contexto de forma interna mediante indexación de archivos (embeddings). Este ajuste es exclusivo de la interfaz de consola de Claude Code (CLI oficial de Anthropic).


    Por Bezael Pérez — Developer senior con más de 15 años de experiencia y fundador de Dominicode.

  • Novedades de ECMAScript 2026 (ES17) en JavaScript

    Novedades de ECMAScript 2026 (ES17) en JavaScript

    Si llevas unos años programando en JavaScript, seguro que has tenido que lidiar con el clásico error de precisión aritmética: intentar sumar 0.1 y 0.2 en la consola de tu navegador y ver cómo devuelve 0.30000000000000004.

    Durante décadas, la respuesta de la comunidad ha sido la misma: "Es cosa del estándar IEEE 754 de coma flotante, acéptalo, redondea a mano o usa una librería externa".

    Por fin, Ecma International ha decidido poner fin a este y otros parches históricos con la aprobación oficial de ECMAScript 2026 (ES17).

    Hoy te quiero enseñar las características más importantes de este nuevo estándar que cambiarán tu forma de escribir JavaScript en tu día a día, y cuáles son las esperadas funciones que se han quedado a las puertas.


    Las características estrella de ES2026

    La versión 17 de la especificación oficial se centra en cerrar brechas históricas de la ergonomía del lenguaje, manipulación de datos binarios y control de errores:

    1. Math.sumPrecise (Suma exacta de flotantes)

    Se acabó el usar librerías externas o el típico truco de multiplicar por 100 y luego dividir solo para sumar decimales. El nuevo método Math.sumPrecise recibe un iterable de números y realiza una suma compensando matemáticamente las pérdidas de precisión de la coma flotante.

    const valores = [0.1, 0.2];
    // JavaScript tradicional: valores[0] + valores[1] => 0.30000000000000004
    const totalExacto = Math.sumPrecise(valores); // => 0.3
    

    2. Error.isError (Validación robusta de excepciones)

    Comprobar si un objeto capturado en un bloque catch es un error real mediante instanceof Error es frágil. Si el error proviene de otro contexto de ejecución (como un iframe en el navegador o un Web Worker en Node/Deno), la validación suele fallar. Error.isError soluciona esto aportando un chequeo universal y fiable a nivel interno del motor JS.

    3. Codificación nativa Hex y Base64 en Uint8Array

    Hasta ahora, convertir datos binarios a texto hexadecimal o Base64 requería funciones auxiliares complejas (Buffer.toString en Node o btoa/atob en navegador). ES2026 introduce métodos nativos directamente en el prototipo de Uint8Array para realizar conversiones de forma directa y de altísimo rendimiento.

    4. Valores por defecto en Mapas (Map.prototype)

    Se añaden nuevos métodos a Map y WeakMap para poder insertar un valor por defecto si una clave no existe en el mapa, simplificando la escritura de cachés o contadores.

    const visitas = new Map();
    // Inserta 1 si la clave no existe, o incrementa el valor actual
    visitas.getOrInsert("usuario_123", 0);
    

    5. Array.fromAsync e Iterator.concat

    Trabajar con generadores y flujos asíncronos ahora es mucho más ergonómico. Array.fromAsync permite construir un array a partir de iterables asíncronos de forma limpia, mientras que Iterator.concat facilita la unión de múltiples secuencias sin necesidad de cargarlas completas en memoria.


    Lo que se queda fuera (Las ausencias destacadas)

    A pesar de las altas expectativas que había durante su fase de desarrollo, algunas de las propuestas más esperadas no lograron entrar en la especificación final aprobada este año:

    • Temporal API (El nuevo Date): Aunque la comunidad lleva años demandando un reemplazo moderno, consistente y no mutable para el desastroso objeto Date tradicional, la API de Temporal sigue en revisión técnica activa y no forma parte del estándar oficial de 2026.
    • Explicit Resource Management (using): La esperada sintaxis de liberación automática de recursos (similar a la que encontramos en lenguajes como C# o TypeScript con la palabra clave using) tampoco logró cerrarse a tiempo para esta edición.

    Escribe código preparado para el futuro

    La evolución de JavaScript demuestra una clara tendencia a madurar el lenguaje, absorbiendo utilidades que antes requerían librerías de terceros (como Lodash o parches de buffer binario). Como vimos en nuestro post sobre oMLX y TypeScript en Mac, escribir código nativo limpio sobre los frameworks optimizados es la clave de la eficiencia en el desarrollo moderno.

    Adoptar las mejores prácticas de TypeScript avanzado y escribir código nativo limpio es exactamente el enfoque de calidad de software que defendemos en el curso de Construye con IA para estructurar aplicaciones robustas de producción.


    Conclusión: Simplifica tu código

    No sigas arrastrando dependencias externas para resolver tareas de precisión matemática básica o conversiones binarias. Revisa la documentación de ECMAScript 2026 y aprovecha las nuevas capacidades integradas del motor de JavaScript para limpiar tu código y mejorar la velocidad de tus ejecuciones.

    Si quieres debatir sobre el futuro de las APIs de JavaScript, patrones de TypeScript avanzado y compartir configuraciones de compilación con otros desarrolladores senior, te espero en Dominicode Labs.


    Preguntas Frecuentes (FAQ)

    ¿Cuándo podré usar las funciones de ES2026 en navegadores?

    La especificación ya ha sido aprobada de forma oficial. Los motores principales (V8 de Chrome/Node, JavaScriptCore de Safari y SpiderMonkey de Firefox) ya han implementado la mayoría de estas funciones de forma de forma experimental. Puedes utilizarlas hoy mismo actualizando tus entornos de desarrollo de Node.js o mediante polyfills si necesitas soporte para navegadores antiguos.

    ¿Cómo ayuda Math.sumPrecise con el rendimiento de arrays grandes?

    Math.sumPrecise está optimizado a nivel de compilación nativa en C++ en los motores de los navegadores. Al delegar la suma compensada de precisión directamente al motor en lugar de ejecutar un bucle con lógica de redondeo en JavaScript, la velocidad de procesamiento de grandes volúmenes de datos numéricos mejora sustancialmente.

    ¿Por qué instanceof Error falla en iframes y Web Workers?

    Porque cada iframe o Web Worker crea un contexto de ejecución global diferente (un Realm distinto) con su propio constructor Error. Por lo tanto, un error lanzado dentro de un iframe no se reconoce como instancia del objeto Error de la ventana principal de navegación, problema que resuelve el nuevo chequeo estático Error.isError.

    ¿Qué sucederá con la API de Temporal?

    La API de Temporal sigue estando en fase activa de desarrollo de Stage 3/4. Es una especificación sumamente compleja debido a la gestión de zonas horarias y calendarios. Es muy probable que se apruebe formalmente para la próxima iteración del estándar (ECMAScript 2027).


    Por Bezael Pérez — Developer senior con más de 15 años de experiencia y fundador de Dominicode.

  • OpenRouter: Qué es, para qué sirve y por qué lo necesitas

    OpenRouter: Qué es, para qué sirve y por qué lo necesitas

    Si estás construyendo una aplicación o un agente autónomo de IA, tu archivo de configuración de claves de API probablemente se parezca a una pesadilla. Tienes un token de facturación para OpenAI, otro para Anthropic, otro para los modelos de Google, y quizás una cuenta en un hosting de GPUs externas para los modelos de código abierto.

    Facturas fragmentadas, SDKs de código distintos y un dolor de cabeza constante cada vez que un proveedor sube los precios o sufre una caída de servicio.

    Hay una forma mucho más inteligente de gestionar esto.

    Hoy te quiero explicar qué es openrouter y para qué sirve, y por qué se ha convertido en la herramienta de backend indispensable para cualquier desarrollador de inteligencia artificial moderna.


    ¿Qué es OpenRouter?

    OpenRouter (disponible en openrouter.ai) es un enrutador y pasarela de API unificada para modelos de lenguaje. Actúa como un intermediario o agregador: tú te conectas a OpenRouter con una única clave de API y, a cambio, ellos te dan acceso a cientos de modelos distintos de múltiples proveedores de forma instantánea.

    En lugar de registrarte en Anthropic, OpenAI, Google Cloud, Meta y DeepSeek por separado, solo te registras en OpenRouter, cargas saldo en una sola cuenta y consumes los modelos que necesites pagando estrictamente por el uso de tokens.


    ¿Para qué sirve OpenRouter en el día a día?

    Si eres desarrollador de software o integras IA en tus flujos de negocio, OpenRouter resuelve cuatro problemas de infraestructura masivos:

    1. Unificación de SDKs (API compatible con OpenAI)

    No necesitas aprender a usar la librería de Anthropic o los formatos específicos de Google. OpenRouter utiliza el formato estándar de la API de OpenAI. Para cambiar de modelo, solo tienes que cambiar una string de texto en tu llamada, sin tocar una sola línea de código. Como vimos en nuestro análisis de Qwen 3.7 y OpenRouter, esto te permite cambiar de modelo en caliente para aprovechar el contexto extendido y las capacidades de razonamiento.

    2. Acceso a Modelos Propietarios y Open-Source

    En la misma plataforma conviven los gigantes de pago (como GPT-4o o Gemini 1.5 Pro) junto con las versiones de código abierto servidas a alta velocidad (como Qwen 2.5 Coder o DeepSeek-R1). Esto te permite experimentar con docenas de variantes en segundos.

    3. Redundancia y Fallbacks

    Si la API oficial de Anthropic se cae o sufre congestión, puedes configurar tu código para que OpenRouter derive la petición automáticamente a un modelo equivalente (como GPT-4o) de forma transparente para el usuario final, garantizando que tu aplicación nunca deje de responder.

    4. Control de Costes y Estadísticas

    La plataforma ofrece un panel visual increíblemente detallado que te muestra qué modelos están consumiendo más recursos, cuántos tokens envías en la fase de contexto y la latencia promedio de cada proveedor.


    Cómo implementarlo en tus Agentes Autónomos

    Integrar OpenRouter en frameworks agénticos como Hermes es sumamente sencillo. Al ser compatible con la especificación de OpenAI, basta con apuntar el base_url del cliente al endpoint unificado:

    import OpenAI from "openai";
    
    const client = new OpenAI({
      baseURL: "https://openrouter.ai/api/v1",
      apiKey: "tu_token_de_openrouter_aqui",
    });
    
    async function main() {
      const completion = await client.chat.completions.create({
        model: "anthropic/claude-3.5-sonnet", // Cambia a "qwen/qwen-2.5-coder-32b" cuando quieras
        messages: [
          { role: "user", content: "Escribe una función de ordenamiento en TypeScript." }
        ],
      });
    
      console.log(completion.choices[0].message.content);
    }
    main();
    

    Este enfoque híbrido y unificado es la infraestructura de base que montamos en el curso de Construye con IA para desarrollar productos escalables, y el que explotamos en producción para conectar canales de comunicación automatizados en el nuevo curso de Hermes Agent.


    Conclusión: La API definitiva para Developers

    No pierdas el tiempo gestionando contratos de facturación individuales ni peleando con diferentes SDKs. Al adoptar OpenRouter en tus desarrollos de inteligencia artificial, simplificas tu código a una única conexión, blindas tu aplicación contra caídas de proveedores y tienes la libertad de elegir el modelo idóneo para cada tarea con un solo cambio de configuración.

    Si estás utilizando OpenRouter en producción y quieres optimizar el consumo de tus tokens en tareas agénticas complejas, te espero en Dominicode Labs.


    Preguntas Frecuentes (FAQ)

    ¿OpenRouter cobra alguna comisión por encima del precio del modelo?

    No. OpenRouter ofrece los modelos a los precios de coste oficiales de los proveedores (e incluso más baratos en algunos modelos de código abierto debido a acuerdos de volumen con servidores de hosting de inferencia como Together o Fireworks). Su modelo de negocio se basa en la agregación y volumen de tráfico.

    ¿Qué sucede con la privacidad de mis datos al usar OpenRouter?

    OpenRouter actúa como un proxy de transporte. Tus prompts viajan encriptados a través de su API hacia el proveedor del modelo seleccionado. La plataforma no almacena las conversaciones de tus usuarios a menos que actives explícitamente los logs en tu panel de configuración para depuración de errores.

    ¿Se pueden usar herramientas (Tool Calling) a través de OpenRouter?

    Sí. OpenRouter soporta el paso de herramientas (tools) y la llamada de funciones nativas para todos los modelos que lo admitan de forma nativa en su arquitectura (como las familias de Claude, GPT, Llama y Qwen).

    ¿Es seguro usar OpenRouter para aplicaciones de producción masivas?

    Sí, es una infraestructura robusta utilizada por miles de aplicaciones y startups en producción a nivel global. Al contar con endpoints optimizados y soporte para conmutación por error (fallbacks), suele ofrecer una estabilidad incluso superior a la de conectarse directamente a un único proveedor.


    Por Bezael Pérez — Developer senior con más de 15 años de experiencia y fundador de Dominicode.

  • Qué es un agente de IA (y qué no): guía para subir de nivel

    Qué es un agente de IA (y qué no): guía para subir de nivel

    Hace tres semanas un suscriptor me pasó el repositorio de su primer agente. Orgulloso, y con motivos: cuatrocientas líneas limpias, herramientas declaradas, tool calling funcionando.

    Le hice una sola pregunta. ¿Cuántas veces llama al modelo cuando lo ejecutas?

    Siempre tres. Las mismas tres, en el mismo orden, pasara lo que pasara.

    Eso no era un agente. Era un pipeline con tres llamadas a un LLM dentro. Y funcionaba perfectamente, que es lo que vuelve incómoda la conversación. Porque la respuesta habitual a qué es un agente de IA —"un sistema autónomo que usa herramientas para cumplir un objetivo"— describe igual de bien su script que Claude Code.

    Y no son la misma categoría de software.

    La diferencia no es semántica: decide qué tienes que instrumentar antes de dejarlo suelto y qué ocurre el día que se equivoca a las tres de la mañana.

    Aquí va la definición operativa que uso: un test que aplicas a tu código en dos minutos, la anatomía real, los grados de autonomía y —lo más importante— cuándo no deberías montar un agente.


    Resumen rápido

    • Un agente de IA es un sistema donde el modelo decide el flujo de control: qué acción viene después y cuántas. No lo define la autonomía ni el uso de herramientas.
    • El test: si el número de llamadas al modelo es fijo y puedes dibujar el camino antes de ejecutar, es un workflow con un LLM dentro. Y suele ser la opción correcta.
    • La anatomía real son cinco piezas: objetivo, política de decisión, herramientas, contexto y verificador con criterio de parada. La quinta es la que casi nadie monta.
    • Un límite de iteraciones no es un criterio de parada. Es un timeout.
    • Cruzar la línea es binario; lo que hay al otro lado, no. Hay grados de autonomía, y cada grado exige instrumentación distinta. Los incidentes suelen ser un grado 3 con instrumentación de grado 1.
    • No son agentes: un chatbot con herramientas, un pipeline determinista con un nodo de IA, un RAG clásico.

    Qué es un agente de IA: la definición que sí se puede verificar

    Un agente de IA es un sistema en el que el modelo decide el flujo de control: qué acción se ejecuta a continuación, con qué argumentos y cuándo parar. No lo define la autonomía ni el uso de herramientas, sino quién elige el siguiente paso.

    No es el que usa herramientas. No es el que parece inteligente. Es el que decide qué pasa después.

    La definición de marketing —"autónomo", "usa herramientas", "cumple objetivos"— es inútil precisamente porque no excluye nada: bajo ese paraguas cabe un cron con un prompt dentro.

    Anthropic lo formuló bien en Building effective agents (diciembre de 2024): los workflows son "sistemas donde los LLM y las herramientas se orquestan mediante caminos de código predefinidos"; los agentes, "sistemas donde los LLM dirigen dinámicamente sus propios procesos y su uso de herramientas, manteniendo el control sobre cómo realizan las tareas".

    Traducido a algo que puedas usar hoy: el diagrama de flujo de un workflow existe antes de ejecutarlo. El de un agente no existe hasta que termina.

    Si puedes dibujar en una pizarra todo lo que va a pasar, no has construido un agente. Has construido un programa que llama a un modelo. Que, insisto, suele ser mejor decisión.


    El test: ¿agente o workflow con un LLM dentro?

    Tres preguntas. Se contestan mirando tu código, no leyendo documentación.

    1. ¿El número de llamadas al modelo es fijo? Si siempre son tres, es un workflow.
    2. ¿La salida de una herramienta cambia cuál se llama después? Si el orden lo escribiste tú, es un workflow.
    3. ¿Hay un bucle del que el modelo puede decidir no salir? Si no hay bucle, no hay agente.

    Abre el archivo, busca la llamada al modelo y mira qué tiene alrededor. Esto es un workflow:

    // Workflow: el camino está escrito. Siempre estos tres pasos, en este orden.
    const intencion = await modelo.clasificar(email)
    const resumen = await modelo.resumir(email)
    const respuesta = await modelo.redactar(intencion, resumen)
    
    await enviar(respuesta)
    

    Y esto es un agente:

    // Agente: el modelo elige la siguiente acción con lo que acaba de observar.
    const mensajes: Mensaje[] = [{ role: 'user', content: objetivo }]
    let pasos = 0
    
    while (pasos++ < LIMITE) { // LIMITE es un timeout, no un criterio de parada
      const decision = await modelo.responder({ mensajes, tools })
    
      if (decision.tipo === 'final') break // ojo: aquí para el modelo, no un verificador
    
      const observacion = await ejecutar(decision.tool, decision.args)
      mensajes.push(decision, observacion) // lo observado entra en la siguiente decisión
    }
    

    Toda la diferencia está en una palabra: while. En el primero, un await va detrás de otro y el orden lo pusiste tú. En el segundo hay un bucle, y dentro del bucle el que elige es el modelo.

    Fíjate en los dos comentarios que he dejado en el segundo bloque, porque ese ejemplo todavía está incompleto a propósito: para cuando el modelo dice que ha terminado, y eso no es un criterio de parada. Volvemos a ello en la anatomía.

    Si en tu repositorio no aparece ese bucle —ni explícito, ni dentro de la librería que uses—, no tienes un agente. Y si el while solo reintenta la misma llamada cuando falla la red, tampoco: eso es un retry.

    Ese bucle tiene nombre propio, fases y modos de fallo documentados: lo desmonté pieza a pieza en Agentic loop: el mecanismo detrás de los agentes de IA.


    La anatomía real: cinco piezas, y casi nadie monta la quinta

    Un agente de IA se compone de cinco piezas: objetivo, política de decisión, herramientas, contexto y verificador con criterio de parada. Las cuatro primeras salen en cualquier tutorial. La quinta es la que separa una demo de un sistema.

    Pieza Qué es Qué pasa si falta
    Objetivo El resultado esperado, no la instrucción Optimiza para parecer útil, no para terminar
    Política de decisión El modelo eligiendo la siguiente acción No hay agente: hay script
    Herramientas La superficie de acción sobre el mundo real Razona precioso y no cambia nada
    Contexto Lo que sabe en cada iteración Repite trabajo hecho y se contradice
    Verificador y criterio de parada La señal que dice si el trabajo está bien Para cuando cree que ha acabado

    Estas cinco son las piezas del agente. El andamiaje que lo envuelve —registro de herramientas, guardrails, gestión de contexto— es otra capa distinta, y la desglosé en qué es un agent harness.

    Las herramientas son donde más gente se pasa de frenada: doce tools disponibles, descripciones ambiguas y un modelo eligiendo mal. No es fallo del modelo, es fallo de diseño, y lo desarrollé en cómo evitar que los agentes elijan mal sus herramientas.

    El contexto arruina ejecuciones largas en silencio. Qué recuerda entre iteraciones, qué recuerda entre sesiones y qué debe olvidar es arquitectura, no implementación: las cuatro capas del modelo CoALA están en implementación de memoria en agentes de IA.

    Y llegamos a la quinta, que es donde está el problema de verdad.

    Un límite de iteraciones no es un criterio de parada

    Casi todo el mundo cree que tiene verificador porque ha escrito esto:

    while (pasos < 10) { /* ... */ }
    

    Eso es un timeout. Dice cuándo dejar de gastar dinero. No dice nada sobre si el trabajo está bien hecho.

    El criterio de parada es un comando o una función que responde sí o no sin que intervenga tu criterio. Los tests en verde. El typecheck limpio. Un eval puntuado contra casos conocidos. Un schema que valida la salida.

    Y aquí se resuelve la tensión que quizá te haya chirriado antes: dije que el modelo decide cuándo parar, y ahora digo que el criterio tiene que ser externo. Las dos cosas. El modelo propone que ha terminado; el verificador confirma o lo devuelve al bucle. Un agente que se autoevalúa no tiene criterio de parada: tiene una opinión.

    La diferencia se nota el día que el agente sale del bucle en la iteración 4 y te devuelve algo roto. Salió porque el modelo dijo "listo", y el modelo dijo "listo" porque no había nada delante que le llevara la contraria.

    Un agente sin verificador no es autónomo. Es no supervisado, que es otra cosa. Montar esa señal es lo que separa una demo de un sistema, y está en evaluaciones automatizadas para agentes de IA.

    El verificador tiene un hermano que se olvida igual de rápido: el perímetro. Contenedor aislado, rama nueva, credenciales de solo lectura. Nunca ejecución de código generado sobre el servidor real. Cuanta más autonomía das, más estrecho tiene que ser el perímetro, no al revés.


    Los grados de autonomía: cuánto decide el modelo

    El test de arriba te dice si has cruzado la línea. No te dice cuánto la has cruzado, y eso es exactamente lo que decide qué tienes que montar debajo. Hay cinco grados, del 0 al 4, y cada uno exige una instrumentación distinta.

    La escala que viene es mía, no un estándar de la industria. La uso para decidir qué instrumentación exige cada salto antes de darlo. Si te sirve, róbala; si no, calibra la tuya y quédate con la última columna.

    Grado Lo decide tu código Lo decide el modelo Ejemplo típico Mínimo que exige
    Grado 0 El flujo y la ejecución completa El texto que devuelve Chat, autocompletado Nada. El bucle eres tú
    Grado 1 Qué acciones existen y cuándo se ejecutan Cuál encaja en este caso Tool calling de un salto, routing Validación de argumentos
    Grado 2 El catálogo y el permiso de cada acción El orden y cuántas hacen falta Agente con aprobación por acción Un humano revisando cada acción antes de ejecutarla, no el resumen final
    Grado 3 El perímetro y el criterio de parada El plan completo dentro del perímetro Un agente arreglando un test en CI Verificador automático, sandbox y trazas
    Grado 4 Solo el perímetro El plan y sus propias herramientas Self-improving loop Todo lo anterior más evals de regresión

    La línea del test está entre el grado 1 y el grado 2. Por debajo, el orden lo escribiste tú: workflow. Del grado 2 hacia arriba, el orden lo decide el modelo, y ahí empieza el agente. Ser agente es sí o no. Cuánta cuerda le das, no.

    Mira solo la última columna. Es la única que importa de verdad.

    Subir de grado no es cambiar de modelo ni instalar un framework con la palabra "agent" en el nombre. Es tener montado lo que ese grado exige antes de subir.

    El incidente típico no lo provoca un agente malo. Lo provoca un grado 3 corriendo con instrumentación de grado 1: sin trazas para reconstruir qué decidió, sin sandbox y sin señal automática de si aquello estaba bien. Qué capturar de cada ejecución para poder auditarla está en cómo monitorear agentes de IA en producción.

    El grado 4 es el techo actual y el más malinterpretado. Un agente que escribe sus propias herramientas al detectar una tarea que no sabe hacer no es magia: es un bucle que compila, testea en aislamiento y solo incorpora la habilidad si los tests pasan. Lo tienes entero en Self-Improving Loop.

    Una vez sabes que has cruzado la línea, la pregunta útil ya no es "¿esto es un agente?". Es "¿en qué grado corre y qué he puesto debajo?"


    Qué no es un agente, aunque lo llamen así

    Un chatbot con herramientas. Buscar en la web y devolverte el resultado sigue siendo un salto único. La prueba es si puede reintentar por su cuenta a partir de lo que acaba de observar. Si no puede, es un chat con herramientas conectadas.

    Un pipeline determinista con un nodo de IA. Un flujo de n8n, Zapier o Make con una caja que dice "AI" es un workflow: el camino está dibujado en el canvas y el modelo rellena huecos. Cuando un paso falla, el flujo se rompe; no reformula la estrategia.

    Un RAG clásico. Recuperar, inyectar en el prompt, responder. Camino fijo, una llamada. Se vuelve agéntico solo cuando el modelo decide si vuelve a buscar, con qué query y cuándo parar. Ese "decide" es toda la diferencia.

    Y una que se ha puesto de moda: más agentes no es más agente. Cinco LLM encadenados suelen ser un workflow caro con pérdida de contexto en cada salto. Cuándo compensa y cuándo es autolesión lo analicé en cuándo usar multi-agente sin orquestador.

    Ninguna de las cuatro es peor que un agente. Suelen ser mejores: más baratas, más rápidas y depurables. Cuando un workflow falla, sabes en qué paso.


    Cuándo NO deberías montar un agente

    Para que compense tienen que darse tres condiciones. Las tres. No dos de tres.

    Que exista una señal automática de si el trabajo está bien. Si el único verificador eres tú leyendo el resultado, no has delegado el bucle: lo has movido a tu bandeja de entrada.

    Que el camino no sea siempre el mismo. Esta es la que más se ignora. Si el flujo es idéntico en el 95% de las ejecuciones, estás pagando a un modelo por redescubrir cada vez un orden que ya conoces. Escríbelo en código. Anthropic, en el artículo que cité arriba, recomienda buscar siempre la solución más simple posible y añade que eso "puede significar no construir sistemas agénticos en absoluto".

    Y si tu duda de fondo es cuál de tus tareas merece un agente y cuál no, esa clasificación —tarea por tarea— está en cómo clasificar tareas de desarrollo para delegarlas a la IA y, con los números de coste al lado, en IA generativa vs IA agéntica.

    Que el error sea reversible dentro del perímetro. Migraciones sobre datos de producción, borrados, despliegues sin rollback, correos a clientes reales. Ahí no se sube a grado 3: ahí el modelo propone y tú apruebas, que es para lo que existe el grado 2.

    Falla una de las tres y la respuesta correcta es un workflow. No es una derrota: es ingeniería.


    La ruta: por dónde empezar y cómo subir de nivel

    Con esto claro, aprender agentes deja de ser una lista de herramientas y pasa a ser una progresión de grados.

    Etapa 1 — Usa un agente antes de construir uno (grados 0-1)

    Trabaja unas semanas con un harness ya hecho —Claude Code, Codex CLI, el que prefieras— sobre tu repositorio real. No para aprender la herramienta: para ver de primera mano dónde decide mal y qué información le faltaba cuando lo hizo. Eso es lo que después no sabrás diseñar si nunca lo has sufrido.

    Y haz dos cosas desde el primer día, porque cambian el resultado más que el modelo que elijas.

    Escribe el contrato: un CLAUDE.md en la raíz convierte al agente de invitado que improvisa en ejecutor con reglas explícitas, y cómo redactarlo está en CLAUDE.md: el contrato entre tú y el agente.

    Y especifica antes de dejarle editar, porque un agente al que le pides que programe a ciegas rellena con invención todo lo que no escribiste. La metodología está en Spec-Driven Development: evita el caos de la IA, y completa, con plantillas y flujo de trabajo, en el libro de Spec-Driven Development.

    Etapa 2 — Construye uno pequeño de verdad (grado 2)

    No un framework: un bucle. Un objetivo, dos herramientas, argumentos validados y un criterio de parada que no sea un contador. Doscientas líneas enseñan más que cualquier tutorial, porque ves dónde se rompe.

    Valida los argumentos con un schema desde la primera línea: la frontera entre el texto probabilístico del modelo y tus tipos tiene que ser explícita, y es lo que enseño en el curso de Zod. El stack mínimo completo —SDK, Zod y un bucle explícito— está en construye un agente de IA en TypeScript.

    Cuando quieras que esas herramientas dejen de estar acopladas a tu código y las consuma cualquier cliente compatible, entra MCP: el recorrido completo, servidor y agente incluidos, está en cómo construir un agente de IA y su MCP server paso a paso.

    Si prefieres hacer este salto acompañado y llegar de la idea a un producto funcionando, es el camino del curso Construye con IA.

    Etapa 3 — Sube al grado 3 con la instrumentación por delante

    Aquí se separa el proyecto de fin de semana del sistema que corre solo. Ya sabes qué exige el grado 3, así que la pregunta no es cuáles son las piezas: es en qué orden se montan. Va este, y el orden importa.

    Primero el sandbox. Es la única que te protege del peor día, y es la más barata de todas: un contenedor y una rama nueva. Montarla la última es como ponerse el cinturón al llegar.

    Después las trazas. Sin ellas no puedes depurar nada de lo que viene después, porque no sabrás qué decidió el agente ni con qué información.

    Luego el verificador. Ahora sí puedes construirlo, porque las trazas te enseñan en qué se equivoca de verdad y contra qué merece la pena verificar.

    Y por último los evals. Son el verificador aplicado a un conjunto de casos conocidos, así que llegan cuando ya tienes uno.

    La memoria persistente no está en esa lista a propósito: es una optimización de coste y de continuidad, no una condición de seguridad. Se monta cuando el agente ya corre bien, no antes. Ese error de orden —memoria elegante y cero trazas— lo he visto más veces de las que me gustaría, y es también el que describo en loop engineering.

    Y cuando quieras montar esto como disciplina profesional y no como proyecto suelto, el roadmap de carrera está en qué es un Agentic Engineer y cómo convertirte en uno.


    Lo único que tienes que hacer hoy

    Abre el repositorio de eso que llamas agente y busca la llamada al modelo.

    Si alrededor no hay un bucle donde la salida de una herramienta cambia la siguiente decisión, tienes un workflow. Deja de intentar convertirlo en agente y hazlo mejor workflow: será más barato y no te despertará de madrugada.

    Si sí lo hay, contesta la segunda pregunta: ¿qué señal automática le dice que ha terminado? Si la respuesta es un número de iteraciones, acabas de encontrar el trabajo de esta semana. Y es el que más te va a rentar.

    Si quieres el esqueleto ya montado para no empezar de cero —bucle, herramientas y criterio de parada—, lo he empaquetado gratis en el Hermes Agent Kit.

    Y si prefieres discutir arquitecturas concretas con gente que ya tiene agentes corriendo en producción, te espero en Dominicode Labs.


    Preguntas frecuentes

    ¿Qué es un agente de IA exactamente?

    Un agente de IA es un sistema en el que el modelo decide el flujo de control: qué acción se ejecuta a continuación, con qué argumentos y cuándo detenerse. No lo define la autonomía ni el uso de herramientas, sino quién elige el siguiente paso. Si el orden de las acciones está escrito en tu código, tienes un workflow con un LLM dentro. Si ese orden se decide en tiempo de ejecución a partir de lo que el sistema acaba de observar, tienes un agente.

    ¿Cuál es la diferencia entre un agente de IA y un workflow con un LLM?

    El diagrama de flujo. El de un workflow existe antes de ejecutarlo, porque los caminos están predefinidos en código; el de un agente no existe hasta que la ejecución termina. Se comprueba con dos señales: si el número de llamadas al modelo es fijo, es un workflow; si la salida de una herramienta puede cambiar cuál se llama después, es un agente. El workflow no es una versión inferior: es más barato, más rápido y más fácil de depurar.

    ¿Un chatbot con herramientas es un agente de IA?

    No mientras no cierre el bucle. Un chatbot que busca en la web y te devuelve el resultado ejecuta un salto único: no comprueba si lo que obtuvo resuelve el objetivo ni cambia de estrategia cuando no lo resuelve. La prueba está en el código, no en la interfaz: si no existe una iteración en la que la observación de una herramienta determine cuál se llama después, tienes un chat con herramientas conectadas.

    ¿ChatGPT o Claude son agentes de IA?

    Por sí solos no: son modelos servidos tras una interfaz de chat, y ahí el bucle lo cierras tú al leer la respuesta y escribir la siguiente instrucción. Se convierten en la política de decisión de un agente cuando los envuelves en un sistema que ejecuta sus llamadas a herramientas y le devuelve el resultado para que decida el siguiente paso: eso es lo que hacen Claude Code o Codex CLI. El agente no es el modelo; es el modelo más el bucle, las herramientas y el criterio de parada.

    ¿Qué ejemplos reales de agentes de IA hay hoy?

    Los más maduros en 2026 son los agentes de programación que corren sobre un repositorio: Claude Code, Codex CLI de OpenAI, Cursor en modo agente y Gemini CLI. Todos comparten la misma estructura: un bucle que lee ficheros, ejecuta comandos, observa la salida y decide la siguiente acción, con los tests como criterio de parada. Fuera del código, los casos que funcionan son los que tienen verificación automática: triaje de incidencias, migraciones de datos validadas contra un schema y control de calidad de contenido.

    ¿Necesito LangChain o un framework de agentes para construir el mío?

    No. El núcleo de un agente son unas doscientas líneas: un bucle, un catálogo de herramientas con argumentos validados, el historial de observaciones y un criterio de parada. Escribirlo a mano una vez enseña más que LangChain, Mastra o el Vercel AI SDK juntos, porque ves exactamente dónde se rompe. El framework empieza a compensar después: cuando necesitas persistencia entre ejecuciones, orquestación de varios procesos o trazabilidad estándar.

    ¿Por qué un límite de iteraciones no sirve como criterio de parada?

    Porque es un timeout: evita que el agente gaste tokens sin fin, pero no dice nada sobre la calidad del resultado. El criterio de parada es una señal externa al modelo que responde sí o no sobre si el objetivo está cumplido: tests en verde, typecheck limpio, un schema que valida la salida o un eval puntuado. Sin esa señal, el agente termina cuando cree que ha terminado, y esa creencia no se puede auditar.

    ¿Cuándo no conviene usar un agente de IA?

    Cuando falla alguna de estas tres condiciones. Que exista una señal automática capaz de decir si el trabajo está bien hecho sin que lo revises tú. Que el camino no sea siempre el mismo, porque si el flujo es idéntico en casi todas las ejecuciones estás pagando por redescubrir un orden que ya conoces. Y que el error sea reversible: sobre datos de producción, borrados o despliegues sin rollback, el modelo propone y tú apruebas.

    ¿Es lo mismo un agente de IA que un sistema multi-agente?

    No, y encadenar varios modelos no hace el sistema "más agéntico". Un sistema multi-agente reparte el trabajo entre varias instancias con roles distintos, y cada salto pierde contexto, suma latencia y multiplica el coste. Muchas veces lo que se ha modelado como un segundo agente debería haber sido una herramienta del primero. Empieza con un solo agente y varias herramientas.


    Por Bezael Pérez — Developer senior con más de 15 años de experiencia y fundador de Dominicode.