
Codex
- 11 installs
- 90 repo stars
- Updated August 5, 2026
- iii-hq/workers
Run headless OpenAI Codex turns over the iii bus with sandboxed shell, file edits, and web search against any host directory, plus thread resume and SDK option pass-through.
About
The codex worker exposes the OpenAI Codex API as iii functions, running one headless agent turn per call in a chosen directory with its own sandbox. A developer uses it to delegate coding tasks, resume threads, get structured JSON output, or wire MCP servers into a turn.
- sandbox_mode controls read-only, workspace-write, or full access
- output_schema returns structured JSON; options forwards SDK ThreadOptions
Codex by the numbers
- 11 all-time installs (skills.sh)
- Ranked #11,740 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/iii-hq/workers --skill codexAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 11 |
|---|---|
| repo stars | ★ 90 |
| Last updated | August 5, 2026 |
| Repository | iii-hq/workers ↗ |
What it does
Run headless OpenAI Codex turns over the iii bus with sandboxed shell, file edits, and web search against any host directory, plus thread resume and SDK option pass-through.
Files
codex
The codex worker exposes the OpenAI Codex API as iii functions. One codex::run call executes one headless Codex turn — the same agent the user runs in their terminal, with the same login, filesystem, and sandbox — in a chosen working directory, and returns the final result and token usage. The worker is a pure pass-through: named payload fields cover the common path, the options field forwards any Codex SDK ThreadOption verbatim, and every thread event mirrors untouched onto the codex::events stream. A translated AgentEvent view lands on agent::events, which is what the iii console renders.
Requires the codex CLI on the host with an existing codex login or OPENAI_API_KEY in the worker environment. When a turn needs a capability beyond Codex itself, add another iii worker to the bus instead of bolting anything onto this one.
When to Use
- Delegate a whole coding task ("add an endpoint and run the tests") in one
call, instead of orchestrating individual coder::* / shell::* calls yourself: codex::run with prompt and cwd.
- Continue a conversation across calls: pass the same
session_idagain and
the worker resumes the underlying Codex thread with full context.
- Run long jobs without holding the call open:
codex::startreturns
{session_id, started} immediately; follow codex::events (group_id = session_id) for raw progress or agent::events for the rendered view; interrupt with codex::stop.
- Act on the whole backend: turns carry the iii runtime context by default
(delivered as Codex developer_instructions), so the agent discovers and calls any registered function through the iii CLI (engine::functions::list, iii trigger <fn> --help); disable per turn with iii_context: false.
- Plan before touching anything: run the planning prompt with
sandbox_mode: read-only (writes physically fail), read the plan, then send "implement the plan" on the same session_id with sandbox_mode: workspace-write.
- Get structured final output: pass
output_schema(JSON schema) and the
final agent message is JSON matching it.
- Attach screenshots or diagrams:
images: ["/path/a.png"]adds local
images to the prompt.
- Wire MCP servers or model providers into one turn:
codex_config
forwards any config.toml override, e.g. {"codex_config": {"mcp_servers": {"github": {"command": "gh-mcp"}}}}.
- Reach past the named payload fields: anything the SDK ThreadOptions
accept goes through options unchanged, e.g. {"options": {"networkAccessEnabled": true, "webSearchMode": "live"}}.
Boundaries
- Spawns the host
codexCLI per turn — needs Codex installed and
authenticated; not available inside a bare container without it.
- Execution safety is Codex's own sandbox (
sandbox_mode), not the
engine's: read-only blocks writes, workspace-write allows edits in cwd, danger-full-access disables the sandbox. Headless turns run approval_policy: never, so blocked commands fail instead of prompting.
- One turn per session at a time: check
codex::status(live: true)
before sending another codex::run for the same session_id; parallel runs against one session race on the underlying thread resume.
agent::eventscarries whole-message frames; per-item progress detail
(command output as it accumulates, todo lists) exists only on codex::events.
Functions
codex::run— run one Codex turn and wait; acceptsprompt(or a
messages array whose last user entry becomes the prompt), plus model, cwd, sandbox_mode, approval_policy, reasoning_effort, skip_git_repo_check, output_schema, and raw options; returns {session_id, codex_thread_id, result, stop_reason, usage}.
codex::start— same payload, returns{session_id, started}
immediately; progress arrives on the streams.
codex::stop— interrupt the live run for a session.codex::status— point-in-time session view: live flag, status, turns,
usage.
codex::sessions::list— every session this worker has run.