Claude๊ฐ ์งํ์, Codex๊ฐ ์ค๋ฌด์. ๋ AI๋ฅผ ํ ํ๋ฉด์์ ํ์ ์ํค๋ Claude Code ์คํฌ์ ๋๋ค. tmux, herdr, Orca IDE ์ธ ํ๊ฒฝ์ ์ง์ํฉ๋๋ค.
Claude์๊ฒ ์ผ์ ์ํค๋ฉด, Claude๊ฐ ์ ์นธ(ํฐ๋ฏธ๋ pane)์ Codex๋ฅผ ๋์ฐ๊ณ
LazyCodex๋ผ๋ ๊ฐ๋ ฅํ ์์
๋๊ตฌ($ulw-loop, $start-work, $teammode ๋ฑ)๋ก
์ค์ ์ฝ๋ฉ์ ์ํต๋๋ค. Claude๋ ๊ทธ๋์ ์งํ ์ํฉ์ ์ง์ผ๋ณด๊ณ , Codex๊ฐ ๋ฌผ์ด๋ณด๋ฉด ๋ตํด์ฃผ๊ณ , ๋ค ๋๋ค๊ณ ํ๋ฉด
์ง์ ๋น๋ยทํ
์คํธ๋ฅผ ๋๋ ค์ ์ง์ง ๋๋์ง ํ์ธํ ๋ค ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ค๋๋ค.
โโ ํ ํ๋ฉด (tmux ์ฐฝ / Orca ์ํฌํธ๋ฆฌ / herdr ํญ) โโโโโโโโโโโโโโโโ
โ Claude (์งํ์) โ Codex + LazyCodex (์ค๋ฌด์) โ
โ โข ์ด๋ค ๋ช
๋ น์ ์ธ์ง ํ๋จ โ $ulw-loop "..." โ
โ โข Codex์๊ฒ ์์
์ ๋ฌ โ โ ๊ณํยท์ฝ๋์์ ยทํ
์คํธ โ
โ โข ์ง์ผ๋ณด๊ณ , ๋งํ๋ฉด ํ์ด์ค โ โ ๋๋ ๋๊น์ง ๋ฐ๋ณต โ
โ โข ์ง์ ๊ฒ์ฆ (git diff, ๋น๋) โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์ผ์ชฝ ์นธ โโโ codex-pane.sh ๋ก ์ ์ด โโโบ ์ค๋ฅธ์ชฝ ์นธ
Orca IDE์์๋ ์ฌ๊ธฐ์ ๋ํด A2A ๋ฉํฐ ์์ปค ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค โ Codex ํฐ๋ฏธ๋ ์ฌ๋ฌ ๊ฐ๋ฅผ
๋ณ๋ ฌ๋ก ๋์ฐ๊ณ , Orca์ ๋ค์ดํฐ๋ธ ์ค์ผ์คํธ๋ ์ด์
(task dispatch โ worker_done)์ผ๋ก
์์
์ ๋ถ๋ฐฐยท์๊ฑฐํฉ๋๋ค.
- Codex์ LazyCodex ํ๋ค์ค๋ ๊ฐ๋ ฅํฉ๋๋ค โ ํ๋ก์ ํธ ๊ธฐ์ต, ๊ณํ ์๋ฆฝ, "์ง์ง ๋๋ ๋๊น์ง" ๋๋ ์คํ ๋ฃจํ, ํ ๋ชจ๋๊น์ง.
- ํ์ง๋ง ํผ์ ๋๋ฉด ๋ฐฉํฅ์ ์๊ฑฐ๋ "๋ค ๋๋ค"๊ณ ์ฐฉ๊ฐํ ์ ์์ต๋๋ค.
- ๊ทธ๋์ Claude๋ฅผ ์์ ์น์ด ๋ฐฉํฅ์ ์ก๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๊ฒ ํ์ต๋๋ค.
- ๋ณ๋ ํ๋ก๊ทธ๋จ ์์ด ํฐ๋ฏธ๋ ํ๋ฉด ํ ์นธ์ผ๋ก ๋ ๋ชจ๋ธ์ด ํ์ ํฉ๋๋ค.
์ด ์คํฌ์ ๋ณธ์ง์ Claude์๊ฒ LazyCodex ์ฌ์ฉ๋ฒ์ ๊ฐ๋ฅด์น๋ ๊ฒ์
๋๋ค. ํฐ๋ฏธ๋์ ๋์ฐ๋ ๊ฑด
tmux๋ Orca๋ ์๋ ๋๋ ์ผ์ด์ง๋ง, ์ด๋ค ํ๋ค์ค ๋ช
๋ น์ ๊ณจ๋ผ์ผ ํ๋์ง, ์๋ฃ ํ ํฐ์ ์ด๋ป๊ฒ
์ก์์ผ ํ๋์ง, "๋ค ๋๋ค"๋ฅผ ์ด๋ป๊ฒ ๊ฒ์ฆํด์ผ ํ๋์ง๋ Claude๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ฆ
๋๋ค.
๊ทธ ์ง์์ด SKILL.md์ ๋ค์ด ์์ต๋๋ค.
| ์ด๋ฐ ์ํฉ | ์ธ ๊ฒ |
|---|---|
| Codexํํ ์งง์ ์ง๋ฌธ ํ๋, ๋ฆฌ๋ทฐ ํ ๋ฒ | โ ์ด ์คํฌ ์๋ โ ๊ฐ๋ฒผ์ด /codex ๊ณ์ด์ ์ฐ์ธ์ |
| ์ฝ๋๋ฅผ ์ค์ ๋ก ์ง์ผ ํ๊ณ , ๋ ๋๊น์ง ์์จ๋ก ๋๋ฆฌ๊ณ ์ถ๋ค | โ
์ด ์คํฌ โ ๋จ์ผ pane + $ulw-loop (๊ฐ์ฅ ํํ ๊ฒฝ์ฐ) |
| ํฐ ๊ธฐ๋ฅ์ด๋ผ ๊ณํ๋ถํฐ ์ธ์์ผ ํ๋ค | โ
์ด ์คํฌ โ $ulw-plan โ ๊ณํ ๊ฒํ โ $start-work |
| ๊ฐ๋๊ฐ 2~4๊ฐ, ํ์ผ์ด ์ ๊ฒน์น๋ค (Orca) | โ ์ด ์คํฌ์ A2A ๋ชจ๋ โ ์์ปค๋ง๋ค ํ๋ค์ค๋ฅผ ๋๋ฆฝ๋๋ค |
| ๊ทธ๋ฅ ๋ค๋ฅธ ์์ด์ ํธ์๊ฒ ์ผ์ ๋๊ธฐ๊ณ ์ ๋ผ๊ณ ์ถ๋ค | โ Orca์ orca-cli ํธ๋์คํ๋ฅผ ์ฐ์ธ์ |
| ํ๋ค์ค ์์ด ์์ codex ์์ปค๋ง ์กฐ์จํ๋ฉด ๋๋ค | โ Orca์ orchestration ์คํฌ๋ง์ผ๋ก ์ถฉ๋ถํฉ๋๋ค |
Orca ์์ฒด ๊ธฐ๋ฅ๊ณผ์ ๊ด๊ณ. Orca์๋ ์ด๋ฏธ orca-cli(ํฐ๋ฏธ๋ยท์ํฌํธ๋ฆฌ ์ ์ด)์
orchestration(์์
๋ฐฐ์ ยทworker_done ์๊ฑฐ)์ด ์์ต๋๋ค. ๊ทธ๊ฒ๋ค๋ง์ผ๋ก๋ codex ์์ปค๋ฅผ ๋์ฐ๊ณ
์กฐ์จํ ์ ์์ต๋๋ค โ ๋ค๋ง ๊ทธ ์์ปค๋ "๋งจ codex"์
๋๋ค. ์ด ์คํฌ์ ๊ทธ ์์ ์นํ์,
Claude๊ฐ ์์ปค์๊ฒ LazyCodex ํ๋ค์ค๋ฅผ ์ ๋๋ก ๋ฌผ๋ ค์ฃผ๋๋ก ๋ง๋ญ๋๋ค:
- ์์
์ฑ๊ฒฉ์ ๋ง๋ ํ๋ค์ค ๋ช
๋ น ์ ํ (
$ulw-plan/$start-work/$ulw-loop) --completion-promiseํ ํฐ ๊ท์น (30์ ๋ฏธ๋ง โ ๋์ผ๋ฉด TUI์์ ์ค๋ฐ๊ฟ๋ผ ๊ฐ์ง ์คํจ)$์ ๋์ฌ๊ฐ ์คํฌ ํผ์ปค๋ฅผ ๋์ ์ ๋ ฅ์ ์ผํฌ ๋์ ๋ณต๊ตฌ- Codex์ "์๋ฃ" ์ ์ธ์ ๋ฏฟ์ง ์๊ณ Claude๊ฐ ์ง์ ๋น๋ยทํ ์คํธ๋ก ๊ฒ์ฆํ๋ ๊ฒฝ๊ณ
์ฆ Orca = ๋ฐฐ์ , ์ด ์คํฌ = ํ๋ค์ค ์ด์ฉ๋ฒ + ๊ฒ์ฆ ๊ท์จ์ ๋๋ค. ๋์ ๊ฒฝ์ ๊ด๊ณ๊ฐ ์๋๋ผ ์ธต์ด ๋ค๋ฅด๋ฉฐ, A2A ๋ชจ๋์์๋ ์ค์ ๋ก Orca์ ์ค์ผ์คํธ๋ ์ด์ ์์์ ํ๋ค์ค๊ฐ ๋์๊ฐ๋๋ค.
- Claude Code๋ฅผ ์ง์ ํ๊ฒฝ ์์์ ์คํ (์คํฌ์ด ์ ์นธ์ ๋์ฐ๊ธฐ ๋๋ฌธ):
- Codex CLI ์ค์น + ๋ก๊ทธ์ธ (ํฐ๋ฏธ๋์์
codex์คํ๋๋ฉด OK) - LazyCodex ์ค์น:
npx lazycodex-ai install
Claude Code ์คํฌ ํด๋์ ๊ทธ๋๋ก ๋ณต์ฌํ๋ฉด ๋์ ๋๋ค:
git clone https://github.com/passeth/claude-lazycodex-skill.git \
~/.claude/skills/lazycodex
chmod +x ~/.claude/skills/lazycodex/scripts/codex-pane.sh๋ค์๋ฒ Claude Code๋ฅผ ์ผ๋ฉด ์๋์ผ๋ก ์ธ์๋ฉ๋๋ค. (/skills ๋ก ํ์ธ ๊ฐ๋ฅ)
์ค์น ๋ค ์ค๋น ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค:
~/.claude/skills/lazycodex/scripts/codex-pane.sh doctordoctor๋ ์คํ ํ๊ฒฝ(tmux/orca/herdr ์๋ ๊ฐ์ง), codex CLI, LazyCodex ํ๋ฌ๊ทธ์ธ
์ค์ (omo@sisyphuslabs), ํ์ฌ Codex pane ์ํ๋ฅผ ์ ๊ฒํฉ๋๋ค.
์ง์ ํ๊ฒฝ ์์์ Claude Code๋ฅผ ์ผ๊ณ , ๊ทธ๋ฅ ํ์์ฒ๋ผ ๋งํ๋ฉด ๋ฉ๋๋ค:
codexํํ ์์ผ์ ulw-loop๋ก ์ด ๋ฒ๊ทธ ๊ณ ์ณ์คlazycodex๋ก ์ด ๊ธฐ๋ฅ ๊ณํ๋ถํฐ ์ธ์์คcodex teammode๋ก ์ด ๋ฆฌํฉํ ๋ง ๋๋ ค์ค- (Orca์์)
orca ์์ปค 3๊ฐ๋ก a2a๋ก ๋๋ ์ ๋๋ ค์ค
๊ทธ๋ฌ๋ฉด Claude๊ฐ ์์์:
-
์ ๊ฒ โ
doctor๋ก ์คํ ํ๊ฒฝยทcodexยทLazyCodex ์ค๋น ์ํ ํ์ธ -
๋ช ๋ น ๊ณ ๋ฅด๊ธฐ โ ์์ ์ฑ๊ฒฉ์ ๋ง๋ Codex ๋ช ๋ น ์ ํ:
์ด๋ด ๋ Codex ๋ช ๋ น ๋๋ ์ ํธ ์ฝ๋ฉ ์ ์ ๊ณํ๋ถํฐ $ulw-plan "..."plans/์ ๊ณํ ํ์ผ ์์ฑ์ด๋ฏธ ์๋ ๊ณํ ์คํ $start-work <๊ณํ>ORCHESTRATION COMPLETE๋ ๋๊น์ง ์์์ (๋ชฉํ ๋ชจ๋) $ulw-loop "..." --completion-promise=ํ ํฐ๊ทธ ํ ํฐ์ด ์ถ๋ ฅ๋จ ์ฌ๋ฌ ๊ฐ๋ ๋ณ๋ ฌ ์์ (tmux/herdr) $teammodeํ ๋ฆฌ๋ ์์ฝ ์ฌ๋ฌ ๊ฐ๋ ๋ณ๋ ฌ ์์ (Orca) A2A ๋ฉํฐ ์์ปค ๋ชจ๋ (์๋) worker_done๋ฉ์์ง -
์ ๋ฌ โ ์ง์ผ๋ณด๊ธฐ โ ๋ตํ๊ธฐ โ Codex๊ฐ ์ง๋ฌธํ๋ฉด Claude๊ฐ ํ๋จํด์ ๋ตํ๊ฑฐ๋, ์ฌ์ฉ์ ๊ฒฐ์ ์ด ํ์ํ๋ฉด ๋ฌผ์ด๋ด
-
์ง์ ๊ฒ์ฆ โ Codex์ "๋ค ๋์ด์"๋ฅผ ๊ทธ๋ฅ ๋ฏฟ์ง ์๊ณ
git diffยท๋น๋ยทํ ์คํธ๋ฅผ ์ค์ ๋ก ๋๋ ค ํ์ธ -
๋ณด๊ณ โ ๋ญ๊ฐ ๋ฐ๋์๋์ง, ๊ฒ์ฆ ๊ฒฐ๊ณผ, ๋น ์ง ๋ถ๋ถ๊น์ง ์ ๋ฆฌ
์์ ์ด ๋๋๋ Codex ์นธ์ ์ด์ด๋๋ ์ง์ ๋ค์ฌ๋ค๋ณผ ์ ์์ต๋๋ค.
Orca์์ ์์
์ด ๋
๋ฆฝ์ ์ธ 2~4๊ฐ ๊ฐ๋๋ก ๋๋๋ฉด, Claude๋ $teammode(Codex ํ ํ๋ก์ธ์ค๊ฐ
๋ฉค๋ฒ๋ฅผ ์ ๊ธ๋ง) ๋์ ์ง์ง ๋ณ๋ ฌ Codex ํฐ๋ฏธ๋์ ๋์๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ์์ปค ์์์ LazyCodex
ํ๋ค์ค๊ฐ ๋๋๋ค โ ํ๋ค์ค์ ์์จ์ฑ๊ณผ Orca์ ํ์คํ ์๋ฃ ์ถ์ ์ ๋ ๋ค ๊ฐ์ ธ๊ฐ๋๋ค.
# 1) ๊ฐ๋๋ง๋ค ์์ปค ํฐ๋ฏธ๋ ํ๋ (MCP๋ ๋๊ณ โ ์๋ ์ฃผ์์ฌํญ ์ฐธ๊ณ )
orca terminal create --worktree active --title "worker-api" \
--command "codex -c 'mcp_servers={}'" --json
# 2) ์ค๋น ํ์ธ โ tui-idle๋ง์ผ๋ก๋ ๋ถ์กฑํฉ๋๋ค (์๋ ์ฃผ์์ฌํญ ์ฐธ๊ณ )
orca terminal wait --terminal <handle> --for tui-idle --timeout-ms 60000 --json
orca terminal show --terminal <handle> --json | jq -r '.result.terminal.preview'
# "Context ... left" ๊ฐ ๋ณด์ด๋ฉด ์ค๋น๋จ / "Sign in" ์ด ๋ณด์ด๋ฉด ๋ก๊ทธ์ธ ํ๋ฉด โ ๋์คํจ์น ๊ธ์ง
# 3) ์์
์์ฑ + ๋ฐฐ์ โ spec ์์ ํ๋ค์ค ๋ช
๋ น์ ๋ฃ์ต๋๋ค
orca orchestration task-create --spec 'Step 1 - run exactly this in your composer:
$ulw-loop "<์ค์ ์์
>" --completion-promise="LCX_DONE_API"
Step 2 - once the harness prints LCX_DONE_API, send worker_done as your preamble instructs.' --json
orca orchestration dispatch --task <task_id> --to <handle> --inject --json
# 4) ์๊ฑฐ ๋ฃจํ
orca orchestration check --wait --types worker_done,escalation,decision_gate --timeout-ms 570000 --jsonํ๋ค์ค์ worker_done์ ์ถฉ๋ํ์ง ์์ต๋๋ค (์ค์ธก ๊ฒ์ฆ). $ulw-loop๊ฐ ์๊ธฐ ์๋ฃ ์ฝ์์
๋๋ฌํด ๋๋ ๋ค์ ์์ปค๊ฐ ์๋ฃ ๋ณด๊ณ ๋ฅผ ํ๋ ์์ฐจ ๊ตฌ์กฐ๋ผ, ๋ฃจํ๊ฐ ์ค์ฒฉ๋์ง ์์ต๋๋ค.
- ์์ปค๊ฐ ์ง๋ฌธํ๋ฉด(
decision_gate) Claude๊ฐorca orchestration reply๋ก ๋ตํฉ๋๋ค. worker_done์ด ์๋ Claude๊ฐ ์ง์ ๊ฒ์ฆํ ๋ค์๋ง ์๋ฝํฉ๋๋ค (๊ฒ์ฆ ์์น์ ๋์ผ).- ๋
๋ฆฝ๋ ์ฒดํฌ์์์ด ํ์ํ๋ฉด
orca worktree create --name <part> --agent codex --json. - ์์ปค๋ผ๋ฆฌ ๊ฐ์ ํ์ผ์ ๊ฑด๋๋ฆฌ์ง ์๊ฒ ๊ฐ๋๋ฅผ ๋๋์ธ์. ํ ํ๋ก์ธ์ค์ธ
$teammode์ ๋ฌ๋ฆฌ ์ง์ง ๋ณ๋ ฌ์ด๋ผ ํ์ผ ์ถฉ๋์ ์กฐ์จ์ ์ฑ ์์ ๋๋ค.
- MCP๋ฅผ ๋๊ณ ์์ปค๋ฅผ ๋์ฐ์ธ์. Codex์ app-server๋ launchd ๊ธฐ๋ณธ๊ฐ์ธ fd 256๊ฐ ์ ํ์
๋ฌผ๋ ค๋ฐ๋๋ฐ, stdio MCP ์๋ฒ ํ๋ํ๋๊ฐ ํ์ดํ๋ฅผ ๋ฌผ๊ณ ์์ต๋๋ค. MCP๋ฅผ ์๋ฉ ๋ฌธ ์์ปค๋ฅผ ๋ช ๊ฐ
๋ณ๋ ฌ๋ก ๋์ฐ๋ฉด app-server๊ฐ
Too many open files (os error 24)๋ก ๊ณ ์ฐฉ๋๊ณ , codex ์ ์ฒด๊ฐ ์ ๋น๋๋ค. ๋ณต๊ตฌ๋ app-server ํ๋ก์ธ์ค๋ฅผ ์ฃฝ์ด๋ฉด ๋ฉ๋๋ค(๋ค์ ์คํ ๋ ์๋ ์ฌ์์ฑ). tui-idle์ ์ค๋น ์ํ๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค. Codex์ ๋ก๊ทธ์ธ ํ๋ฉด์์๋ok=true๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ ์ํ๋ก ๋์คํจ์นํ๋ฉด ์์ ์ง์๋ฌธ์ด ๋ก๊ทธ์ธ ํ๋กฌํํธ์ ํ์ดํ๋๊ณ ์ฆ๋ฐํ๋ฉฐ, ์กฐ์จ์๋ ์ค์ง ์์worker_done์ ์์ํ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋ฐ๋์ preview๋ก ์ปดํฌ์ ๋ฅผ ํ์ธํ์ธ์.- ์กฐ์ฉํ ์์ปค โ ๋๋ฆฐ ์์ปค.
worker_done์ ์์ปค๊ฐ ์ ธ ๋ช ๋ น์ ๋์์ผ ๋ณด๋ผ ์ ์์ด์, ์์ปค์ ๋๊ตฌ ์คํ์ด ๊นจ์ง๋ฉด ์๋ฃ ์ ํธ๊ฐ ์์ ์ ์ต๋๋ค. ํ์์์์ "์์ง ์ผํ๋ ์ค"์ผ๋ก ๋๊ธฐ์ง ๋ง๊ณ ํฐ๋ฏธ๋์ ์ค์ ๋ก ์ฝ์ด ํ์ธํ์ธ์. - ์๋ ค์ง ๋ฏธํด๊ฒฐ ์ด์: codex ๋ด๋ถ์์ ๋ณด๋ธ
worker_done์ด ์กฐ์จ์ ์์ ํจ์ ๋๋ฌํ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ํ ๋ฒ ๊ด์ธกํ์ต๋๋ค(CLI๋ ๋ฉ์์ง ID๋ฅผ ๋ฐํ). ์ผ๋ฐ ์ ธ์์ ๋ณด๋ธ ๋ฉ์์ง๋ ์ ์ ๋์ฐฉํ๋ฏ๋ก ๋ฐฐ๋ฌ ์์ฒด๋ ๋ฉ์ฉกํฉ๋๋ค. ์์ธ ๋ฏธํ์ ์ด๋ผ, ์๋ฃ ๋ฉ์์ง๊ฐ ์๋ค๊ณ ๊ฒฐ๊ณผ๊ฐ ์๋ ๊ฒ ์๋๋๋ค โ ์์ปค ํฐ๋ฏธ๋์ ์๋ฃ ํ ํฐ์ด ์ฐํ๋์ง ํ์ธํ๊ณ ๋ฆฌํฌํธ ํ์ผ์ ์ง์ ๊ฑฐ๋์ธ์.
ํฌ๋ง๋ค ๋ค๋ฅธ ๋ชจ๋ธ์ ํ์ธ ์ ์์ต๋๋ค โ ์ค๊ณ๋ ๊ฐํ ๋ชจ๋ธ, ๊ธฐ๊ณ์ ๊ตฌํ์ ์ผ ๋ชจ๋ธ,
๋ฆฌ๋ทฐ๋ ๋ค๋ฅธ ๊ณ์ด ๋ชจ๋ธ. OpenAI ๋ชจ๋ธ๋ผ๋ฆฌ๋ -m๋ง์ผ๋ก ๋๊ณ , ๋น-OpenAI ๋ชจ๋ธ(Kimi, DeepSeek ๋ฑ)์
opencodex ํ๋ก์๊ฐ ํ์์
๋๋ค:
codex 0.146๋ถํฐ wire_api = "chat"์ด ์ ๊ฑฐ๋์ด Responses API๋ง ์ง์ํ๋๋ฐ, ๋๋ถ๋ถ์
์๋ํํฐ API๋ /v1/responses๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค (Moonshot 404 ์ค์ธก).
# ์ค์น (ํ ๋ฒ): ํ๋ก๋ฐ์ด๋ ์ถ๊ฐ ํ restart๋ ํ์์
๋๋ค โ ์ ํ๋ฉด ์กฐ์ฉํ OpenAI๋ก ์๋๋ค
npm i -g @bitkyc08/opencodex && ocx start
ocx provider add moonshot --api-key "$MOONSHOT_API_KEY" && ocx restart && ocx sync
# ์์ปค๋ง๋ค ๋ชจ๋ธ ์ง์ โ LAZYCODEX_CODEX_ARGS๋ก ์ฃผ์
LAZYCODEX_PANE_NAME=worker-arch LAZYCODEX_CODEX_ARGS="-m gpt-5.5 -c mcp_servers={}" \
codex-pane.sh start "..."
LAZYCODEX_PANE_NAME=worker-impl LAZYCODEX_CODEX_ARGS="-m moonshot/kimi-k3 -c mcp_servers={}" \
codex-pane.sh start "..."- ํ๋ก์๋ ์๋์ผ๋ก ์ด์๋ฉ๋๋ค.
start๊ฐ ๋ผ์ฐํ ๋ชจ๋ธ ๋๋ ์ฃผ์ ๋ config๋ฅผ ๊ฐ์งํ๋ฉด ์ฃฝ์ ํ๋ก์๋ฅผ ์์์ ๋์๋๋ค (ocx ensure+ ํฌ์ค ํด๋ง, ์ตํ์ detachedocx start). ๋ค๋ง ํ๋ก์๋ ๋ผ์ฐํ ๋ ํฌ ์ ๋ถ๊ฐ ๊ณต์ ํ๋ ๋จ์ผ ์ฅ์ ์ ์ด๊ณ , ํฌ์ด ์ด์์๋ ๋์ocx stop์ ์ ๋ ๊ธ์ง โ codex ์ค์ ์ ์๋ณต์์ผ ๋ฐ๋ฐ์ ๋นผ๋ฒ๋ฆฝ๋๋ค. - Orca๋
~/.codex/config.toml์ ๊ณ์ ํ์ผ๋ก ๋ณต์ฌํ๋ฉด์ ํ๋ก์ ์ฃผ์ ์ ์ง์๋๋ค. ์ฃผ์ ์ ์์ชฝ ๋ชจ๋:env -u CODEX_HOME ocx sync(์๋ณธ) +ocx sync(๊ณ์ ํ). ๋ผ์ฐํ ์ด ์ด์ํ๋ฉด ๋ config์์openai_base_url๋ถํฐ grep ํ์ธ์. ocx sync --restart-codex๋ ๋จธ์ ์ ๋ชจ๋ codex app-server๋ฅผ ์ฃฝ์ ๋๋ค (ChatGPT.app ํฌํจ). ๋ค๋ฅธ ์ธ์ ์ ๋ผ์ด๋ธ ๋ฐ์ด ์๋์ง ํ์ธํ๊ณ ์ฐ์ธ์.- ๋ผ์ฐํ
๊ฒ์ฆ์
ocx observe logs.moonshot/kimi-k3์ฒ๋ผ ํ๋ก๋ฐ์ด๋ ์ ๋์ด๊ฐ ์ฐํ๋ฉด ์ ์,openai/moonshot/kimi-k3์ฒ๋ผ openai ๋ค์ ๋ถ์ด ๋์ค๋ฉด ํจ์ค์ค๋ฃจ๋ก ์๋ ์ค์ ๋๋ค. ํ๋ก๋ฐ์ด๋ ์ชฝ 429/400์ด ์ฐํ๋ค๋ฉด ๋ผ์ฐํ ์ ์ฑ๊ณต์ด๊ณ ๋ฌธ์ ๋ ์ ์คํธ๋ฆผ(์ฟผํฐ/๊ณผ๊ธ)์ ๋๋ค. - deprecated ๋ชจ๋ธ์ ๋ก์คํฐ์ ๋ฃ์ง ๋ง์ธ์. ์์ ์ ์ ํ ๋ค์ด์ผ๋ก๊ทธ๊ฐ ๋ ์ ๋์คํจ์นํ
ํ๋กฌํํธ๋ฅผ ์ผํต๋๋ค. ๋ค์ด์ผ๋ก๊ทธ ์กฐ์์ ์ซ์ ํ
์คํธ + Enter๊ฐ ๊ฐ์ฅ ์์ ํฉ๋๋ค
(orca ๋ฐฑ์๋
keys์ ํ์ดํ/BSpace ๋งคํ์ด ์ถ๊ฐ๋์ง๋ง, ์ซ์๋ ๋งคํ ๊ณต๋ฐฑ๊ณผ ๋ฌด๊ดํฉ๋๋ค).
์ ์ฒด ์ ์ฐจ์ ์ธ๋ถ ๊ท์น์ SKILL.md์ "Multi-model panes (opencodex)" ์น์
์ ์์ต๋๋ค.
-
SKILL.mdโ Claude๊ฐ ๋ฐ๋ฅด๋ ์งํ ์ ์ฐจ (์ด ํ์ผ์ด ์คํฌ์ ๋๋) -
REFERENCE.mdโ ๋ฐฑ์๋๋ณ pane ์ ์ด, ์๋ฃ ํ ํฐ, ๋ณต๊ตฌ, ๊ฒ์ฆ ๊ฒฝ๊ณ์ ๋ํ ์ธ๋ถ ์ด์ ์ฐธ๊ณ -
scripts/codex-pane.shโ ํฐ๋ฏธ๋ ์นธ์ ์ ์ดํ๋ ์์ ์คํฌ๋ฆฝํธ. tmux/orca/herdr์ ์๋ ๊ฐ์งํ๋ฉฐ, ์ค์ฝํ๋ง๋ค(์ฐฝ/์ํฌํธ๋ฆฌ/ํญ) Codex ์นธ ํ๋๋ง ๊ด๋ฆฌํ๊ณ , ๋ช ๋ฒ์ ํธ์ถํด๋ ์์ (idempotent)ํฉ๋๋ค:codex-pane.sh doctor ์คํ ํ๊ฒฝยทcodexยทLazyCodex ์ค์ ์ ๊ฒ codex-pane.sh start [ํ๋กฌํํธ] ์นธ ๋ง๋ค๊ณ codex ์คํ (์ด๋ฏธ ์์ผ๋ฉด ์ฌ์ฌ์ฉ) codex-pane.sh send "<๊ธ>" codex ์ ๋ ฅ์ฐฝ์ ๋ถ์ฌ๋ฃ๊ณ ์ ์ก codex-pane.sh peek [์ค์] ์ต๊ทผ ์ถ๋ ฅ ๋ณด๊ธฐ (๊ธฐ๋ณธ 60์ค) codex-pane.sh status BUSY(์์ ์ค) | IDLE(๋๊ธฐ) | BLOCKED(herdr) | NO_PANE(์์) codex-pane.sh done-file <์ฌ๋ฌ๊ทธ> ์๋ฃ ํ์ ํ์ผ ๊ฒฝ๋ก ๋ฐ๊ธ (๋ฌต์ ํ์ ์ญ์ ) codex-pane.sh wait-done <์ฌ๋ฌ๊ทธ> โ ์ง์ง ์๋ฃ ์ ํธ โ codex๊ฐ ํ์์ touchํ ๋๊น์ง ๋๊ธฐ codex-pane.sh wait "<ํจํด>" [์ด] ๊ทธ ํจํด์ด ๋์ฌ ๋๊น์ง ๋๊ธฐ (์ง์ ํ์ดํํ ํ ํฐ์ ์ฐ์ง ๋ง ๊ฒ) codex-pane.sh wait-idle [์ด] codex๊ฐ ๋ฉ์ถ ๋๊น์ง ๋๊ธฐ codex-pane.sh keys <ํค...> ํค ์ ๋ ฅ (Escape, Enter, C-c ...) codex-pane.sh focus codex ์นธ์ ํ๋ฉด์ ๋๋ฌ๋ด๊ธฐ (tmux/orca) codex-pane.sh stop codex ์ค๋จํ๊ณ ์นธ ๋ซ๊ธฐ codex-pane.sh backend ํ์ฑ ๋ฐฑ์๋ ์ถ๋ ฅ (tmux | herdr | orca)ํ๊ฒฝ๋ณ์:
LAZYCODEX_BACKEND=tmux|herdr|orca๋ก ๊ฐ์ง๋ฅผ ๋ฎ์ด์ฐ๊ณ ,LAZYCODEX_PANE_NAME=<์ด๋ฆ>์ผ๋ก ์ด๋ฆ๋ณ pane ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ณํ ๊ด๋ฆฌํฉ๋๋ค.
1. ์๋ฃ๋ ํ๋ฉด ๊ธ์๊ฐ ์๋๋ผ ํ์ผ๋ก ํ๋จํฉ๋๋ค. ์์ ๋ฐฉ์(wait "<์๋ฃํ ํฐ>")์ ๊ฑฐ์ง ์๋ฃ๋ฅผ
๋
๋๋ค. codex๋ ๊ธด ํ๋กฌํํธ๋ฅผ ์ฌ๋ฌ ์ค๋ก ๊ฐ์ธ ๋ ๋ํ๋๋ฐ ์ฒซ ์ค์๋ง โบ ์ ๋์ด๊ฐ ๋ถ์ต๋๋ค. ์๋ฃ ํ ํฐ์ด
๋ท์ค์ ๋์ด๋ฉด ์๊ธฐ๊ฐ ๋ฐฉ๊ธ ๋ณด๋ธ ํ๋กฌํํธ์ ์๊ธฐ๊ฐ ๋งค์นญ๋ฉ๋๋ค. ์ค์ธก: ๋์คํจ์น 6์ด ๋ง์ "์๋ฃ" ๋ฐํ,
๊ทธ๋ codex๋ ์์ง ๋ก๋ฉ ์ค์ด๊ณ ๋ณ๊ฒฝ ํ์ผ 0๊ฑด. ์คํฌ์ด "ํ๋กฌํํธ๋ฅผ ์๊ธฐ์๊ฒฐ์ ์ผ๋ก(=๊ธธ๊ฒ) ์ฐ๋ผ"๊ณ ํ๋
๊ถ์ฅ๋๋ก ์ธ์๋ก ํ์คํ ํฐ์ง๋๋ค. ๊ทธ๋์ ์ด์ sentinel ํ์ผ์ ์๋๋ค:
DONE=$(codex-pane.sh done-file auth)
codex-pane.sh start "\$ulw-loop \"...\" --completion-promise=\"LCX_DONE_AUTH\"
When the work is complete and verified, run exactly: touch $DONE"
codex-pane.sh wait-done auth 570 # 0=์๋ฃ | 3=ํ์์์ | 4=pane ์ฃฝ์ํ์ผ์ ํ๋ฉด ์์ฝ๋ก ์์กฐ๋์ง ์๊ณ , TUI ๋ฆฌ๋๋ก์ฐยท์คํฌ๋กค๋ฐฑ์๋ ์์ ํ๋ฉฐ, ๋ฐฑ์๋ ๋ ๋ฆฝ์ ์ ๋๋ค.
2. IDLE์ ์๋ฃ๊ฐ ์๋๋๋ค. status๋ ์ด์ BUSY ์ชฝ์ผ๋ก ํธํฅ๋ผ ์์ต๋๋ค โ ํ๋ฉด์
esc to interrupt, Working (โฆ), Waiting for agents ์ค ํ๋๋ผ๋ ๋ณด์ด๋ฉด ๋ฐฑ์๋ ํ๋ก๋ธ๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
๋น๋์นญ์ด ํต์ฌ์
๋๋ค: ๊ฑฐ์ง BUSY๋ ํด๋ง ํ ๋ฒ ๋ญ๋น์ง๋ง, ๊ฑฐ์ง IDLE์ codex๊ฐ ์ฐ๊ณ ์๋ ํธ๋ฆฌ๋ฅผ ๋ฎ์ด์ฐ๊ฒ
๋ง๋ญ๋๋ค. (orca์ tui-idle์ $ulw-loop๊ฐ ์๋ธ์์ด์ ํธ๋ฅผ ํฌ์์ํ๋ ๋์ idle์ด๋ผ๊ณ ๋ตํฉ๋๋ค โ ํ๋ฉด์ด
๋ง๊ณ ํ๋ก๋ธ๊ฐ ํ๋ฆฝ๋๋ค.)
3. codex ์นธ์ด ์ด์ ์๋ ๋์ ๋ ํฌ ํ์ผ์ ๊ฑด๋๋ฆฌ์ง ๋ง์ธ์. codex๊ฐ ์ํนํธ๋ฆฌ์ ์์ ์์
๋๋ค.
์ค์ ์ฌ๊ณ : ์์
๋์ค ์ฌ์ฉ์๊ฐ ์๊ตฌ์ฌํญ์ ๋ฐ๊ฟ ์ค์ผ์คํธ๋ ์ดํฐ๊ฐ ํ์ผ์ ๊ณ ์ณค๋๋, ์ ์ง์๋ฌธ์ ๋ค๊ณ ์๋
codex๊ฐ ๊ทธ๊ฑธ "์๊ตฌ์ฌํญ ์๋ฐ"์ผ๋ก ๋ณด๊ณ ๋ ๋ฒ ๋๋๋ ธ์ต๋๋ค. codex ์๋ชป์ด ์๋๋ผ stale brief๋ฅผ ์ฑ์คํ
์ํํ ๊ฒฐ๊ณผ์
๋๋ค. ์ปค๋ฐ ์ง์ ์ ๊ฒจ์ฐ ์ก์์ต๋๋ค. ๋ฐฉํฅ์ ๋ฐ๊พธ๋ ค๋ฉด stop โ ํธ์ง โ ์ฌ๋์คํจ์น.
๊ธด ์์
์ ์์ ๊ฒฉ๋ฆฌ๋ ์ฒดํฌ์์(orca worktree create --agent codex)์ ๋งก๊ธฐ๋ ๊ฒ ์์ ํฉ๋๋ค.
start [ํ๋กฌํํธ]๋ ๋จผ์ codexTUI๊ฐ ๋ฐ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ๋ค ํ๋กฌํํธ๋ฅผ ์ ๋ฌํฉ๋๋ค. (orca์์๋ ๋ค์ดํฐ๋ธtui-idle์ ํธ๋ก ๋๊ธฐ) ์ ธ ์ธ์ quoting ๋ฌธ์ ๋ก ๊ธด ์์ฒญ์ด ๊นจ์ง๋ ์ผ์ ์ค์ด๊ธฐ ์ํ ๋ฐฉ์์ ๋๋ค.--completion-promise๋ ๊ณ์ ๋๊ธฐ์ธ์ โ ํ๋ค์ค๊ฐ "๋ ๋๊น์ง" ๋๊ฒ ๋ง๋๋ ์ฅ์น์ ๋๋ค. ๋ค๋ง ๊ทธ๊ฑธ๋ก ์๋ฃ๋ฅผ ๊ฐ์งํ์ง๋ ๋ง์ธ์.- codex๋ ์๋๋ฐ์ค ์์ด ๋๊ณ ํ๋ก์ ํธ env๋ฅผ ์์ํฉ๋๋ค. ํ๋ก๋์ ํฌ๋ ๋ด์ ์ด ์๋ ๋ ํฌ์์ "DB ๊ฑด๋๋ฆฌ์ง ๋ง๋ผ"๋ ํ๋กฌํํธ์ผ ๋ฟ ๊ฐ์ ์ฅ์น๊ฐ ์๋๋๋ค. ๊ทธ๋ฐ ๋ ํฌ์ ๋์คํจ์นํ๊ธฐ ์ ์ ์ฌ์ฉ์์๊ฒ ํ์ธํ๊ณ , ๊ฒฉ๋ฆฌ๋ ์ํฌํธ๋ฆฌ + ๋นํ๋ก๋์ ํฌ๋ ๋ด์ ์ ์ฐ์ธ์.
- Codex๊ฐ ํ ์์ ์ ์ฌ์ฉ์ ํ์ธ ์์ด ์ปค๋ฐํ์ง ์์ต๋๋ค.
- Codex๊ฐ ์ํํ ์์ (ํ์ผ ์ญ์ , ์ค์น, ๋คํธ์ํฌ ๋ฑ)์ ์์ฒญํ๋ฉด ์๋ ์น์ธํ์ง ์๊ณ ์ฌ์ฉ์์๊ฒ ๋ฌผ์ด๋ด ๋๋ค.
- ๊ฐ๋จํ ์ผํ์ฑ Codex ์ง๋ฌธ์ฉ์ ์๋๋๋ค โ ๊ทธ๊ฑด ๊ฐ๋ฒผ์ด
/codex๊ณ์ด ์คํฌ์ ์ฐ์ธ์.
์ด ์ ์ฅ์๋ openai/codex-plugin-cc์ ์ด์ ๋ฐฉ์์ ์ฐธ๊ณ ํ์ต๋๋ค. ํนํ setup/status/result ๊ฐ์ ์์ ๋ช
๋ น์ผ๋ก ์คํ ์ํ๋ฅผ ๋ถ๋ฆฌํ๊ณ , Claude๊ฐ ์ง์ ์ฝ๋๋ฅผ ๋ง์ง๋ ๋์ Codex ์คํ ๊ฒฝ๊ณ์ ๊ฒ์ฆ ๊ฒฝ๊ณ๋ฅผ ๋ช
ํํ ๋๋๋ ํจํด์ ๋ฐ์ํ์ต๋๋ค.
Orca A2A ๋ชจ๋๋ stablyai/orca์ ๊ณต์ orchestration ์คํฌ ์ปจ๋ฒค์
(task-create โ dispatch --inject โ check --wait, worker_done ๊ถ์)์ ๋ฐ๋ฆ
๋๋ค.
@code-yeongyu๋์ LazyCodex ์์ ์น์ ์ค์ผ์คํธ๋ ์ด์ ๋ ์ด์ด์ ๋๋ค. LazyCodex๋ oh-my-openagent (OmO)๋ฅผ Codex์ฉ ์์ด์ ํธ ํ๋ค์ค๋ก ํจํค์งํ ํ๋ก์ ํธ์ ๋๋ค. ์ด ์คํฌ์ ๋ ๋ฆฝ์ ์ธ ์งํ ๋ ์ด์ด์ด๋ฉฐ ์ ํ๋ก์ ํธ๋ค๊ณผ ๊ณต์ ์ ํด ๊ด๊ณ๋ ์์ต๋๋ค.
MIT โ LICENSE ์ฐธ๊ณ .