DEV Community

Cover image for Cómo usar Codex CLI como worker de osFoundry
BBT for BBT Español

Posted on

Cómo usar Codex CLI como worker de osFoundry

Al terminar, un agente de la app de escritorio de osFoundry tiene cli:codex:agent como modelo. Cuando le llega trabajo, la app lanza codex exec en tu Mac con tu propio inicio de sesión de ChatGPT. La ejecución ocurre en una carpeta que tú has permitido. Lo que Codex devuelve, su razonamiento, los comandos que ejecutó y su mensaje final, aparece como líneas en la ejecución de osFoundry. En ningún momento interviene una clave de API de OpenAI.

Quién hace qué

Codex CLI osFoundry
Login Su propio inicio de sesión de ChatGPT (codex login), guardado por Codex Nunca lo ve. Quita CODEX_API_KEY, OPENAI_API_KEY y OPENAI_BASE_URL del entorno del proceso hijo para que la ejecución siga en la suscripción
Llamadas al modelo Van directamente a OpenAI desde el proceso codex Registra el coste como 0.0 (suscripción, sin medición)
Herramientas Su propio shell y sus ediciones de archivos, dentro de la carpeta de trabajo Sus propias herramientas (por ejemplo memory_search), servidas desde un puente MCP de loopback en 127.0.0.1, solo cuando un git worktree aísla la ejecución
Aprobaciones Ninguna durante la ejecución: exec no es interactivo, approval_policy="never" Cada llamada a herramienta a través del puente pasa por orchestrator::execute_tool y sus controles de política
Salida Un evento JSON por cada elemento completado en stdout (--json) Convierte cada evento en una línea de progreso o en texto de respuesta; guarda el final de stderr para los errores
Tus archivos Se leen y escriben en la carpeta o el worktree Elige la carpeta: el repositorio de la superficie Code o, si no, tu primera carpeta local permitida

Configuración

  1. Instala Codex CLI e inicia sesión una vez. osFoundry busca el binario en PATH, en ~/.codex/bin y dentro de /Applications/Codex.app (la instalación con cask lo deja en Contents/Resources/codex, donde which codex no encuentra nada).
   codex login
Enter fullscreen mode Exit fullscreen mode
  1. Abre el icono de la llave en la cabecera (el tooltip dice API Keys (BYOK)) y cambia a la pestaña External AI (IA externa). La fila de Codex muestra Installed, una insignia No live stream y el id del modelo autónomo. Codex no tiene id de chat, así que solo aparece un id:
   Codex   Installed   No live stream   Enabled
   cli:codex:agent (autonomous)
   osFoundry tools require git-worktree isolation for Codex (it trades its
   own sandbox for git safety). Point it at a git repo folder.
Enter fullscreen mode Exit fullscreen mode

Claude Code y Codex en la pestaña External AI

Ejemplo: Claude Code y Codex en la pestaña External AI

Si todavía no has iniciado sesión, el botón Sign in abre una terminal que ejecuta codex login.

  1. Haz clic en Verify sign-in (verificar inicio de sesión). Ejecuta una completion diminuta con el mismo constructor que usan las ejecuciones reales:
   codex exec "Reply with the single word: ok" \
     --json --skip-git-repo-check --ignore-user-config --ignore-rules \
     -s read-only -c 'approval_policy="never"'
Enter fullscreen mode Exit fullscreen mode

--ignore-rules solo se añade cuando codex exec --help lo incluye. osFoundry se lo pregunta al binario porque las versiones antiguas rechazan el flag y hacen fallar toda la ejecución.

  1. Dale una carpeta al agente. Añade una en Settings → Local Folders. Si además quieres que Codex llegue a las herramientas propias de osFoundry, convierte esa carpeta en un repositorio git y, en la superficie Code, haz clic en Enable for this workspace. A partir de ahí, cada ejecución tiene su propia rama y su propia copia de trabajo.

  2. Abre el agente en Studio y configura Model Preference. El selector muestra Codex en la sección CLI agents como cli:codex:agent (proveedor "External AI (subscription)"). Pon Runtime Role en worker si el agente debe encargarse de pasos de worker.

Cuando se le pasa trabajo, el comando tiene este aspecto. Sin worktree se mantiene el sandbox propio de Codex:

codex exec "<system prompt>

User: <task>" \
  --json --skip-git-repo-check --ignore-user-config --ignore-rules \
  -C /path/to/folder -s workspace-write -c 'approval_policy="never"'
Enter fullscreen mode Exit fullscreen mode

Con un worktree, el flag del sandbox se sustituye y se conecta el puente:

codex exec "<system prompt>

