Skip to main content
The agent37-codex template runs Codex, OpenAI’s coding agent, on an Agent37 instance: an always-on computer with the same chat API, sessions, files, and URLs as every other template. The image is lean, with no browser and no desktop. Codex runs on your own OpenAI account: Agent37 never supplies or bills OpenAI model usage, and there is no managed-model option on this template, so connect your account before the first chat turn.

Create the instance

One call to the hosting API at https://api.agent37.com:
curl
The 201 response carries the instance id and its URL, https://{instanceId}.agent37.app, which routes to the gateway on port 3737. The terminal is on port 7681 and the file browser on 8080, each at https://{instanceId}-{port}.agent37.app; see Instance and preview URLs.

Connect your OpenAI account

Two ways to connect. Until one of them is done, a chat turn fails with auth_error, and GET /v1/health?agent=codex on the instance URL reports "healthy": false. Log in from the instance terminal. Mint a signed URL for the terminal port:
curl
Open the returned url in a browser and run codex login --device-auth in the shell. It prints a URL and a one-time code: open the URL, enter the code, and approve with your ChatGPT account. The login persists on the instance volume, so it survives restarts and updates. Starting a device login logs out any API-key login on the instance, so use one method per instance. Set OPENAI_API_KEY. The way to go when your app provisions instances headlessly. Pass your OpenAI API key (as OPENAI_API_KEY, or CODEX_API_KEY) as instance env on the create call:
curl
The image runs codex login --with-api-key at boot to activate the key; a bare environment variable on its own does not authenticate.

Send the first message

Chat is the instance URL plus a path, with the same sk_live_ key sent as the X-Agent37-Key header. codex is the template’s default agent, so there is no agent field to pass:
curl
Set "stream": true to receive the turn as Server-Sent Events instead of one JSON body, and reuse the returned session_id to continue the thread. Codex mints its own session ids, so start a thread by omitting session_id; you cannot bring an unknown id on the first turn. See Send a message and Streaming.

Models

GET /v1/models?agent=codex on the instance lists Codex’s own live model catalog, the gpt-5.x family. Pass an id as model on a turn, and set reasoning_effort per turn; ultra maps to Codex’s multi-agent mode. Usage bills to your OpenAI account, not your Agent37 wallet. See Models.

Bring your own model

Codex can run against a different provider entirely: point it at any Responses-compatible endpoint with OPENAI_BASE_URL in the instance env on the create call:
curl
No OpenAI account is needed: model usage bills the key behind the endpoint you point OPENAI_BASE_URL at, and health reports healthy once the instance is up. Codex is built for OpenAI models; pointing it at another family can mishandle the tool calls it edits files with.

Connect apps

App integrations work here like on every system template: drive the /v1/integrations endpoints to connect your users’ Gmail, Slack, Notion, and hundreds of other apps, and the platform registers its Composio MCP server with Codex automatically (in ~/.codex/config.toml).

Custom image

To add your own tools, build on the clean base image, which ships Codex and the gateway with no managed integrations, the same pattern as hermes-base:
See Build a custom image.

Troubleshooting