Configuración

Codex CLI en un VPS

Codex funciona bien en un pequeño servidor Linux. Casi toda la fricción está en el inicio de sesión y en el sandbox de Linux. Esta guía cubre la instalación, el inicio de sesión sin navegador, cómo mantener vivas las sesiones y cómo llegar al servidor desde el móvil.

Codex CLI en un VPS

Respuesta rápida

Instala con curl -fsSL https://chatgpt.com/codex/install.sh | sh (o npm install -g @openai/codex). Después activa el inicio de sesión con código de dispositivo en los ajustes de seguridad de ChatGPT y ejecuta codex login --device-auth en el servidor. Ejecuta Codex dentro de tmux o de un daemon para que sobreviva a tu conexión SSH. Remote en la app de ChatGPT solo admite oficialmente equipos macOS y Windows como host. A un VPS Linux solo se llega a través de uno de ellos: la app de escritorio de ChatGPT, en un Mac o PC que siga despierto, lo abre como proyecto SSH. Para llegar al VPS directamente desde el móvil, usa una app de SSH o un cliente que hable con el servidor, como Maude.

Un servidor es un buen hogar para Codex CLI de OpenAI. Sigue trabajando con el portátil cerrado, sobrevive a una conexión caída y, si una ejecución sale mal, puedes reconstruir la máquina. Hay dos cosas que hacen tropezar a la gente en un VPS Linux recién creado. Primero, codex login a secas espera una redirección del navegador que nunca puede llegar al servidor. Segundo, el sandbox necesita un paquete que la mayoría de las imágenes mínimas no incluyen. Esta guía resuelve ambas cosas y después explica cómo mantener vivas las sesiones y las formas de llegar a ellas desde el móvil.

Requisitos

  • Un servidor Linux, x86-64 o arm64. OpenAI publica binarios para ambos, y macOS también funciona. Debian o Ubuntu es el camino fácil.
  • Una cuenta. Un plan de ChatGPT o una clave de API de OpenAI. La página de precios de Codex de OpenAI dice que Codex está incluido en ChatGPT Free, Go, Plus, Pro, Business, Edu y Enterprise. Los límites varían según el plan, y el uso local de la CLI comparte la cuota con los chats en la nube. El uso con clave de API se factura a tarifas de API.
  • Memoria. La CLI es un binario compilado y necesita poca memoria por sí misma. Lo que consume RAM son las compilaciones y los tests de tu proyecto. 2 GB sirven para trabajo ligero y con 4 GB vas holgado. Consulta la guía de compra de VPS para dimensionarlo y ver los precios actuales.
  • Un usuario no root. Créalo antes de instalar nada (adduser dev y después copia tu clave SSH). Nuestra guía de Claude Code en un VPS explica eso y el bastionado de SSH; los pasos son los mismos para Codex.

Instala Codex

El instalador independiente no necesita Node.js:

curl -fsSL https://chatgpt.com/codex/install.sh | sh
codex --version

Si ya gestionas herramientas con npm, esto instala la misma CLI:

npm install -g @openai/codex

Ojo con el scope: el paquete es @openai/codex. Un paquete codex sin scope en npm no tiene nada que ver. Instálalo con tu usuario normal, no con sudo. Ambos métodos aparecen en el README de openai/codex.

El requisito previo del sandbox en Linux

En Linux, Codex ejecuta los comandos de shell que genera dentro de un sandbox basado en bwrap (bubblewrap) y seccomp. La documentación sobre sandboxing de OpenAI dice que instales bubblewrap primero:

sudo apt install bubblewrap      # Debian / Ubuntu
sudo dnf install bubblewrap      # Fedora

Sin bwrap, Codex recurre a un helper incluido, y ese helper necesita user namespaces sin privilegios. Ubuntu 24.04 los restringe mediante AppArmor. La solución documentada carga un perfil adicional:

sudo apt install apparmor-profiles apparmor-utils
sudo install -m 0644 /usr/share/apparmor/extra-profiles/bwrap-userns-restrict /etc/apparmor.d/bwrap-userns-restrict
sudo apparmor_parser -r /etc/apparmor.d/bwrap-userns-restrict

La documentación también ofrece una alternativa más drástica, sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0, que desactiva la restricción para toda la máquina. Es preferible el perfil. Si ves que todos los comandos dentro del sandbox fallan con un error de namespace, esta sección es el motivo.

Inicia sesión con código de dispositivo

