plugins/plugin-codex-cli/README.md
ChatGPT Codex model provider for elizaOS. This node-only plugin lets an Eliza agent use a user's ChatGPT Plus/Pro subscription as a frontier-model provider by reusing the OAuth token cache written by the official codex CLI.
This is intentionally a model provider plugin. It does not add a reasoning runtime, planner loop, context manager, or any native-reasoning architecture. It sits alongside providers like @elizaos/plugin-openai and @elizaos/plugin-anthropic and registers handlers for text, response-handler, action-planner, and object model types.
The plugin reads OAuth tokens from ~/.codex/auth.json by default, sends requests to:
https://chatgpt.com/backend-api/codex/responses
and uses the same codex-oriented request headers as the CLI path:
Authorization: Bearer <access_token>originator: codex_cli_rsUser-Agent: codex_cli_rs/...chatgpt-account-id: <account_id>OpenAI-Beta: responses=v1On a 401, it refreshes the token with the cached refresh token, writing the auth file atomically under a file lock, then retries once.
Set CODEX_MODEL to one of:
gpt-5gpt-5-codexgpt-5.4gpt-5.5gpt-5.5-proThe default is gpt-5.5.
CODEX_AUTH_PATH=~/.codex/auth.json
CODEX_BASE_URL=https://chatgpt.com/backend-api/codex # must target chatgpt.com or localhost
CODEX_MODEL=gpt-5.5
CODEX_JITTER_MS_MAX=200
CODEX_ORIGINATOR=codex_cli_rs
Install or enable the plugin the same way as other elizaOS model-provider plugins, then configure an agent to load @elizaos/plugin-codex-cli.
Example direct runtime call:
import { ModelType } from "@elizaos/core";
const text = await runtime.useModel(ModelType.RESPONSE_HANDLER, {
prompt: "Reply as the agent in one short paragraph.",
});
Tool-capable calls can pass provider-neutral tools, toolChoice, and messages. The plugin forwards tools to the OpenAI Responses API function-tool shape and returns a native result object when tools or messages are used:
const result = await runtime.useModel(ModelType.RESPONSE_HANDLER, {
messages,
tools: [
{
name: "lookup",
description: "Look up a fact",
parameters: { type: "object", properties: { query: { type: "string" } } },
},
],
});
// result.text
// result.toolCalls
To reduce account/session weirdness against the ChatGPT Codex backend, each backend instance uses:
This package is the salvaged CodexBackend piece from the closed native-reasoning PR #7435. Wave 1 on develop owns native tool calling and the agent loop. This plugin only provides a Codex-backed model provider surface for that architecture.