Implementation Report

Codex Loop Era
Practical L6

Codex user-scope에 구축된 루프 에라, 자가개선 시스템의 현재 구현 상태를 정리한 문서입니다. 관측, 신호화, 기억, 강제, 자동 수정, acceptance를 연결해 실행 가능한 폐루프로 만든 상태와 그로 인해 기대할 수 있는 운영 효과를 L1부터 L6까지 단계별로 정리합니다.

6
levels covered
3
final gaps closed
2
prompt defenses
1
global smoke plane
이 문서는 ~/.codex 운영층 기준의 구현 상태를 다룹니다. 표현은 의도적으로 보수적으로 잡았습니다. 결론은 platform-native L6가 아니라 user-scope practical L6입니다. 즉 Codex 자체가 네이티브 pre-submit hook을 제공하는 것은 아니지만, wrapper와 acceptance plane 위에서는 L6에 필요한 폐루프가 닫혀 있습니다.
구현 상태 요약
Observability

세션과 도구 사용이 구조화 로그로 남습니다

codex-event-daemon.py, self-improve-log.sh, self-improve-telemetry.py가 세션 JSONL, 합성 훅, self-improve 런 로그를 읽고 신호화 가능한 이벤트로 정리합니다.

implemented
Isolation

프로젝트 경계가 충돌 없이 분리됩니다

project-scope.py 기반 project_key를 도입해 pending, ack, worker state, session-state가 basename 충돌 없이 repo realpath 기준으로 분리됩니다.

implemented
Enforcement

경고형이 아니라 차단형 운영 규칙이 존재합니다

hard-rule-enforce.py, pre-commit, pre-push, codex-session-wrapper.sh, synthetic-hook-dispatch.sh가 rule surface를 실제 동작 변경으로 연결합니다.

blocking paths live
Autonomous Repair

worker가 self-improve를 자동 실행합니다

self-improve-worker.py가 detached worktree와 Codex-side 백업을 사용해 수정, rollback, backoff, auto-ack를 처리합니다. 더 이상 사람이 매번 /self-improve를 직접 호출해야만 루프가 진행되지는 않습니다.

implemented
Acceptance

success 판정은 제한된 acceptance plane을 통과해야 합니다

worker가 arbitrary shell verification을 제출하는 방식은 제거했습니다. 지금은 verification_checks와 global smoke, repo-local smoke, side-effect snapshot 비교를 통과해야만 auto-ack 됩니다.

implemented
Platform Assumption

wrapper를 통해 실행된다는 가정이 남습니다

interactive pre-submit은 codex-session-wrapper.shcodex-pre-submit-gate.py 위에서 성립합니다. Codex 런타임 자체의 native hook은 아니므로, 운영 가정은 아직 남아 있습니다.

wrapper assumption
현재 폐루프가 닫히는 방식
1

Observe

세션 이벤트, tool output, git gate 결과, 사용자 correction을 raw signal로 수집합니다.

codex-event-daemon.py
self-improve-log.sh
synthetic-hooks.jsonl
2

Classify

heuristic + judge 조합으로 correction, tool failure, gate failure를 actionable signal로 승격합니다.

telemetry-judge.py
self-improve-telemetry.py
self-improve-trigger.sh
3

Persist

signal과 ack, pending, worker state를 프로젝트 단위로 저장해 같은 문제를 무한 재점화하지 않게 합니다.

