OXYGENOxygen/ Docs
Surfaces

Codex

Run Oxygen from OpenAI Codex — the CLI in your terminal, plus the hosted MCP connector on the core toolset profile.

Codex is a terminal agent, so its primary path into Oxygen is the oxygen CLI: full command surface, agent skills, and --json envelopes it can parse. You can also connect the hosted MCP server; because Codex has no tool search, use the core toolset profile so the tool list stays inside its context budget. Widgets do not render in a terminal.

What works here

CapabilityCodex
oxygen CLI in the terminalYes — the primary surface
Agent skills (--agents codex)Yes
Hosted MCP connector (OAuth)Yes — use ?toolset=core
ui:// widgetsNo — terminal clients do not render widgets; the connector suppresses the widget block for them automatically
npm install -g @oxygen-agent/cli
oxygen login
oxygen skills install --agents codex --skill '*' --json

oxygen login opens a browser and stores credentials for the active profile. oxygen skills install installs the Oxygen workflow skills into ~/.codex/skills (context first, table first, dry run before live, inspect runs after). Requires Node.js >=22.22.0 and npm >=10.9.0.

For headless environments, use a token instead of the browser login:

oxygen api-keys create --name "codex" --json
oxygen auth use-token --token <token> --json

Setup — hosted MCP (optional)

Add the hosted server to Codex's MCP configuration pointing at the core profile:

https://oxygen-agent.com/mcp?toolset=core

The core profile advertises ~40 golden-path tools plus the oxygen_capabilities_search / oxygen_capabilities_schema discovery pair, instead of the several hundred in the full registry — built precisely for MCP clients without tool search like Codex and ChatGPT connectors. Every hidden tool stays callable by exact name and is one oxygen_capabilities_search away. Complete the OAuth sign-in when it opens.

Verify your setup

Run these read-only checks in the terminal (none spend credits):

oxygen status --json
oxygen whoami --json
oxygen commands --json | jq '.data.commands | length'

Good output:

  • oxygen status returns data.compatible: true (your CLI meets the server's enforced minimum), alongside client_version, server_version, minimum_cli_version, and a skew of in_sync, client_ahead, or client_behind.
  • oxygen whoami returns data.user.email and data.organization.name, plus an onboarding block; load workspace context first if onboarding.complete is false.
  • oxygen commands --json | jq '.data.commands | length' prints a positive integer — the full command count in the manifest.

If you connected the MCP server, ask Codex to call oxygen_whoami (returns the identity JSON) and oxygen_capabilities_search with a query like enroll leads in a sequence (returns ranked matches flagged read_only, paid, in_core).

Cost and approval posture

Dry-run and preview calls never spend credits or write externally; paid provider calls, AI/tool column runs, enrichment, and external writes execute only after you pass --approved with a --max-credits ceiling (or approve the equivalent scope through MCP). See Approvals and Spend caps.

Known limitations

  • No ui:// widget rendering — inspect results via the web_url in each envelope or the web app.
  • Connect the MCP server with ?toolset=core; the full tool list will overwhelm a client without tool search.
  • Large CSV/JSON files should be imported with the CLI (oxygen tables import ... --background), not pasted into an MCP prompt.

On this page