- Codex CLI está diseñado como un agente que realiza cambios de software de alta calidad de forma segura y eficiente en entornos locales
- Su estructura central, el bucle del agente (agent loop), conecta de manera cíclica la entrada del usuario, la inferencia del modelo y las llamadas a herramientas para ejecutar tareas con sentido
- En el proceso del bucle, la composición del prompt, la gestión de la ventana de contexto y el caché de prompts actúan como elementos clave para el rendimiento y la estabilidad
- Codex se comunica con el modelo mediante la Responses API, y cada solicitud está compuesta por una carga JSON completa para mantener un funcionamiento sin estado (stateless)
- Esta estructura permite funciones avanzadas como Zero Data Retention (ZDR), caché de prompts y compactación automática (compaction), y sienta la base para el diseño de agentes a gran escala
Resumen del bucle del agente de Codex
- Codex CLI funciona en torno a una estructura de bucle que coordina la interacción entre usuario, modelo y herramientas
- Recibe la entrada del usuario y construye el prompt que se enviará al modelo
- Si el modelo genera una respuesta o solicita una llamada a herramienta (tool call), el agente la ejecuta y vuelve a agregar el resultado al prompt
- Cuando el modelo deja de hacer llamadas a herramientas y genera un mensaje del assistant, termina un turno
- Cada turno forma parte de una conversación, y los mensajes anteriores junto con el historial de llamadas a herramientas se incluyen en el prompt de la siguiente solicitud
- Como la longitud del prompt está limitada por la ventana de contexto (context window) del modelo, Codex debe administrarla
Responses API y la estructura de comunicación de Codex
- Codex CLI envía solicitudes HTTP a la Responses API para la inferencia del modelo
- El endpoint de la API varía según la configuración, y puede usarse en entornos OpenAI, ChatGPT, Azure y locales (LM Studio, Ollama, etc.)
- La solicitud a la API está compuesta por una carga JSON, cuyos campos principales son los siguientes
- mensajes system/developer: establecen el contexto base del modelo
- instructions: lista de herramientas que el modelo puede invocar
- tools: definiciones de herramientas proporcionadas por Codex CLI, la Responses API y el usuario (servidores MCP, etc.)
- input: lista de mensajes que incluye el historial de conversación e información del entorno
- Codex lee la configuración de
~/.codex/config.toml y archivos como AGENTS.md y skills dentro del proyecto para insertar automáticamente instrucciones del usuario e información del entorno
Composición del prompt y manejo de eventos
- Codex envía cada mensaje a la Responses API como un objeto JSON (
type, role, content)
- El servidor genera el prompt del modelo a partir de este JSON y devuelve la respuesta mediante un flujo SSE (Server-Sent Events)
- El evento
response.output_text.delta se usa para la salida en streaming
- El evento
response.output_item.added se agrega al input de la siguiente solicitud para mantener el bucle
- Está diseñado para que el prompt anterior sea un prefijo exacto del nuevo prompt, lo que permite aprovechar el caché de prompts (prompt caching)
Optimización de rendimiento: caché y diseño sin estado
- Codex no usa
previous_response_id, por lo que mantiene una estructura de solicitudes completamente sin estado (stateless)
- Esto permite dar soporte a clientes con Zero Data Retention (ZDR) y minimizar la retención de datos
- El caché de prompts reutiliza el mismo prefijo para linealizar el costo de muestreo
- Un acierto de caché solo ocurre cuando hay una coincidencia exacta del prefijo del prompt
- Cambios en la lista de herramientas, el modelo, la configuración del sandbox o el directorio de trabajo provocan fallos de caché
- Como los cambios dinámicos en herramientas MCP pueden causar pérdida de caché, Codex refleja esos cambios insertando mensajes nuevos
Gestión de la ventana de contexto y compactación automática (compaction)
- Cuando la conversación se alarga, se realiza una compactación de la conversación (compaction) para evitar exceder la ventana de contexto
- Al principio se hacía un resumen manual con el comando
/compact, pero actualmente se usa automáticamente el endpoint /responses/compact de la Responses API
- Este endpoint devuelve elementos de
type=compaction y encrypted_content cifrado para mantener la comprensión del modelo
- Cuando se supera auto_compact_limit, Codex ejecuta automáticamente la compactación para asegurar la continuidad de la conversación
Conclusión y dirección futura
- El bucle del agente de Codex es una estructura central que integra inferencia del modelo, llamadas a herramientas, caché y gestión de contexto
- Esta estructura hace posible un diseño de agentes de alto rendimiento, sin estado y centrado en la seguridad
- En publicaciones posteriores se abordarán con más detalle la arquitectura de la CLI, la implementación del uso de herramientas y el modelo de sandboxing de Codex
1 comentarios
Comentarios en Hacker News
Lo mejor de esta entrada de blog es que no tiene nada de sorprendente. Codex CLI es de código abierto, así que se puede revisar por dentro sin necesidad de hacer ingeniería inversa
La comunicación de Eric Traut, un desarrollador conocido por Pyright, también es excelente. Participa activamente en issues y PR
Repositorio de GitHub
Yo también contribuí algunas mejoras al CLI, y sigo de cerca los releases y PR para seguir aprendiendo
Lo interesante es la parte donde la compactación se hace como un “mensaje cifrado que preserva la comprensión latente del modelo”
Cuando Codex supera
auto_compact_limit, usa automáticamente ese endpoint para reducir de forma eficiente el contexto de la conversaciónAlgo que me sorprendió al revisar el interior de Codex es que los tokens de razonamiento se conservan dentro del loop de llamadas de herramientas del agente, pero se eliminan cada vez que cambia el turno del usuario
Así que se puede mantener el contexto a lo largo de varios turnos, pero entre solicitudes relacionadas del usuario se puede perder parte del contexto
Yo hago que el modelo vaya guardando el progreso, los planes o la info de depuración en archivos Markdown, para que funcionen como una especie de snapshot entre distintas ventanas de contexto
Repositorio de GitHub
agent-shellde emacs, que guarda todo el historial de conversación. Gracias a eso puedo decir fácilmente “toma como referencia la conversación anterior”. Como quien deja el log no es el agente sino emacs, no tengo que preocuparme de que falte algoLo que de verdad quiero en Codex es una función de checkpoints estilo Copilot. Hay varios issues en GitHub al respecto (#2788, #3585), pero no parece ser prioridad del equipo
Me pregunto cómo gestionan la retención de contexto al agregar instrucciones del usuario dentro del loop del agente, especialmente en conversaciones de varios turnos. También quisiera saber si han probado técnicas para ajustarlo dinámicamente cuando cambian los requisitos del usuario
Me gusta Codex, pero se siente más lento que la interfaz web de ChatGPT. Cuando quiero intercambiar ideas rápido, sigo siendo más productivo copiando y pegando en la web
Codex a menudo empieza a modificar código que no viene al caso, así que el loop de retroalimentación se siente lento y frustrante. Aun así, cuando funciona bien, es excelente. Ojalá algún día llegue al punto de ser tan rápido como la web, pero permitiendo trabajo local
No fue algo especialmente nuevo, pero igual fue una lectura valiosa. Ojalá en los CLI de programación agentiva fuera más fácil reflexionar sobre los loops o el historial. Probé usar MCP para consultar el historial del chat, pero es incómodo porque hay que indicarlo explícitamente. Tal vez el aprendizaje continuo pueda resolver este tipo de problemas
Este comportamiento también se puede observar con telemetría OTEL. Yo uso mucho
codex execen modo headless, pero la falta de soporte integrado de telemetría hace que depurarlo sea difícilPor eso hice yo mismo codex-plus. Replica la interfaz de
codex exec, está implementado sobre el SDK de TypeScript y, después de cada ejecución, exporta los logs de la sesión a un recolector remoto de OpenTelemetry para poder analizarlos con codex-plus-log-viewerLa parte donde explican las skills se me hizo rara
Enlace al código relacionado
No entiendo por qué no exponen simplemente los archivos directamente, en vez de hacer que el modelo los solicite como si fueran archivos normales
Me preguntaba si alguien realmente ha usado Codex CLI en serio. Yo probé la extensión de Codex para VSCode, Gemini CLI y Claude Code CLI, y todos tenían un rendimiento pésimo.
Pero el nuevo Codex CLI hecho en Rust es una locura en rendimiento. La UX también está muy bien lograda, hasta en detalles como los atajos de teclado. Theo dijo que deberían haberse enfocado en mejorar el modelo en vez de optimizar el CLI, pero después de usarlo no podría estar menos de acuerdo
git rebase. Probé Aider, pero casi no me sirvió para nadaArtículo relacionado: Scribe Swebench Benchmark