Part III: GPT-5.5 시대의 Codex 실전 가이드

Chapter 9: Codex 고급 멀티에이전트 — 의존성 그래프와 메타하네스

집필일: 2026-04-28 최종수정일: 2026-06-11

9.1 자기 수정 하네스

6장에서 의존성 그래프를 선언하고, 에이전트들이 자율적으로 태스크를 실행하는 패턴을 배웠다. 이제 한 단계 더: 그 에이전트들이 자기가 따르는 하네스를 직접 개선하면 어떻게 되는가?

Meta-Harness 논문(arXiv 2603.28052) [2]의 핵심 아이디어가 바로 이것이다. Proposer 에이전트가 이전 모든 후보 하네스의 소스코드, 실행 트레이스, 점수를 파일시스템에서 읽고 새 하네스를 제안한다. 이것이 outer-loop로 반복된다. 결과:

  • 텍스트 분류: SOTA 대비 +7.7점, 4배 적은 토큰
  • IMO 수학: 5개 모델 평균 +4.7점
  • TerminalBench-2: 수작업 baseline 상회

하네스가 스스로를 최적화하는 것이다.

9.2 의존성 그래프 — 실전

6장의 DAG 개념을 실제 코드로 구현해보자. Claude Code에서는 Agent Teams API [1]로 그래프를 직접 선언할 수 있다:


// 오케스트레이터 에이전트의 코드
const { TeamCreate, TaskCreate } = require('@anthropic/claude-code');

// 1. 팀 생성
const team = await TeamCreate({
  members: ['architect', 'implementer', 'tester', 'reviewer']
});

// 2. 태스크 의존성 그래프 선언
const tasks = [
  TaskCreate({ id: 't1', name: 'design-api', assignee: 'architect' }),
  TaskCreate({ id: 't2', name: 'implement-core', assignee: 'implementer',
    blockedBy: ['t1'] }),
  TaskCreate({ id: 't3', name: 'write-tests', assignee: 'tester',
    blockedBy: ['t2'] }),
  TaskCreate({ id: 't4', name: 'review-all', assignee: 'reviewer',
    blockedBy: ['t2', 't3'] }),
];

// 3. 에이전트들이 자율적으로 리프 태스크를 claim해서 실행
await team.execute(tasks);

리프 태스크(선행 의존성 없는 태스크)부터 에이전트들이 자율적으로 선택한다. t1이 완료되면 t2가 unlock된다. t2t3가 모두 완료되면 t4가 unlock된다.

observability: IndyDevDan[8]의 접근처럼, hooks를 통해 태스크 시작/완료를 로깅하면 전체 그래프 실행을 추적할 수 있다.

Codex에서는 같은 그래프를 반드시 API 형태로 이식할 필요가 없다. 더 실용적인 방식은 TASKS.md에 DAG를 평문으로 두고, Codex에게 "unblocked 태스크 하나만 수행하라"고 반복 지시하는 것이다. 병렬 실행이 필요하면 Codex app Worktree 모드를 쓴다 [14].


# TASKS.md

## Goal
Payment module migration.

## Rules
- Do not touch CLAUDE.md or .claude/.
- Pick only tasks with all dependencies done.
- After each task, update this file and HANDOFF.md.

## Tasks
- [ ] T1: define payment model
- [ ] T2: implement Stripe client
- [ ] T3: write validation rules (depends: T1)
- [ ] T4: implement service (depends: T1, T2, T3)
- [ ] T5: controller + tests (depends: T4)

Codex 프롬프트:


TASKS.md를 읽고 아직 unblock된 작업 하나만 수행해라.
CLAUDE.md와 .claude/는 건드리지 마라.
작업 후 TASKS.md와 HANDOFF.md를 업데이트하고, /diff로 검토 가능한 작은 변경만 남겨라.

이 방식은 Claude Code의 Agent Teams만큼 동적이지 않지만, Git diff와 문서 상태가 곧 orchestrator가 되므로 복구가 쉽다.

9.3 메타하네스 — 자기 최적화

Figure 9.1: 메타하네스 outer-loop — 에이전트가 자기 하네스를 개선한다. 이전 실행의 소스코드·트레이스·점수를 파일시스템에 보존하고 proposer가 전체를 읽는다. illustration by author Gemini assisted

