์‹œ๋ฆฌ์ฆˆ: oh-my-codex ์•„ํ‚คํ…์ฒ˜ ํ•ด๋ถ€

์ด ์‹œ๋ฆฌ์ฆˆ๋Š” OpenAI Codex CLI ํ™•์žฅ ๋Ÿฐํƒ€์ž„์ธ oh-my-codex(OMX)์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ํ•ด๋ถ€ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

ํŽธ๋‚ด์šฉํ•ต์‹ฌ
0ํŽธOverview3-Plane ์•„ํ‚คํ…์ฒ˜, OMC์™€์˜ ์ฐจ์ด, ์ „์ฒด ํ๋ฆ„
1ํŽธ (๋ณธ๋ฌธ)Codex CLI FoundationCodex CLI ์ž์ฒด์˜ ๊ตฌ์กฐ์™€ ํ™•์žฅ ํฌ์ธํŠธ
2ํŽธOMX IntegrationOMX๊ฐ€ Codex์— ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜๋‚˜
3ํŽธSkill System์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•˜๋‚˜
4ํŽธPrompt & Agent System์—์ด์ „ํŠธ๋Š” ๋ญ๊ณ  ์–ด๋–ป๊ฒŒ ์„ ํƒ๋˜๋‚˜
5ํŽธMCP Servers์–ด๋–ค MCP ๋„๊ตฌ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‚˜
6ํŽธState & Lifecycle์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ์œ ์ง€ํ•˜๋‚˜
7ํŽธTeam OrchestrationTeam ๋ชจ๋“œ๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋‚˜
8ํŽธNative & SparkRust ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ๋Š” ๋ญ”๊ฐ€

  • 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
--yolodanger-full-access + never (๋ชจ๋“  ์ œ์–ด ํ•ด์ œ, ๋น„๊ถŒ์žฅ)

ํ”Œ๋žซํผ๋ณ„ ์ƒŒ๋“œ๋ฐ•์Šค ๊ตฌํ˜„

ํ”Œ๋žซํผ๋ฉ”์ปค๋‹ˆ์ฆ˜ํŠน์ง•
macOSSeatbelt (sandbox-exec -p)์ปค๋„ ๋ ˆ๋ฒจ ์ •์ฑ… ํ”„๋กœํŒŒ์ผ ์ ์šฉ
LinuxLandlock + 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 o3o3 (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 OpenAIbase_url + env_key์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ฐฐํฌ
Ollama--oss ํ”Œ๋ž˜๊ทธ๋กœ์ปฌ ์˜คํ”ˆ์†Œ์Šค ๋ชจ๋ธ
OpenRouterbase_url ์ปค์Šคํ…€๋ฉ€ํ‹ฐ ๋ชจ๋ธ ๋ผ์šฐํ„ฐ
Gemini, Mistral, DeepSeek, xAI, Groqbase_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/removeMCP ์„œ๋ฒ„ ๊ด€๋ฆฌ
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 execTeam ๋ชจ๋“œ Worker๋ฅผ ๋น„๋Œ€ํ™”ํ˜•์œผ๋กœ ์‹คํ–‰

Claude Code์™€์˜ ๋น„๊ต

ํ•ญ๋ชฉClaude CodeCodex CLI
๊ฐœ๋ฐœ์‚ฌAnthropicOpenAI
์–ธ์–ดTypeScriptRust 96.2% (codex-rs)
๊ธฐ๋ณธ ๋ชจ๋ธClaude ์‹œ๋ฆฌ์ฆˆgpt-5-codex
ํ™•์žฅ ์ฑ„๋„Plugin + Hook(21 ์ด๋ฒคํŠธ) + MCP + Skill toolAGENTS.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 ์„œ๋ฒ„๋งŒ ์ถ”๊ฐ€๋กœ ์–นํžˆ๋Š” ๊ตฌ์กฐ๋‹ค.

์ฐธ๊ณ  ๋ฌธ์„œ