← Tu laboratorio en cualquier parteSerie Remoto · paso 6 de 11

Codex remoto en tu servidor: Remote Control persistente y proyectos por SSH

Olmillos Server tiene Codex instalado como servicio: se controla desde la app de ChatGPT del móvil y se abre como proyecto remoto desde ChatGPT Desktop. Sin abrir puertos, sin copiar credenciales a otro equipo.

Dificultadfácil
Tiempo30 min
IngredientesCodex CLI (release oficial) · systemd de usuario · SSH por Tailscale · ChatGPT Desktop / móvil

La idea es la misma que con Claude Code: un agente que vive en el servidor, arranca solo y al que te conectas desde donde estés. Con Codex hay dos formas de hacerlo, y las usamos las dos.

Remote Control Proyecto remoto por SSH
desde app de ChatGPT en el móvil ChatGPT Desktop (Mac o Windows)
qué haces continuar tareas, aprobar acciones, ver diffs trabajar en una carpeta del servidor como si fuera local
requisito servicio codex-remote-control activo alias SSH en tu equipo

Paso 1 · Instalar Codex como usuario, no como root

Usa la release oficial standalone en el perfil de tu usuario. El binario activo queda en ~/.codex/packages/standalone/current/bin/codex con un enlace en ~/.local/bin/codex.

codex --version
codex login status        # «Logged in using ChatGPT»

La autenticación vive en el servidor y no se copia a ningún otro equipo. No muevas ~/.codex/auth.json de máquina en máquina: si lo necesitas en otro sitio, inicia sesión allí.

Paso 2 · El servicio de Remote Control

Linger activado (como en la guía anterior) y una unidad de usuario que lanza el App Server con Remote Control:

sudo loginctl enable-linger $USER
systemctl --user enable --now codex-remote-control.service
codex app-server daemon version

Lo importante de cómo queda:

  • el App Server escucha en un socket Unix privado, no en un puerto TCP;
  • no se abre nada nuevo hacia fuera: la conexión con ChatGPT la inicia el servidor;
  • tras un reinicio vuelve solo.

En la app de ChatGPT del móvil, abre Remote y busca el nombre de tu servidor. Tiene que ser la misma cuenta y el mismo espacio de trabajo con el que se autenticó.

Paso 3 · El alias SSH para ChatGPT Desktop

En el equipo donde usas ChatGPT Desktop, ~/.ssh/config:

Host mi-servidor
    HostName 100.x.y.z          # la IP de Tailscale del servidor
    User tu_usuario
    StrictHostKeyChecking yes

Compruébalo desde una terminal de ese mismo equipo antes de tocar la app:

ssh mi-servidor 'bash -lc "codex --version"'

Después, en ChatGPT Desktop: Settings → Connections → SSH host, eliges mi-servidor y una carpeta de proyecto (por ejemplo ~/apps/mi-app). La app arranca el App Server remoto por SSH. No lances otro Codex a mano sobre el mismo proyecto mientras tanto.

El bash -lc no es decoración: sin shell de login, el PATH no incluye ~/.local/bin y la app dice que Codex no está instalado aunque lo esté.

Cuando deja de funcionar

A nosotros nos pasó: el servicio llevaba días en failed con «remote control connection is errored». No faltaba nada; el daemon anterior se había quedado en un estado de error. Lo que lo arregló:

systemctl --user daemon-reload
systemctl --user restart codex-remote-control.service
journalctl --user -u codex-remote-control.service -n 80 --no-pager

Reglas para reparar sin romper otra cosa:

  • no borres ~/.codex;
  • no copies auth.json;
  • no detengas Nginx, Docker ni ningún otro servicio «por si acaso» para arreglar Codex.

Si generas un código de emparejamiento con codex remote-control pair para probar, no lo guardes ni lo pegues en ningún sitio: es una credencial temporal.

Una trampa del catálogo de modelos

Si usas Codex con un proveedor de modelos propio (nosotros lo probamos contra el gateway del laboratorio), cambiar el catálogo en disco no actualiza una app de Codex ya abierta . Cierra y abre. Y en general: un proceso de larga vida lleva su configuración en memoria, cambiar el fichero no basta (P-080).

Deshacerlo

systemctl --user disable --now codex-remote-control.service

Solo retira el host remoto; no toca proyectos, modelos, Nginx ni nada de producción.

Siguiente: Pi en el móvil, un agente de terminal con interfaz web propia y varias sesiones a la vez.