메타하네스는 에이전트가 자기 하네스(AGENTS.md / SKILL.md / config.toml)를 개선하는 outer-loop다. 두 가지 접근:

접근 1: GEPA 스타일 피드백 루프

Jagtap[4]의 GEPA(Generalized Evolutionary Prompt Automation) 접근:

  1. 에이전트 실행 → 결과 수집
  2. 실패 패턴 추출 (어떤 AGENTS.md 지시를 무시했는가?)
  3. AGENTS.md에 새 규칙 제안
  4. 다음 실행에 적용 → 다시 1단계

# 메타하네스 outer-loop (의사 코드)
while True:
    # 에이전트 실행
    results = run_agent(current_agents_md, tasks)
    
    # 실패 패턴 분석
    failures = extract_failures(results)
    
    # AGENTS.md 개선 제안
    new_agents_md = proposer_agent(
        current_agents_md=current_agents_md,
        prior_runs=filesystem.read_all_runs(),
        failures=failures
    )
    
    # 평가 후 반영
    if evaluate(new_agents_md) > evaluate(current_agents_md):
        current_agents_md = new_agents_md

접근 2: 파일시스템 기반 경험 축적

Meta-Harness 논문의 핵심 통찰 [2]: 피드백을 압축하지 말고 원본 그대로 보존한다. 이전 실행의 소스코드 + 트레이스 + 점수를 파일시스템에 그대로 저장하고, proposer 에이전트가 전체를 읽는다. 피드백을 요약하면 "왜 이 전략이 실패했는지"를 잃는다.

이것이 하네스 설계에 주는 교훈: CLAUDE.md / AGENTS.md는 "현재 버전의 정적 파일"이 아니라 "실행 이력과 함께 진화하는 살아있는 문서"로 관리할 때 더 효과적이다.

2026-04-30의 /goal은 이 outer-loop의 제품화된 일부다. 목표와 continuation prompt가 세션 안에 보존되고, Codex가 목표 완료 또는 token budget 도달까지 반복할 수 있다 [14]. 하지만 메타하네스 관점에서 /goal은 "오래 돌리는 버튼"이 아니라 "검증 가능한 종료 조건을 가진 루프"다. TASKS.md 체크리스트, 테스트 명령, HANDOFF.md 업데이트처럼 완료 조건이 파일로 남아 있어야 한다.

2026년 6월 현재 이 outer-loop는 네 개의 제품 표면으로 나뉜다 [14].

표면 메타하네스에서의 역할
Goal mode 장기 목표와 continuation prompt를 유지하는 루프
Worktree 병렬 실험을 main checkout과 분리하는 실행 공간
Subagents noisy한 탐색·테스트·리뷰를 main thread 밖으로 분리
Automations 반복 점검을 scheduled run 또는 thread heartbeat로 실행

이 네 가지를 모두 켜는 것이 고급 사용법은 아니다. 좋은 메타하네스는 TASKS.mdHANDOFF.md가 먼저 있고, 그 위에 필요한 표면만 붙는다. 반복이 필요하면 automation, 병렬성이 필요하면 worktree, 독립 검증이 필요하면 subagent, 장기 목표가 필요하면 goal mode다.

9.4 git worktrees — Agent Teams 이전의 병렬화

Figure 9.2: git worktrees로 병렬 에이전트 — 각 feature 브랜치가 독립 디렉토리에서 동시에 실행. Agent Teams 이전의 브릿지 패턴이며 Codex app Worktree 모드와도 연결된다. illustration by author Gemini assisted

IndyDevDan[8]이 기록한 방법 — Agent Teams API 이전에 git worktrees로 병렬화를 달성하던 방식:


# 여러 브랜치에서 동시에 작업
git worktree add ../feature-auth feature/auth
git worktree add ../feature-payments feature/payments
git worktree add ../feature-notifications feature/notifications

# 각 디렉토리에서 독립적으로 claude 실행
cd ../feature-auth && claude "implement auth module"
cd ../feature-payments && claude "implement payment module"  
cd ../feature-notifications && claude "implement notifications"

