Configuração
Rodando o Codex CLI numa VPS
O Codex roda bem num pequeno servidor Linux. A maior parte do atrito está no login e no sandbox do Linux. Este guia cobre a instalação, o login sem navegador, como manter as sessões vivas e como acessar o servidor pelo celular.
Resposta rápida
Instale com curl -fsSL https://chatgpt.com/codex/install.sh | sh (ou npm install -g @openai/codex). Depois, ative o login por código de dispositivo nas configurações de segurança do ChatGPT e rode codex login --device-auth no servidor. Rode o Codex dentro do tmux ou de um daemon para que ele sobreviva à sua conexão SSH. O Remote no app do ChatGPT só suporta oficialmente hosts macOS e Windows. Uma VPS Linux só é alcançada por meio de um deles: o app de desktop do ChatGPT num Mac ou PC que fica acordado a abre como projeto SSH. Para acessar a VPS diretamente pelo celular, use um app de SSH ou um cliente que converse com o servidor, como o Maude.
Um servidor é um bom lugar para o Codex CLI da OpenAI. Ele continua trabalhando com o notebook fechado, sobrevive a uma conexão que cai e, se uma execução der errado, você pode reconstruir a máquina. Duas coisas costumam atrapalhar numa VPS Linux recém-criada. Primeiro, o codex login puro espera um redirecionamento do navegador que nunca consegue chegar ao servidor. Segundo, o sandbox precisa de um pacote que a maioria das imagens mínimas não traz. Este guia resolve as duas coisas e depois mostra como manter as sessões vivas e as formas de acessá-las pelo celular.
Requisitos
- Um servidor Linux, x86-64 ou arm64. A OpenAI publica binários para os dois, e o macOS também funciona. Debian ou Ubuntu é o caminho mais fácil.
- Uma conta. Um plano do ChatGPT ou uma chave de API da OpenAI. A página de preços do Codex da OpenAI diz que o Codex está incluído no ChatGPT Free, Go, Plus, Pro, Business, Edu e Enterprise. Os limites variam por plano, e o uso local da CLI divide a cota com os chats na nuvem. O uso com chave de API é cobrado pelas tarifas da API.
- Memória. A CLI é um binário compilado e usa pouca memória por si só. Quem consome RAM são os builds e as execuções de testes do seu projeto. 2 GB funcionam para trabalho leve, e 4 GB dão folga. Veja o guia de compra de VPS para dimensionamento e preços atuais.
- Um usuário não root. Crie um antes de instalar qualquer coisa (
adduser deve depois copie a sua chave SSH). Nosso guia do Claude Code numa VPS mostra isso e o hardening do SSH; os passos são os mesmos para o Codex.
Instale o Codex
O instalador standalone não precisa de Node.js:
curl -fsSL https://chatgpt.com/codex/install.sh | sh
codex --version
Se você já gerencia ferramentas com o npm, isto instala a mesma CLI:
npm install -g @openai/codex
Atenção ao escopo: o pacote é @openai/codex. Um pacote codex sem escopo no npm não tem nada a ver. Instale com o seu usuário normal, não com sudo. Os dois métodos estão no README do openai/codex.
O pré-requisito do sandbox no Linux
No Linux, o Codex roda os comandos de shell que gera dentro de um sandbox baseado em bwrap (bubblewrap) e seccomp. A documentação de sandboxing da OpenAI manda instalar o bubblewrap primeiro:
sudo apt install bubblewrap # Debian / Ubuntu
sudo dnf install bubblewrap # Fedora
Sem o bwrap, o Codex recorre a um helper embutido, e esse helper precisa de user namespaces sem privilégios. O Ubuntu 24.04 restringe isso pelo AppArmor. A correção documentada carrega um perfil extra:
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
A documentação também dá uma alternativa mais bruta, sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0, que desativa a restrição na máquina inteira. Prefira o perfil. Se todo comando em sandbox falha com um erro de namespace, o motivo é este.
Faça login com código de dispositivo
Rode o codex login puro num servidor e ele parece travar. O motivo: ele inicia um servidor de callback local na porta 1455 e espera que o seu navegador seja redirecionado para localhost. Só que é o localhost do servidor, que o seu celular ou notebook não alcança. Use o login por código de dispositivo. Ele tem um pré-requisito que pega quase todo mundo:
- Ative o login por código de dispositivo. Faça isso nas configurações de segurança do ChatGPT, numa conta pessoal. Num workspace Business, Edu ou Enterprise, um administrador ativa isso nas permissões do workspace. Enquanto não estiver ativado, o fluxo por dispositivo não funciona para a sua conta.
- Inicie o fluxo no servidor:
codex login --device-auth - Conclua em qualquer dispositivo. O Codex mostra um link e um código de uso único. Abra o link no celular ou no notebook, entre no ChatGPT e digite o código.
- Confira se deu certo:
Isso mostra o modo de autenticação ativo e sai com 0 quando você está logado, o que é útil em scripts.codex login status
Isso vem da documentação de autenticação da OpenAI. Ela dá duas alternativas para quando o código de dispositivo não está disponível:
- Encaminhe a porta do callback. Conecte com
ssh -L 1455:localhost:1455 user@your-server, rodecodex loginno servidor e abra o endereço mostrado no navegador local. O redirecionamento então volta pelo túnel. - Copie a credencial. Faça login numa máquina que tenha navegador e depois
scp ~/.codex/auth.json user@your-server:~/.codex/auth.json.
Usando uma chave de API
printenv OPENAI_API_KEY | codex login --with-api-key
Passar a chave pela entrada padrão a mantém fora do histórico do shell. Você paga por token, a preços de API, em vez de usar a cota de um plano do ChatGPT. Isso combina com uma máquina compartilhada ou de CI, em que você quer um limite de cobrança bem definido.
Por padrão, o Codex guarda as credenciais em ~/.codex/auth.json. A configuração cli_auth_credentials_store pode movê-las para o keyring do sistema (file, keyring, auto ou ephemeral). Qualquer pessoa com um shell como o seu usuário pode usar o seu plano do ChatGPT. Não dê acesso de shell a outras pessoas numa máquina de agentes.
Mantenha rodando
Uma sessão interativa do codex vive e morre com o terminal que a iniciou. Feche a conexão SSH e a sessão acaba. Você tem três formas de contornar isso.
tmux, o clássico:
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
Se a sessão acabar, codex resume --last retoma a conversa mais recente daquele diretório, e codex resume abre um seletor. Nosso guia de tmux, mosh e Tailscale tem uma configuração do tmux pensada para o celular.
Execuções não interativas. codex exec "…" roda uma tarefa sem a TUI, e codex exec resume --last a continua. Isso serve para cron jobs e CI, mas não há ninguém para responder aos pedidos de aprovação, então as configurações de sandbox abaixo pesam mais.
Um daemon que é dono das sessões e sobrevive a reboots. É isso que o guia 24/7 compara: units do systemd, servidores do Remote Control e apps como o Maude, que rodam o próprio processo na máquina.
Aprovações e sandbox
O Codex tem dois controles separados: o que os comandos podem tocar (o sandbox) e quando ele para para perguntar a você (a política de aprovação). Os valores abaixo vêm da documentação de aprovações e segurança da OpenAI e da referência da CLI:
| Configuração | Valores | O que significa num servidor |
|---|---|---|
--sandbox / -s | read-only, workspace-write, danger-full-access | workspace-write é o padrão num repositório git. As edições ficam dentro do projeto, e o acesso à rede fica desligado a menos que você o ative. |
--ask-for-approval / -a | on-request, never | on-request pergunta quando uma ação precisa de mais do que o sandbox permite. never não pergunta nunca. No config.toml, approval_policy também aceita granular; o antigo valor untrusted foi descontinuado. |
--yolo | (alias de --dangerously-bypass-approvals-and-sandbox) | Sem sandbox e sem pedidos. A OpenAI o reserva para ambientes que já estão protegidos por fora. |
O --full-auto ainda aparece em guias antigos. Agora é uma flag de compatibilidade obsoleta, e a referência manda usar --sandbox workspace-write no lugar. Para deixar os comandos em sandbox acessarem a rede, por exemplo para o npm install funcionar, adicione isto ao ~/.codex/config.toml:
sandbox_mode = "workspace-write"
approval_policy = "on-request"
[sandbox_workspace_write]
network_access = true
Uma observação sobre contêineres: se a sua "VPS" é na verdade um contêiner Docker ou LXC que bloqueia operações de namespace, a documentação sugere --sandbox danger-full-access. Só faça isso se o próprio contêiner for o seu sandbox. Os prós e contras são os mesmos do modo bypass do Claude, tratados em rodar agentes com permissões totais, com segurança.
Opções de acesso pelo celular
| Opção | Funciona com uma VPS Linux? | Bom em | Cuidado com |
|---|---|---|---|
| Codex Remote (app do ChatGPT) | Não oficialmente. Os hosts precisam rodar o app de desktop do ChatGPT no macOS ou no Windows; esse app consegue acessar projetos SSH na sua VPS. | Oficial, gratuito com o seu plano, interface nativa | O computador host precisa ficar acordado e online |
| App de SSH + tmux | Sim | Gratuito, nada a mais no servidor | Uma TUI em tela cheia num teclado de celular, sem push |
| Maude | Sim (qualquer Linux ou macOS via SSH) | Interface de chat nativa, aprovações inline, push, também Claude Code e outros | App pago; você ainda precisa do seu próprio plano do ChatGPT ou de uma chave |
Uma palavra sobre Linux sem interface gráfica e o Codex Remote. A referência da CLI documenta codex remote-control start e codex remote-control pair para o app-server local. O guia de conexões remotas, porém, ainda diz que os hosts rodam o app de desktop no macOS ou no Windows. Usuários abriram issues sobre essa lacuna: a #31183 relata que hosts Linux headless não conseguem ser pareados de novo pelos clientes móveis atuais, e a #35928 aponta a contradição. As duas estavam abertas quando verificamos. Se esse caminho funcionar para você, é o oficial. Só não monte um fluxo de trabalho em cima dele por enquanto.
Comande pelo celular com o Maude
O Maude é uma forma de comandar essa VPS pelo celular sem a TUI. Você adiciona o servidor pelo endereço ou colando um comando ssh, e o app implanta o próprio pequeno daemon via SSH. Esse daemon instala o Codex numa versão testada e fixada, verificada por checksum, então você pula o passo de instalação. Você entra no Codex pelo celular com o código de dispositivo do ChatGPT ou com uma chave de API. Ainda é preciso ativar antes o login por código de dispositivo no ChatGPT. As sessões continuam rodando no servidor com o app fechado, os pedidos de aprovação aparecem numa caixa de entrada e como notificações push com Permitir/Negar, e o mesmo servidor pode rodar Claude Code, OpenCode, Grok Build e Antigravity ao lado do Codex. Os detalhes estão na página do agente Codex.
Perguntas frequentes
Por que o codex login trava no meu servidor?
codex login puro inicia um servidor de callback em localhost:1455 e espera um redirecionamento do navegador, que um navegador em outro dispositivo não consegue entregar à sua VPS. Use codex login --device-auth depois de ativar o login por código de dispositivo nas configurações de segurança do ChatGPT. Outra opção é encaminhar a porta com ssh -L 1455:localhost:1455.Preciso de Node.js para rodar o Codex?
curl -fsSL https://chatgpt.com/codex/install.sh | sh) e os binários das releases não precisam de Node. Você só precisa de Node se escolher o caminho do npm, npm install -g @openai/codex.Posso usar uma chave de API em vez do meu plano do ChatGPT?
printenv OPENAI_API_KEY | codex login --with-api-key. O uso passa a ser cobrado pelas tarifas da API da OpenAI, em vez de descontado da cota de um plano do ChatGPT.O Codex Remote enxerga a minha VPS?
codex remote-control) documentado, mas issues abertas no GitHub relatam problemas para parear hosts Linux headless, então confira a documentação atual antes de depender dele.Qual modo de sandbox devo usar numa VPS?
workspace-write mais aprovações on-request, e ative network_access se os seus builds precisarem baixar pacotes. Deixe o --yolo para máquinas descartáveis ou contêineres em cujo isolamento você confia.O que mudou
- — Primeira publicação. Detalhes de instalação, autenticação, sandbox e Remote conferidos nesta data com a documentação da OpenAI e o README do openai/codex.