Files
llmx/docs/advanced.md
Ahmed Ibrahim a30e5e40ee enable-resume (#3537)
Adding the ability to resume conversations.
we have one verb `resume`. 

Behavior:

`tui`:
`codex resume`: opens session picker
`codex resume --last`: continue last message
`codex resume <session id>`: continue conversation with `session id`

`exec`:
`codex resume --last`: continue last conversation
`codex resume <session id>`: continue conversation with `session id`

Implementation:
- I added a function to find the path in `~/.codex/sessions/` with a
`UUID`. This is helpful in resuming with session id.
- Added the above mentioned flags
- Added lots of testing
2025-09-14 19:33:19 -04:00

5.7 KiB

Advanced

Non-interactive / CI mode

Run Codex head-less in pipelines. Example GitHub Action step:

- name: Update changelog via Codex
  run: |
    npm install -g @openai/codex
    codex login --api-key "${{ secrets.OPENAI_KEY }}"
    codex exec --full-auto "update CHANGELOG for next release"

Resuming non-interactive sessions

You can resume a previous headless run to continue the same conversation context and append to the same rollout file.

Interactive TUI equivalent:

codex resume             # picker
codex resume --last      # most recent
codex resume <SESSION_ID>

Compatibility:

  • Latest source builds include codex exec resume (examples below).
  • Current released CLI may not include this yet. If codex exec --help shows no resume, use the workaround in the next subsection.
# Resume the most recent recorded session and run with a new prompt (source builds)
codex exec "ship a release draft changelog" resume --last

# Alternatively, pass the prompt via stdin (source builds)
# Note: omit the trailing '-' to avoid it being parsed as a SESSION_ID
echo "ship a release draft changelog" | codex exec resume --last

# Or resume a specific session by id (UUID) (source builds)
codex exec resume 7f9f9a2e-1b3c-4c7a-9b0e-123456789abc "continue the task"

Notes:

  • When using --last, Codex picks the newest recorded session; if none exist, it behaves like starting fresh.
  • Resuming appends new events to the existing session file and maintains the same conversation id.

Tracing / verbose logging

Because Codex is written in Rust, it honors the RUST_LOG environment variable to configure its logging behavior.

The TUI defaults to RUST_LOG=codex_core=info,codex_tui=info and log messages are written to ~/.codex/log/codex-tui.log, so you can leave the following running in a separate terminal to monitor log messages as they are written:

tail -F ~/.codex/log/codex-tui.log

By comparison, the non-interactive mode (codex exec) defaults to RUST_LOG=error, but messages are printed inline, so there is no need to monitor a separate file.

See the Rust documentation on RUST_LOG for more information on the configuration options.

Model Context Protocol (MCP)

The Codex CLI can be configured to leverage MCP servers by defining an mcp_servers section in ~/.codex/config.toml. It is intended to mirror how tools such as Claude and Cursor define mcpServers in their respective JSON config files, though the Codex format is slightly different since it uses TOML rather than JSON, e.g.:

# IMPORTANT: the top-level key is `mcp_servers` rather than `mcpServers`.
[mcp_servers.server-name]
command = "npx"
args = ["-y", "mcp-server"]
env = { "API_KEY" = "value" }

Using Codex as an MCP Server

The Codex CLI can also be run as an MCP server via codex mcp. For example, you can use codex mcp to make Codex available as a tool inside of a multi-agent framework like the OpenAI Agents SDK.

Codex MCP Server Quickstart

You can launch a Codex MCP server with the Model Context Protocol Inspector:

npx @modelcontextprotocol/inspector codex mcp

Send a tools/list request and you will see that there are two tools available:

codex - Run a Codex session. Accepts configuration parameters matching the Codex Config struct. The codex tool takes the following properties:

Property Type Description
prompt (required) string The initial user prompt to start the Codex conversation.
approval-policy string Approval policy for shell commands generated by the model: untrusted, on-failure, never.
base-instructions string The set of instructions to use instead of the default ones.
config object Individual config settings that will override what is in $CODEX_HOME/config.toml.
cwd string Working directory for the session. If relative, resolved against the server process's current directory.
include-plan-tool boolean Whether to include the plan tool in the conversation.
model string Optional override for the model name (e.g. o3, o4-mini).
profile string Configuration profile from config.toml to specify default options.
sandbox string Sandbox mode: read-only, workspace-write, or danger-full-access.

codex-reply - Continue a Codex session by providing the conversation id and prompt. The codex-reply tool takes the following properties:

Property Type Description
prompt (required) string The next user prompt to continue the Codex conversation.
conversationId (required) string The id of the conversation to continue.

Trying it Out

Tip

Codex often takes a few minutes to run. To accommodate this, adjust the MCP inspector's Request and Total timeouts to 600000ms (10 minutes) under ⛭ Configuration.

Use the MCP inspector and codex mcp to build a simple tic-tac-toe game with the following settings:

approval-policy: never

prompt: Implement a simple tic-tac-toe game with HTML, Javascript, and CSS. Write the game in a single file called index.html.

sandbox: workspace-write

Click "Run Tool" and you should see a list of events emitted from the Codex MCP server as it builds the game.