이 패턴은 Agent Teams의 공식 병렬화가 나오기 전의 중요한 브릿지였다. Codex app은 이 패턴을 제품 기능으로 끌어들였다. Worktree thread는 별도 Git worktree에서 실행되고, 필요하면 Hand off로 Local checkout에 안전하게 옮길 수 있다 [14]. 단, .gitignore에 들어간 파일은 handoff로 이동하지 않으므로 local-only 설정이나 generated artifact에 의존하는 작업은 별도 확인이 필요하다.

Figure 9.3: 3-tier 로컬+frontier 아키텍처 — 로컬 LLM이 계획·분석을 담당하고 frontier API가 핵심 구현, 전용 리뷰 에이전트가 보안·품질 검증. illustration by author Gemini assisted

9.5 3-tier 로컬 모델 아키텍처

NGUYEN[6]의 프로덕션 아키텍처:


[Tier 1: Local LLM (llama/deepseek-coder)]
    ↓ planning, code analysis, AGENTS.md 초안
[Tier 2: Frontier API (GPT-5.5 / Opus 4.7)]
    ↓ 핵심 구현, 복잡한 추론
[Tier 3: Dedicated Review Agent]
    ↓ 보안 체크, 코드 품질 검증

비용: Tier 1은 로컬 실행으로 API 비용 없음. Frontier API는 Tier 2에만 사용. 전체 비용 70-80% 절감 가능.

메타하네스 맥락에서: Tier 1 로컬 모델이 AGENTS.md 개선 제안을 빠르게 실험하고, Tier 2 frontier가 최종 평가를 한다. 실험 비용이 극적으로 낮아진다.

9.6 ch 12를 향한 브릿지 — 자율 연구로

Karpathy의 autoresearch 실험 [9] — GPT-2 학습 최적화에 700회 실험 / 2일 — 은 이 챕터의 메타하네스를 연구 도메인에 적용한 것이다. 에이전트가 실험을 설계하고, 실행하고, 결과를 분석하고, 다음 실험을 제안한다. 하네스가 연구 루프 자체가 된다.

이 방향이 12장에서 다루는 AI Scientist의 출발점이다.

여기서 중요한 경계가 하나 있다. 메타하네스는 "에이전트에게 더 많은 자유를 주는 기술"이 아니라 "에이전트의 자유가 남긴 흔적을 다음 실행이 읽게 만드는 기술"이다. OverEager-Bench는 Claude Code, Codex CLI, Gemini CLI 같은 agentic coding 도구가 명시적 동의 문구가 약해질 때 out-of-scope action으로 이동할 수 있음을 보였다 [15]. 그러므로 고급 멀티에이전트일수록 더 작은 권한, 더 명확한 done condition, 더 많은 로그가 필요하다.


참고문헌

  1. Anthropic, "Agent Teams," 2026. [Anthropic, 2026]
  2. Lee, Yoonho et al., "Meta-Harness: End-to-End Optimization of Model Harnesses," arXiv 2603.28052, 2026. [Um, 2026]
  3. B327Roy, "Multi-agent retrospective," 2026. [brunch), 2026]
  4. Jagtap, "Codex AGENTS.md auto-optimization (GEPA)," 2026. [Jagtap, 2026]
  5. Fulton, Alex, "Inside the agent harness," 2026. [Fulton, 2026]
  6. Luong, "Local LLMs with frontier — 3-tier," 2026. [NGUYEN, 2026]
  7. IndyDevDan, "Claude Code hooks for multi-agent observability," 2026. [IndyDevDan, 2026]
  8. IndyDevDan, "Pre-Agent-Teams parallelization with git worktrees," 2026. [IndyDevDan, 2026]
  9. Karpathy, Andrej, "Autoresearch," 2026. [Karpathy, 2026]
  10. Intuition, "Codex as superapp — multi-agent," 2026. [IntuitionLabs, 2026]
  11. OpenAI, "Codex app worktrees," 2026. [OpenAI, 2026]
  12. OpenAI, "Codex CLI changelog — persisted /goal workflows," 2026-04-30. [OpenAI, 2026]
  13. OpenAI, "Codex app automations," 2026. [OpenAI, 2026]
  14. OpenAI, "Codex subagents," 2026. [OpenAI, 2026]
  15. Le et al., "OverEager-Bench," arXiv, 2026. [Le et al., 2026]