Installatie
Codex CLI op een VPS draaien
Codex draait goed op een kleine Linux-server. De meeste wrijving zit bij het inloggen en bij de Linux-sandbox. Deze gids behandelt installeren, headless inloggen, sessies in leven houden en hoe je de server vanaf een telefoon bereikt.
Kort antwoord
Installeer met curl -fsSL https://chatgpt.com/codex/install.sh | sh (of npm install -g @openai/codex). Zet daarna inloggen met apparaatcode aan in je ChatGPT-beveiligingsinstellingen en voer codex login --device-auth uit op de server. Draai Codex binnen tmux of een daemon, zodat het je SSH-verbinding overleeft. Remote in de ChatGPT-app ondersteunt officieel alleen macOS- en Windows-hosts. Een Linux-VPS is alleen via zo'n host te bereiken: de ChatGPT-desktopapp op een Mac of pc die wakker blijft, opent hem als SSH-project. Wil je de VPS rechtstreeks vanaf je telefoon bereiken, gebruik dan een SSH-app of een client die met de server praat, zoals Maude.
Een server is een goed thuis voor de Codex CLI van OpenAI. Hij werkt door als je laptop dicht is, overleeft een weggevallen verbinding, en als een run misgaat, kun je de machine herbouwen. Twee dingen zetten mensen op een verse Linux-VPS op het verkeerde been. Ten eerste wacht een gewone codex login op een browserdoorverwijzing die de server nooit kan bereiken. Ten tweede heeft de sandbox een pakket nodig dat de meeste minimale images niet meeleveren. Deze gids lost beide op en behandelt daarna hoe je sessies in leven houdt en hoe je ze vanaf een telefoon bereikt.
Vereisten
- Een Linux-server, x86-64 of arm64. OpenAI publiceert binaries voor beide, en macOS werkt ook. Debian of Ubuntu is de makkelijke route.
- Een account. Een ChatGPT-abonnement of een OpenAI-API-sleutel. Volgens de prijspagina van Codex van OpenAI zit Codex in ChatGPT Free, Go, Plus, Pro, Business, Edu en Enterprise. De limieten verschillen per abonnement, en lokaal gebruik van de CLI deelt het tegoed met cloudchats. Gebruik met een API-sleutel wordt in plaats daarvan tegen API-tarieven gefactureerd.
- Geheugen. De CLI is een gecompileerde binary en heeft zelf weinig geheugen nodig. De builds en testruns van je project gebruiken het RAM. 2 GB werkt voor licht werk en 4 GB is comfortabel. Zie de VPS-koopgids voor de grootte en actuele prijzen.
- Een gebruiker zonder root. Maak er een aan voordat je iets installeert (
adduser dev, en kopieer daarna je SSH-sleutel). Onze gids voor Claude Code op een VPS loopt dat en de SSH-hardening door; de stappen zijn voor Codex hetzelfde.
Codex installeren
De zelfstandige installer heeft geen Node.js nodig:
curl -fsSL https://chatgpt.com/codex/install.sh | sh
codex --version
Beheer je tools al met npm, dan installeert dit dezelfde CLI:
npm install -g @openai/codex
Let op de scope: het pakket heet @openai/codex. Een pakket codex zonder scope op npm heeft er niets mee te maken. Installeer als je gewone gebruiker, niet met sudo. Beide methoden staan in de README van openai/codex.
Voorwaarde voor de Linux-sandbox
Op Linux draait Codex de shellcommando's die het genereert in een sandbox op basis van bwrap (bubblewrap) en seccomp. De sandboxdocumentatie van OpenAI zegt eerst bubblewrap te installeren:
sudo apt install bubblewrap # Debian / Ubuntu
sudo dnf install bubblewrap # Fedora
Zonder bwrap valt Codex terug op een meegeleverde helper, en die helper heeft unprivileged user namespaces nodig. Ubuntu 24.04 beperkt die via AppArmor. De gedocumenteerde oplossing laadt een extra profiel:
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
De documentatie geeft ook een botter alternatief, sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0, dat de beperking voor de hele machine uitzet. Kies liever het profiel. Faalt elk commando in de sandbox met een namespacefout, dan is deze sectie de reden.
Inloggen met apparaatcode
Voer je op een server een gewone codex login uit, dan lijkt het te blijven hangen. De reden: het start een lokale callbackserver op poort 1455 en wacht tot je browser wordt doorverwezen naar localhost. Dat is de localhost van de server, die je telefoon of laptop niet kan bereiken. Gebruik in plaats daarvan inloggen met een apparaatcode. Dat heeft één voorwaarde waar bijna iedereen over struikelt:
- Zet inloggen met apparaatcode aan. Doe dit bij een persoonlijk account in je ChatGPT-beveiligingsinstellingen. In een Business-, Edu- of Enterprise-workspace schakelt een beheerder het in bij de workspace-rechten. Zolang het uit staat, werkt de apparaatflow niet voor je account.
- Start de flow op de server:
codex login --device-auth - Rond hem af op een willekeurig apparaat. Codex toont een link en een eenmalige code. Open de link op je telefoon of laptop, log in bij ChatGPT en voer de code in.
- Controleer of het gelukt is:
Dit toont de actieve authenticatiemodus en sluit af met 0 als je bent ingelogd, wat handig is in scripts.codex login status
Dat komt uit de authenticatiedocumentatie van OpenAI. Die geeft twee terugvalopties voor als de apparaatcode niet beschikbaar is:
- Stuur de callbackpoort door. Verbind met
ssh -L 1455:localhost:1455 user@your-server, voercodex loginuit op de server en open het getoonde adres in je lokale browser. De doorverwijzing reist dan via de tunnel terug. - Kopieer het inloggegeven. Log in op een machine met een browser en daarna
scp ~/.codex/auth.json user@your-server:~/.codex/auth.json.
In plaats daarvan een API-sleutel gebruiken
printenv OPENAI_API_KEY | codex login --with-api-key
De sleutel via stdin aanleveren houdt hem uit je shellgeschiedenis. Je betaalt per token tegen API-prijzen in plaats van te putten uit een ChatGPT-abonnement. Dat past bij een gedeelde of CI-machine waar je een harde factuurgrens wilt.
Standaard bewaart Codex inloggegevens in ~/.codex/auth.json. Met de instelling cli_auth_credentials_store kun je ze naar de sleutelhanger van het besturingssysteem verplaatsen (file, keyring, auto of ephemeral). Iedereen met een shell als jouw gebruiker kan je ChatGPT-abonnement gebruiken. Geef anderen geen shelltoegang tot een agentmachine.
Laat het draaien
Een interactieve codex-sessie leeft en sterft met de terminal die hem startte. Sluit je de SSH-verbinding, dan stopt de sessie. Je hebt drie manieren om dat te omzeilen.
tmux, de klassieker:
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
Stopt de sessie toch, dan pakt codex resume --last het meest recente gesprek in die map op, en codex resume opent een keuzelijst. Onze gids over tmux, mosh en Tailscale heeft een telefoonvriendelijke tmux-config.
Niet-interactieve runs. codex exec "…" voert één taak uit zonder de TUI, en codex exec resume --last zet hem voort. Dat past bij cronjobs en CI, maar er is niemand om goedkeuringsverzoeken te beantwoorden, dus de sandboxinstellingen hieronder wegen zwaarder.
Een daemon die eigenaar is van de sessies en herstarts overleeft. Dat vergelijkt de gids over 24/7 draaien: systemd-units, Remote Control-servers, en apps zoals Maude die hun eigen proces op de machine draaien.
Goedkeuringen en sandbox
Codex heeft twee aparte knoppen: wat commando's mogen aanraken (de sandbox) en wanneer het stopt om het jou te vragen (het goedkeuringsbeleid). De waarden hieronder komen uit de documentatie over goedkeuringen en beveiliging van OpenAI en de CLI-referentie:
| Instelling | Waarden | Wat het betekent op een server |
|---|---|---|
--sandbox / -s | read-only, workspace-write, danger-full-access | workspace-write is de standaard in een git-repo. Wijzigingen blijven binnen het project, en netwerktoegang staat uit tenzij je die aanzet. |
--ask-for-approval / -a | on-request, never | on-request vraagt als een actie meer nodig heeft dan de sandbox toestaat. never vraagt helemaal niet. In config.toml accepteert approval_policy ook granular; de oude waarde untrusted is vervallen. |
--yolo | (alias van --dangerously-bypass-approvals-and-sandbox) | Geen sandbox en geen verzoeken. OpenAI reserveert het voor omgevingen die van buitenaf al zijn gehard. |
--full-auto duikt nog op in oudere gidsen. Het is nu een verouderde compatibiliteitsvlag, en de referentie zegt in plaats daarvan --sandbox workspace-write te gebruiken. Om commando's in de sandbox het netwerk te laten bereiken, bijvoorbeeld zodat npm install werkt, voeg je dit toe aan ~/.codex/config.toml:
sandbox_mode = "workspace-write"
approval_policy = "on-request"
[sandbox_workspace_write]
network_access = true
Een opmerking over containers: is je “VPS” eigenlijk een Docker- of LXC-container die namespace-operaties blokkeert, dan raadt de documentatie --sandbox danger-full-access aan. Doe dat alleen als de container zelf je sandbox is. De afwegingen zijn dezelfde als bij de bypass-modus van Claude, behandeld in agents veilig met volledige toestemmingen draaien.
Opties voor toegang vanaf je telefoon
| Optie | Werkt met een Linux-VPS? | Goed in | Let op |
|---|---|---|---|
| Codex Remote (ChatGPT-app) | Officieel niet. Hosts moeten de ChatGPT-desktopapp draaien op macOS of Windows; die app kan SSH-projecten op je VPS bereiken. | Officieel, gratis bij je abonnement, native UI | De hostcomputer moet wakker en online blijven |
| SSH-app + tmux | Ja | Gratis, niets extra op de server | Een TUI op volledig scherm op een telefoontoetsenbord, geen push |
| Maude | Ja (elke Linux of macOS via SSH) | Native chat-UI, goedkeuringen inline, push, ook Claude Code en andere | Betaalde app; je hebt nog steeds je eigen ChatGPT-abonnement of sleutel nodig |
Een woord over headless Linux en Codex Remote. De CLI-referentie documenteert codex remote-control start en codex remote-control pair voor de lokale app-server. De gids voor remote verbindingen zegt echter nog steeds dat hosts de desktopapp op macOS of Windows draaien. Gebruikers hebben issues geopend over dat gat: #31183 meldt dat headless Linux-hosts niet opnieuw gekoppeld kunnen worden vanuit de huidige mobiele clients, en #35928 wijst op de tegenstrijdigheid. Beide stonden open toen we keken. Werkt die route voor jou, dan is het de officiële. Bouw er alleen nog geen workflow op.
Draai het vanaf je telefoon met Maude
Maude is een manier om die VPS vanaf een telefoon aan te sturen zonder de TUI. Je voegt de server toe via het adres of een geplakt ssh-commando, en de app zet via SSH zijn eigen kleine daemon neer. Die daemon installeert Codex in een geteste, gepinde versie, met checksumcontrole, dus je slaat de installatiestap over. Je logt in bij Codex vanaf de telefoon met de ChatGPT-apparaatcode of een API-sleutel. Inloggen met een apparaatcode moet je wel eerst in ChatGPT aanzetten. Sessies blijven op de server draaien als de app gesloten is, goedkeuringsverzoeken verschijnen in een inbox en als pushmeldingen met Sta toe/Weiger, en dezelfde server kan naast Codex ook Claude Code, OpenCode, Grok Build en Antigravity draaien. Details staan op de agentpagina van Codex.
Veelgestelde vragen
Waarom blijft codex login op mijn server hangen?
codex login start een callbackserver op localhost:1455 en wacht op een browserdoorverwijzing, die een browser op een ander apparaat niet bij je VPS kan afleveren. Gebruik codex login --device-auth nadat je inloggen met een apparaatcode in je ChatGPT-beveiligingsinstellingen hebt aangezet. Of stuur de poort door met ssh -L 1455:localhost:1455.Heb ik Node.js nodig om Codex te draaien?
curl -fsSL https://chatgpt.com/codex/install.sh | sh) en de releasebinaries hebben geen Node nodig. Je hebt Node alleen nodig als je voor de npm-route kiest, npm install -g @openai/codex.Kan ik een API-sleutel gebruiken in plaats van mijn ChatGPT-abonnement?
printenv OPENAI_API_KEY | codex login --with-api-key. Het gebruik wordt dan tegen de API-tarieven van OpenAI gefactureerd in plaats van mee te tellen voor het tegoed van een ChatGPT-abonnement.Ziet Codex Remote mijn VPS?
codex remote-control) is gedocumenteerd, maar open GitHub-issues melden problemen bij het koppelen van headless Linux-hosts, dus check de actuele documentatie voordat je erop vertrouwt.Welke sandboxmodus moet ik op een VPS gebruiken?
workspace-write plus goedkeuring on-request, en zet network_access aan als je builds pakketten moeten downloaden. Houd --yolo voor wegwerpmachines of containers waarvan je de isolatie vertrouwt.Wat is er veranderd
- — Eerste publicatie. Installatie, authenticatie, sandbox en Remote op deze datum gecontroleerd aan de hand van de documentatie van OpenAI en de README van openai/codex.