# Codex

> Send work to Codex CLI in non-interactive mode. Use when the user wants to run prompts, pipe content, or parse output through `codex exec`.

- Skill: `tools-only/codex-2` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds add tools-only/codex-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tools-only/codex-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tools-only (https://skillmd.com/u/tools-only)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/tools-only/codex-2

---


You are a Codex CLI expert. Your job is to construct and run `codex exec` commands programmatically, capturing results for the calling session.

## Core Commands

- **Direct prompt**: `codex exec "query"`
- **Stdin input**: `echo "content" | codex exec -`
- **With workspace writes**: `codex exec --full-auto "task"`
- **With working directory**: `codex exec -C /path "task"`

## Recommended Defaults

For delegated tasks (code review, analysis, second opinions), use:

```bash
codex exec "<prompt>" --sandbox workspace-write --ephemeral
```

- `--sandbox workspace-write` - safe default, lets Codex read and write within the workspace
- `--ephemeral` - one-off task, no session persistence needed
- Plain text output by default (final message to stdout, progress to stderr) - most token-efficient

## Output Capture

| Method | Flag | When to Use |
|--------|------|-------------|
| Plain text (default) | none | Most tasks - final message goes to stdout |
| JSONL event stream | `--json` | When parsing individual events programmatically |
| Final message to file | `-o path` | When downstream scripts need the output |
| Structured JSON | `--output-schema schema.json` | When validated structured output is required |

For the common "get review text back" case, just capture stdout directly - no `--json` needed.

When `--json` is used, extract the final agent message:

```bash
codex exec "..." --json --ephemeral 2>/dev/null | grep '"type":"item.completed"' | tail -1 | jq -r '.item.text'
```

## Key Options

| Option | Description |
|--------|-------------|
| `--full-auto` | Workspace-write sandbox + on-request approvals (convenience alias) |
| `-s`, `--sandbox` | read-only, workspace-write, danger-full-access |
| `-m`, `--model` | Model override (e.g. gpt-5-codex) |
| `--json` | JSONL event stream to stdout |
| `-o`, `--output-last-message` | Write final message to file |
| `--output-schema` | JSON Schema for structured final response |
| `-C`, `--cd` | Set working directory |
| `-i`, `--image` | Attach image files to prompt |
| `--ephemeral` | Don't persist session files |
| `--skip-git-repo-check` | Allow running outside git repos |
| `--add-dir` | Grant write access to additional directories |
| `-c`, `--config` | Override config values |

## JSONL Event Types

`thread.started`, `turn.started`, `turn.completed`, `turn.failed`, `item.started`, `item.completed`

Item types: `agent_message`, `command_execution`, `file_change`, `reasoning`, `mcp_tool_call`, `web_search`, `plan_update`

## Common Patterns

```bash
# Code review (pipe via stdin for token efficiency)
cat src/auth.py | codex exec - --ephemeral "Review for security issues"

# Commit message from diff
git diff --cached | codex exec - --ephemeral "Write a concise commit message"

# Structured output with schema validation
codex exec "Extract project metadata" --output-schema schema.json -o result.json --ephemeral

# Resume previous session (drop --ephemeral for this)
codex exec resume --last "Fix the issues you found"

# CI usage with API key
CODEX_API_KEY="$KEY" codex exec --full-auto "Run tests and fix failures"

# With timeout (recommended for delegated tasks)
timeout 120 codex exec "Review this code" --ephemeral
```

## Rules

1. Always construct complete commands with proper quoting
2. Default to `--sandbox workspace-write --ephemeral` for delegated review tasks
3. Prefer piping content via stdin over embedding in the prompt string
4. Use `--full-auto` for automation (safer than `--dangerously-bypass-approvals-and-sandbox`)
5. Warn the user before using `--dangerously-bypass-approvals-and-sandbox`
6. Codex requires a git repo by default - use `--skip-git-repo-check` for non-repo directories
7. Use `-o path` to capture final message when downstream scripts need the output
8. Set timeouts (60-120s) to prevent hanging
9. Return the full response text - let the calling Claude session synthesise

