์๋ฆฌ์ฆ: oh-my-codex ์ํคํ ์ฒ ํด๋ถ
์ด ์๋ฆฌ์ฆ๋ OpenAI Codex CLI ํ์ฅ ๋ฐํ์์ธ oh-my-codex(OMX)์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋จ๊ณ๋ณ๋ก ํด๋ถํ๋ ๊ณผ์ ์ด๋ค.
| ํธ | ๋ด์ฉ | ํต์ฌ |
|---|---|---|
| 0ํธ | Overview | 3-Plane ์ํคํ ์ฒ, OMC์์ ์ฐจ์ด, ์ ์ฒด ํ๋ฆ |
| 1ํธ (๋ณธ๋ฌธ) | Codex CLI Foundation | Codex CLI ์์ฒด์ ๊ตฌ์กฐ์ ํ์ฅ ํฌ์ธํธ |
| 2ํธ | OMX Integration | OMX๊ฐ Codex์ ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๋ |
| 3ํธ | Skill System | ์ํฌํ๋ก์ฐ๋ฅผ ์ด๋ป๊ฒ ์ ์ํ๋ |
| 4ํธ | Prompt & Agent System | ์์ด์ ํธ๋ ๋ญ๊ณ ์ด๋ป๊ฒ ์ ํ๋๋ |
| 5ํธ | MCP Servers | ์ด๋ค MCP ๋๊ตฌ๋ฅผ ์ธ ์ ์๋ |
| 6ํธ | State & Lifecycle | ์ํ๋ฅผ ์ด๋ป๊ฒ ์ ์งํ๋ |
| 7ํธ | Team Orchestration | Team ๋ชจ๋๋ ์ด๋ป๊ฒ ๋์ํ๋ |
| 8ํธ | Native & Spark | Rust ๋ค์ดํฐ๋ธ ๋๊ตฌ๋ ๋ญ๊ฐ |
- Codex CLI๋ OpenAI๊ฐ ์ ๊ณตํ๋ ํฐ๋ฏธ๋ ๊ธฐ๋ฐ ๋ก์ปฌ ์ฝ๋ฉ ์์ด์ ํธ
- Rust 96.2%๋ก ๊ตฌํ๋ ๊ฒฝ๋ CLI๋ก, ๋ํํ REPL์์ ์ฝ๋ ์์ฑยท์์ ยท์คํ์ ์ํํ๋ ๋จ์ผ ์ธ์ ์์ด์ ํธ
- OMX๊ฐ ํ์ฅํ๋ ์คํ ์์ง(Execution Plane) โ OMX๋ฅผ ์ดํดํ๋ ค๋ฉด Codex CLI์ ๊ตฌ์กฐ์ ํ์ฅ ํฌ์ธํธ๋ฅผ ๋จผ์ ์์์ผ ํจ
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
- OMC ํ์ต์์๋ Claude Code๋ฅผ ์ด๋ฏธ ์ฐ๊ณ ์์๊ธฐ ๋๋ฌธ์ ๋ณ๋ ์ค๋ช ์ด ๋ถํ์ํ์
- OMX ํ์ต์์๋ Codex CLI๊ฐ ์ฒ์์ด๋ฏ๋ก, ์ด๊ฒ์ด ๋ญ๊ณ ์ด๋ค ํ์ฅ ํฌ์ธํธ๋ฅผ ์ ๊ณตํ๋์ง ์์์ผ OMX์ ์ค๊ณ ์ ํ์ ์ดํดํ ์ ์์
- Codex CLI์ ํ์ฅ ์ฑ๋(AGENTS.md, config.toml, MCP)์ด ๊ณง OMX์ ํตํฉ ๊ฒฝ๋ก
AS-IS (Claude Code โ ์ด๋ฏธ ์๋ ๊ฒ)
graph TB subgraph ClaudeCode["Claude Code (Anthropic)"] Plugin["plugin.json"] Hook["hooks.json โ 21๊ฐ ์ด๋ฒคํธ"] MCP_CC["MCP ์๋ฒ"] Skill_CC["Skill tool"] end Plugin --> Hook Plugin --> MCP_CC Plugin --> Skill_CC style ClaudeCode fill:#e8f0fe
TO-BE (Codex CLI โ ์๋ก ๋ฐฐ์ธ ๊ฒ)
graph TB subgraph CodexCLI["Codex CLI (OpenAI)"] AGENTS["AGENTS.md โ ๊ณ์ธต์ ์ง์นจ"] Config["config.toml โ ์ค์ ยทMCPยทํ๋ก๋ฐ์ด๋"] Sandbox["Sandbox โ Seatbelt / Landlock"] Approval["Approval + Sandbox 2์ถ ์ ์ด"] end AGENTS --> Config Config --> Sandbox Config --> Approval style CodexCLI fill:#fef7e0
์น์ธ(Approval)๊ณผ ์๋๋ฐ์ค(Sandbox) โ 2์ถ ๋ณด์ ๋ชจ๋ธ
ํ์ต ์๋ฌธ์์๋ suggest / auto-edit / full-auto 3๊ฐ์ง๋ก ์ค๋ช
ํ์ง๋ง, ์ค์ Codex CLI๋ Approval Policy์ Sandbox Mode ๋ ์ถ์ ๋
๋ฆฝ์ ์ผ๋ก ์ ์ดํ๋ค.
Approval Policy โ โ์ธ์ ์ฌ๋์ ํ๋ฝ์ ๊ตฌํ๋โ
| ๋ชจ๋ | ๋์ |
|---|---|
on-request (๊ธฐ๋ณธ) | ์ํฌ์คํ์ด์ค ์ธ๋ถ ์์ , ๋คํธ์ํฌ ์ ๊ทผ ์ ์น์ธ ์์ฒญ |
untrusted | ์ฝ๊ธฐ ์ ์ฉ ์๋, ์ํ ๋ณ๊ฒฝ ๋ช ๋ น์ ์น์ธ ํ์ |
never | ์น์ธ ์์ (CI/CD ์๋ํ์ฉ) |
Sandbox Mode โ โํ์ผ/๋คํธ์ํฌ ์ ๊ทผ์ ์ด๋๊น์ง ํ์ฉํ๋โ
| ๋ชจ๋ | ํ์ผ ์ ๊ทผ | ๋คํธ์ํฌ |
|---|---|---|
read-only | ์ฝ๊ธฐ๋ง ํ์ฉ | ์ฐจ๋จ |
workspace-write | ์์
๋๋ ํ ๋ฆฌ + temp ์ฐ๊ธฐ ํ์ฉ, .git/.codex ๋ณดํธ | ๊ธฐ๋ณธ ์ฐจ๋จ (์ค์ ์ผ๋ก ํ์ฉ ๊ฐ๋ฅ) |
danger-full-access | ๋ฌด์ ํ | ๋ฌด์ ํ |
ํธ์ ํ๋๊ทธ
| ํ๋๊ทธ | ์ค์ ์๋ฏธ |
|---|---|
--full-auto | --sandbox workspace-write + --ask-for-approval on-request |
--yolo | danger-full-access + never (๋ชจ๋ ์ ์ด ํด์ , ๋น๊ถ์ฅ) |
ํ๋ซํผ๋ณ ์๋๋ฐ์ค ๊ตฌํ
| ํ๋ซํผ | ๋ฉ์ปค๋์ฆ | ํน์ง |
|---|---|---|
| macOS | Seatbelt (sandbox-exec -p) | ์ปค๋ ๋ ๋ฒจ ์ ์ฑ ํ๋กํ์ผ ์ ์ฉ |
| Linux | Landlock + seccomp (๊ธฐ๋ณธ) | ์ปค๋ ๋ณด์ ๋ชจ๋ ์กฐํฉ |
| Linux (๋์) | bwrap | ํ๋ก์ ๋ธ๋ฆฟ์ง ๊ฒฝ์ egress, ์คํจ ์ ํ์ |
| Windows | ๋ค์ดํฐ๋ธ + WSL ์์ | IDE์์ WSL๋ก ๋ผ์ฐํ ๊ฐ๋ฅ |
AGENTS.md โ ๊ณ์ธต์ ์ง์นจ ์์คํ
Codex CLI๊ฐ ์ธ์ ์์ ์ ์ฝ๋ ๋งํฌ๋ค์ด ๊ธฐ๋ฐ ์ง์นจ ํ์ผ. OMX๊ฐ ๊ฐ์ฅ ํต์ฌ์ ์ผ๋ก ํ์ฉํ๋ ํ์ฅ ํฌ์ธํธ์ด๋ค.
ํ์ ์์ (top-down ๋จธ์ง)
graph TD A["~/.codex/AGENTS.override.md"] -->|1์์| MERGE["์ต์ข ์ง์นจ ์ฒด์ธ"] B["~/.codex/AGENTS.md"] -->|2์์ fallback| MERGE C["repo-root/AGENTS.override.md"] -->|3์์| MERGE D["repo-root/AGENTS.md"] -->|4์์ fallback| MERGE E["repo-root/subdir/AGENTS.md"] -->|5์์| MERGE F["... โ cwd/AGENTS.md"] -->|N์์| MERGE MERGE -->|"blank-line ๊ตฌ๋ถ์๋ก ์ฐ๊ฒฐ"| CX["Codex CLI ์ธ์ "] style A fill:#ff9999 style MERGE fill:#99ff99
ํต์ฌ ๊ท์น
- ๊ฐ ๋๋ ํ ๋ฆฌ์์
AGENTS.override.mdโAGENTS.md์์ผ๋ก ํ์ธ, ์ฒซ ๋ฒ์งธ ๋น์ด์์ง ์์ ํ์ผ๋ง ์ฌ์ฉ - ํ์ ํ์ผ์ด ์์๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๋ ๊ฒ์ด ์๋๋ผ, ๋ค์ ์ฐ๊ฒฐ(concatenate) โ ๋์ค์ ๋์จ ์ง์นจ์ด ์ฐ์
- ๊ธฐ๋ณธ ํฌ๊ธฐ ์ ํ:
project_doc_max_bytes = 32 KiB(config.toml์์ ์กฐ์ ๊ฐ๋ฅ) --no-project-doc๋๋model_instructions_file๋ก ๋นํ์ฑํ/๋์ฒด ๊ฐ๋ฅ- ์ฃผ์:
model_instructions_file์ ์ค์ ํ๋ฉด ์์ ๊ณ์ธต์ ํ์ยท๋จธ์ง๊ฐ ์ ๋ถ ๋ฌด๋ ฅํ๋๊ณ , ์ง์ ๋ ๋จ์ผ ํ์ผ๋ง ๋ชจ๋ธ ์ง์นจ์ผ๋ก ์ฌ์ฉ๋จ. OMX๋ ๋ฐํ์ ์ค๋ฒ๋ ์ด ์ฃผ์ ์ ์ํด ์ด ํค๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ค์ดํฐ๋ธ ๋จธ์ง๊ฐ ๊บผ์ง๋ฏ๋กagents-overlay.ts(src/hooks/)์์ user/project AGENTS.md๋ฅผ ์ง์ ์ฌ๋จธ์งํ์ฌ ์ธ์ ํฉ๋ณธ ํ์ผ(.omx/state/{sessionId}/AGENTS.md)์ ์์ฑํ๋ค (2ํธ Integration ์ฐธ์กฐ).
- ์ฃผ์:
- ์ง์นจ ์ฒด์ธ์ ์ธ์ ๋น 1ํ ๋น๋ (TUI์์๋ ์ธ์ ์์ ์)
์ค์ ์์ โ ๊ท์น A์ ๊ท์น B๊ฐ ์์ ๋ ์ด๋ป๊ฒ ๋๋
ํต์ฌ ์ง๋ฌธ: 1์์ ํ์ผ์ Rule A, 2์์ ํ์ผ์ Rule B๊ฐ ์์ผ๋ฉด A๋ง ์ ์ฉ๋๋, A+B ๋ชจ๋ ์ ์ฉ๋๋?
๋ต: A+B ๋ชจ๋ ์ ์ฉ๋๋ค. ์ ํ๋ ํ์ผ๋ค์ ์ ๋ถ concatenate๋๋ค. โ์ฐ์ ์์โ๋ ํ์ผ์ ์ ๊ฑฐํ๋ ๊ฐ๋ ์ด ์๋๋ผ, ๋ด์ฉ์ด ์ถฉ๋ํ ๋๋ง ๋์ค ํ์ผ์ด ์ด๊ธฐ๋ ๊ฐ๋ ์ด๋ค.
์๋๋ฆฌ์ค: ~/projects/myapp/src/ ์์ codex ์คํ. ์๋ ํ์ผ๋ค์ด ์กด์ฌํ๋ค.
~/.codex/AGENTS.override.md โ Rule A (์ ์ญ ๊ฐ์ธํ)
~/.codex/AGENTS.md โ ๋ด์ฉ ์์ (OMX ๊ธ๋ก๋ฒ ์ฃผ์
๋ณธ)
~/projects/myapp/AGENTS.md โ Rule B (ํ๋ก์ ํธ ์ง์นจ)
~/projects/myapp/src/AGENTS.md โ Rule C (์๋ธ๋ชจ๋ ์ง์นจ)
Step 1 โ ๋๋ ํ ๋ฆฌ๋ณ ํ์ผ ์ ํ (๊ฐ์ ๋๋ ํ ๋ฆฌ ์์์ override๊ฐ ์์ผ๋ฉด AGENTS.md ๊ฑด๋๋):
| ๋๋ ํ ๋ฆฌ | override ์กด์ฌ? | ์ ํ๋ ํ์ผ | ๊ฑด๋๋ |
|---|---|---|---|
~/.codex/ | โ | AGENTS.override.md (Rule A) | AGENTS.md โ |
~/projects/myapp/ | โ | AGENTS.md (Rule B) | โ |
~/projects/myapp/src/ | โ | AGENTS.md (Rule C) | โ |
Step 2 โ ์ ํ๋ ํ์ผ ์ ๋ถ concatenate (A + B + C ๋ชจ๋ ์ ์ฉ):
[Rule A โ ~/.codex/AGENTS.override.md]
"ํญ์ TypeScript๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ผ"
[Rule B โ ~/projects/myapp/AGENTS.md]
"์ด ํ๋ก์ ํธ์์๋ snake_case ๋ค์ด๋ฐ์ ์ฌ์ฉํ๋ผ"
[Rule C โ ~/projects/myapp/src/AGENTS.md]
"src/ ์์์๋ ํจ์ํ ์คํ์ผ์ ์ฐ์ ํ๋ผ"
โ Codex CLI๋ ์ธ ๊ท์น ๋ชจ๋๋ฅผ ๋์์ ๋ฐ๋ฅธ๋ค. TypeScript + snake_case + ํจ์ํ ์คํ์ผ.
Step 3 โ ์ถฉ๋ ์์๋ง ๋์ค ํ์ผ์ด ์ด๊ธด๋ค:
[Rule A โ ~/.codex/AGENTS.override.md]
"ํญ์ ์์ด๋ก ์๋ตํ๋ผ" โ ์ถฉ๋!
[Rule B โ ~/projects/myapp/AGENTS.md]
"ํญ์ ํ๊ตญ์ด๋ก ์๋ตํ๋ผ" โ ์ถฉ๋! (๋ ๋์ค โ ์ด๊น)
โ ๊ฐ์ ์ฃผ์ ๋ก ์ถฉ๋ํ๋ฉด ๋์ค(= cwd์ ๊ฐ๊น์ธ์๋ก) ํ์ผ์ด ์ด๊ธด๋ค. ์ด ๊ฒฝ์ฐ ํ๊ตญ์ด ์๋ต.
์ฃผ์:
~/.codex/AGENTS.md(OMX ๊ธ๋ก๋ฒ ์ฃผ์ ๋ณธ)๋ ์ด ์๋๋ฆฌ์ค์์ ์ฒด์ธ์ ํฌํจ๋์ง ์๋๋ค. ๊ฐ์ ๋๋ ํ ๋ฆฌ(~/.codex/)์AGENTS.override.md๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ Step 1์์ ๊ฑด๋๋ฐ์ด์ง๋ฉฐ, OMX๊ฐ ์ฃผ์ ํ Operating Principles, Keyword Detection Table ๋ฑ ๋ชจ๋ ๊ธ๋ก๋ฒ ์ง์นจ์ด ๋ฌดํจ๊ฐ ๋๋ค. OMX ๊ธ๋ก๋ฒ ์ง์นจ์ ์ ์งํ๋ ค๋ฉดAGENTS.override.md๋ฅผ ๋์ง ์๊ฑฐ๋, ๊ทธ ์์ OMX ์ง์นจ์ ํฌํจ์์ผ์ผ ํ๋ค.
์ค์ AGENTS.md ๋ด์ฉ โ OMX๊ฐ ์ฃผ์ ํ๋ ๊ฒ
omx setup ํ ~/.codex/AGENTS.md์ ์ฃผ์
๋๋ ํต์ฌ ๊ตฌ์กฐ:
# OMX Orchestration Contract
## Role & Intent
You are an orchestration-aware coding agent. Solve development tasks directly
when possible. Delegate to specialized agents only when it materially improves
quality, speed, or correctness.
## Operating Principles
1. Solve the task directly when you can do so safely and well.
2. Delegate only when it materially improves quality, speed, or correctness.
3. Keep progress short, concrete, and useful.
4. Prefer evidence over assumption; verify before claiming completion.
5. Use the lightest path: direct action โ MCP โ delegation.
## Keyword Detection Table
When you detect any of the following keywords in user input, activate the
corresponding skill or agent **immediately before any other action**.
Keywords are case-insensitive and match anywhere in the message.
| Keyword | Priority | Action |
|------------|----------|--------------------------------|
| ralplan | 11 | Load skills/ralplan/SKILL.md |
| autopilot | 10 | Load skills/autopilot/SKILL.md |
| ultrawork | 10 | Load skills/ultrawork/SKILL.md |
| ralph | 9 | Delegate to /prompts:ralph |
| explore | 8 | Load skills/explore/SKILL.md |
| team | 8 | Load skills/team/SKILL.md |
| ... | ... | (30+ keywords total) |
## Delegation Rules
- Prefer `/prompts:executor` for implementation tasks
- Prefer `/prompts:architect` for design/planning tasks
- Always write delegation intent to MCP state before delegating
## Verification Protocol
Before claiming completion:
1. Run the relevant tests or build command
2. Confirm output matches the stated goal
3. Mark state as complete via MCP state_write์ด๊ฒ์ด Codex CLI์ ์์คํ
ํ๋กฌํํธ์ ์ฝ์
๋๋ ๋ฐฉ์์ผ๋ก, Claude Code์ hooks.json 21๊ฐ ์ด๋ฒคํธ๋ฅผ ๋์ฒดํ๋ ํต์ฌ ๋ฉ์ปค๋์ฆ์ด๋ค.
OMX๊ฐ AGENTS.md๋ฅผ ํ์ฉํ๋ ๋ฐฉ์
OMX๋ ์ด ํ์ผ์ ํค์๋ ๋งคํ ํ ์ด๋ธ, Operating Principles, Delegation Rules, Verification Protocol์ ์ฃผ์ ํ์ฌ, Codex CLI์ ํ๋์ ์ค์ผ์คํธ๋ ์ด์ ํ๋ค. Claude Code์ Hook ์ด๋ฒคํธ 21๊ฐ๋ฅผ ๋์ฒดํ๋ ํต์ฌ ๋ฉ์ปค๋์ฆ์ด๋ค.
config.toml โ ์ค์ ํ๋ธ
~/.codex/config.toml์ ์์นํ๋ฉฐ, Codex CLI์ ๋ชจ๋ ์ค์ ์ ๊ด๋ฆฌํ๋ค.
์ฃผ์ ์น์
# ๋ชจ๋ธ ์ค์
model = "gpt-5-codex"
model_provider = "openai"
model_reasoning_effort = "medium" # minimal/low/medium/high/xhigh
# ์น์ธ/์๋๋ฐ์ค
approval_policy = "on-request"
sandbox_mode = "workspace-write"
# MCP ์๋ฒ ๋ฑ๋ก โ OMX๊ฐ 5๊ฐ ์๋ฒ๋ฅผ ์ฌ๊ธฐ ๋ฑ๋ก
[mcp_servers.omx_state]
command = "node"
args = ["path/to/state-server.js"]
startup_timeout_sec = 10
[mcp_servers.omx_memory]
command = "node"
args = ["path/to/memory-server.js"]
# ํ๋ก๋ฐ์ด๋ ์ค์ โ ๋ฉํฐ ํ๋ก๋ฐ์ด๋ ์ง์
[model_providers.azure]
name = "Azure OpenAI"
base_url = "https://your-resource.openai.azure.com"
env_key = "AZURE_OPENAI_API_KEY"
wire_api = "responses"
# AGENTS.md ๊ด๋ จ
project_doc_max_bytes = 32768
project_doc_fallback_filenames = ["TEAM_GUIDE.md", ".agents.md"]
# ์์ด์ ํธ ์ค์
agents.max_threads = 6
agents.max_depth = 1ํ๋ก์ ํธ ์ค์ฝํ config
ํ๋ก์ ํธ๋ฃจํธ/.codex/config.toml๋ ์ง์ํ๋ฉฐ, ์ ๋ขฐ๋ ๊ฒฝ์ฐ์๋ง ๋ก๋๋๋ค. ์ฐ์ ์์: CLI ํ๋๊ทธ > ํ๋กํ์ผ > ๋ฃจํธ config.
์ค์ ์์ โ omx setup ์ ํ ๋น๊ต
Before (vanilla Codex CLI, ~/.codex/config.toml):
model = "o4-mini"
model_provider = "openai"
approval_policy = "on-request"
sandbox_mode = "workspace-write"After omx setup --user (OMX๊ฐ MCP ์๋ฒ 5๊ฐ๋ฅผ ์๋ ์ถ๊ฐ):
model = "o4-mini"
model_provider = "openai"
approval_policy = "on-request"
sandbox_mode = "workspace-write"
# โโโโ OMX๊ฐ ์ถ๊ฐํ ์น์
โโโโ
[mcp_servers.omx_state]
command = "node"
args = ["/Users/you/.omx/servers/state-server.js"]
startup_timeout_sec = 10
[mcp_servers.omx_memory]
command = "node"
args = ["/Users/you/.omx/servers/memory-server.js"]
startup_timeout_sec = 10
[mcp_servers.omx_code_intel]
command = "node"
args = ["/Users/you/.omx/servers/code-intel-server.js"]
startup_timeout_sec = 10
[mcp_servers.omx_trace]
command = "node"
args = ["/Users/you/.omx/servers/trace-server.js"]
startup_timeout_sec = 10
[mcp_servers.omx_team]
command = "node"
args = ["/Users/you/.omx/servers/team-server.js"]
startup_timeout_sec = 10
agents.max_threads = 6
agents.max_depth = 1์ดํ codex๋ฅผ ์คํํ๋ฉด, Codex CLI๊ฐ ์์ ์ ์ด 5๊ฐ MCP ์๋ฒ๋ฅผ ์๋์ผ๋ก ๊ธฐ๋์ํจ๋ค.
์ค์ ์์ โ ์ฐ์ ์์ ์ถฉ๋ ์ ์ด๋ค ๊ฐ์ด ์ ์ฉ๋๋
์๋๋ฆฌ์ค: ๊ฐ์ ํค model์ด ์ฌ๋ฌ ๊ณณ์ ์ง์ ๋ ๊ฒฝ์ฐ
CLI ํ๋๊ทธ: --model o3
~/.codex/config.toml: model = "o4-mini" โ ๊ธ๋ก๋ฒ ์ค์
.codex/config.toml: model = "gpt-5-codex" โ ํ๋ก์ ํธ ์ค์ (์ ๋ขฐ๋ ๊ฒฝ์ฐ๋ง)
์ฐ์ ์์: CLI ํ๋๊ทธ > ํ๋ก์ ํธ config > ๊ธ๋ก๋ฒ config
| ์ํฉ | ์ ์ฉ๋๋ model |
|---|---|
codex --model o3 | o3 (CLI ํ๋๊ทธ ์ต์ฐ์ ) |
codex (ํ๋ก์ ํธ config ์ ๋ขฐ๋จ) | gpt-5-codex (ํ๋ก์ ํธ config) |
codex (ํ๋ก์ ํธ config ์ ๋ขฐ ์๋จ) | o4-mini (๊ธ๋ก๋ฒ config) |
codex (config ์์) | o4-mini (Codex CLI ๊ธฐ๋ณธ๊ฐ) |
ํ๋ก์ ํธ ์ค์ฝํ config๋ ๋ณด์์ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ์ ๋ขฐ(trust)๋ฅผ ๋ถ์ฌํด์ผ ๋ก๋๋๋ค.
๋ฉํฐ ํ๋ก๋ฐ์ด๋
Codex CLI๋ OpenAI ์ ์ฉ์ด ์๋๋ผ, model_providers ์น์
์ ํตํด ๋ค์ํ LLM ๋ฐฑ์๋์ ์ฐ๊ฒฐ๋๋ค.
| ํ๋ก๋ฐ์ด๋ | ์ค์ ํค | ๋น๊ณ |
|---|---|---|
| OpenAI | ๊ธฐ๋ณธ๊ฐ | gpt-5-codex, o4-mini ๋ฑ |
| Azure OpenAI | base_url + env_key | ์ํฐํ๋ผ์ด์ฆ ๋ฐฐํฌ |
| Ollama | --oss ํ๋๊ทธ | ๋ก์ปฌ ์คํ์์ค ๋ชจ๋ธ |
| OpenRouter | base_url ์ปค์คํ
| ๋ฉํฐ ๋ชจ๋ธ ๋ผ์ฐํฐ |
| Gemini, Mistral, DeepSeek, xAI, Groq | base_url + env_key | ๊ฐ๊ฐ ๋ณ๋ ํ๋ก๋ฐ์ด๋ ์ค์ |
CLI ๋ช ๋ น์ด ์ฒด๊ณ
| ๋ช ๋ น์ด | ์ฉ๋ |
|---|---|
codex | ๋ํํ TUI ์คํ |
codex "prompt" | ํ๋กฌํํธ์ ํจ๊ป TUI ์คํ |
codex exec "prompt" | ๋น๋ํํ ์คํ (CI/์คํฌ๋ฆฝํ ์ฉ) |
codex resume [session_id] | ์ด์ ์ธ์ ์ด์ด์ ์์ |
codex fork [session_id] | ์ด์ ์ธ์ ๋ณต์ ํ์ฌ ๋ถ๊ธฐ |
codex mcp list/add/remove | MCP ์๋ฒ ๊ด๋ฆฌ |
codex completion | ์ ธ ์๋์์ฑ ์คํฌ๋ฆฝํธ ์์ฑ |
codex features enable/disable | ๊ธฐ๋ฅ ํ๋๊ทธ ํ ๊ธ |
codex app | ๋ฐ์คํฌํฑ ์ฑ ์คํ (macOS) |
Codex CLI์ ํ์ฅ ํฌ์ธํธ โ OMX๊ฐ ํ์ฉํ๋ ๊ฒ
| ํ์ฅ ํฌ์ธํธ | OMX ํ์ฉ ๋ฐฉ์ |
|---|---|
| AGENTS.md | ํค์๋ ๋งคํ, Operating Principles, Delegation Rules ์ฃผ์ |
config.toml [mcp_servers] | 5๊ฐ MCP ์๋ฒ(state, memory, code-intel, trace, team) ๋ฑ๋ก |
config.toml [agents] | ์์ด์ ํธ ๋ฉํ๋ฐ์ดํฐ ๋ฐ ์ญํ ์ ์ |
| prompts/ ๋๋ ํ ๋ฆฌ | 33๊ฐ ์ญํ ๋ณ ์์ด์ ํธ ํ๋กฌํํธ ์ค์น |
| skills/ ๋๋ ํ ๋ฆฌ | 35+ ์ํฌํ๋ก์ฐ ์คํฌ ์ค์น |
codex exec | Team ๋ชจ๋ Worker๋ฅผ ๋น๋ํํ์ผ๋ก ์คํ |
Claude Code์์ ๋น๊ต
| ํญ๋ชฉ | Claude Code | Codex CLI |
|---|---|---|
| ๊ฐ๋ฐ์ฌ | Anthropic | OpenAI |
| ์ธ์ด | TypeScript | Rust 96.2% (codex-rs) |
| ๊ธฐ๋ณธ ๋ชจ๋ธ | Claude ์๋ฆฌ์ฆ | gpt-5-codex |
| ํ์ฅ ์ฑ๋ | Plugin + Hook(21 ์ด๋ฒคํธ) + MCP + Skill tool | AGENTS.md + config.toml + MCP |
| ๋ณด์ ๋ชจ๋ธ | ์์ฒด Permission ์์คํ | Approval + Sandbox 2์ถ |
| Hook ์ด๋ฒคํธ | 21๊ฐ (stdin/stdout JSON) | ์์ (AGENTS.md๋ก ๋์ฒด) |
| Skill ํธ์ถ | Skill tool (plugin ๋ฑ๋ก) | $name (ํ์ผ ์ง์ ์ฝ๊ธฐ) |
| Agent ํธ์ถ | Task(subagent_type=...) | /prompts:name |
| ์ธ์ ์ฌ๊ฐ | ์ปจํ ์คํธ ์๋ ์์ถ | codex resume ๋ช
์ ๋ช
๋ น |
์ฐ๋ฆฌ ์๋น์ค์ ์ ์ฉํ๋ค๋ฉด
OMX๋ --user ์ค์ฝํ๋ก ~/.codex/๋ฅผ ์ง์ ์์ ํ์ง๋ง, ์ฐ๋ฆฌ ์๋น์ค๋ ์ฌ์ฉ์ ๋ก์ปฌ ํ๊ฒฝ์ ๊ฑด๋๋ฆฌ์ง ์๋ ๋ฐฉํฅ์ด ๋ง๋ค. ์๋น์ค์ workingDirectory ์์ ๋ชจ๋ ์ค์ ์ ๊ฒฉ๋ฆฌํ๋ค.
์ ํ: ๋ฐฉ๋ฒ 1 (project-scoped, --project์ ๋์ผ)
CODEX_HOME์ผ๋ก ์์ ๊ฒฉ๋ฆฌ(๋ฐฉ๋ฒ 2)๋ ๊ฐ๋ฅํ์ง๋ง, ๋ฐฉ๋ฒ 1์ด ๋ ์ ํฉํ๋ค.
- ์ฌ์ฉ์์
OPENAI_API_KEY๋ฑ env var๋ฅผ ๊ทธ๋๋ก ์์ โ ๋ณ๋ ์ธ์ฆ ์ฒ๋ฆฌ ๋ถํ์ - ์ฌ์ฉ์์
~/.codex/config.toml์ ์ ์ฅ๋ ๋ชจ๋ธ ์ ํธ, ํ๋ก๋ฐ์ด๋ ์ค์ ๋ ์ ์ง โ ์ฌ์ฉ์ ๊ฒฝํ ์กด์ค - ์๋น์ค ์ ์ฉ ์ค์ (MCP ์๋ฒ, ์ง์นจ ๋ฑ)๋ง ํ๋ก์ ํธ ์ค์ฝํ๋ก ์ถ๊ฐํ๋ ๊ตฌ์กฐ
์ํน ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
{service-workingDirectory}/
โโโ AGENTS.md โ ์๋น์ค ์ค์ผ์คํธ๋ ์ด์
์ง์นจ (์ฒด์ธ ์ต์ฐ์ )
โโโ .codex/
โ โโโ config.toml โ ์๋น์ค ์ ์ฉ MCP ์๋ฒ, ์์ด์ ํธ ์ค์ ๋ง ์ถ๊ฐ
โโโ .agents/
โโโ skills/ โ ์๋น์ค ์ ์ฉ ์คํฌ
Codex CLI๋ cwd๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ํ๋ฏ๋ก, workingDirectory๋ฅผ cwd๋ก ์ค์ ํ์ฌ ์คํํ๋ฉด ์ด ํ์ผ๋ค์ด ์๋์ผ๋ก ๋ก๋๋๋ค.
์ค์ ๋ ์ด์ด ์ต์ข ๊ทธ๋ฆผ
~/.codex/config.toml (์ฌ์ฉ์ ๊ธ๋ก๋ฒ โ ๊ฑด๋๋ฆฌ์ง ์์)
+ {workdir}/.codex/config.toml (์๋น์ค ์ ์ฉ โ MCP ์๋ฒ๋ง ์ถ๊ฐ)
+ CLI ํ๋๊ทธ (๋ฐํ์ ์ค๋ฒ๋ผ์ด๋)
~/.codex/AGENTS.md (์ฌ์ฉ์ ๊ธ๋ก๋ฒ โ ๊ฑด๋๋ฆฌ์ง ์์)
+ {workdir}/AGENTS.md (์๋น์ค ์ง์นจ โ ์ต์ฐ์ ์ ์ฉ)
OPENAI_API_KEY (env var) (์ฌ์ฉ์ shell โ ๋ฐฉ๋ฒ ๋ฌด๊ดํ๊ฒ ์์)
์ฌ์ฉ์๊ฐ ์์ ์ API key์ ๋ชจ๋ธ ์ค์ ์ ๊ทธ๋๋ก ์ฐ๋ฉด์, ์๋น์ค๊ฐ ์ฃผ์ ํ ์ง์นจ๊ณผ MCP ์๋ฒ๋ง ์ถ๊ฐ๋ก ์นํ๋ ๊ตฌ์กฐ๋ค.