์๋ฆฌ์ฆ: 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 ๋ค์ดํฐ๋ธ ๋๊ตฌ๋ ๋ญ๊ฐ |
- **oh-my-codex(OMX)**๋ OpenAI Codex CLI๋ฅผ ๋ฉํฐ์์ด์ ํธ ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ์ผ๋ก ํ์ฅํ๋ ๋ฐํ์ ๋ ์ด์ด
- Codex CLI ์์ฒด๋ฅผ ๊ต์ฒดํ์ง ์๊ณ ๊ทธ ์์ ์กฐ์จยท์ํยท๋๊ตฌ ์ธํ๋ผ๋ฅผ ์น๋ ๊ตฌ์กฐ
- ํต์ฌ ์ฌ๋ก๊ฑด: โYour codex is not alone.โ
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
- Codex CLI๋ ๋จ์ผ ์ธ์ ์์ด์ ํธ โ ํ ๋ฒ์ ๋ํ์์ ์ฝ๋ ์์ฑ/์์ /์คํ์ ์ํํ์ง๋ง, ์ธ์ ๊ฐ ์ํ ์ ์ง๋ ๋ฉํฐ์์ด์ ํธ ์กฐ์จ ๊ธฐ๋ฅ์ด ์์
- ์ค์ ๊ฐ๋ฐ์์๋ ์ฌ๋ฌ ์์ด์ ํธ๊ฐ ์ญํ ์ ๋๋์ด ๋ณ๋ ฌ ์์ ํ๊ณ , ์ํ๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ฉฐ, ๊ฒ์ฆ ๋ฃจํ๋ฅผ ๋๋ ค์ผ ํ๋ ์๋๋ฆฌ์ค๊ฐ ๋น๋ฒ
- OMX๋ ์ด ๊ฐ๊ทน์ ๋ฉ์ฐ๋ ์ค์ผ์คํธ๋ ์ด์ ๋ฐํ์
AS-IS
sequenceDiagram autonumber participant U as User participant CX as Codex CLI U->>CX: "refactor the API" CX->>CX: ๋จ์ผ ์ธ์ ์์ ์์ ์ํ CX-->>U: ๊ฒฐ๊ณผ ๋ฐํ Note over CX: ์ธ์ ์ข ๋ฃ ์ ์ํ ์๋ฉธ Note over CX: ๋ณ๋ ฌ ์์ ๋ถ๊ฐ Note over CX: ์ญํ ๋ถ๋ด ์์
TO-BE
sequenceDiagram autonumber participant U as User participant OMX as OMX Runtime participant CX1 as Codex Worker 1 participant CX2 as Codex Worker 2 participant MCP as MCP Servers participant ST as .omx/ State U->>OMX: "team 2:executor refactor the API" OMX->>MCP: ์ํ ์ด๊ธฐํ (state_write) OMX->>CX1: frontend ๋ฆฌํฉํฐ ์์ OMX->>CX2: backend ๋ฆฌํฉํฐ ์์ CX1->>MCP: ์งํ ์ํ ๊ธฐ๋ก CX2->>MCP: ์งํ ์ํ ๊ธฐ๋ก OMX->>OMX: ๊ฒ์ฆ & ๋จธ์ง OMX->>ST: ์ต์ข ์ํ ์ ์ฅ OMX-->>U: ์๋ฃ ๋ณด๊ณ Note over ST: ์ธ์ ๊ฐ ์ํ ์ ์ง
3-Plane ์ํคํ ์ฒ
OMX์ ์ค๊ณ๋ฅผ ๊ดํตํ๋ ํต์ฌ ๊ตฌ์กฐ๋ ์ธ ๊ฐ์ Plane์ผ๋ก ๋ถ๋ฆฌ๋๋ค.
์ฉ์ด ์ถ์ฒ: โControl Plane / Data(Execution) Planeโ์ Kubernetes, ๋คํธ์ํฌ ์ํคํ ์ฒ ๋ฑ ์ธํ๋ผ ๋ถ์ผ์์ ๋ฒ์ฉ์ ์ผ๋ก ์ฐ์ด๋ ๊ธฐ์กด ์ฉ์ด๋ฅผ ์ฐจ์ฉํ ๊ฒ์ด๋ค. OpenAI Codex ๊ณต์ ์ฉ์ด๊ฐ ์๋๋ผ, OMX ์ ์๊ฐ ์์ ์ ์ค๊ณ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ์ ์ฉํ OMX ๊ณ ์ ์ํคํ ์ฒ ์ฉ์ด๋ค.
| Plane | ์ญํ | ๊ตฌํ์ฒด | ์คํ ์ฃผ์ฒด |
|---|---|---|---|
| Control Plane | ์ํฌํ๋ก์ฐ ์กฐ์จ, ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ, CLI | OMX CLI (src/cli/*.ts) | ์ฌ๋ (ํฐ๋ฏธ๋ ์ง์ ์ ๋ ฅ) โ ๊ฒฐ์ ๋ก ์ |
| Execution Plane | ์ค์ ์์ด์ ํธ๊ฐ ์ฝ๋๋ฅผ ์์ฑยท์์ ยท์คํ | Codex CLI (AGENTS.md + ํ๋กฌํํธ๋ก ์๋) | LLM (AGENTS.md ํด์) โ ํ๋ฅ ๋ก ์ |
| State Plane | ์ง์ ์ํ, ๋ฉ๋ชจ๋ฆฌ, ์ถ์ , ํ ํต์ | MCP ์๋ฒ 5๊ฐ + .omx/ ๋๋ ํ ๋ฆฌ | Codex CLI๊ฐ config.toml ๊ธฐ๋ฐ ์๋ ๊ธฐ๋ |
์ด ๋ถ๋ฆฌ์ ํต์ฌ ์ด์ ์ Codex CLI๋ฅผ ์คํ ์์ง์ผ๋ก ๊ทธ๋๋ก ๋๋ฉด์, ๊ด์ธก์ฑ(observability)๊ณผ ์ฌ๊ฐ ๊ฐ๋ฅ์ฑ(resumability)์ OMX๊ฐ ์ ๊ณตํ๋ค๋ ์ ์ด๋ค.
์ฃผ์: src/hooks/๋ Control Plane์ธ๊ฐ Execution Plane์ธ๊ฐ?
src/hooks/ ๋๋ ํ ๋ฆฌ์ ์คํฌ๋ฆฝํธ(agents-overlay.ts, keyword-detector.ts ๋ฑ)๋ ์ด๋ฆ๊ณผ ๋ฌ๋ฆฌ Control Plane์์ ์คํ๋๋ค. src/cli/index.ts๊ฐ ์ด๋ค์ importํ์ฌ omx launch ๊ณผ์ ์์ Node.js๋ก ํธ์ถํ๋ฉฐ, LLM(Execution Plane)์ด ํธ์ถํ๋ ๊ฒ์ด ์๋๋ค.
Codex CLI๊ฐ ์ ๊ณตํ๋ ๊ฒ vs OMX๊ฐ ์ ๊ณตํ๋ ๊ฒ
Codex CLI (OpenAI ์ ๊ณต)
- ๋ํํ REPL:
codex "..." - ์๋๋ฐ์ค: macOS Seatbelt / Linux Docker
- ์น์ธ ๋ชจ๋ 3๊ฐ์ง: suggest / auto-edit / full-auto
- AGENTS.md: ๊ณ์ธต์ ์ง์นจ ๋ก๋ (
~/.codex/AGENTS.mdโ./AGENTS.mdโ./subdir/AGENTS.md) - config.toml: ๋ชจ๋ธยทMCPยท๊ธฐ๋ฅ ์ค์
- ๋ฉํฐ ํ๋ก๋ฐ์ด๋: OpenAI, Azure, Gemini, Ollama ๋ฑ
Seatbelt โ Codex CLI์ macOS ์๋๋ฐ์ค
Seatbelt๋ macOS์ ๋ด์ฅ๋ ์ปค๋ ๋ ๋ฒจ ์๋๋ฐ์ค ํ๋ ์์ํฌ๋ค. sandbox-exec ๋ช
๋ น์ด๋ก ํ๋ก์ธ์ค์ ๋ณด์ ์ ์ฑ
์ ์ ์ฉํ๋ค.
Codex CLI๋ full-auto ๋ชจ๋์์ ์์ด์ ํธ๊ฐ ์์ ๋ช
๋ น์ด๋ฅผ ์คํํ ์ ์๊ธฐ ๋๋ฌธ์, Seatbelt๋ก ๋ค์์ ์ ํํ๋ค:
| ํ์ฉ | ์ฐจ๋จ |
|---|---|
| ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ์ฝ๊ธฐ/์ฐ๊ธฐ | ํ๋ก์ ํธ ์ธ๋ถ ๋๋ ํ ๋ฆฌ ์ฐ๊ธฐ |
| OpenAI API ๋คํธ์ํฌ ํต์ | ๊ทธ ์ธ ๋คํธ์ํฌ egress |
| ํ์ ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๊ทผ | ๋ฏผ๊ฐ ์์คํ ํ์ผ ์ ๊ทผ |
Linux์์๋ Seatbelt ๋์ Docker ์ปจํ ์ด๋ + iptables๋ก ๋์ผํ ๊ฒฉ๋ฆฌ๋ฅผ ๊ตฌํํ๋ค. ์ฆ ํ๋ซํผ๋ณ๋ก ๊ฒฉ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๋ค๋ฅด์ง๋ง, โ์์ด์ ํธ์ ํ๋ ๋ฒ์๋ฅผ ํ๋ก์ ํธ ์์ผ๋ก ๊ฐ๋๊ฒ ๋คโ๋ ๋ชฉํ๋ ๊ฐ๋ค.
OMX๊ฐ ์น๋ ๊ฒ
omxCLI: setup, launch, team, ralph, explore, sparkshell ๋ฑ 15+ ์๋ธ์ปค๋งจ๋- 5๊ฐ MCP ์๋ฒ: state, memory, code-intel, trace, team
- 33๊ฐ Agent Prompt: architect, executor, explore ๋ฑ ์ญํ ๋ณ ํ๋กฌํํธ
- 35+ Skill: autopilot, ralph, team, ultrawork ๋ฑ ์ํฌํ๋ก์ฐ ์ง์นจ์
- Team ๋ชจ๋: tmux ๊ธฐ๋ฐ N worker ๋ณ๋ ฌ ์กฐ์จ
- Rust ๋ค์ดํฐ๋ธ ๋๊ตฌ: explore-harness, sparkshell
OMC(oh-my-claudecode)์์ ํตํฉ ๋ฐฉ์ ์ฐจ์ด
OMX์ OMC๋ ๊ฐ์ ๋ชฉํ(CLI ์์ด์ ํธ ํ์ฅ)๋ฅผ ์ถ๊ตฌํ์ง๋ง, ๋์ ํ๋ซํผ์ ํ์ฅ ์ฑ๋์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ ๊ทผ์ด ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅด๋ค.
| ํญ๋ชฉ | OMC (Claude Code) | OMX (Codex CLI) |
|---|---|---|
| ํตํฉ ์ฑ๋ | Hook(stdin/stdout) + MCP + Skill tool | AGENTS.md + config.toml + CLI |
| ์ด๋ฒคํธ ๊ฐ๋ก์ฑ๊ธฐ | hooks.json์ 21๊ฐ ๊ณต์ ์ด๋ฒคํธ | AGENTS.md์ ํค์๋ ๋งคํ ๋ด์ฅ |
| ์์ด์ ํธ ํธ์ถ | Task(subagent_type="omc:executor") | /prompts:executor ๋๋ ์์ |
| ์คํฌ ํธ์ถ | Skill("omc:ultrawork") | $ultrawork (ํค์๋ ํธ๋ฆฌ๊ฑฐ) |
| MCP ์๋ฒ | 1๊ฐ ํตํฉ ์๋ฒ โtโ (30+ ๋๊ตฌ) | 5๊ฐ ๋ถ๋ฆฌ ์๋ฒ |
| Team ์์ปค | ๊ฐ์ ํ๋ก์ธ์ค ๋ด ์๋ธ์์ด์ ํธ | ๋ ๋ฆฝ Codex CLI ํ๋ก์ธ์ค (tmux) |
| ๋ค์ดํฐ๋ธ ๋๊ตฌ | ์์ | Rust (explore-harness, sparkshell) |
์ ๋ค๋ฅธ๊ฐ?
- Claude Code๋ Plugin ์์คํ ๊ณผ Hook ์ด๋ฒคํธ(stdin/stdout JSON)๋ฅผ ๊ณต์ ์ ๊ณต โ OMC๋ ์ด ์ฑ๋์ ํ์ฉ
- Codex CLI๋ Hook ์ด๋ฒคํธ๊ฐ ์๊ณ , AGENTS.md์ config.toml์ด ์ฃผ์ ํ์ฅ์ โ OMX๋ ์ด ์ฑ๋์ ํ์ฉ
- ํ์ฅ ์ฑ๋์ด ์ ํ์ ์ด๋ฏ๋ก, OMX๋ ๋
๋ฆฝ CLI(
omx๋ช ๋ น์ด)๋ก ์ ์ด ๋ ์ด์ด๋ฅผ ๋ณ๋ ๊ตฌ์ถ
์์ฐจ ํ๋ฆ โ ์์ฒญ ํ๋์ ์๋ช ์ฃผ๊ธฐ
์ฌ์ฉ์๊ฐ ultrawork refactor the API๋ผ๊ณ ์
๋ ฅํ๋ฉด:
- AGENTS.md ํค์๋ ๊ฐ์ง โ Codex CLI๊ฐ AGENTS.md๋ฅผ ์ฝ๊ณ , โultraworkโ ํค์๋๋ฅผ ๊ฐ์ง
- Skill ๋ก๋ โ
$ultraworkโskills/ultrawork/SKILL.md์ฝ๊ธฐ โ ๋ณ๋ ฌ ์คํ ์ง์นจ context ์ฃผ์ - ์์ด์ ํธ ์์ โ
/prompts:executor๋ก ์์ ์์ โ MCP๋ฅผ ํตํด ์ํ ๊ธฐ๋ก (state_write) - ์ํ ์ ๋ฆฌ โ ์๋ฃ ํ ์ํ๋ฅผ
active: false๋ก ๋งํน, ์ฌ์ฉ์์๊ฒ ๋ณด๊ณ
OMC์์๋ ์ด ํ๋ฆ์ด Hook ์คํฌ๋ฆฝํธ(keyword-detector.mjs)์์ ์์๋์ง๋ง, OMX์์๋ AGENTS.md์ ๋ด์ฅ๋ ํค์๋ ๋งคํ ํ
์ด๋ธ์์ ์์๋๋ค๋ ๊ฒ์ด ํต์ฌ ์ฐจ์ด๋ค.
๋ณ๋ ฌ ํ๋ฆ โ Team ๋ชจ๋
tmux โ Team ๋ชจ๋์ ์คํ ๊ธฐ๋ฐ
tmux(terminal multiplexer)๋ ํ๋์ ํฐ๋ฏธ๋ ์์์ ์ฌ๋ฌ ๋ ๋ฆฝ ์ ธ ์ธ์ ์ ์์ฑยท๊ด๋ฆฌํ๋ ๋๊ตฌ๋ค.
โโ tmux session: omx-team โโโโโโโโโโโโโโโโโโโโโโ
โ โโ pane 0 โโโโโโโ โโ pane 1 โโโโโโโ โ
โ โ Worker 1 โ โ Worker 2 โ โ
โ โ codex ... โ โ codex ... โ โ
โ โ (frontend) โ โ (backend) โ โ
โ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โ
โ โโ pane 2 โโโโโโโ โ
โ โ Worker 3 โ โ
โ โ codex ... โ โ
โ โ (database) โ โ
โ โโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
OMX๊ฐ tmux๋ฅผ ์ ํํ ์ด์ :
- ๊ฐ Worker๊ฐ ๋ ๋ฆฝ ํ๋ก์ธ์ค๋ก ์คํ๋๋ฏ๋ก ํ Worker์ ํฌ๋์๊ฐ ๋ค๋ฅธ Worker์ ์ํฅ์ ์ฃผ์ง ์์
- pane ์บก์ฒ(
tmux capture-pane)๋ก ๊ฐ Worker์ ์ถ๋ ฅ์ ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก ์ฝ์ ์ ์์ - ์ธ์ ์ด ํฐ๋ฏธ๋ ์ข ๋ฃ ํ์๋ ์ ์ง๋์ด ์ฅ์๊ฐ ์์ ์ ์ ํฉ
- OMX์
sparkshell๋ tmux pane ์บก์ฒ๋ฅผ ํ์ฉํ์ฌ Worker ์ํ๋ฅผ ๋ชจ๋ํฐ๋ง
Team ๋ชจ๋ ์คํ ํ๋ฆ
omx team 3:executor "build fullstack app" ์คํ ์:
- team-plan โ TeamRuntime ์์ฑ, ์์ ์ ์๋ธํ์คํฌ๋ก ๋ถํด
- team-exec โ tmux session ์์ฑ, ๊ฐ Worker๋ฅผ ๋ ๋ฆฝ Codex CLI pane์ผ๋ก ์คํ
- ๋ณ๋ ฌ ์คํ โ Worker 1(frontend), Worker 2(backend), Worker 3(database) ๋์ ์์
- team-verify โ ๊ฒฐ๊ณผ ๊ฒ์ฆ, ์ํ ์ ๋ฐ์ดํธ, ์๋ฃ ๋ณด๊ณ
Team ๋ชจ๋์ ํต์ฌ์ ๊ฐ Worker๊ฐ ๋ ๋ฆฝ Codex CLI ํ๋ก์ธ์ค๋ผ๋ ์ ์ด๋ค. OMC์ ์๋ธ์์ด์ ํธ์ ๋ฌ๋ฆฌ, tmux pane์์ ์์ ํ ๊ฒฉ๋ฆฌ๋ ํ๋ก์ธ์ค๋ก ์คํ๋๋ค.
๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ์์ฝ
| ๋๋ ํ ๋ฆฌ | ์ญํ | ํ์ต ํํธ |
|---|---|---|
bin/ | CLI ์ง์
์ (omx.js) | 01 |
src/cli/ | 15+ ์๋ธ์ปค๋งจ๋ ํธ๋ค๋ฌ | 01 |
src/hooks/ | agents-overlay.ts, keyword-detector.ts, ์ธ์
์ถ์ (Control Plane โ src/cli/index.ts๊ฐ import) | 02 |
src/config/ | config.toml ์์ฑ/๋จธ์ง | 02 |
src/agents/ | ์์ด์ ํธ ๋ฉํ๋ฐ์ดํฐ | 04 |
src/mcp/ | MCP ์๋ฒ 5๊ฐ ๊ตฌํ | 05 |
src/team/ | Team ๋ชจ๋ ์ค์ผ์คํธ๋ ์ด์ | 07 |
src/state/ | ์ํ ๊ด๋ฆฌ | 06 |
prompts/ | 33๊ฐ Agent Prompt | 04 |
skills/ | 35+ Skill | 03 |
AGENTS.md | ์ค์ผ์คํธ๋ ์ด์ ๋ธ๋ ์ธ | 02 |
crates/, native/ | Rust ๋ค์ดํฐ๋ธ ๋๊ตฌ | 08 |