Implementation Report

Codex Loop Era
Practical L6

이 글은 Codex(OpenAI가 만든 코딩용 AI 도구)를 내 컴퓨터의 개인 설정 폴더에 얹어 만든 '자가개선 시스템'의 지금 상태를 정리한 문서입니다. 자가개선이란 AI가 자기 실수를 스스로 찾아 고치는 반복 장치를 뜻합니다. 이 시스템은 실수를 지켜보고(관측), 문제로 골라 표시하고(신호화), 기록해 두고(기억), 규칙으로 막고(강제), 스스로 고치고(자동 수정), 고친 결과가 진짜 맞는지 합격 판정하는(acceptance) 여섯 단계를 하나로 연결해 사람이 끼어들지 않아도 스스로 도는 순환 고리(폐루프)로 만든 상태, 그리고 그렇게 해서 실제 운영에서 무엇이 좋아지는지를 자동화 성숙도 1단계(L1)부터 6단계(L6)까지 차례로 설명합니다.

6
levels covered
3
final gaps closed
2
prompt defenses
1
global smoke plane
이 문서가 다루는 범위는 내 컴퓨터의 개인 설정 폴더인 ~/.codex 안에 만든 운영 장치입니다. 표현은 일부러 과장 없이 보수적으로 골랐습니다. 결론부터 말하면 이것은 Codex가 원래부터 완전히 제공하는 6단계(platform-native L6)가 아니라, 내 개인 설정 위에 덧대어 실질적으로 6단계를 달성한 상태(user-scope practical L6)입니다. 즉 Codex 자체에는 입력을 보내기 직전에 끼어드는 기본 검문 장치(native pre-submit hook)가 없지만, 실행을 감싸는 껍데기 스크립트(wrapper)와 합격 판정 계층(acceptance plane) 위에서는 6단계에 필요한 순환 고리가 사람 손 없이 닫혀 있습니다.
구현 상태 요약
Observability

세션과 도구 사용 기록이 정리된 로그로 남습니다

codex-event-daemon.py, self-improve-log.sh, self-improve-telemetry.py라는 세 스크립트가, 세션 기록 파일(JSONL, 한 줄에 기록 하나씩 쌓는 형식), 원래 도구엔 없어 흉내 내 끼워 넣은 검문 지점(합성 훅), 자가개선 실행 로그를 읽어들여, 나중에 문제로 골라낼 수 있는 이벤트로 정리합니다.

implemented
Isolation

여러 프로젝트가 서로 부딪히지 않고 분리됩니다

project-scope.py 를 바탕으로 한 project_key를 도입했습니다. 이 프로젝트 구분 키 덕분에, 처리 대기 목록(pending)·처리 완료 표시(ack)·일꾼 상태·세션 상태가, 파일 이름이 같아 뒤섞이는 충돌(basename 충돌) 없이 저장소의 실제 경로를 기준으로 깔끔하게 나뉩니다.

implemented
Enforcement

규칙을 어기면 경고에 그치지 않고 실제로 막습니다

hard-rule-enforce.py, pre-commit, pre-push, codex-session-wrapper.sh, synthetic-hook-dispatch.sh라는 스크립트와 검문 지점들이, 글로만 적혀 있던 규칙을 실제로 동작을 바꾸는 힘으로 연결합니다. 그래서 규칙을 어기면 커밋이나 푸시가 실제로 막힙니다.

blocking paths live
Autonomous Repair

작업 일꾼이 자가개선을 사람 없이 스스로 돌립니다

self-improve-worker.py라는 일꾼이, 본체와 떼어 낸 별도 작업 폴더(detached worktree)와 Codex 설정 쪽 백업을 써서 고치기·되돌리기(rollback)·실패하면 잠시 쉬었다 재시도(backoff)·자동 완료 처리(auto-ack)를 알아서 합니다. 이제는 사람이 매번 /self-improve명령을 직접 쳐 줘야만 루프가 도는 것이 아닙니다.

implemented
Acceptance

'성공'으로 인정받으려면 정해진 합격 판정 관문을 통과해야 합니다

예전에는 일꾼이 '아무 셸 명령이나 돌려 보니 되더라'라며 제멋대로 검증을 우겨 넣을 수 있었는데, 그 방식을 없앴습니다. 지금은 verification_checks라는 미리 허용된 검증 항목과, 전체 공용·저장소 전용 빠른 점검(smoke, 핵심 기능이 최소한 도는지 훑는 검사), 그리고 수정 전후 시스템 상태를 찍어 비교하는 절차를 모두 통과해야만 자동으로 완료 처리됩니다.

implemented
Platform Assumption

'껍데기 스크립트를 거쳐 실행된다'는 전제가 아직 남아 있습니다

대화 도중 입력을 보내기 직전에 검문하는 기능은 codex-session-wrapper.sh라는 껍데기 스크립트와 codex-pre-submit-gate.py 라는 검문기 위에서만 작동합니다. Codex 프로그램 자체가 기본으로 제공하는 장치는 아니라서, '이 껍데기를 꼭 거쳐야 한다'는 운영상의 전제가 남습니다.

