Los seis componentes de un agente de programación

Los seis componentes de un agente de programación
6componentes del arnés de un agente de programación
3capas: familia de modelos, bucle del agente y soportes de ejecución
4comprobaciones antes de ejecutar cualquier herramienta
0dependencias en el Mini Coding Agent: Python puro
Las 6 piezas de un agente de programación (y por qué Claude Code parece más listo que un chat)
También lo cuento en este vídeo de doce minutos, en mi canal Articulator ES.

Modelo, razonamiento y agente: el motor y el cocheenlace

Raschka empieza con una idea que comparto: gran parte del progreso reciente en sistemas con modelos de lenguaje no viene de modelos mejores, sino de cómo los usamos. Las herramientas, la gestión del contexto y la memoria pesan tanto como el propio modelo. Y para hablar de ello conviene separar tres conceptos que solemos mezclar:

  • Modelo de lenguaje: el núcleo. Predice el siguiente token.
  • Modelo de razonamiento: sigue siendo un modelo de lenguaje, pero entrenado o instruido para gastar más cálculo al responder: razona paso a paso, se verifica o busca entre varias respuestas candidatas.
  • Agente: una capa por encima, un bucle de control alrededor del modelo. Dado un objetivo, decide qué mirar después, qué herramientas llamar, cómo actualizar su estado y cuándo parar.

Su analogía es la de un coche: el modelo de lenguaje es el motor; el de razonamiento, un motor más potente, pero más caro de usar; y el arnés del agente es el coche entero, lo que te permite sacarle partido a ese motor.

El motor del modelo de lenguaje, el motor más potente del modelo de razonamiento rodeado de monedas y el kart del arnés del agente.
El modelo es el motor; el arnés, el coche entero.

Dos términos más. El arnés de un agente es el andamiaje de software que lo rodea: gestiona el contexto, las herramientas, los prompts, el estado y el flujo de control. Un arnés de programación es un caso particular, pensado para la ingeniería de software. Claude Code y Codex son arneses de programación; OpenClaw, en cambio, es un arnés de agente más general.

El arnés de programaciónenlace

Un modelo puede resolver tareas de programación por su cuenta, pero programar es solo en parte generar texto. También es moverse por el repositorio, buscar, encontrar funciones, aplicar cambios, ejecutar los tests, leer los errores y no perder de vista lo importante. Raschka lo resume con humor: es un trabajo mental duro, y por eso no nos gusta que nos interrumpan.

Un arnés de programación tiene tres capas:

Familia de modelos

Pone el motor: un modelo base o uno de razonamiento.

Bucle del agente

Resuelve el problema por iteraciones: observa, analiza, decide y actúa.

Soportes de ejecución

La fontanería: contexto del repositorio, herramientas, permisos, memoria y caché.

Las tres capas de un arnés de programación: familia de modelos, bucle del agente (observa, analiza, decide y actúa) y soportes de ejecución (repo, herramientas, permisos, memoria y caché).
Las tres capas de un arnés de programación.

Cuando hablamos del arnés, hablamos de la capa que monta los prompts, ofrece las herramientas, sigue el estado de los ficheros, aplica las ediciones, ejecuta comandos, gestiona los permisos, guarda en caché lo que no cambia y almacena la memoria. Hoy, esa capa define casi toda la experiencia de uso. Un chat en la web, en cambio, se parece más a «charlar con unos archivos adjuntos».

Aquí Raschka se moja. Cree que las versiones básicas de los mejores modelos ya rinden de forma muy parecida, así que el arnés suele ser lo que marca la diferencia. Y especula: si metiéramos un modelo abierto puntero, como GLM, en un arnés similar, podría rendir al nivel de GPT en Codex o de Claude Opus en Claude Code. Eso sí, entrenar el modelo para su arnés suele ayudar: OpenAI ha mantenido una variante general de su modelo y otra especializada en Codex.

Para enseñar las piezas, Raschka escribió su propio agente mínimo, en Python puro y sin dependencias. Su código marca con comentarios los seis componentes que vienen a continuación.

