cli/features.md +83 −5
20 20
21- Send prompts, code snippets, or screenshots (see [image inputs](#image-inputs)) directly into the composer.21- Send prompts, code snippets, or screenshots (see [image inputs](#image-inputs)) directly into the composer.
22- Watch Codex explain its plan before making a change, and approve or reject steps inline.22- Watch Codex explain its plan before making a change, and approve or reject steps inline.
2323- Read syntax-highlighted markdown code blocks and diffs in the TUI, then use `/theme` to preview and save a preferred color theme.- Read syntax-highlighted markdown code blocks and diffs in the TUI, then use `/theme` to preview and save a preferred theme.
24- Use `/clear` to wipe the terminal and start a fresh chat, or press <kbd>Ctrl</kbd>+<kbd>L</kbd> to clear the screen without starting a new conversation.24- Use `/clear` to wipe the terminal and start a fresh chat, or press <kbd>Ctrl</kbd>+<kbd>L</kbd> to clear the screen without starting a new conversation.
25- Use `/copy` to copy the latest completed Codex output. If a turn is still running, Codex copies the most recent finished output instead of in-progress text.25- Use `/copy` to copy the latest completed Codex output. If a turn is still running, Codex copies the most recent finished output instead of in-progress text.
26- Navigate draft history in the composer with <kbd>Up</kbd>/<kbd>Down</kbd>; Codex restores prior draft text and image placeholders.26- Navigate draft history in the composer with <kbd>Up</kbd>/<kbd>Down</kbd>; Codex restores prior draft text and image placeholders.
44 44
45Each resumed run keeps the original transcript, plan history, and approvals, so Codex can use prior context while you supply new instructions. Override the working directory with `--cd` or add extra roots with `--add-dir` if you need to steer the environment before resuming.45Each resumed run keeps the original transcript, plan history, and approvals, so Codex can use prior context while you supply new instructions. Override the working directory with `--cd` or add extra roots with `--add-dir` if you need to steer the environment before resuming.
46 46
47## Connect the TUI to a remote app server
48
49Remote TUI mode lets you run the Codex app server on one machine and use the Codex terminal UI from another machine. This is useful when the code, credentials, or execution environment live on a remote host, but you want the local interactive TUI experience.
50
51Start the app server on the machine that should own the workspace and run commands:
52
53```bash
54codex app-server --listen ws://127.0.0.1:4500
55```
56
57Then connect from the machine running the TUI:
58
59```bash
60codex --remote ws://127.0.0.1:4500
61```
62
63For access from another machine, bind the app server to a reachable interface, for example:
64
65```bash
66codex app-server --listen ws://0.0.0.0:4500
67```
68
69`--remote` accepts explicit `ws://host:port` and `wss://host:port` addresses only. For plain WebSocket connections, prefer local-host addresses or SSH port forwarding. If you expose the listener beyond the local host, configure authentication before real remote use and put authenticated non-local connections behind TLS.
70
71Codex supports these WebSocket authentication modes for remote TUI connections:
72
73- **No WebSocket auth**: Best for local-host listeners or SSH port-forwarded connections. Codex can start non-local listeners without auth, but logs a warning and the startup banner reminds you to configure auth before real remote use.
74- **Capability token**: Store a shared token in a file on the app-server host, start the server with `--ws-auth capability-token --ws-token-file /abs/path/to/token`, then set the same token in an environment variable on the TUI host and pass `--remote-auth-token-env <ENV_VAR>`.
75- **Signed bearer token**: Store an HMAC shared secret in a file on the app-server host, start the server with `--ws-auth signed-bearer-token --ws-shared-secret-file /abs/path/to/secret`, and have the TUI send a signed JWT bearer token through `--remote-auth-token-env <ENV_VAR>`. The shared secret must be at least 32 bytes. Signed tokens use HS256 and must include `exp`; Codex also validates `nbf`, `iss`, and `aud` when those claims or server options are present.
76
77To create a capability token on the app-server host, generate a random token file with permissions that only your user can read:
78
79```bash
80TOKEN_FILE="$HOME/.codex/codex-app-server-token"
81install -d -m 700 "$(dirname "$TOKEN_FILE")"
82openssl rand -base64 32 > "$TOKEN_FILE"
83chmod 600 "$TOKEN_FILE"
84```
85
86Treat the token file like a password, and regenerate it if it leaks.
87
88Then start the app server with that token file. For example, with a capability token behind a TLS proxy:
89
90```bash
91# Remote host
92TOKEN_FILE="$HOME/.codex/codex-app-server-token"
93codex app-server \
94 --listen ws://0.0.0.0:4500 \
95 --ws-auth capability-token \
96 --ws-token-file "$TOKEN_FILE"
97
98# TUI host
99export CODEX_REMOTE_AUTH_TOKEN="$(ssh devbox 'cat ~/.codex/codex-app-server-token')"
100codex --remote wss://codex-devbox.example.com:4500 \
101 --remote-auth-token-env CODEX_REMOTE_AUTH_TOKEN
102```
103
104The TUI sends remote auth tokens as `Authorization: Bearer <token>` during the WebSocket handshake. Codex only sends those tokens over `wss://` URLs or `ws://` URLs whose host is `localhost`, `127.0.0.1`, or `::1`, so put non-local remote listeners behind TLS if clients need to authenticate over the network.
105
47## Models and reasoning106## Models and reasoning
48 107
49108For most tasks in Codex, `gpt-5.4` is the recommended model. It brings the industry-leading coding capabilities of `gpt-5.3-codex` to OpenAI’s flagship frontier model, combining frontier coding performance with stronger reasoning, native computer use, and broader professional workflows. For extra fast tasks, ChatGPT Pro subscribers have access to the GPT-5.3-Codex-Spark model in research preview.For most tasks in Codex, `gpt-5.4` is the recommended model. It brings the
109industry-leading coding capabilities of `gpt-5.3-codex` to OpenAI’s flagship
110frontier model, combining frontier coding performance with stronger reasoning,
111native computer use, and broader professional workflows. For extra fast tasks,
112ChatGPT Pro subscribers have access to the GPT-5.3-Codex-Spark model in
113research preview.
50 114
51Switch models mid-session with the `/model` command, or specify one when launching the CLI.115Switch models mid-session with the `/model` command, or specify one when launching the CLI.
52 116
68 132
69`codex features enable <feature>` and `codex features disable <feature>` write to `~/.codex/config.toml`. If you launch Codex with `--profile`, Codex stores the change in that profile rather than the root configuration.133`codex features enable <feature>` and `codex features disable <feature>` write to `~/.codex/config.toml`. If you launch Codex with `--profile`, Codex stores the change in that profile rather than the root configuration.
70 134
71135## Multi-agents (experimental)## Subagents
72 136
73137Use Codex multi-agent workflows to parallelize larger tasks. For setup, role configuration (`[agents]` in `config.toml`), and examples, see [Multi-agents](https://developers.openai.com/codex/multi-agent).Use Codex subagent workflows to parallelize larger tasks. For setup, role configuration (`[agents]` in `config.toml`), and examples, see [Subagents](https://developers.openai.com/codex/subagents).
138
139Codex only spawns subagents when you explicitly ask it to. Because each
140subagent does its own model and tool work, subagent workflows consume more
141tokens than comparable single-agent runs.
74 142
75## Image inputs143## Image inputs
76 144
86 154
87Codex accepts common formats such as PNG and JPEG. Use comma-separated filenames for two or more images, and combine them with text instructions to add context.155Codex accepts common formats such as PNG and JPEG. Use comma-separated filenames for two or more images, and combine them with text instructions to add context.
88 156
157## Image generation
158
159Ask Codex to generate or edit images directly in the CLI. This works well for assets such as icons, banners, illustrations, sprite sheets, and placeholder art. If you want Codex to transform or extend an existing asset, attach a reference image with your prompt.
160
161You can ask in natural language or explicitly invoke the image generation skill by including `$imagegen` in your prompt.
162
163Built-in image generation uses `gpt-image-1.5`, counts toward your general Codex usage limits, and uses included limits 3-5x faster on average than similar turns without image generation, depending on image quality and size. For details, see [Pricing](https://developers.openai.com/codex/pricing#image-generation-usage-limits). For prompting tips and model details, see the [image generation guide](https://developers.openai.com/api/docs/guides/image-generation).
164
165For larger batches of image generation, set `OPENAI_API_KEY` in your environment variables and ask Codex to generate images through the API so API pricing applies instead.
166
89## Syntax highlighting and themes167## Syntax highlighting and themes
90 168
91The TUI syntax-highlights fenced markdown code blocks and file diffs so code is easier to scan during reviews and debugging.169The TUI syntax-highlights fenced markdown code blocks and file diffs so code is easier to scan during reviews and debugging.
105 183
106## Web search184## Web search
107 185
108186Codex ships with a first-party web search tool. For local tasks in the Codex CLI, Codex enables web search by default and serves results from a web search cache. The cache is an OpenAI-maintained index of web results, so cached mode returns pre-indexed results instead of fetching live pages. This reduces exposure to prompt injection from arbitrary live content, but you should still treat web results as untrusted. If you are using `--yolo` or another [full access sandbox setting](https://developers.openai.com/codex/security), web search defaults to live results. To fetch the most recent data, pass `--search` for a single run or set `web_search = "live"` in [Config basics](https://developers.openai.com/codex/config-basic). You can also set `web_search = "disabled"` to turn the tool off.Codex ships with a first-party web search tool. For local tasks in the Codex CLI, Codex enables web search by default and serves results from a web search cache. The cache is an OpenAI-maintained index of web results, so cached mode returns pre-indexed results instead of fetching live pages. This reduces exposure to prompt injection from arbitrary live content, but you should still treat web results as untrusted. If you are using `--yolo` or another [full access sandbox setting](https://developers.openai.com/codex/agent-approvals-security), web search defaults to live results. To fetch the most recent data, pass `--search` for a single run or set `web_search = "live"` in [Config basics](https://developers.openai.com/codex/config-basic). You can also set `web_search = "disabled"` to turn the tool off.
109 187
110You'll see `web_search` items in the transcript or `codex exec --json` output whenever Codex looks something up.188You'll see `web_search` items in the transcript or `codex exec --json` output whenever Codex looks something up.
111 189