Codex MCP Bridge
Lightweight stdio MCP server that bridges Claude CLI tools to codex exec
Installation
npx codex-mcp-bridgeAsk AI about Codex MCP Bridge
Powered by Claude ยท Grounded in docs
I know everything about Codex MCP Bridge. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Codex MCP Bridge Lite
A local stdio MCP server that exposes two tools for Claude CLI and executes codex exec non-interactively.
consult_codexconsult_codex_with_stdin
Placeholder convention used in this README:
<project-root>= your local clone path for this repository (for example,~/workspace/codex-mcp-bridge).
Features
- Uses
codex exec -(prompt via stdin) in non-interactive mode. - Captures final output via
--output-last-messagefile first. - Default sandbox is
read-only. - Optional directory allowlist via
CODEX_ALLOWED_DIRS. - Output truncation via
CODEX_MAX_OUTPUT_CHARS. - Concise error handling for missing CLI/auth/timeout/non-zero exits.
- Keeps MCP stdout clean (no debug logging to stdout).
Requirements
- Python 3.10+
- Codex CLI installed and authenticated (
codex login)
Install
From PyPI (recommended)
pip install codex-mcp-bridge
Or with uv:
uv pip install codex-mcp-bridge
From source (development)
cd <project-root>
uv venv
source .venv/bin/activate
uv pip install -e .[dev]
Run (stdio MCP)
After installing from PyPI:
codex-mcp-bridge
Or from source:
cd <project-root>
uv run codex-mcp-bridge
Claude CLI registration
After pip install (recommended)
claude mcp add codex-bridge -- codex-mcp-bridge
From source
claude mcp add codex-bridge -- uv --directory <project-root> run codex-mcp-bridge
Verify registration
claude mcp get codex-bridge
Sub-Agent Skills
Example skills are provided in two formats:
- Skills (
examples/claude-skills/) โ proper.claude/skills/format with YAML frontmatter. Supportscontext: fork(isolated subagent),allowed-toolsrestrictions, and progressive disclosure. Recommended. - Custom Commands (
examples/claude-commands/) โ legacy.claude/commands/format. Simpler but lacks skill features like forking and tool restrictions.
Available Skills
Full sub-agent mode
| Skill | Description | Sandbox |
|---|---|---|
codex-subagent | Comprehensive orchestrator โ auto-selects tool, sandbox, and format based on task. Supports multi-step delegation. Runs in forked context. | auto |
Read-only (analysis, no file changes)
| Skill | Description | Sandbox |
|---|---|---|
codex-review | Code review โ bugs, security, performance | read-only |
codex-test | Generate tests for specified code | read-only |
codex-explain | Explain code logic and design decisions | read-only |
codex-ask | General technical question to Codex | read-only |
Write-enabled (can modify/create files)
| Skill | Description | Sandbox |
|---|---|---|
codex-fix | Fix bugs and issues in code | workspace-write |
codex-refactor | Refactor code for readability and structure | workspace-write |
codex-generate | Generate new code/files from description | workspace-write |
Install Skills (Recommended)
Copy skill directories to your project's .claude/skills/:
# From cloned repo
cp -r <project-root>/examples/claude-skills/* .claude/skills/
# Or download a single skill from GitHub
mkdir -p .claude/skills/codex-subagent
curl -sL "https://raw.githubusercontent.com/dante01yoon/codex-mcp-bridge/main/examples/claude-skills/codex-subagent/SKILL.md" \
-o ".claude/skills/codex-subagent/SKILL.md"
Each skill is a directory with a SKILL.md file:
.claude/skills/
โโโ codex-subagent/
โ โโโ SKILL.md # Full orchestrator with fork context
โโโ codex-review/
โ โโโ SKILL.md # Code review (read-only)
โโโ codex-fix/
โ โโโ SKILL.md # Bug fix (workspace-write)
โโโ codex-generate/
โ โโโ SKILL.md # Code generation (workspace-write)
โโโ codex-test/
โ โโโ SKILL.md # Test generation (read-only)
โโโ codex-explain/
โ โโโ SKILL.md # Code explanation (read-only)
โโโ codex-ask/
โ โโโ SKILL.md # Question delegation (read-only)
โโโ codex-refactor/
โโโ SKILL.md # Refactoring (workspace-write)
SKILL.md Format
Each skill uses YAML frontmatter for metadata:
---
name: Codex Sub-Agent
description: Orchestrates task delegation to Codex via MCP bridge.
user-invocable: true
allowed-tools:
- mcp__codex-bridge__consult_codex
- mcp__codex-bridge__consult_codex_with_stdin
- Read
- Glob
- Grep
context: fork
argument-hint: Describe the task to delegate to Codex
---
(Skill instructions here...)
Key frontmatter fields:
user-invocable: trueโ enables/skill-nameslash commandallowed-toolsโ restricts which tools the skill can usecontext: forkโ runs skill in an isolated subagent (prevents context pollution)argument-hintโ hint text shown when user types the slash command
Install Custom Commands (Legacy)
If you prefer the simpler legacy format:
mkdir -p .claude/commands
cp <project-root>/examples/claude-commands/*.md .claude/commands/
Basic Usage
/codex-subagent Review src/config.py, fix any issues, then generate tests
/codex-review src/server.py
/codex-test src/runner.py
/codex-explain src/config.py
/codex-ask "How does MCP stdio transport work?"
/codex-fix src/runner.py "timeout is not applied when value is 0"
/codex-refactor src/config.py
/codex-generate "Create a health check endpoint that returns server status and uptime"
Workflow Examples
Workflow 1: Review โ Fix
/codex-review src/runner.py
โ "3 issues found: [critical] timeout not handled when value is 0..."
/codex-fix src/runner.py "subprocess timeout not handled when value is 0"
โ Codex fixes the issue and applies changes
Workflow 2: Generate โ Test โ Review
/codex-generate "Add a validate_schema function that checks tool input against JSON Schema"
โ Codex generates src/codex_bridge_mcp/validator.py
/codex-test src/codex_bridge_mcp/validator.py
โ Codex generates tests/test_validator.py
/codex-review src/codex_bridge_mcp/validator.py
โ Codex reviews the generated code for improvements
Workflow 3: Explain โ Refactor
/codex-explain src/codex_bridge_mcp/config.py
โ "Settings class loads config with precedence: tool > env > file > defaults..."
/codex-refactor src/codex_bridge_mcp/config.py
โ Codex refactors with understanding of the design intent preserved
Workflow 4: Multi-Step via Sub-Agent
/codex-subagent Analyze the error handling in runner.py, plan improvements, implement them, then verify
โ Step 1: Codex analyzes (read-only)
โ Step 2: Codex plans improvements (read-only)
โ Step 3: Codex applies changes (workspace-write)
โ Step 4: Codex verifies result (read-only)
Auto-delegation via CLAUDE.md
To make Claude automatically prefer Codex for coding tasks (without explicit slash commands), add the provided snippet to your project's CLAUDE.md:
cat <project-root>/examples/CLAUDE.md.example >> CLAUDE.md
This makes Claude delegate code review, test generation, and technical questions to Codex by default. See examples/CLAUDE.md.example for the full configuration.
Default Launcher Command (Recommended)
Use this launcher to make Claude prefer codex-bridge automatically for coding tasks, without writing explicit templates each time.
Launcher script:
<project-root>/scripts/claude_codex_launcher.sh
Run:
<project-root>/scripts/claude_codex_launcher.sh
Optional shell alias:
alias claude-codex='<project-root>/scripts/claude_codex_launcher.sh'
Then use:
claude-codex
Audit launcher (verifies whether Codex bridge tools were actually used):
<project-root>/scripts/claude_codex_audit.sh "Return exactly BRIDGE_OK"
Optional audit alias:
alias claude-codex-audit='<project-root>/scripts/claude_codex_audit.sh'
The audit launcher prints:
=== Claude Result ===final answer texttools_used:all MCP/tool calls observedcodex_bridge_used: yes/noexplicit Codex usage signalcodex_bridge_tools:exact codex-bridge tool names used
Why this launcher is useful:
- Consistent behavior: always injects Codex-first guidance via
--append-system-prompt. - Less friction: you do not need to paste tool-call templates for every technical query.
- Fewer permission denials: pre-sets
--allowedToolsfor both bridge tools. - Safer defaults: guidance includes
sandbox=read-onlyandtimeout=180as baseline.
Customizing launcher behavior:
export CLAUDE_CODEX_APPEND_PROMPT='Your custom codex-first instruction'
export CLAUDE_CODEX_ALLOWED_TOOLS='mcp__codex-bridge__consult_codex,mcp__codex-bridge__consult_codex_with_stdin'
Korean quick note:
- ์ด ๋ฐ์ฒ๋ Claude ๊ธฐ๋ณธ ์์คํ
ํ๋กฌํํธ๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ , Codex ์ฐ์ ์ง์นจ์ ์ถ๊ฐ(
append)ํฉ๋๋ค. - ๋ฐ๋ผ์ ๊ธฐ๋ณธ ๋์์ ์ ์งํ๋ฉด์ Codex ๋๊ตฌ ํธ์ถ ํ๋ฅ ์ ๋์ด๋ ๋ฐฉ์์ ๋๋ค.
Quick Guide (EN)
- Install and run:
pip install codex-mcp-bridge
codex-mcp-bridge
Or from source:
cd <project-root>
uv venv && source .venv/bin/activate
uv pip install -e .[dev]
uv run codex-mcp-bridge
- Register MCP server in Claude CLI:
# After pip install
claude mcp add codex-bridge -- codex-mcp-bridge
# Or from source
claude mcp add codex-bridge -- uv --directory <project-root> run codex-mcp-bridge
- Verify MCP connection:
claude mcp get codex-bridge
- Verify end-to-end tool calls through Claude:
cd ~
claude -p --output-format text --permission-mode dontAsk --allowedTools mcp__codex-bridge__consult_codex -- "Call mcp__codex-bridge__consult_codex with arguments {\"query\":\"Return exactly BRIDGE_OK\",\"directory\":\"<project-root>\",\"format\":\"text\",\"timeout\":180,\"sandbox\":\"read-only\"}. Return only the tool result."
cd ~
claude -p --output-format text --permission-mode dontAsk --allowedTools mcp__codex-bridge__consult_codex_with_stdin -- "Call mcp__codex-bridge__consult_codex_with_stdin with arguments {\"stdin_content\":\"ping\",\"prompt\":\"Return exactly PONG\",\"directory\":\"<project-root>\",\"format\":\"text\",\"timeout\":180,\"sandbox\":\"read-only\"}. Return only the tool result."
- Troubleshooting:
tool denied due to permission restrictions: add--allowedTools mcp__codex-bridge__consult_codexor use a permission mode that allows MCP tools.Codex timed out after 90 seconds: increase tooltimeout(e.g.180) and keep prompts short/explicit.codex CLI not found: install Codex CLI and check PATH.Codex authentication appears unavailable: runcodex login.
๋น ๋ฅธ ๊ฐ์ด๋ (KR)
- ์ค์น ๋ฐ ์คํ:
pip install codex-mcp-bridge
codex-mcp-bridge
๋๋ ์์ค์์:
cd <project-root>
uv venv && source .venv/bin/activate
uv pip install -e .[dev]
uv run codex-mcp-bridge
- Claude CLI์ MCP ์๋ฒ ๋ฑ๋ก:
# pip ์ค์น ํ
claude mcp add codex-bridge -- codex-mcp-bridge
# ๋๋ ์์ค์์
claude mcp add codex-bridge -- uv --directory <project-root> run codex-mcp-bridge
- MCP ์ฐ๊ฒฐ ์ํ ํ์ธ:
claude mcp get codex-bridge
- Claude ๊ฒฝ์ E2E ๋๊ตฌ ํธ์ถ ๊ฒ์ฆ:
cd ~
claude -p --output-format text --permission-mode dontAsk --allowedTools mcp__codex-bridge__consult_codex -- "Call mcp__codex-bridge__consult_codex with arguments {\"query\":\"Return exactly BRIDGE_OK\",\"directory\":\"<project-root>\",\"format\":\"text\",\"timeout\":180,\"sandbox\":\"read-only\"}. Return only the tool result."
cd ~
claude -p --output-format text --permission-mode dontAsk --allowedTools mcp__codex-bridge__consult_codex_with_stdin -- "Call mcp__codex-bridge__consult_codex_with_stdin with arguments {\"stdin_content\":\"ping\",\"prompt\":\"Return exactly PONG\",\"directory\":\"<project-root>\",\"format\":\"text\",\"timeout\":180,\"sandbox\":\"read-only\"}. Return only the tool result."
- ๋ฌธ์ ํด๊ฒฐ:
permission restrictions๋ก ๋๊ตฌ๊ฐ ๊ฑฐ๋ถ๋๋ฉด--allowedTools์ ํด๋น MCP ๋๊ตฌ๋ฅผ ๋ช ์ํ๊ฑฐ๋ MCP ํ์ฉ ๋ชจ๋๋ก ์คํํฉ๋๋ค.Codex timed out after 90 seconds๊ฐ ๋ฐ์ํ๋ฉด ๋๊ตฌ ์ธ์์timeout์ ๋๋ฆฌ๊ณ ์์ฒญ์ ์งง๊ณ ๋ช ํํ๊ฒ ์์ฑํฉ๋๋ค.codex CLI not found์ค๋ฅ๋ Codex CLI ์ค์น ๋๋ PATH ์ค์ ๋ฌธ์ ์ ๋๋ค.- ์ธ์ฆ ์ค๋ฅ๊ฐ ๋ณด์ด๋ฉด
codex login์ ๋จผ์ ์ํํฉ๋๋ค.
Claude Prompt Templates (EN/KR)
Use these templates when you want Claude to invoke Codex via MCP first.
Template A: Codex-first simple text result (EN)
Call mcp__codex-bridge__consult_codex with arguments {"query":"<YOUR_TASK>","directory":"<project-root>","format":"text","timeout":180,"sandbox":"read-only"}.
Return only the tool result.
Example:
Call mcp__codex-bridge__consult_codex with arguments {"query":"Return exactly BRIDGE_OK","directory":"<project-root>","format":"text","timeout":180,"sandbox":"read-only"}.
Return only the tool result.
ํ ํ๋ฆฟ A: Codex ์ฐ์ ๋จ์ ํ ์คํธ ๊ฒฐ๊ณผ (KR)
mcp__codex-bridge__consult_codex ๋๊ตฌ๋ฅผ ๋ค์ ์ธ์๋ก ํธ์ถํด์ค: {"query":"<์์
์ง์๋ฌธ>","directory":"<project-root>","format":"text","timeout":180,"sandbox":"read-only"}.
๊ทธ๋ฆฌ๊ณ ๋๊ตฌ ๊ฒฐ๊ณผ๋ง ๊ทธ๋๋ก ๋ฐํํด์ค.
์์:
mcp__codex-bridge__consult_codex ๋๊ตฌ๋ฅผ ๋ค์ ์ธ์๋ก ํธ์ถํด์ค: {"query":"์ ํํ BRIDGE_OK๋ง ๋ฐํํด","directory":"<project-root>","format":"text","timeout":180,"sandbox":"read-only"}.
๊ทธ๋ฆฌ๊ณ ๋๊ตฌ ๊ฒฐ๊ณผ๋ง ๊ทธ๋๋ก ๋ฐํํด์ค.
Template B: Structured JSON result (EN)
Call mcp__codex-bridge__consult_codex with arguments {"query":"<YOUR_TASK: return strict JSON>","directory":"<project-root>","format":"json","timeout":180,"sandbox":"read-only"}.
Return only the tool result without markdown fences.
ํ ํ๋ฆฟ B: ๊ตฌ์กฐํ๋ JSON ๊ฒฐ๊ณผ (KR)
mcp__codex-bridge__consult_codex ๋๊ตฌ๋ฅผ ๋ค์ ์ธ์๋ก ํธ์ถํด์ค: {"query":"<JSON์ผ๋ก ์๋ตํด์ผ ํ๋ ์์
>","directory":"<project-root>","format":"json","timeout":180,"sandbox":"read-only"}.
๋งํฌ๋ค์ด ์ฝ๋๋ธ๋ก ์์ด ๋๊ตฌ ๊ฒฐ๊ณผ๋ง ๋ฐํํด์ค.
Template C: Large input via stdin block (EN)
Call mcp__codex-bridge__consult_codex_with_stdin with arguments {"stdin_content":"<LARGE_INPUT>","prompt":"<TASK_PROMPT>","directory":"<project-root>","format":"json","timeout":180,"sandbox":"read-only"}.
Return only the tool result.
ํ ํ๋ฆฟ C: ํฐ ์ ๋ ฅ ์ ๋ฌ (KR)
mcp__codex-bridge__consult_codex_with_stdin ๋๊ตฌ๋ฅผ ๋ค์ ์ธ์๋ก ํธ์ถํด์ค: {"stdin_content":"<ํฐ ์
๋ ฅ ๋ฐ์ดํฐ>","prompt":"<์์
์ง์๋ฌธ>","directory":"<project-root>","format":"json","timeout":180,"sandbox":"read-only"}.
๊ทธ๋ฆฌ๊ณ ๋๊ตฌ ๊ฒฐ๊ณผ๋ง ๋ฐํํด์ค.
CLI tip (when using claude -p):
- If MCP tool calls are denied, include
--allowedTools mcp__codex-bridge__consult_codex(or_with_stdin). - If timeout occurs, increase
timeoutin tool arguments (e.g.180or240).
How It Works (Claude -> Codex CLI Bridge)
sequenceDiagram
participant U as "User"
participant C as "Claude CLI"
participant M as "MCP Server (codex-bridge)"
participant X as "Codex CLI (codex exec)"
participant F as "Output File (--output-last-message)"
U->>C: "์์ฒญ ์
๋ ฅ"
C->>M: "MCP tool call (consult_codex / consult_codex_with_stdin)"
M->>M: "์
๋ ฅ ๊ฒ์ฆ (Pydantic), ๋๋ ํฐ๋ฆฌ/allowlist ๊ฒ์ฌ"
M->>X: "subprocess.run(codex exec - ... --sandbox ...)"
X->>F: "์ต์ข
๋ต๋ณ ๊ธฐ๋ก"
X-->>M: "exit code + stdout/stderr"
M->>M: "output ํ์ผ ์ฐ์ ์ฝ๊ธฐ, ์คํจ ์ stdout fallback"
M->>M: "์ถ๋ ฅ ๊ธธ์ด ์ ํ/์ค๋ฅ ํ์คํ"
M-->>C: "๋จ์ผ ๋ฌธ์์ด ๊ฒฐ๊ณผ ๋ฐํ"
C-->>U: "์ต์ข
์๋ต"
ํต์ฌ ๋์ ์๋ฆฌ:
- Claude๋ ์ค์ผ์คํธ๋ ์ดํฐ ์ญํ ๋ง ํ๊ณ , ์ฝ๋ ์์ฑ/๋ถ์ ์คํ์ MCP ๋๊ตฌ๋ฅผ ํตํด Codex CLI์ ์์ํฉ๋๋ค.
- ๋ธ๋ฆฌ์ง๋
codex exec๋ฅผ ๋น๋ํ์์ผ๋ก ์คํํ๋ฉฐ, stdout ์ค์ผ์ ๋ง๊ธฐ ์ํด ํ๋กํ ์ฝ ํต์ ์ stdout, ๋๋ฒ๊ทธ/์ค๋ฅ๋ stderr๋ก ๋ถ๋ฆฌํฉ๋๋ค. - Codex ๊ฒฐ๊ณผ๋
--output-last-messageํ์ผ์์ ์ฐ์ ์ฝ๊ณ , ํ์ผ ์ฝ๊ธฐ ์คํจ ์ ์บก์ฒ๋ stdout์ผ๋ก ๋์ฒดํฉ๋๋ค. - ๋ณด์/์์ ์ฑ์ ๊ธฐ๋ณธ
read-onlysandbox, ๋๋ ํฐ๋ฆฌ allowlist, timeout, stderr ์ ๋จ, output truncation์ผ๋ก ๋ณด์ฅํฉ๋๋ค.
About temporary output file (--output-last-message)
- ๋ธ๋ฆฌ์ง๋ ์์ฒญ๋ง๋ค OS ์์ ๋๋ ํฐ๋ฆฌ์ 1ํ์ฑ ํ์ผ์ ์์ฑํฉ๋๋ค.
- Codex์ ๋ง์ง๋ง ๋ต๋ณ์ ๊ทธ ํ์ผ์์ ๋จผ์ ์ฝ์ต๋๋ค.
- ์ฒ๋ฆฌ ํ์๋ ํ์ผ์ ์ญ์ ํฉ๋๋ค (
output_file.unlink(missing_ok=True)insrc/codex_bridge_mcp/runner.py). - ์ฆ, ์ ์ ํ๋ฆ์์๋ ํ์ผ์ด ๋จ์ง ์์ต๋๋ค.
Why file-first is useful (real examples)
ํ์ฌ ๋ฒ์ ์์๋ ๋ณดํต ์ต์ข ๋ต๋ณ์ด stdout์ ๊น๋ํ ๋์ค์ง๋ง, ์ด์ ํ๊ฒฝ์์๋ ์๋์ ๊ฐ์ ๋ณํ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
-
CLI ์ต์ /๋ชจ๋ ๋ณ๊ฒฝ์ผ๋ก stdout ํฌ๋งท์ด ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ : ์๋ฅผ ๋ค์ด
--json๊ฐ์ ์ด๋ฒคํธ ์ถ๋ ฅ ๋ชจ๋๊ฐ ํ์ฑํ๋๋ฉด stdout์ด JSONL ์ด๋ฒคํธ ์คํธ๋ฆผ์ด ๋ ์ ์์ต๋๋ค. ์ด๋ ๋ฌธ์์ด ํ์ฑ ๊ธฐ๋ฐ ๋ธ๋ฆฌ์ง๋ ์ฝ๊ฒ ๊นจ์ง ์ ์์ต๋๋ค. -
ํฅํ Codex CLI ๋ฆด๋ฆฌ์ฆ์์ stdout์ ์ํ ๋ฉ์์ง๊ฐ ์ถ๊ฐ๋๋ ๊ฒฝ์ฐ : ๋ฐฐ๋/์งํ์ํ/์์ฝ ์ ๋ณด๊ฐ stdout์ผ๋ก ์์ด๋ฉด "์ต์ข ๋ต๋ณ๋ง ๋ฐํ" ๊ณ์ฝ์ด ๊นจ์ง ์ ์์ต๋๋ค.
-
์คํ ๋ํผ/์ ธ ํ ์ด stdout์ ํ ์คํธ๋ฅผ ์ฃผ์ ํ๋ ๊ฒฝ์ฐ : ๋ด๋ถ ์ ์ฑ ์ ํ์ค์ถ๋ ฅ์ prefix/suffix๋ฅผ ๋ถ์ด๋ wrapper๋ฅผ ์ฐ๋ ํ๊ฒฝ์์๋ ์ถ๋ ฅ ์ค์ผ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
ํ์ผ ์ฐ์ ์ ๋ต์ ์ด๋ฐ ๋ณํ์ ๋ฌด๊ดํ๊ฒ "์ต์ข ๋ต๋ณ ์์ค"๋ฅผ ๊ณ ์ ํด ์ฃผ๊ธฐ ๋๋ฌธ์, ๋ธ๋ฆฌ์ง์ ์์ ์ฑ๊ณผ ํ์ฑ ์ ๋ขฐ์ฑ์ ๋์ ๋๋ค.
Configuration
Settings can be configured via a JSON file, environment variables, or both.
Precedence: tool input > environment variable > config file > default.
JSON config file
Place codex-bridge.json (or .codex-bridge.json) in your project root or ~/.config/codex-bridge/:
{
"default_timeout": 180,
"default_sandbox": "read-only",
"default_model": null,
"allowed_dirs": [],
"max_output_chars": 12000
}
An example is provided in examples/codex-bridge.json.
Environment variables
Environment variables override JSON config values:
CODEX_DEFAULT_MODEL(optional)CODEX_DEFAULT_TIMEOUT(default:90)CODEX_DEFAULT_SANDBOX(default:read-only)CODEX_ALLOWED_DIRS(optional CSV absolute/relative dirs)CODEX_MAX_OUTPUT_CHARS(default:12000)
Environment variables can also be set at MCP registration time:
claude mcp add -e CODEX_DEFAULT_TIMEOUT=180 codex-bridge -- codex-mcp-bridge
Tool Inputs
consult_codex
query(required)directory(default.)format(text | json | code, default from serverjson)timeout(seconds, optional)model(optional)sandbox(read-only | workspace-write | danger-full-access, optional)
consult_codex_with_stdin
stdin_content(required)prompt(required)- plus all options from
consult_codex
Test
cd <project-root>
uv run pytest
Smoke / Regression Scripts
cd <project-root>
./scripts/check_stdout_clean.sh
cd <project-root>
./scripts/it_smoke_codex_bridge.sh
