Codex/OMX Port Log · Team x Init-Project
Claude Code에서 5개월간 다듬어 온 운영 틀(하네스, harness — AI가 규칙을 건너뛰거나 '다 했다'고 거짓 보고를 못 하게 검증 절차를 강제로 씌우는 장치)은 Claude Code 안에서만 돌았다. 그래서 이 틀을 오픈AI의 코딩 에이전트 Codex와, Codex 위에 얹어 쓰는 플러그인 실행기 omx의 방식에 맞춰 그대로 옮겼다. omx는 명령 이름이라 소문자로 쓴다. 이 글의 제목 위 표시와 표에서 대문자로 적은 것도 같은 도구다. 이 글은 그 이식 기록이다. 결과부터 말하면 옮긴 쪽이 더 강해졌다. 어기면 작업이 막히는 훅(hook — 정해진 순간마다 자동으로 끼어들어 검사하는 작은 프로그램)이 Claude Code 쪽은 15개인데 Codex 쪽은 31개다. 중심은 두 개의 명령이다. $init-project은 프로젝트를 처음 분석해 그 코드에만 있는 고유한 성질과 반드시 지켜야 할 작업 규칙(계약, contract)을 만든다. 이 고유한 성질(코드마다 다른 특성을 생물의 유전자에 빗댄 말)을 이 글에서 부르는 이름이 프로젝트 DNA. $team은 여러 AI 일꾼(에이전트, agent — 역할 하나를 맡아 스스로 도구를 쓰며 일하는 AI 실행 단위)을 동시에 굴리는 명령이다. 요구사항이 실제로 충족됐는지 검사하는 QA(품질 검증)와, 작업 성격에 맞춰 실행 방식을 바꾸는 판단으로 전체를 조율한다. 미리 만들어 둔 일반 템플릿은 하나도 쓰지 않았다(0개). 모든 규칙은 실제 코드에서 뽑아낸다.
~/.claude/skills/init-project/SKILL.md — 2026-06-11~/.claude/skills/team/SKILL.md — 2026-06-11~/.claude/commands/team.md — 2026-06-10~/.claude/agents/team-orchestrator.md — 2026-06-10~/.codex/skills/init-project/SKILL.md — 여러 단계(분석 → 팀 실행 → QA)를 하나로 잇는 작업 흐름을 명시하도록 보강했다~/.codex/skills/team/SKILL.md — 요구사항 충족 여부를 검사하는 QA와, 작업 종류를 먼저 분류해 알맞게 처리하는 방식을 반영했다~/.codex/skills/harness-report/SKILL.md / harness-scorecard — 실제 실행 증거와 업그레이드 점검을 서로 연결했다~/.codex/prompts/team-orchestrator.md — 실행 전 반드시 통과해야 하는 사전 점검(preflight)을 주입했다~/.codex/agents/team-orchestrator.toml — Claude에서만 돌도록 묶여 있던 설정을 제거했다$team 은 구현 단계로 들어가지 못하고 막힌다.qa-evidence.json이라는 증거 파일(QA 결과를 기록하는 파일) 속 acceptance_verified[] 목록(요구사항 하나하나가 실제로 충족됐는지 적는 항목)이 '통과(pass)' 판정의 진짜 기준이다. 요구사항을 실제로 충족했다는 증거만 인정한다harness-report → harness-scorecard → harness-upgrade-audit → $team preflight hard edge.codex/.omx 폴더 아래의 저장 파일, 그리고 '통과 못 하면 막는' 검증 명령으로 같은 목적을 지켰다.HARD hooksHTTP hooksVSOMX WINNERHARD hooksSOFT rulesapproval_policy=never
.omx/state/ 폴더에 작업 상태를 저장해 세션(대화 한 번의 단위)이 바뀌어도 이어간다${CLAUDE_PLUGIN_ROOT} 변수(플러그인이 설치된 폴더 경로를 담는 환경 변수)가 플러그인 설치 위치를 자동으로 찾아준다Claude Code를 이루는 세 가지인 commands + hooks + agents(명령·훅·에이전트)를, Codex에서는 skills + native agents + OMX plugin runtime + project hooks라는 네 가지(스킬·기본 내장 에이전트·플러그인 실행기·프로젝트 훅)로 바꿔 옮긴 전체 그림이다. 이름만 다를 뿐 하는 일은 같다.
OMX/team, /init-project, slash commandsCLAUDE.md, custom commands, learned rulesCODEX.md, .codex/rules, project-local skills, wiki/notepad memorymemory-bank plugin (auto inject via UserPromptSubmit hook)hooks.json 강제 훅(hard hook)으로 연결한다. 같은 SQLite 데이터베이스를 공유하고, 버전이 바뀌어도 맞는 경로를 자동으로 찾는다HUD, team status, question rendererhooks/hooks.json 파일에 적어 두면 플러그인 시스템이 알아서 불러온다~/.codex/hooks.json에 직접 손으로 등록한다. Codex에는 플러그인 시스템이 없기 때문이다${CLAUDE_PLUGIN_ROOT} 변수가 플러그인 위치를 자동으로 찾아준다sort -V | tail -1 명령(버전 번호 순으로 정렬해 마지막 것을 고르는 셸 명령)으로 가장 최신 버전 폴더를 자동으로 찾는다mcp__plugin_memory-bank_*)config.toml [mcp_servers.memory_bank] 에 등록하고, 짧은 스크립트로 감싸 실행한다inject-context.sh, fact-extract-hook.js, sync-*.js~/.codex/hooks/memory-bank/*.sh가 감싸서 부른다~/.config/superpowers/conversation-index/db.sqliteCLAUDE_PLUGIN_ROOT 경로가 자동으로 갱신된다ls ... | sort -V | tail -1 명령 덕분에 새 버전을 깔면 자동으로 최신 경로를 쓴다settings.json 안에 들어 있다~/.codex/hooks.json + hooks/memory-bank/*.sh + config.toml 이 세 가지가 동기화 대상이다DNACODEX.md + .codex/rules generationhard-process-contract.json + team-handoff.jsonOMX workflow classify-and-act.omx/state shared root$qa-scenario-gen (inventory → contracts)$qa-cycle (build → test → evidence)acceptance_verified[] required for user-facing PASS.qa-cycle-passed (hash verified)ACK → claim-task → transition-statussend-keysCLI/state > direct pane inputOMX Plugin RuntimeHUD + question rendererHARD)UserPromptSubmit 훅이 프롬프트를 넣을 때마다 관련 기억을 자동으로 넣어 준다SessionStart hook → sync + fact consolidationStop hook → fact extraction + exportsearch, search_facts, explore_graph, ask_avatarsort -V | tail -1)leader — control, context, verificationexecutor — implement, Read/Write/Edit/Bashexplore — file/symbol, Read/Grep/Glob onlyverifier — lint/test, Read/Bash/Grep, no Writeplanner — PRD, spec, tradeoffsresearcher — docs, deps, external, no WriteTOML file per agent (model + reasoning effort)