Symbol Docs
Concepts

Codex and ChatGPT

Deliver the same Symbol-packaged agents and skills to OpenAI Codex and ChatGPT, from the same capsule that serves Claude Code.

Everything on the Agents page is delivered to Claude Code. The same capsule reaches OpenAI Codex and ChatGPT too, from the same source of truth. You do not choose a target when you package a capsule: a Type packaged as Agent is an agent for every assistant, and each delivery path renders the capsule its own way.

OpenAI's surfaces do not line up one for one with Claude Code's, so where a setting has no OpenAI equivalent Symbol tells you, in the product and in the terminal, rather than shipping a definition that quietly does less.

A named Codex agent

Codex custom agents are standalone TOML files. symbol-agents sync --target codex writes one <name>.toml per eligible agent capsule, so a Codex session told to use the agent by name spawns it:

# Into this project's .codex/agents/ (the default scope)
symbol-agents sync --target codex

# Into your personal ~/.codex/agents/, so the agent follows you everywhere
symbol-agents sync --target codex --scope personal

Each scope keeps its own sidecar manifest and supports drift detection:

symbol-agents sync --target codex --check

--check renders nothing. It reports stale (the source capsule changed, or the file was hand-edited), missing, or orphaned definitions and exits non-zero on any drift, exactly like the Claude path. A <name>.toml the manifest does not own is never overwritten, so a hand-written Codex agent in the same directory is safe.

The main session behaves as the specialist

Claude Code's claude --agent forge makes the whole session the agent. Codex has no codex --agent; the equivalent is project instructions. symbol-agents instructions writes the selected agents' system prompts into a marker-fenced block in AGENTS.md, so a Codex session started in that project behaves as the specialist without being asked to delegate:

symbol-agents instructions --agent forge --agent reviewer

Only the block between <!-- symbol-agents:begin --> and <!-- symbol-agents:end --> is managed. Everything else in AGENTS.md is preserved byte for byte, and --check reports whether the block is current.

What each setting maps to

The Codex form is rendered from the same validated definition as the Claude form, so name, description and system prompt carry across identically. The optional settings map like this:

Agent settingCodexRule
reasoning effortmodel_reasoning_effortcarried through (low…max are all Codex values)
permissionMode: plansandbox_mode = "read-only"mapped; default is omitted (both defaults)
MCP server symbol[mcp_servers.symbol]expands to Symbol's hosted endpoint, no credential
modelmodelset the openai_model field with an OpenAI model id
everything elsenonedropped with a warning naming the setting and the target

Because Claude model ids and OpenAI model ids do not map, a Claude model is not guessed. Set an openai_model field on the capsule to emit a Codex model line; without it, a Claude-only model is dropped and you are told so. openai_model must be a single text value: a list, a file or any other shape is an authoring error that holds the agent back from every assistant until it is fixed, the same as an invalid model. Any other non-mapping setting (tools, a non-plan permission mode, a non-symbol MCP server, and so on) is dropped with a warning too: in the terminal on sync, in the capsule's agent panel, and in the marketplace report.

No setting the Codex form cannot express is ever shipped silently. If you rely on one of the dropped settings, deliver that agent to a runtime that honors it.

Installing a workspace's plugin into Codex and ChatGPT

Enable your plugin marketplace and it serves both consumers from one repository. The marketplace settings page shows a Codex install command beside the Claude Code one:

codex plugin marketplace add <your install URL>

That registers the marketplace; it does not install anything yet. Install its plugin with /plugins in the Codex CLI, or restart the ChatGPT desktop app and install it from the Plugins tab.

The plugin carries this workspace's published skills and its Symbol MCP server, so an installed plugin reaches your capsules with no separate MCP setup: you sign in once with Symbol's OAuth flow the first time the plugin reaches Symbol, and no credential ever lives in the distributed files. Updates arrive with:

codex plugin marketplace upgrade

Named Codex agents do not travel in the OpenAI plugin: the plugin format packages skills, an MCP server and hooks, not custom agents. Install named agents from the terminal with symbol-agents sync --target codex (above); the plugin still delivers this workspace's skills and MCP server to Codex and ChatGPT.

Nothing changes for Claude Code

Every Claude Code path works exactly as before: the same definitions render byte for byte, the same install command and one-liner work, and symbol-agents sync and emit with no --target are unchanged. Codex delivery is purely additive.

On this page