Si ejecutas codex login a secas en un servidor, parece que se queda colgado. El motivo: arranca un servidor de callback local en el puerto 1455 y espera a que tu navegador sea redirigido a localhost. Es el localhost del servidor, al que tu móvil o tu portátil no pueden llegar. Usa en su lugar el inicio de sesión con código de dispositivo. Tiene un requisito previo que pilla a casi todo el mundo:

  1. Activa el inicio de sesión con código de dispositivo. Hazlo en los ajustes de seguridad de ChatGPT si es una cuenta personal. En un espacio de trabajo Business, Edu o Enterprise, lo activa un administrador en los permisos del espacio de trabajo. Hasta que esté activado, el flujo de dispositivo no funcionará con tu cuenta.
  2. Inicia el flujo en el servidor:
    codex login --device-auth
  3. Complétalo en cualquier dispositivo. Codex imprime un enlace y un código de un solo uso. Abre el enlace en el móvil o el portátil, inicia sesión en ChatGPT e introduce el código.
  4. Comprueba que ha funcionado:
    codex login status
    Muestra el modo de autenticación activo y termina con 0 cuando has iniciado sesión, lo que lo hace útil en scripts.

Esto sale de la documentación de autenticación de OpenAI, que ofrece dos alternativas para cuando el código de dispositivo no está disponible:

  • Redirige el puerto del callback. Conéctate con ssh -L 1455:localhost:1455 user@your-server, ejecuta codex login en el servidor y abre la dirección que imprime en tu navegador local. La redirección vuelve entonces a través del túnel.
  • Copia la credencial. Inicia sesión en una máquina con navegador y después ejecuta scp ~/.codex/auth.json user@your-server:~/.codex/auth.json.

Usar una clave de API en su lugar

printenv OPENAI_API_KEY | codex login --with-api-key

Pasar la clave por stdin la mantiene fuera del historial de la shell. Pagas por token a precios de API en lugar de tirar de un plan de ChatGPT. Encaja en una máquina compartida o de CI donde quieres un límite de facturación claro.

Trata auth.json como una contraseña

Por defecto, Codex guarda las credenciales en ~/.codex/auth.json. El ajuste cli_auth_credentials_store puede moverlas al llavero del sistema operativo (file, keyring, auto o ephemeral). Cualquiera con una shell como tu usuario puede usar tu plan de ChatGPT. No des acceso de shell a otras personas en una máquina de agentes.

Mantenlo en marcha

Una sesión interactiva de codex vive y muere con la terminal que la inició. Cierra la conexión SSH y la sesión termina. Tienes tres formas de evitarlo.

tmux, el clásico:

sudo apt install tmux
tmux new -A -s codex     # create or re-attach
cd ~/src/my-app && codex
# detach: Ctrl-b then d; later: tmux attach -t codex

Si la sesión llega a terminar, codex resume --last retoma la conversación más reciente de ese directorio, y codex resume abre un selector. Nuestra guía de tmux, mosh y Tailscale incluye una configuración de tmux pensada para el móvil.

Ejecuciones no interactivas. codex exec "…" ejecuta una tarea sin la TUI, y codex exec resume --last la continúa. Encaja con tareas de cron y CI, pero no hay nadie para responder a las solicitudes de aprobación, así que los ajustes del sandbox de abajo importan todavía más.

Un daemon que es dueño de las sesiones y sobrevive a los reinicios. Es lo que compara la guía 24/7: unidades de systemd, servidores de Remote Control y apps como Maude que ejecutan su propio proceso en la máquina.

Aprobaciones y sandbox

Codex tiene dos controles independientes: lo que pueden tocar los comandos (el sandbox) y cuándo se detiene a preguntarte (la política de aprobación). Los valores de abajo vienen de la documentación de aprobaciones y seguridad de OpenAI y de la referencia de la CLI:

AjusteValoresQué significa en un servidor
--sandbox / -sread-only, workspace-write, danger-full-accessworkspace-write es el valor por defecto en un repo de git. Las ediciones se quedan dentro del proyecto y el acceso a la red está desactivado salvo que lo actives.
--ask-for-approval / -aon-request, neveron-request pregunta cuando una acción necesita más de lo que permite el sandbox. never no pregunta nunca. En config.toml, approval_policy también acepta granular; el antiguo valor untrusted ya no se admite.
--yolo(alias de --dangerously-bypass-approvals-and-sandbox)Sin sandbox y sin preguntas. OpenAI lo reserva para entornos que ya están protegidos desde fuera.

--full-auto todavía aparece en guías antiguas. Ahora es un flag de compatibilidad obsoleto, y la referencia indica usar --sandbox workspace-write en su lugar. Para que los comandos del sandbox puedan acceder a la red, por ejemplo para que funcione npm install, añade esto a ~/.codex/config.toml:

sandbox_mode = "workspace-write"
approval_policy = "on-request"

[sandbox_workspace_write]
network_access = true

