Chapter 9: Codex 고급 멀티에이전트 — 의존성 그래프와 메타하네스
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된다. t2와 t3가 모두 완료되면 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 메타하네스 — 자기 최적화
메타하네스는 에이전트가 자기 하네스(AGENTS.md / SKILL.md / config.toml)를 개선하는 outer-loop다. 두 가지 접근:
접근 1: GEPA 스타일 피드백 루프
Jagtap[4]의 GEPA(Generalized Evolutionary Prompt Automation) 접근:
- 에이전트 실행 → 결과 수집
- 실패 패턴 추출 (어떤 AGENTS.md 지시를 무시했는가?)
- AGENTS.md에 새 규칙 제안
- 다음 실행에 적용 → 다시 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.md와 HANDOFF.md가 먼저 있고, 그 위에 필요한 표면만 붙는다. 반복이 필요하면 automation, 병렬성이 필요하면 worktree, 독립 검증이 필요하면 subagent, 장기 목표가 필요하면 goal mode다.
9.4 git worktrees — Agent Teams 이전의 병렬화
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에 의존하는 작업은 별도 확인이 필요하다.
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, 더 많은 로그가 필요하다.
참고문헌
- Anthropic, "Agent Teams," 2026. [Anthropic, 2026]
- Lee, Yoonho et al., "Meta-Harness: End-to-End Optimization of Model Harnesses," arXiv 2603.28052, 2026. [Um, 2026]
- B327Roy, "Multi-agent retrospective," 2026. [brunch), 2026]
- Jagtap, "Codex AGENTS.md auto-optimization (GEPA)," 2026. [Jagtap, 2026]
- Fulton, Alex, "Inside the agent harness," 2026. [Fulton, 2026]
- Luong, "Local LLMs with frontier — 3-tier," 2026. [NGUYEN, 2026]
- IndyDevDan, "Claude Code hooks for multi-agent observability," 2026. [IndyDevDan, 2026]
- IndyDevDan, "Pre-Agent-Teams parallelization with git worktrees," 2026. [IndyDevDan, 2026]
- Karpathy, Andrej, "Autoresearch," 2026. [Karpathy, 2026]
- Intuition, "Codex as superapp — multi-agent," 2026. [IntuitionLabs, 2026]
- OpenAI, "Codex app worktrees," 2026. [OpenAI, 2026]
- OpenAI, "Codex CLI changelog — persisted /goal workflows," 2026-04-30. [OpenAI, 2026]
- OpenAI, "Codex app automations," 2026. [OpenAI, 2026]
- OpenAI, "Codex subagents," 2026. [OpenAI, 2026]
- Le et al., "OverEager-Bench," arXiv, 2026. [Le et al., 2026]