User: <task>" \
  --json --skip-git-repo-check --ignore-user-config --ignore-rules \
  -C /path/to/worktree \
  --dangerously-bypass-approvals-and-sandbox \
  -c 'mcp_servers.osfoundry.url="http://127.0.0.1:<port>/mcp"' \
  -c 'mcp_servers.osfoundry.http_headers={Authorization="Bearer <per-run token>"}'
Enter fullscreen mode Exit fullscreen mode

Codex no tiene un flag para añadir un system prompt, así que osFoundry coloca el system prompt del agente delante de la conversación, separado por una línea en blanco. Los turnos anteriores van después como una transcripción User: / Assistant:.

Una ejecución

Ejemplo. Estas son las líneas de eventos que escribe Codex y las líneas que osFoundry muestra a partir de ellas. El texto es ilustrativo, pero los tipos de evento y los formatos de línea son los que mapea el código.

$ codex exec … --json
{"type":"item.completed","item":{"type":"reasoning","text":"Check what the tests cover first."}}
{"type":"item.completed","item":{"type":"mcp_tool_call","server":"osfoundry","tool":"memory_search"}}
{"type":"item.completed","item":{"type":"command_execution","command":"npm test"}}
{"type":"item.completed","item":{"type":"file_change","path":"src/date.ts","change":"edit"}}
{"type":"item.completed","item":{"type":"agent_message","text":"Fixed the off-by-one in parseRange; 42 tests pass."}}
{"type":"turn.completed","usage":{"input_tokens":…,"cached_input_tokens":…,"output_tokens":…}}

osFoundry run
  Thinking: Check what the tests cover first.
  Using memory_search…
  Using shell — npm test
  Edited src/date.ts
  Fixed the off-by-one in parseRange; 42 tests pass.
Enter fullscreen mode Exit fullscreen mode

Codex nombra una herramienta del puente con dos campos, server y tool, así que la línea muestra memory_search sin el prefijo mcp__osfoundry__. La respuesta llega como elementos agent_message completos, no como tokens. Las líneas de progreso aparecen una a una mientras Codex sigue trabajando. El texto de cada mensaje aparece solo cuando Codex ha terminado ese mensaje. Los recuentos de tokens salen de turn.completed, donde input_tokens excluye la parte en caché, así que osFoundry vuelve a sumar cached_input_tokens para obtener el tamaño del contexto.

Dónde está el límite

No existe un modo de chat cli:codex. La configuración de Codex no tiene ningún interruptor que desactive su herramienta de shell, así que una "completion sin herramientas" a través de Codex seguiría siendo un agente con shell. osFoundry rechaza el id de chat en lugar de ejecutar eso en silencio: "codex has no tool-less chat mode — use 'cli:codex:agent' for an autonomous run instead."

-s es un sandbox de sistema de archivos y de comandos. workspace-write limita dónde puede escribir Codex y qué pueden hacer sus comandos. No limita qué herramientas puede llamar el modelo, y Codex no tiene nada parecido a --disallowedTools. Por eso, cuando añades Codex a un canal, la hoja Add agent indica que en este harness no se puede imponer un ámbito de herramientas.

Las herramientas de osFoundry necesitan el worktree. En exec no interactivo, Codex cancela toda llamada a herramientas MCP salvo que se omitan a la vez las aprobaciones y el sandbox. Los modos de aprobación por herramienta, los proyectos de confianza y approval_policy="never" siguen cancelando. Así que la app hace un único intercambio: renuncia al sandbox del sistema operativo de Codex solo cuando el aislamiento de git ocupa su lugar. Sin worktree, la ejecución mantiene -s workspace-write, el puente no se conecta y una línea de la ejecución lo indica.

Tu propia configuración de Codex queda fuera. --ignore-user-config omite ~/.codex/config.toml, así que los servidores MCP que configuraste para ti no se suman a una ejecución de osFoundry. La autenticación sigue cargándose desde CODEX_HOME. --ignore-rules deja fuera también los archivos de execpolicy .rules.

Cada ejecución tiene un límite de tiempo real: 1.800 segundos para una ejecución autónoma y 300 segundos para la prueba de inicio de sesión. Cuando se agota el tiempo, el proceso hijo se descarta y se mata.

Siguiente paso

Apunta el agente a un repositorio git pequeño, activa los agentes de código para el workspace y dale una tarea que necesite tanto un comando de shell como algo de la memoria de osFoundry. Así podrás ver aparecer Using shell y Using memory_search… en la misma ejecución. La página de agentes de Studio muestra dónde está Model Preference, y la versión de escritorio está en la página de descarga.

Top comments (0)