Las seis tarjetas de los componentes: contexto vivo del repositorio, forma del prompt y caché, herramientas con validación y permisos, reducir el contexto, memoria de la sesión y subagentes con límites.
Los seis componentes de un agente de programación.

1. Contexto vivo del repositorioenlace

Quizá sea el más obvio, pero es de los más importantes. Cuando le pides «arregla los tests», el modelo debería saber si está en un repositorio de Git, en qué rama y qué documentos del proyecto pueden traer instrucciones. Esa orden no se entiende sola:

  • Si el agente ve un AGENTS.md o el README del proyecto, puede aprender con qué comando se ejecutan las pruebas.
  • Si conoce la raíz y la estructura del repositorio, busca en el sitio correcto en vez de adivinar.
  • La rama, el estado y los últimos commits le dicen qué cambios hay en marcha.

Así que, antes de trabajar, el arnés inspecciona el repositorio, saca el contexto de Git y los documentos del proyecto, y los condensa en un resumen del espacio de trabajo. Ese resumen se combina con tu petición, y así el agente no empieza de cero en cada prompt.

Diagrama: el arnés inspecciona el repositorio, saca el contexto de Git y los documentos, los condensa en un resumen del espacio de trabajo y un prefijo estable, y los combina con tu petición antes de llegar al modelo.
Antes de trabajar, el arnés condensa el repositorio en un resumen.

2. Forma del prompt y cachéenlace

Ya tenemos los datos del repositorio. Pero sería un desperdicio volver a montarlos y procesarlos en cada petición. Las sesiones de programación son repetitivas: las reglas del agente no cambian, la descripción de las herramientas tampoco, y el resumen del proyecto, casi nada. Lo que sí cambia en cada turno es tu última petición, la conversación reciente y la memoria de corto plazo.

Por eso un arnés inteligente separa el prompt en dos partes:

  • Un prefijo estable, con las instrucciones, las herramientas y el resumen del espacio de trabajo, que reutiliza de la caché.
  • El estado de la sesión, que añade al final en cada turno.
El prompt en dos partes: un prefijo estable que sale de la caché (instrucciones, herramientas y resumen del espacio de trabajo) y el estado de la sesión, que se añade al final de cada turno.
Un prefijo estable que se reutiliza y un estado que cambia en cada turno.

La diferencia con el componente uno: aquel reúne los hechos del repositorio; este los empaqueta y los guarda en caché para las llamadas repetidas al modelo. No tiene sentido gastar cálculo en reconstruir desde cero lo que no ha cambiado.

3. Herramientas, validación y permisosenlace

Aquí es donde deja de parecer un chat y empieza a parecer un agente. Un modelo a secas te sugiere comandos en texto, y tú los ejecutas y le pegas el resultado. En un arnés de programación, el modelo ejecuta el comando él mismo y recibe la salida.

Pero el arnés no le deja improvisar cualquier sintaxis. Le da una lista cerrada de herramientas con nombre, con entradas claras y límites claros: listar el directorio, leer, buscar, ejecutar un comando en la terminal o escribir un fichero. Y el modelo tiene que pasar los argumentos con una forma que el arnés pueda comprobar. Cuando el modelo pide una acción, el arnés se para y se hace cuatro preguntas:

¿Es una herramienta conocida?

Solo las de la lista cerrada.

¿Son válidos los argumentos?

Con la forma que el arnés sabe comprobar.

¿Hace falta que lo apruebe el usuario?

Escribir un archivo, por ejemplo, pide permiso.

¿La ruta está dentro del espacio de trabajo?

El agente no sale del repositorio.

Solo cuando pasa todas las comprobaciones se ejecuta algo. Después, el resultado se recorta y vuelve al bucle.

La terminal del Mini Coding Agent pide aprobación para write_file; al lado, la lista: menos libertad, más fiable, más fácil de usar, nada de órdenes arbitrarias y no sale del repositorio.
En el Mini Coding Agent, escribir un archivo espera tu aprobación.

