Codex user-scope에 구축된 루프 에라, 자가개선 시스템의 현재 구현 상태를 정리한 문서입니다. 관측, 신호화, 기억, 강제, 자동 수정, acceptance를 연결해 실행 가능한 폐루프로 만든 상태와 그로 인해 기대할 수 있는 운영 효과를 L1부터 L6까지 단계별로 정리합니다.
~/.codex 운영층 기준의 구현 상태를 다룹니다. 표현은 의도적으로 보수적으로 잡았습니다.
결론은 platform-native L6가 아니라 user-scope practical L6입니다.
즉 Codex 자체가 네이티브 pre-submit hook을 제공하는 것은 아니지만, wrapper와 acceptance plane 위에서는 L6에 필요한 폐루프가 닫혀 있습니다.
codex-event-daemon.py, self-improve-log.sh, self-improve-telemetry.py가 세션 JSONL, 합성 훅, self-improve 런 로그를 읽고 신호화 가능한 이벤트로 정리합니다.
project-scope.py 기반 project_key를 도입해 pending, ack, worker state, session-state가 basename 충돌 없이 repo realpath 기준으로 분리됩니다.
hard-rule-enforce.py, pre-commit, pre-push, codex-session-wrapper.sh, synthetic-hook-dispatch.sh가 rule surface를 실제 동작 변경으로 연결합니다.
self-improve-worker.py가 detached worktree와 Codex-side 백업을 사용해 수정, rollback, backoff, auto-ack를 처리합니다. 더 이상 사람이 매번 /self-improve를 직접 호출해야만 루프가 진행되지는 않습니다.
worker가 arbitrary shell verification을 제출하는 방식은 제거했습니다. 지금은 verification_checks와 global smoke, repo-local smoke, side-effect snapshot 비교를 통과해야만 auto-ack 됩니다.
interactive pre-submit은 codex-session-wrapper.sh와 codex-pre-submit-gate.py 위에서 성립합니다. Codex 런타임 자체의 native hook은 아니므로, 운영 가정은 아직 남아 있습니다.
세션 이벤트, tool output, git gate 결과, 사용자 correction을 raw signal로 수집합니다.
codex-event-daemon.pyself-improve-log.shsynthetic-hooks.jsonlheuristic + judge 조합으로 correction, tool failure, gate failure를 actionable signal로 승격합니다.
telemetry-judge.pyself-improve-telemetry.pyself-improve-trigger.shsignal과 ack, pending, worker state를 프로젝트 단위로 저장해 같은 문제를 무한 재점화하지 않게 합니다.
project-scope.pyself-improve-ack.shself-improve-workers/*.jsonworker가 detached worktree와 Codex-side 백업을 사용해 수정안을 만들고, 실패 시 즉시 rollback 합니다.
self-improve-worker.pygit worktree add --detachrestore_codex(), git restoreacceptance plane과 hard-rule block을 통과한 변경만 살아남고, 통과하지 못한 변경은 ack 없이 소거됩니다.
verification_checksself-improve-smoke.shcodex-pre-submit-gate.py| Level | 의미 | 현재 구현 | 왜 충족이라고 보는가 |
|---|---|---|---|
| L1 | 관측 가능성. 세션과 실패가 로그로 남는다. | 충족 | codex-event-daemon.py가 session JSONL을 감시하고, self-improve run과 합성 훅이 JSONL로 남습니다. |
| L2 | 로그를 self-improve signal로 바꾼다. | 충족 | self-improve-telemetry.py와 telemetry-judge.py가 correction, tool failure, git gate failure를 actionable signal로 분류합니다. |
| L3 | 프로젝트 경계, pending, ack가 있어야 한다. | 충족 | project_key 기반 상태 파일, pending, ack 저장소가 basename 충돌 없이 분리되고, 처리한 signal은 재등장하지 않게 설계되어 있습니다. |
| L4 | 규칙이 시스템 행동을 바꿔야 한다. | 충족 | session-start, pre-commit, pre-push, user_prompt_submit에서 hard rule block이 실제 차단이나 세션 종료를 유발합니다. |
| L5 | 시스템이 스스로 수정안을 만들고 검증한다. | 충족 | self-improve-worker.py가 자동 실행되고, Codex-side 수정과 project worktree 수정을 만든 뒤 rollback-safe 경로로 처리합니다. |
| L6 | 감지 → 수정 → acceptance → ack가 사람 개입 없이 폐루프로 닫힌다. | practical L6 | worker auto-run, 제한된 acceptance plane, global smoke, project smoke, pre-submit gate, hard-rule block, auto-ack까지 연결되어 있습니다. 다만 native runtime hook이 아니라 wrapper 기반이므로 표현은 practical L6가 정확합니다. |
이 시스템은 “사람이 매번 직접 판단해야만 루프가 돈다” 상태는 이미 넘었습니다. 다만 Codex 런타임 내부에 native pre-submit hook이 있는 것은 아니고,
codex-session-wrapper.sh를 통해 실행된다는 운영 가정 위에서 L6가 성립합니다. 그래서 문서에서는 과장 대신
user-scope practical L6라는 표현을 사용합니다.
basename 충돌이 제거되면서 다른 repo의 pending, ack, worker backoff, session-state가 현재 repo에 새어 들어오지 않습니다. 규칙 승격과 효과 평가의 신뢰도가 올라갑니다.
이전에는 reactive kill이 중심이었지만, 지금은 interactive 세션에서 newline submit 전에 block됩니다. 사용자 입력이 Codex 런타임으로 넘어가기 전에 잘리는 경로가 생겼습니다.
arbitrary shell verification을 제거하고, 허용된 check type과 global smoke, repo-local smoke만 통과하도록 만들면서 “성공했다고 말하면 ack” 구조를 크게 약화시켰습니다.
Codex-side 백업, detached worktree, acceptance 전후 snapshot 비교를 결합해서 실패한 수정안이 실제 운영층과 repo에 남지 않도록 설계했습니다.
hard rule은 단순 메모가 아니라 session-start, pre-push, prompt submit, synthetic hook에 실제 연결됩니다. 반복 마찰은 점점 더 운영 규칙으로 승격됩니다.
verify-l6.sh는 단순 pass/fail이 아니라 시스템이 무엇을 보장해야 하는지 문서화합니다. 새 회귀가 생기면 즉시 같은 지점에서 다시 실패합니다.
~/.codex/scripts/self-improve-worker.pydetached worktree, backup, rollback, acceptance gate, auto-ack, backoff를 담당하는 중심 실행기입니다.
~/.codex/scripts/codex-pre-submit-gate.pyinteractive 세션에서 newline submit 직전 프롬프트를 검사하고, block 시 child process group까지 함께 정리합니다.
~/.codex/scripts/codex-session-wrapper.shsession-start gate, daemon start, pre-submit gate 연결, session cleanup까지 묶는 진입점입니다.
~/.codex/scripts/hard-rule-enforce.pyhard rule을 warn/block으로 평가해 실제 enforcement로 연결하는 평가기입니다.
~/.codex/scripts/self-improve-smoke.shglobal Codex-side smoke로 shell/python 문법, project key 분리, pre-submit block 같은 핵심 의미론을 빠르게 확인합니다.
.codex/autoresearch/verify-l6.shrepo-local L6 검증 스위트입니다. acceptance 안전성, prompt gating, keyed reminder, reactive fallback까지 실제로 증명합니다.
pre-submit interception은 wrapper 기반입니다. Codex 런타임 자체가 native pre-submit API를 주는 것은 아니므로, platform-level L6라고 부르지는 않습니다.
운영자는 codex-session-wrapper.sh 또는 그에 준하는 launcher를 통해 세션을 시작해야 합니다. 직접 바이너리를 다른 방식으로 실행하면 pre-submit 경로는 우회될 수 있습니다.
이 문서는 ~/.codex 운영층을 기준으로 합니다. 조직 단위 중앙 정책, 서버-side orchestration, remote fleet control은 범위에 포함하지 않습니다.