wrapper assumption
이 순환 고리(폐루프)가 지금 어떻게 닫히는가
1

Observe

첫 단계는 '지켜보기'입니다. 세션에서 일어난 일, 도구 실행 결과, git 검문(코드를 저장·전송하기 전 통과해야 하는 관문) 결과, 그리고 사용자가 '그거 아니야'라고 고쳐 준 정정을 아직 가공하지 않은 날것의 신호로 모읍니다.

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

Classify

두 번째 단계는 '분류'입니다. 규칙 기반 판별과 AI 판정관(judge)을 함께 써서, 사용자 정정·도구 실패·검문 실패 중에서 실제로 손볼 만한 신호만 골라 올립니다.

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

Persist

세 번째 단계는 '기록'입니다. 신호와 처리 완료 표시(ack), 처리 대기 목록(pending), 일꾼 상태를 프로젝트별로 따로 저장해, 이미 다룬 문제가 끝없이 다시 불붙지 않게 합니다.

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

Repair

네 번째 단계는 '수정'입니다. 뒤에서 도는 작업 일꾼(worker)이 본체와 떼어 낸 별도 작업 폴더와 Codex 설정 쪽 백업을 써서 수정안을 만들고, 잘못되면 즉시 원래대로 되돌립니다(rollback).

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

Accept / Enforce

다섯 번째 단계는 '합격 판정과 강제'입니다. 합격 판정 관문과 강제 규칙 검문을 통과한 변경만 살아남고, 통과하지 못한 변경은 완료 처리 없이 지워집니다.

verification_checks
self-improve-smoke.sh
codex-pre-submit-gate.py
1단계(L1)부터 6단계(L6)까지 어떻게 채우는가
Level 의미 현재 구현 왜 충족이라고 보는가
L1 지켜볼 수 있는가. 세션에서 일어난 일과 실패가 기록으로 남아야 한다. 충족 codex-event-daemon.py가 세션 기록 파일을 실시간으로 지켜보고, 자가개선 실행과 흉내 낸 검문 지점(합성 훅)도 모두 한 줄씩 쌓는 로그 파일로 남습니다.
L2 쌓인 로그를 '고칠 거리' 신호로 바꾼다. 충족 self-improve-telemetry.py telemetry-judge.py가 사용자 정정, 도구 실패, git 검문 실패를 실제로 손볼 수 있는 신호로 분류합니다.
L3 프로젝트를 서로 구분하고, 처리 대기 목록(pending)과 완료 표시(ack)가 있어야 한다. 충족 project_key 라는 구분 키를 기준으로 상태 파일과 대기·완료 저장소가 파일 이름 충돌 없이 나뉘고, 한 번 처리한 신호는 다시 튀어나오지 않도록 설계돼 있습니다.
L4 규칙이 말뿐이 아니라 실제 동작을 바꿔야 한다. 충족 session-start, pre-commit, pre-push, user_prompt_submit같은 시점에서 강제 규칙(hard rule)이 실제로 작업을 막거나 세션을 끝내 버립니다.
L5 시스템이 사람 없이 스스로 수정안을 만들고 스스로 검증한다. 충족 self-improve-worker.py가 스스로 실행돼, Codex 설정 쪽 수정과 프로젝트 작업 폴더 쪽 수정을 만든 다음, 잘못되면 안전하게 되돌릴 수 있는 방식(rollback)으로 처리합니다.
L6 문제 감지 → 수정 → 합격 판정(acceptance) → 완료 표시(ack)가 사람 손 없이 하나의 순환 고리로 닫힌다. practical L6 일꾼 자동 실행, 정해진 합격 판정 관문, 전체 공용·프로젝트 전용 빠른 점검(smoke), 입력 직전 검문, 강제 규칙 차단, 자동 완료 처리까지 전부 이어져 있습니다. 다만 Codex가 기본으로 제공하는 장치가 아니라 실행을 감싸는 껍데기 위에서 돌아가므로, 정확한 표현은 '도구가 통째로 제공하는 6단계'가 아니라 '내 설정 위에서 실질적으로 달성한 6단계', 즉 practical L6입니다.

Why Practical L6

이 시스템은 '사람이 매번 직접 판단해야만 루프가 도는' 단계는 이미 넘어섰습니다. 다만 Codex 프로그램 안에 입력 직전 검문 장치가 기본으로 들어 있는 것은 아니고, codex-session-wrapper.sh라는 껍데기 스크립트를 거쳐 실행된다는 전제 위에서 6단계가 성립합니다. 그래서 이 글에서는 부풀리지 않고 user-scope practical L6라는 표현을 씁니다.

기대효과
Less Drift

여러 프로젝트가 서로 섞이지 않습니다

