deep dive · codex · loopy-era

Start-Harness
완전 분석

start-harness.sh를 진입점으로 하는 Codex-native 자가개선 하네스의 전체 구조 분석. 14단계 파이프라인, 5종 신호 수집, 8가지 통합 smoke test, 그리고 자율 LLM 패치 적용 메커니즘까지.

cc-sync 프로젝트
Codex GPT-5.4
구현 수준 85~90%
2026-04-04 분석
14
Phase 파이프라인
5
신호 종류
8
통합 smoke test
17
필수 artifacts
900s
worker 쿨다운
L6
blocker 메트릭
목차
  1. 전체 시스템 아키텍처
  2. start-harness.sh 명령어 체인
  3. ralph-loop.sh 분석
  4. 14단계 loop-era 파이프라인
  5. 자가개선 신호 수집 파이프라인
  6. self-improve-worker.py — 실행 엔진
  7. 검증 레이어 (verify + adversarial)
  8. Smoke Test — 8가지 통합 테스트
  9. 핵심 데이터 파일
  10. 구현 수준 평가
01

전체 시스템 아키텍처

Codex loopy-era 시스템은 "AI가 스스로 개선 신호를 감지하고, LLM을 호출해 패치를 생성하며, 검증 후 적용하는" 완전 자율 루프입니다. 모든 구성 요소는 ~/.codex/ 아래에 위치하며, cc-sync 프로젝트를 통해 동기화됩니다.

start-harness.sh
사용자 진입점. ensure supervisor → register project → tick → status 출력
loop-era-supervisor.sh / loop-era-supervisor.py
데몬 수명주기 관리. nohup 또는 launchd로 실행. PID + heartbeat 파일로 생존 확인. stale 자동 복구.
process_project() — 14단계 파이프라인
init → self_improve → verify → adversarial_review → team_plan → team_execute → qa_cycle → qa_fix_retry → closeout. 메트릭: l6_blocker_count (목표 0).
self-improve-trigger.sh + self-improve-worker.py
신호 수집(fix 커밋, retry, recurrence, telemetry) → Codex LLM 호출 → worktree 격리 패치 적용
verify-l6.sh + adversarial-review-l6.py
정량적(17 artifacts + py_compile + bash -n) + 정성적(Claude 의존성, sync 체크) 이중 검증
02

start-harness.sh 명령어 체인

skill .codex/skills/start-harness/SKILL.md가 정의한 5개 하위 명령으로 구성됩니다.

# start — 전체 하네스 시작 (가장 많이 사용)
bash start-harness.sh start --project-root "$PWD"

  loop-era-supervisor.sh ensure        ← 데몬 존재 보장
  ralph-loop.sh start [args]            ← 프로젝트 레지스트리 등록
  ralph-loop.sh tick --force            ← 즉시 1회 실행
  pretty_status()                        ← supervisor + worker 상태 출력

# smoke — 전체 환경 검증
bash start-harness.sh smoke --project-root "$PWD"

  self-improve-smoke.sh                  ← 8가지 통합 테스트
  loop-era-smoke.sh                      ← 루프 전용 smoke
  verify-l6.sh                           ← L6 blocker 수치
  adversarial-review-l6.py               ← 적대적 코드 리뷰

# stop — 중지 (--global-supervisor로 데몬까지)
bash start-harness.sh stop --project-root "$PWD" [--global-supervisor]
03

ralph-loop.sh 분석

ralph-loop.shloop-era-supervisor.py의 CLI 래퍼입니다. start 시 repo에 자동으로 autoresearch artifact를 시드합니다.

ralph-loop.sh start
  seed_repo_artifacts()
    cp ~/.codex/autoresearch/{verify-l6.sh, adversarial-review-l6.py}
       → .codex/autoresearch/ (없으면 자동 복사)
  python3 loop-era-supervisor.py register [args]
  loop-era-supervisor.sh start

ralph-loop.sh tick   → python3 loop-era-supervisor.py run-once
ralph-loop.sh stop   → python3 loop-era-supervisor.py cancel
ralph-loop.sh status → python3 loop-era-supervisor.py status
04

14단계 loop-era 파이프라인

loop-era-supervisor.pyPHASE_ORDER에 정의된 순서대로 실행됩니다. 각 phase의 결과는 phase_history에 기록되며, 메트릭 추이는 results.tsv에 저장됩니다.