Una nota sobre contenedores: si tu «VPS» es en realidad un contenedor Docker o LXC que bloquea las operaciones con namespaces, la documentación sugiere --sandbox danger-full-access. Hazlo solo si el propio contenedor es tu sandbox. Las ventajas e inconvenientes son los mismos que con el modo bypass de Claude, tratados en ejecutar agentes con permisos completos, de forma segura.

Opciones para acceder desde el móvil

Opción¿Funciona con un VPS Linux?Destaca enTen en cuenta
Codex Remote (app de ChatGPT)No oficialmente. El host debe ejecutar la app de escritorio de ChatGPT en macOS o Windows; esa app puede llegar a proyectos SSH en tu VPS.Oficial, gratis con tu plan, interfaz nativaEl equipo host tiene que seguir despierto y en línea
App de SSH + tmuxSíGratis, nada adicional en el servidorUna TUI a pantalla completa con el teclado del móvil, sin notificaciones push
MaudeSí (cualquier Linux o macOS por SSH)Interfaz de chat nativa, aprobaciones integradas, push, y también Claude Code y otrosApp de pago; sigues necesitando tu propio plan de ChatGPT o clave

Un apunte sobre Linux sin interfaz gráfica y Codex Remote. La referencia de la CLI documenta codex remote-control start y codex remote-control pair para el app-server local. Sin embargo, la guía de conexiones remotas sigue diciendo que los hosts ejecutan la app de escritorio en macOS o Windows. Hay usuarios que han abierto issues sobre esta discrepancia: #31183 informa de que los hosts Linux sin interfaz gráfica no se pueden volver a emparejar desde los clientes móviles actuales, y #35928 señala la contradicción. Ambas seguían abiertas cuando lo comprobamos. Si esa vía te funciona, es la oficial. Pero no construyas todavía un flujo de trabajo sobre ella.

Manéjalo desde el móvil con Maude

Maude es una forma de manejar ese VPS desde el móvil sin la TUI. Añades el servidor por su dirección o pegando un comando ssh, y la app despliega su propio pequeño daemon por SSH. Ese daemon instala Codex en una versión probada y fijada, verificada con checksum, así que te saltas el paso de instalación. Inicias sesión en Codex desde el móvil con el código de dispositivo de ChatGPT o con una clave de API. Eso sí, primero tienes que activar el inicio de sesión con código de dispositivo en ChatGPT. Las sesiones siguen en marcha en el servidor con la app cerrada, las solicitudes de aprobación aparecen en una bandeja y como notificaciones push con Permitir/Denegar, y el mismo servidor puede ejecutar Claude Code, OpenCode, Grok Build y Antigravity junto a Codex. Tienes los detalles en la página del agente Codex.

Preguntas frecuentes

¿Por qué codex login se queda colgado en mi servidor?
codex login a secas arranca un servidor de callback en localhost:1455 y espera una redirección del navegador, que un navegador en otro dispositivo no puede entregar a tu VPS. Usa codex login --device-auth después de activar el inicio de sesión con código de dispositivo en los ajustes de seguridad de ChatGPT. Como alternativa, redirige el puerto con ssh -L 1455:localhost:1455.
¿Necesito Node.js para ejecutar Codex?
No. El instalador independiente (curl -fsSL https://chatgpt.com/codex/install.sh | sh) y los binarios publicados no necesitan Node. Solo necesitas Node si eliges la vía de npm, npm install -g @openai/codex.
¿Puedo usar una clave de API en lugar de mi plan de ChatGPT?
Sí: printenv OPENAI_API_KEY | codex login --with-api-key. En ese caso, el uso se factura a tarifas de la API de OpenAI en lugar de descontarse de la cuota de un plan de ChatGPT.
¿Codex Remote ve mi VPS?
Solo de forma indirecta, por ahora. La documentación de Remote de OpenAI indica como host la app de escritorio de ChatGPT en macOS o Windows, y esa app puede abrir proyectos SSH en un VPS. Hay documentada una vía de emparejamiento desde la CLI (codex remote-control), pero issues abiertas en GitHub informan de problemas al emparejar hosts Linux sin interfaz gráfica, así que consulta la documentación actual antes de depender de ella.
¿Qué modo de sandbox debo usar en un VPS?
Empieza con workspace-write más aprobaciones on-request, y activa network_access si tus compilaciones necesitan descargar paquetes. Reserva --yolo para máquinas desechables o contenedores en cuyo aislamiento confíes.

Qué ha cambiado

  • — Primera publicación. Los detalles de instalación, autenticación, sandbox y Remote se comprobaron en esta fecha con la documentación de OpenAI y el README de openai/codex.

Codex en tu servidor, desde el móvil

Añade el servidor, inicia sesión con tu plan de ChatGPT y empieza una sesión. iOS y Android.

Download Maude on the App Store Get Maude on Google Play