En el Mini Coding Agent se ve así: le pides «implementa la búsqueda binaria en Python», y antes de escribir el archivo te pregunta si lo apruebas. El arnés le da al modelo menos libertad, pero así es más fiable y más fácil de usar: no ejecuta órdenes arbitrarias y no sale del repositorio.

4. Reducir el contextoenlace

Que el contexto se hinche es un problema de todos los modelos de lenguaje. Cada vez admiten contextos más largos, pero siguen siendo caros y pueden meter ruido. Y un agente de programación lo sufre aún más: lee los mismos archivos varias veces y acumula salidas de herramientas y logs muy largos. Si lo guardara todo tal cual, se quedaría sin tokens enseguida.

Un arnés mínimo usa al menos dos estrategias:

  • Recortar: acorta los fragmentos de documentos, las salidas largas, las notas de memoria y las entradas del historial, para que ningún texto se coma el presupuesto del prompt solo por ser largo.
  • Resumir el historial: convierte la sesión entera en un resumen pequeño que quepa en el prompt. El truco es guardar lo reciente con más detalle, porque importa más para el paso actual, y comprimir más lo antiguo.

Además, se quitan las lecturas repetidas de un mismo archivo, para que el modelo no lo vea una y otra vez.

Bloques del historial en una línea de tiempo: los antiguos, pequeños y comprimidos; los recientes, grandes y con detalle.
Lo reciente, con detalle; lo antiguo, comprimido.

Para Raschka, esta es una de las partes más aburridas e infravaloradas del diseño de un agente. Pero me quedo con su frase: mucho de lo que parece calidad del modelo es, en realidad, calidad del contexto.

5. Memoria de la sesiónenlace

El componente anterior respondía a cuánto pasado vuelve al modelo en el siguiente turno. Este responde a otra pregunta: qué guarda el agente como registro permanente. Y lo separa en al menos dos capas, que suelen guardarse en disco como archivos JSON:

Transcripción completa

Todas tus peticiones, las salidas de las herramientas y las respuestas del modelo. Se puede retomar aunque cierres el agente.

Memoria de trabajo

Un estado pequeño y destilado, con la tarea actual, los archivos importantes y las notas recientes. No solo crece: se edita y se compacta.

A la izquierda, la transcripción completa con peticiones, salidas y respuestas; a la derecha, la memoria de trabajo con la tarea, los archivos y las notas, que se edita y se compacta.
Las dos capas de la memoria de la sesión.

La memoria de trabajo parece lo mismo que el historial compacto del componente cuatro, pero cumple otra función. El historial compacto sirve para reconstruir el prompt: le da al modelo una vista comprimida de lo reciente. La memoria de trabajo sirve para no perder el hilo de la tarea entre turnos. Y cada evento nuevo se anota en las dos capas.

6. Subagentes con límitesenlace

Cuando un agente ya tiene herramientas y estado, lo siguiente es delegar. A mitad de una tarea, puede necesitar una respuesta lateral: qué archivo define un símbolo, qué dice una configuración o por qué falla un test. Mejor separarla en una subtarea acotada, que puede ir en paralelo y acelerar el trabajo.

Un subagente solo sirve si hereda contexto suficiente para trabajar de verdad. Pero si no lo limitamos, tendremos varios agentes repitiendo trabajo, tocando los mismos archivos o lanzando más subagentes. Raschka lo dice así: el problema difícil no es cómo crear un subagente, sino cómo atarlo. Por ejemplo, con acceso de solo lectura y una profundidad de recursión limitada.

Un subagente dentro de un recuadro de límites, con un candado de solo lectura y una profundidad de recursión limitada.
El subagente hereda contexto, pero dentro de límites más estrictos.

En el agente de Raschka, el subagente aún corre sin paralelismo, pero la idea es la misma. Claude Code tiene subagentes desde hace tiempo, y Codex los añadió más tarde. Codex no los obliga a ser de solo lectura: suelen heredar el entorno aislado y los permisos del agente principal. Ahí, el límite está en acotar la tarea, el contexto y la profundidad.

¿Y OpenClaw?enlace