01
init_project
프로젝트 프로파일 생성 및 초기화
→ init-project-runtime.py → .codex/loopy-era/init-project.json
setup
02
self_improve_trigger
fix 커밋, retry 로그, recurrence, telemetry 신호 수집 → pending 파일 저장
→ self-improve-trigger.sh
signal
03
self_improve_worker_initial
Codex LLM 호출 → worktree 격리 → 패치 생성 → 검증 → 적용
→ self-improve-worker.py run
LLM
04
verify_initial
L6 blocker count 측정 — 필수 파일 17개, py_compile, bash -n
→ .codex/autoresearch/verify-l6.sh
metric
05
adversarial_review_initial
정성적 리뷰 — artifacts, sync 체크, Claude 의존성 탐지
→ .codex/autoresearch/adversarial-review-l6.py
review
06
team_plan
verify + review 결과를 기반으로 병렬 실행 가능한 작업 계획 수립
→ team-runtime.py --json
plan
07
team_execute
계획 실행 — worker 병렬 배치, 결과를 team-execution-latest.json에 저장
→ team-runtime.py --execute --json
exec
08
qa_cycle
빌드 + 타입 체크 + 기능 검증 — 최대 N라운드 자동 수정
→ qa-cycle-runtime.py --max-rounds N
QA
09
qa_fix_retry
QA 실패 시 team-runtime으로 자동 수정 → qa_cycle 재실행 (최대 N라운드)
→ team-runtime.py --execute → qa-cycle-runtime.py (반복)
retry
10–12
inject → self_improve_adversarial → verify_final
adversarial findings를 pending에 주입 → worker 재실행 → 최종 verify
→ merge_adversarial_findings() → self-improve-worker.py → verify-l6.sh
loop
13
adversarial_review_final
최종 정성 리뷰 — blocker 0이어야 closeout 가능
→ adversarial-review-l6.py
final
14
closeout
results.tsv 기록, metrics.jsonl 저장, next_run_at 갱신, action_log 전송
→ results.tsv + loop-era-metrics.jsonl + action-log.sh
done
05

자가개선 신호 수집 파이프라인

self-improve-trigger.sh는 다양한 소스에서 개선이 필요하다는 신호를 수집하여 ~/.codex/pending/self-improve-{key}.json에 저장합니다. 이미 처리된 신호는 ack 상태 파일로 중복 필터링합니다.