파일 이름이 같아 뒤섞이던 충돌이 사라지면서, 다른 저장소의 대기 목록·완료 표시·일꾼 재시도 기록·세션 상태가 지금 저장소로 새어 들어오지 않습니다. 그 덕분에 어떤 규칙을 정식 규칙으로 올릴지, 개선 효과가 얼마나 되는지 판단할 때 믿을 수 있는 수치가 나옵니다.

Earlier Block

금지된 입력을 더 앞 단계에서 막습니다

예전에는 일이 벌어진 뒤에 세션을 강제로 죽이는 사후 대응(reactive kill)이 중심이었습니다. 지금은 대화 중 엔터로 입력을 보내는 순간, 바로 그 직전에 걸러 냅니다. 사용자 입력이 Codex로 넘어가기 전에 잘리는 길이 생긴 것입니다.

Safer Auto-fix

일꾼이 합격 판정을 속이기 어렵습니다

'아무 명령이나 돌려 보고 되더라'는 식의 임의 검증을 없앴습니다. 미리 허용된 검증 유형과 전체 공용·저장소 전용 빠른 점검(smoke)만 통과하도록 바꿔서, '성공했다고 말만 하면 완료 처리되던' 허점을 크게 줄였습니다.

Rollback Integrity

검증에 실패하면 되돌릴 여지가 커집니다

Codex 설정 쪽 백업, 본체와 떼어 낸 별도 작업 폴더, 그리고 합격 판정 전후로 시스템 상태를 찍어 비교하는 절차를 함께 써서, 실패한 수정안이 실제 운영 설정과 저장소에 남지 않도록 설계했습니다.

Durable Learning

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

강제 규칙은 그냥 적어 둔 메모가 아니라 세션 시작·푸시 직전·입력 전송·흉내 낸 검문 지점(synthetic hook)에 실제로 연결됩니다. 그래서 같은 실수가 반복될수록 점점 더 강한 운영 규칙으로 굳어집니다.

Maintainability

검증 모음이 시스템 설명서 역할도 합니다

verify-l6.sh는 단순히 통과·실패만 알려 주는 게 아니라, 이 시스템이 무엇을 보장해야 하는지를 항목별로 적어 둔 문서 역할도 합니다. 고쳤던 것이 다시 망가지면(회귀), 바로 그 지점에서 곧장 다시 실패로 잡힙니다.

핵심 구현 파일
Worker

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

본체와 떼어 낸 별도 작업 폴더, 백업, 되돌리기(rollback), 합격 판정 관문, 자동 완료 처리, 실패 시 잠시 쉬었다 재시도(backoff)를 모두 맡는 중심 실행기입니다.

Pre-submit

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

대화형 세션에서 엔터로 입력을 보내기 직전에 그 프롬프트를 검사하고, 차단해야 할 때는 그 입력이 띄운 자식 프로세스 무리까지 같이 정리합니다.

Wrapper

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

세션 시작 검문, 백그라운드 감시 프로세스(daemon) 기동, 입력 직전 검문 연결, 세션 종료 정리까지 하나로 묶는 시작 지점입니다.

Rules

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

강제 규칙을 '경고'와 '차단' 중 어느 쪽인지 판정해, 말뿐인 규칙을 실제 강제로 연결하는 판정기입니다.

Smoke

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

전체 공용 빠른 점검(smoke)으로, 셸·파이썬 문법이 멀쩡한지, 프로젝트 구분이 제대로 되는지, 입력 직전 차단이 작동하는지 같은 핵심 동작을 빠르게 확인합니다.

Verifier

.codex/autoresearch/verify-l6.sh

이 저장소 전용 6단계 검증 모음입니다. 합격 판정이 안전한지, 입력 검문이 작동하는지, 프로젝트별로 구분된 알림이 제대로 뜨는지, 사후 대응 안전장치가 살아 있는지까지 실제로 증명합니다.

아직 남아 있는 운영상의 전제
Runtime

Codex가 기본 제공하는 장치는 아닙니다

입력 직전에 가로채는 기능은 실행을 감싸는 껍데기 스크립트에 기대고 있습니다. Codex 프로그램 자체가 '입력 직전 검문' 기능을 정식으로 제공하는 것은 아니라서, 도구 차원의 완전한 6단계라고 부르지는 않습니다.

Entrypoint

껍데기 스크립트를 건너뛰면 보장이 약해집니다

이 시스템을 쓰는 사람은 codex-session-wrapper.sh 또는 그에 준하는 실행기를 거쳐 세션을 시작해야 합니다. 이 껍데기를 빼고 Codex 실행 파일을 직접 다른 방식으로 띄우면, 입력 직전 검문은 건너뛰어질 수 있습니다.

Scope

내 개인 설정 밖의 정책은 다른 이야기입니다

이 문서가 기준으로 삼는 것은 ~/.codex 라는 개인 설정 폴더입니다. 회사 전체에 적용하는 중앙 정책, 서버에서 통제하는 방식, 여러 대의 원격 기기를 한꺼번에 관리하는 일은 이 문서 범위에 넣지 않았습니다.

함께 읽으면 좋은 문서