Los seis componentes están muy entrelazados en el código, pero verlos uno a uno ayuda a entender cómo funciona un arnés de programación y por qué hace al modelo mucho más útil que un chat de varios turnos. Raschka cierra comparándolo con OpenClaw, que tiene mucho en común:

  • Archivos de instrucciones en el espacio de trabajo, como AGENTS.md, SOUL.md y TOOLS.md.
  • Sesiones guardadas con compactación del historial.
  • Subagentes y sesiones de ayuda.

Pero es otro tipo de sistema: una plataforma local de agentes generales que también programan, pensada para muchos agentes de larga vida repartidos por chats, canales y espacios de trabajo. Un agente de programación, en cambio, está optimizado para una persona que trabaja en un repositorio y le pide inspeccionar archivos, editar código y ejecutar herramientas locales de forma eficiente. En OpenClaw, programar es una tarea importante, pero una más entre varias.

El agente de programación como un círculo pequeño frente a OpenClaw, un gran círculo con muchos agentes repartidos por chats, canales y espacios de trabajo.
Mucho en común, pero otro tipo de sistema.
En una frase

El modelo es el motor, pero el arnés lo convierte en un agente: contexto del repositorio, prompt con caché, herramientas con permisos, contexto recortado, memoria de sesión y subagentes con límites.

¿Qué componente echas más en falta en tu agente?

Fuentesenlace

Seguir leyendo

Últimos posts -->

¿Has visto estos proyectos?

Gymnasia

Gymnasia Gymnasia
Expo
React Native
TypeScript
OpenAI
Anthropic

App de fitness con dos agentes que se ejecutan íntegramente en el dispositivo, sin backend, de forma que los datos del usuario nunca salen del móvil. Un coach conversacional BYOK con tools locales y system prompt remoto con fallback offline, y un estimador de comidas que saca los macronutrientes de una foto del plato, con lectura de códigos de barras contra OpenFoodFacts.

LangGraph Deep Researcher

LangGraph Deep Researcher LangGraph Deep Researcher
Python
LangGraph
FastAPI
React
TypeScript
Docker

Sistema multiagente de investigación construido con LangGraph. Un supervisor descompone tu pregunta en temas y lanza subagentes de búsqueda en paralelo; cada uno comprime sus hallazgos antes de pasarlos a un agente redactor que escribe el informe final en markdown con sus fuentes. Streaming en vivo por WebSockets, modelo configurable por rol y claves de API propias que nunca se guardan en el servidor.

Tau

Tau Tau
Python
LangChain

Sistema multiagente de tutoría para estudiantes de secundaria, con un agente por asignatura y material de curso elaborado y validado por un equipo de profesores. Llegó a usarse con alumnos reales en un colegio privado en España y en un instituto en Colombia.

Ver todos los proyectos -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres ver alguna charla?

Últimas charlas -->

¿Quieres mejorar con estos tips?

Últimos tips -->

Usa esto en local

Los espacios de Hugging Face nos permite ejecutar modelos con demos muy sencillas, pero ¿qué pasa si la demo se rompe? O si el usuario la elimina? Por ello he creado contenedores docker con algunos espacios interesantes, para poder usarlos de manera local, pase lo que pase. De hecho, es posible que si pinchas en alún botón de ver proyecto te lleve a un espacio que no funciona.

Flow edit

Flow edit Flow edit

Edita imágenes con este modelo de Flow. Basándose en SD3 o FLUX puedes editar cualquier imagen y generar nuevas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos los contenedores -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres entrenar tu modelo con estos datasets?

short-jokes-dataset

HuggingFace

Dataset de chistes en inglés

Uso: Fine-tuning de modelos de generación de texto humorístico

231K filas 2 columnas 45 MB
Ver en HuggingFace →

opus100

HuggingFace

Dataset con traducciones de inglés a español

Uso: Entrenamiento de modelos de traducción inglés-español

1M filas 2 columnas 210 MB
Ver en HuggingFace →

netflix_titles

HuggingFace

Dataset con películas y series de Netflix

Uso: Análisis de catálogo de Netflix y sistemas de recomendación

8.8K filas 12 columnas 3.5 MB
Ver en HuggingFace →
Ver más datasets -->