신호 종류수집처의미
fix_commit git log --grep='^fix:' 세션 중 발생한 버그 수정 커밋. 어떤 실수가 반복되는지 학습 소스.
bug_fixer_retry .codex/logs/*.jsonl bug-fixer 에이전트 재시도 로그. 자동 수정이 반복된 패턴 감지.
recurrence check-recurrence.py self-improve 이력 × git fix 커밋 교차 분석. 동일 키워드 2회 이상 발견 시.
telemetry self-improve-telemetry.py 사용자 불만 패턴 분석. 한국어 정규식 포함 ("아니요", "안 보이", "중복" 등).
adversarial_finding adversarial-review-l6.py 리뷰에서 발견된 P1/P2 blocker. loop 다음 사이클에 자동 주입.
# self-improve-trigger.sh 흐름
project-scope.py → project_key 결정

# 신호 수집
git log --since=$SESSION_START --grep='^fix:'   → fix_commit[]
.codex/logs/*.jsonl | grep "bug-fixer"           → bug_fixer_retry[]
check-recurrence.py $PROJECT_ROOT                → recurrence[]
self-improve-telemetry.py --project-root $ROOT   → telemetry[]

# ack 필터링 (중복 제거)
~/.codex/state/self-improve-acks/{key}.json

# 신호가 있으면 pending 파일 저장
~/.codex/pending/self-improve-{key}.json

# 후처리 (있으면 실행)
rule-effectiveness-check.sh   ← 규칙 효율성 검증
soft-to-hard-promoter.sh      ← SOFT→HARD 자동 승격
06

self-improve-worker.py — 실행 엔진

실제 LLM을 호출하여 개선 패치를 생성하고 적용하는 핵심 컴포넌트. git worktree로 격리된 환경에서 실행하며, 실패 시 자동으로 백업에서 복구합니다.

self-improve-worker.py run --project-root $ROOT
  │
  ├── [쿨다운] CODEX_SELF_IMPROVE_COOLDOWN_SECONDS=900 (15분)
  ├── [lock]  ~/.codex/state/self-improve-workers/{key}.lock
  │
  ├── load_pending() + unacked_signals() 필터링
  │
  ├── [격리 환경]
  │     git worktree add --detach HEAD
  │     backup_codex() → temp/codex-backup/
  │
  ├── [LLM 호출]
  │     build_prompt(root, signals[:10], team_context)
  │     write_schema(output_schema.json)
  │     codex --model gpt-5.4 -o output.json < prompt
  │
  ├── [결과 검증]
  │     patch_scope: ["project"] | ["codex"] | ["project","codex"]
  │     verification_checks:
  │       file_contains   → 파일 내용 포함 여부
  │       repo_script     → .codex/autoresearch/*.sh 실행
  │       codex_smoke     → self-improve-smoke.sh
  │       git_diff_check  → diff 확인
  │
  ├── [패치 적용]
  │     patch_scope=["codex"]   → ~/.codex/ 직접 수정 ✅
  │     patch_scope=["project"] → queue 저장 (repo clean 필요) ⚠️
  │
  ├── self-improve-ack.sh    ← 처리된 신호 ack
  ├── self-improve-smoke.sh  ← 적용 후 smoke test
  └── self-improve-log.sh    ← 이력 기록
프로젝트 패치 지연 조건: patch_scope=["project"]는 repo가 clean(git status --porcelain이 비어있어야) 해야만 즉시 적용됩니다. dirty 상태면 ~/.codex/state/self-improve-queues/{key}/에 .patch 파일로 대기합니다.
07

검증 레이어

정량적(verify-l6.sh)과 정성적(adversarial-review-l6.py) 두 레이어로 이중 검증합니다. 두 검증 모두 JSON을 stdout에 출력하며, supervisor가 파싱하여 phase 진행 여부를 결정합니다.

# verify-l6.sh — L6 Blocker Count 측정

필수 파일 17개 존재 확인:
  .codex/autoresearch/verify-l6.sh
  .codex/autoresearch/adversarial-review-l6.py
  .codex/scripts/session-start.sh
  .codex/scripts/memory-bank-session-end.sh
  .codex/scripts/self-improve-trigger.sh
  .codex/scripts/self-improve-check.sh
  .codex/scripts/self-improve-worker.py
  .codex/scripts/team-runtime.py
  .codex/scripts/loop-era-supervisor.py
  .codex/scripts/init-project-runtime.py
  .codex/scripts/qa-cycle-runtime.py
  .codex/scripts/check-recurrence.py
  .codex/scripts/install-git-hooks.sh
  .codex/skills/self-improve/SKILL.md
  .codex/skills/ralph-loop/SKILL.md
  .codex/skills/team/SKILL.md
  ... (+1 more)

python3 -m py_compile × 10개   ← Python 컴파일 검증
bash -n × 4개                  ← Bash 구문 검증
self-improve-smoke.sh           ← 통합 smoke (skip 가능)

→ {"metric": "l6_blocker_count", "value": N, "status": "pass/fail"}

# adversarial-review-l6.py — 정성적 리뷰

필수 artifacts 존재 + 비어있지 않음 (10개)
apply.sh / sync.sh에 autoresearch 동기화 포함 여부
self-improve-trigger.sh의 Claude 하드의존성 탐지
self-improve SKILL.md의 notifier 경로 체크
self-improve-smoke.sh의 set +e / STATUS=$? / [STATUS -eq 1] 패턴
git-hook → Codex runtime 체인 여부

→ {"blocker_count": N, "findings": [...], "status": "pass/fail"}
08

Smoke Test — 8가지 통합 테스트

self-improve-smoke.sh는 단순 구문 검사를 넘어 실제 임시 git repo를 생성하고 전체 파이프라인을 검증하는 통합 테스트를 포함합니다.

TEST 01
구문 검증
bash -n × 10, python3 -m py_compile × 10. 모든 스크립트가 파싱 가능해야.
→ exit 0 on success
TEST 02
Pre-submit Gate
tmp git repo + "forbidden prompt" 규칙 등록 → codex-pre-submit-gate.py → 차단 확인. STATUS=1이어야 통과.
→ blocked = PASS
TEST 03
Git Hook 설치
install-git-hooks.sh 실행 → pre-commit, pre-push에 "cc-sync codex hook chain" 포함 확인. 기존 hook은 .local로 보존.
→ hook chain verified
TEST 04
Verify/Review/Status
세 컴포넌트 동시 실행 + 필수 JSON 필드 검증. worker_pretty에 '[self-improve]', supervisor_pretty에 '[ralph-loop]' 포함 여부.
→ all fields present
TEST 05
Ralph-Loop 시드
tmp repo 생성 → ralph-loop.sh start → state.json 존재 확인 → stop. 전체 등록/취소 사이클.
→ state.json created
TEST 06
Stale Running 복구
2시간 전 started_at + sleep 60 PID → status=stale_running 확인 → worker run --dry-run → running=False 전환.
→ stale → recovered
TEST 07
Timeout + Backoff
codex = sleep 2, timeout=1초 설정 → status=backoff, last_result=escalation_required, disabled_until 설정 확인.
→ backoff activated
TEST 08
Codex-Only + Mixed 패치
codex-only: patch_scope=["codex"] → 즉시 적용. mixed: ["project","codex"] → codex 즉시, project는 queue 대기.
→ patch routing verified
09

핵심 데이터 파일

~/.codex/ ├── state/ │ ├── loop-era-registry.json # 등록된 프로젝트 목록 │ ├── loop-era-projects/ # 프로젝트별 레코드 (.json) │ ├── loop-era-locks/ # 프로세스 잠금 파일 │ ├── self-improve-workers/ # worker 상태 + 잠금 │ ├── self-improve-acks/ # 처리된 신호 ack 상태 │ ├── self-improve-queues/ # project 패치 대기 queue │ ├── loop-era-supervisor.pid # 데몬 PID │ └── loop-era-supervisor-heartbeat.json ├── pending/ │ └── self-improve-{key}.json # 미처리 신호 큐 └── logs/ ├── loop-era-supervisor.jsonl # supervisor 이벤트 └── self-improve-runs.jsonl # worker 실행 이력 .codex/ (repo 내부) ├── autoresearch/ │ ├── results.tsv # keep/discard 실험 결과 │ ├── verify-l6.sh # L6 blocker 측정 │ └── adversarial-review-l6.py # 정성적 리뷰 ├── ralph-loop/ │ ├── state.json # 현재 루프 상태 + phase 이력 │ └── team-execution-latest.json # 최근 team 실행 결과 └── logs/ └── loop-era-metrics.jsonl # 메트릭 히스토리
10

구현 수준 평가

컴포넌트수준비고
신호 수집 파이프라인✅ 100%5종 신호, 한국어 패턴 포함
자율 worker 실행✅ 100%worktree 격리, 백업/복구, 4종 검증
L6 blocker 메트릭✅ 100%정량적 keep/discard 판정
Smoke Test 하네스✅ 100%8가지 통합 테스트 자동화
Supervisor 데몬✅ 100%PID, launchd, heartbeat, stale 복구
14단계 Phase 파이프라인✅ 100%PHASE_ORDER 완전 구현
git worktree 격리✅ 100%clone 폴백 포함
ack/nack 시스템✅ 100%신호 중복 처리 방지
project 패치 적용⚠️ 70%repo clean 조건 필요 → queue 대기
cross-tool 동기화⚠️ 60%cc-sync apply.sh/sync.sh 의존
Hard Rule 자동 승격⚠️ 70%soft-to-hard-promoter.sh 있지만 깊이 제한
87%
종합 구현 수준
Codex loopy-era 자가개선 시스템은 프로덕션 수준의 완성도를 보입니다. start-harness.sh부터 14단계 phase 파이프라인, 8가지 통합 smoke test, 5종 신호 수집, worktree 격리, ack 기반 중복 방지까지 매우 정교하게 구축되어 있습니다.

주요 제약은 두 가지입니다. 첫째, 프로젝트 파일 패치는 repo가 clean해야만 즉시 적용되고, 그렇지 않으면 queue에 대기합니다. 둘째, 최종 개선 판단은 Codex LLM(GPT-5.4)에 의존하므로 LLM 없이는 실제 패치 생성이 불가합니다.