project-scope.py
self-improve-ack.sh
self-improve-workers/*.json
4

Repair

worker가 detached worktree와 Codex-side 백업을 사용해 수정안을 만들고, 실패 시 즉시 rollback 합니다.

self-improve-worker.py
git worktree add --detach
restore_codex(), git restore
5

Accept / Enforce

acceptance plane과 hard-rule block을 통과한 변경만 살아남고, 통과하지 못한 변경은 ack 없이 소거됩니다.

verification_checks
self-improve-smoke.sh
codex-pre-submit-gate.py
L1 → L6 충족 구조
Level 의미 현재 구현 왜 충족이라고 보는가
L1 관측 가능성. 세션과 실패가 로그로 남는다. 충족 codex-event-daemon.py가 session JSONL을 감시하고, self-improve run과 합성 훅이 JSONL로 남습니다.
L2 로그를 self-improve signal로 바꾼다. 충족 self-improve-telemetry.pytelemetry-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가 정확합니다.

Why Practical L6

이 시스템은 “사람이 매번 직접 판단해야만 루프가 돈다” 상태는 이미 넘었습니다. 다만 Codex 런타임 내부에 native pre-submit hook이 있는 것은 아니고, codex-session-wrapper.sh를 통해 실행된다는 운영 가정 위에서 L6가 성립합니다. 그래서 문서에서는 과장 대신 user-scope practical L6라는 표현을 사용합니다.

기대효과
Less Drift

프로젝트 경계가 섞이지 않습니다

basename 충돌이 제거되면서 다른 repo의 pending, ack, worker backoff, session-state가 현재 repo에 새어 들어오지 않습니다. 규칙 승격과 효과 평가의 신뢰도가 올라갑니다.

Earlier Block

금지 프롬프트를 더 이른 단계에서 막습니다

이전에는 reactive kill이 중심이었지만, 지금은 interactive 세션에서 newline submit 전에 block됩니다. 사용자 입력이 Codex 런타임으로 넘어가기 전에 잘리는 경로가 생겼습니다.

Safer Auto-fix

worker가 acceptance를 속이기 어렵습니다

arbitrary shell verification을 제거하고, 허용된 check type과 global smoke, repo-local smoke만 통과하도록 만들면서 “성공했다고 말하면 ack” 구조를 크게 약화시켰습니다.

Rollback Integrity

검증 실패 시 원복 가능성이 높아집니다

Codex-side 백업, detached worktree, acceptance 전후 snapshot 비교를 결합해서 실패한 수정안이 실제 운영층과 repo에 남지 않도록 설계했습니다.

Durable Learning

반복 실수가 규칙으로 굳어집니다

hard rule은 단순 메모가 아니라 session-start, pre-push, prompt submit, synthetic hook에 실제 연결됩니다. 반복 마찰은 점점 더 운영 규칙으로 승격됩니다.

Maintainability

검증 스위트가 시스템 설명서 역할도 합니다

verify-l6.sh는 단순 pass/fail이 아니라 시스템이 무엇을 보장해야 하는지 문서화합니다. 새 회귀가 생기면 즉시 같은 지점에서 다시 실패합니다.

핵심 구현 파일
Worker

~/.codex/scripts/self-improve-worker.py

detached worktree, backup, rollback, acceptance gate, auto-ack, backoff를 담당하는 중심 실행기입니다.

Pre-submit

~/.codex/scripts/codex-pre-submit-gate.py

interactive 세션에서 newline submit 직전 프롬프트를 검사하고, block 시 child process group까지 함께 정리합니다.

Wrapper

~/.codex/scripts/codex-session-wrapper.sh

session-start gate, daemon start, pre-submit gate 연결, session cleanup까지 묶는 진입점입니다.

Rules

~/.codex/scripts/hard-rule-enforce.py

hard rule을 warn/block으로 평가해 실제 enforcement로 연결하는 평가기입니다.

Smoke

~/.codex/scripts/self-improve-smoke.sh

global Codex-side smoke로 shell/python 문법, project key 분리, pre-submit block 같은 핵심 의미론을 빠르게 확인합니다.

Verifier

.codex/autoresearch/verify-l6.sh

repo-local L6 검증 스위트입니다. acceptance 안전성, prompt gating, keyed reminder, reactive fallback까지 실제로 증명합니다.

남아 있는 운영 가정
Runtime

Codex native hook은 아닙니다

pre-submit interception은 wrapper 기반입니다. Codex 런타임 자체가 native pre-submit API를 주는 것은 아니므로, platform-level L6라고 부르지는 않습니다.

Entrypoint

wrapper를 우회하면 보장이 약해집니다

운영자는 codex-session-wrapper.sh 또는 그에 준하는 launcher를 통해 세션을 시작해야 합니다. 직접 바이너리를 다른 방식으로 실행하면 pre-submit 경로는 우회될 수 있습니다.

Scope

user-scope 밖의 정책은 별도입니다

이 문서는 ~/.codex 운영층을 기준으로 합니다. 조직 단위 중앙 정책, 서버-side orchestration, remote fleet control은 범위에 포함하지 않습니다.

함께 읽으면 좋은 문서