GPT-5.6 + Fable 5 조합으로 완성하는 필수 AI 에이전트 스택 (빌더 가이드)

@Av1dlive
영어2일 전 · 2026년 7월 13일
183K
145
27
38
380

TL;DR

본 종합 가이드는 GPT-5.6과 Claude Fable 5를 사용하여 고성능 AI 에이전트 스택을 구축하는 12단계 프로세스를 다룹니다. 검증, 라우팅 및 비용 관리에 중점을 두었습니다.

Fable 5 + GPT-5.6: 잠자는 동안 배포되는 에이전트 스택 A to Z 구축 가이드

이것은 순서대로 진행되는 완전한 구축 가이드이며, 각 단계마다 체크포인트가 있습니다.

잊어버리기 전에 이 12가지 빌드를 북마크하세요.

소개

지금까지 만들어진 가장 강력한 두 모델이 일반에 공개되었지만, 여러분은 여전히 한 번에 하나씩, 수동으로 사용하고 있습니다.

지난 한 달 동안 세 가지가 바뀌었습니다.

  • Claude Fable 5는 여러 단계에 걸쳐 계획을 세우고, 자체 서브에이전트를 파견하며, 자체 출력을 검증합니다. 입력 100만 토큰당 $10, 출력 $50.
  • GPT-5.6은 7월 9일에 세 가지 영구 등급으로 출시되었습니다. Sol은 $5 및 $30, Terra는 Sol의 절반 가격, Luna는 $1 및 $6입니다. OpenAI는 이제 라우팅 결정 자체를 제품으로 판매합니다.
  • Fable 5는 6월 중 19일 동안 수출 명령으로 서비스가 중단되었습니다. 가용성은 이제 여러분에게 일어나는 일이 되었습니다.

아무렇게나 사용하면, 이 모델들은 인상적이지만 틀린 결과를 만들어내는 비싼 도구에 불과합니다.

시스템 내에서 사용하면, 고용할 수 있는 가장 직원에 가까운 존재입니다. Anthropic의 기업 데이터에 따르면 Claude Code는 개발자 1명당 하루 약 $13입니다. OpenAI는 Codex를 월 $100에서 $200으로 책정했습니다.

이 가이드는 12개의 빌드로 구성된 시스템을 구축합니다: 실제 파일들을 순서대로, 게시 전에 각각 테스트했으며, 각 단계 후에 체크포인트가 있어 다음 단계를 쌓기 전에 제대로 작동하는지 확인할 수 있습니다.

이 가이드는 저장소, 터미널, 그리고 두 CLI 중 하나에 접근할 수 있는 모든 사람을 위한 것입니다. 예제는 코드 위주이지만, 루프가 코드 중심으로 발전했기 때문일 뿐, 라우터, 어드바이저, 게이트는 송장이나 보고서에서도 동일하게 작동합니다.

순서대로 읽으면서 체크를 수행하세요. 각 빌드는 10~20분 정도 소요되며, 전체 약 2시간이 걸립니다. 마지막 30일은 시스템이 여러분 없이도 실행될 자격을 얻는 일정입니다.

세 가지 원칙이 아래의 모든 설계 결정을 예측합니다:

  1. 경계에서 라우팅하세요. 모델보다 노력이 먼저입니다. 세션 중간에 모델을 교체하면 90%에 달하는 캐시 할인을 날려버립니다. 동일한 모델에서 사고 노력을 높이는 것은 추가 배관 작업이 필요 없습니다.
  2. 자신의 숙제를 스스로 평가하지 않습니다. 작성자, 라우터, 어드바이저, 리뷰어는 서로 다른 당사자이며, 가능하면 다른 계열에서 가져오고, 최종 투표는 bash 스크립트가 합니다.
  3. 완료는 환경에 대한 사실입니다. 통과하는 테스트 스위트, 체크된 작업 파일, 평결 라인. 결코 모델 스스로에 대한 의견이 아닙니다.

지도, 그리고 기존 지도가 잘못된 이유

루프 엔지니어링은 명시적인 중단 조건과 재시도 로직을 갖춘 에이전틱 워크플로우입니다. "내가 끝났는지"를 모델에게 맡기는 대신, 하네스가 작업 완료 시점을 결정합니다.

표준적인 그림은 swyx의 Loopcraft 스택입니다: 서로 중첩된 다섯 개의 루프, 실행 내부에 작업, 작업 내부에 제품, 제품 내부에 시스템, 시스템 내부에 감독, 각각 자체적인 종료 조건이 있습니다. 지금까지 그려진 것 중 최고입니다.

저는 몇 주 동안 사용했습니다. 그런 다음 이를 기반으로 구축하려고 했지만, 네 곳에서 문제가 발생했습니다.

1) 문제 1: 루프가 중첩되지 않습니다.

중첩은 외부 루프의 한 바퀴가 내부 루프의 완전한 한 번 실행과 같다는 것을 의미합니다. 하지만 실제로는 그렇지 않습니다. 시스템 루프는 제품 루프가 끝날 때까지 기다리지 않습니다. 무언가 출시되었는지와 관계없이 일요일에 실행됩니다.

네 개의 레이어를 풀지 않고도 수동으로 토큰 스트림을 중단할 수 있습니다. 이는 핸드오프를 수행하는 시스템 위에 그려진 포함 관계의 그림일 뿐입니다.

2) 문제 2: 끝없이 그려진 루프는 곧 청구서입니다.

원본은 제품 루프를 그렇게 그렸습니다. 실제로는 예산, 체크포인트, 또는 누군가의 인내심이 바닥날 때 끝납니다.

이를 "의도된 종료 없음"이라고 부르는 것은 에이전트 시스템에서 비용이 새는 정확한 지점, 즉 종료 방법을 알려주지 않은 루프를 숨깁니다.

3) 문제 3: 중단(abort)이 없습니다.

모든 레이어는 해피 엔딩만 있고 불행한 엔딩은 없습니다. 실제 루프는 둘 다 필요합니다: 제대로 작동할 때 어떻게 종료되는지, 그리고 작동할 수 없을 때 어떻게 중단되는지.

제가 본 모든 폭주하는 청구서는 정의된 종료와 정의되지 않은 중단을 가진 루프였습니다.

4) 문제 4: 검증이 누락되었으며, 이것이 전부입니다.

검증은 레이어 간의 계약입니다. 하위 루프가 상위 루프에 사실 대신 보고서를 전달하면, 상위 루프는 거짓 위에서 종료됩니다.

이 하나의 간격이 바로 루프가 중단 조건에 도달했음에도 여전히 틀릴 수 있는 이유입니다.

이것이 제가 구축하는 버전입니다.

증거 사다리 (The Evidence Ladder)

여섯 개의 가로대, 각각 두 개의 출구, 그리고 하나의 규칙: 통제는 목표로서 아래로 흐르고, 증거는 사실로서 위로 흐르며, 어떤 가로대도 아래 가로대의 보고서에 기반하여 종료될 수 없습니다.

Avid - inline image

형태에서 다섯 가지 법칙이 도출됩니다.

모든 가로대에는 중단(abort)이 있거나, 그렇지 않으면 청구서입니다. 루프가 어떻게 나쁘게 끝나는지 이름을 붙일 수 없다면, 구독을 만든 것입니다. 이것이 ralph.sh가 두 개의 상한선을 가지고 있고, 스웜이 사이클 상한선을 가지고 있는 이유입니다.

증거는 위로 흐르고 통제는 아래로 흐릅니다. 가로대는 아래에서 생성된 사실에 기반하여 종료되며, 아래에서 작성된 요약에 기반하여 종료되지 않습니다.

팩토리 게이트는 SQL로 구현된 이 법칙입니다. 두 명의 리뷰어가 통과라고 말했습니다. 게이트는 여전히 거부했습니다, 아무도 통과하는 테스트 행을 생성하지 않았기 때문입니다.

평결은 의견입니다. 행(row)은 증거입니다.

턴당 비용은 가로대당 약 10배씩 증가합니다.

가로대 2를 빠져나간 버그는 가로대 3에서 잡는 데 10배, 가로대 4에서는 100배 더 비용이 듭니다.

이것이 최고의 검증을 가능한 한 사다리 아래쪽에 배치해야 하는 완전한 이유이며, 이것이 게이트가 회의가 아닌 bash 스크립트인 이유입니다.

시간 척도는 가로대가 아닌 모델에 속합니다.

가로대 2는 2024년에는 몇 분이 걸렸지만, 2026년에는 몇 시간이 걸리고, 곧 며칠이 걸릴 것입니다. 시계가 아닌 종료 조건에 맞춰 설계하세요. 이것이 기존 그림이 가장 빨리 낡아지는 부분입니다.

오직 가로대 5만이 종료 조건이 없으며, 이것이 바로 인간을 의미합니다.

여러분은 그곳에 살고 있습니다. 사다리는 한 문장을 얻기 위해 존재합니다: 루프는 중단 조건에 도달했음에도 여전히 틀릴 수 있습니다.

테스트는 통과하고, 게이트는 초록불이 켜지고, 두 리뷰어 모두 서명했지만, 마지막 커밋은 여전히 실수입니다. 여러분 아래의 모든 가로대는 그 확인을 더 작게 만들기 위해 존재합니다. 그 어떤 가로대도 여러분에게서 그 확인을 빼앗을 수 없습니다.

전제 조건

bash
1claude CLI (Claude Code) with Fable 5 access
2codex CLI with GPT-5.6 access # 또는 Claude Code 내 공식 플러그인
3python3, jq, git, gh, make, cron
4현재 작동하는 테스트 명령어가 있는 저장소
5
6# 선택 사항, 혼합 플릿용 (BUILD 7):
7openai/codex-plugin-cc # 공식: Claude Code 내에서 Codex 실행
8claude-model-switch # 로컬 프록시: Claude Code 뒤의 모든 공급자
9CLIProxyAPI # CLI 구독을 API 엔드포인트로 래핑

구축할 내용

markdown
1your-repo/
2 CLAUDE.md # BUILD 1: Claude 측 헌법
3 AGENTS.md # BUILD 1: Codex 측 헌법
4 .claude/
5 skills/model-bench/SKILL.md # BUILD 0: 가격, API ID, 폴백. 숫자가 있는 유일한 파일
6 skills/model-router/SKILL.md # BUILD 4
7 skills/stuck-protocol/SKILL.md # BUILD 5
8 skills/ship-gate/SKILL.md # BUILD 2
9 agents/fable-expert.md # BUILD 5
10 agents/fresh-eyes-reviewer.md # BUILD 6
11 agents/sol-reviewer.md # BUILD 6
12 agents/scout.md # BUILD 7
13 loop/
14 ralph.sh # BUILD 3: 하트비트
15 two_lane.sh # BUILD 6: 교차 공급업체 검토 루프
16 PROMPT.md TASKS.md # BUILD 3: 작업 프로토콜
17 gate/
18 verify.sh # BUILD 2: 결정적인 최종 투표
19 eval_gate.py eval/cases.jsonl # BUILD 2: 라우팅 변경 게이트
20 router/
21 router.py # BUILD 4
22 advisor_loop.py # BUILD 5
23 ~/.codex/
24 config.toml # BUILD 0: luna/terra/sol 프로필
25 prompts/effort.md # /effort 작업 점수 매기기, 좌석 지정
26 prompts/plan-stop.md # /plan-stop 계획, 비용 책정, 중단
27 prompts/fable-advice.md # /fable-advice 교차 공급업체 전문가 자문
28 prompts/review-hostile.md # /review-hostile 깨끗한 컨텍스트 평결
29 prompts/compost.md # /compost 실패가 법칙이 됨, 주간
30 factory/
31 factory_gate.py # BUILD 8: 블랙보드 + 완료 게이트
32 factory.sh # BUILD 8: 브리프 -> 구현 -> 리뷰 -> 게이트
33 factory.db # BUILD 8: 결정하는 행들
34 swarm/
35 swarm.sh # BUILD 9: 계획 -> 파견 -> 점수 -> 재계획
36 goals.jsonl # BUILD 9: 한 줄에 하나의 목표, 각각 체크 포함
37 system/
38 verify_goals.py # BUILD 10: 매일 재검증, 영원히
39 goals/ # BUILD 10: 완료된 각 항목당 하나의 파일
40 ROUTING.md # BUILD 12: 전체 라우팅 정책, 두 하네스 모두
41 progress.log # 모든 빌드가 여기에 추가됨
42 # 선택 사항 (BUILD 7): localhost:4000의 claude-model-switch 프록시,
43 # CLI 구독을 API 엔드포인트로 래핑하는 CLIProxyAPI

BUILD 0: 엔진 구성

자체 파일을 작성하기 전에 이것들을 설정하세요. 아래 모든 숫자는 게시 주에 공식 가격 페이지에서 확인되었습니다.

벤치: 모든 좌석, 2026년 7월

시스템이 고용하는 명단입니다.

가격은 하나의 스킬 파일인 .claude/skills/model-bench/SKILL.md에 있으며, 라우팅 또는 비용 질문 전에 필요에 따라 로드됩니다. 다른 어떤 파일도 숫자를 하드코딩하지 않습니다.

이 글이 작성되기 6주 전에 가격이 세 번 변경되었습니다. 기사에 있는 가격은 게시 시점에 이미 틀렸습니다. 스킬 파일에 있는 가격은 한 번만 수정하면 됩니다.

Avid - inline image

모든 다운스트림을 결정짓는 분할:

  • Fable 5는 까다로운 소프트웨어 작업을 선도합니다. SWE-Bench Pro에서 Sol의 64.6% 대비 80%를 기록했으며, 전반적인 지능에서 Sol을 약간 앞섭니다.
  • Sol은 터미널 및 에이전트 작업을 선도합니다. Terminal-Bench 2.1에서 88.8%를 기록했으며, 작업당 비용이 Fable의 약 1/3 수준으로 코딩 에이전트 지수에서 최상위를 차지합니다.

이 분할이 바로 이 시스템이 두 공급업체를 사용하는 이유입니다. Fable은 판단하고 계획하며, Sol은 검토하고 터미널을 구동하며, 둘 중 어느 것도 대량 타이핑을 하지 않습니다.

Avid - inline image

사람들이 잘못 읽는 두 개의 좌석.

Opus 4.8은 먼지 쌓인 구형 플래그십이 아닙니다. Fable 아래의 자동 폴백이자 복잡한 에이전틱 코딩을 위한 권장 기본값입니다. 여러분의 시스템은 계획하지 않아도 이를 상속받습니다.

Sonnet 5는 출시 가격으로 보드상 최고의 가치입니다. Opus 4.8에 가까운 성능에 Fable 입력 가격의 극히 일부만으로, 이 빌드 전체에서 기본 실행기로 사용되는 이유입니다. 이 요금은 8월 31일에 만료되며, 스킬 파일은 이미 이를 알고 있습니다.

그 스킬 파일이 시스템에서 유일하게 숫자를 포함하는 파일입니다:

markdown
1---
2name: model-bench
3description: 이 시스템이 고용할 수 있는 모든 모델의 현재 가격표, API 모델 ID 및 폴백 체인입니다.
4 라우팅 결정, 비용 추정, 예산 질문, 모델 비교 또는 사용자가 비용을 물을 때 로드하세요.
5---
6
7# 모델 벤치
8
9가격 및 API 식별자에 대한 단일 진실 공급원입니다. 이 저장소의 다른 어떤 것도 가격을 하드코딩하지 않으므로,
10연구소에서 요금을 변경하면 이 파일만 편집하면 됩니다. 2026-07-13 확인됨. 가격은 변동됩니다.
11예산을 책정하기 전에 다시 확인하세요.
12
13## Anthropic (Messages API, /v1/messages)
14
15노력: output_config {"effort": "low|medium|high|xhigh|max"}. 적응형 사고는
16Fable 5에서 항상 켜져 있으며 비활성화할 수 없습니다. max_tokens는 사고 PLUS
17응답 텍스트를 제한하므로, 높음 이상에서는 크게 설정하고(64k 부근에서 시작) 모델이
18생각 도중에 공간이 부족해지지 않도록 합니다.
19
20| 모델 | 100만 토큰당 입력/출력 | 캐시 읽기 | 역할 |
21|---|---|---|---|
22| claude-fable-5 | $10/$50 | $1.00 | 지휘자, 계획자, 어드바이저, 판사. 자동으로 opus-4-8로 폴백 |
23| claude-opus-4-8 | $5/$25 | $0.50 | 유지 규칙 하의 지휘자 |
24| claude-sonnet-5 | $2/$10 (8월 31일까지, 이후 $3/$15) | n/a | 기본 코딩 실행기 |
25| claude-haiku-4-5 | $1/$5 | $0.10 | 정찰병, 서브에이전트, 기계 작업 |
26
27Fable, Opus 4.8, Sonnet 5의 1M 컨텍스트는 긴 컨텍스트에서 FLAT 가격으로 책정되며,
28이것이 긴 읽기가 여기로 라우팅되는 이유입니다. 최대 출력 128K.
29
30## OpenAI (Responses API, /v1/responses)
31
32| 모델 | 100만 토큰당 입력/출력 | 캐시됨 | 역할 |
33|---|---|---|---|
34| gpt-5.6-sol | $5/$30 | $0.50 | 교차 공급업체 검토자, 터미널 작업 |
35| gpt-5.6-terra | $2.50/$15 | $0.25 | Codex 일일 드라이버 (먼저 Luna와 테스트) |
36| gpt-5.6-luna | $1/$6 | $0.10 | 기계 작업, 조용한 틱 |
37
38임계값 이상의 긴 컨텍스트는 Anthropic의 플랫 1M 등급과 달리 입력 가격이 대략적으로 두 배가 됩니다.
39명시적인 캐시 중단점이 있는 최초의 제품군입니다. 쓰기 비용은 1.25배입니다.
40
41## 오픈 가중치 (대량 작업자)
42
43| 모델 | 100만 토큰당 입력/출력 | 캐시 적중 |
44|---|---|---|
45| deepseek-v4-flash | $0.14/$0.28 | $0.0028 (약 98% 할인) |
46| deepseek-v4-pro | $0.435/$0.87 | n/a |
47| kimi-k2.7-code | $0.95/$4.00 | $0.19 |
48
49## 누적 할인
50 - 캐시 읽기 비용은 두 연구소 모두에서 신규 입력의 10분의 1입니다 (약 90% 할인)
51 - 캐시 쓰기 비용은 한 번(5분) 또는 두 번(1시간) 읽기 후에 본전을 찾습니다
52 - 배치 API는 양방향 50% 할인
53 - 반복되는 접두사에 대한 배치 + 캐시 읽기는 약 95% 할인에 가깝습니다
54 - Anthropic의 최신 토크나이저는 동일한 텍스트에 대해 약 30% 더 많은 토큰을 생성하므로,
55 유효 비용은 표시 가격보다 높습니다. 유효 비용으로 예산을 책정하세요.
56
57## 비용 질문에 답변하는 방법
58 1. 입력과 출력을 별도로 추정하세요. 에이전트는 쓰는 1토큰당 약 100토큰을 읽으므로,
59 입력이 지배적이며 캐시 적중률이 청구서를 결정합니다.
60 2. 캐시 읽기 요율을 기본 요율이 아닌 반복되는 접두사에 적용하세요.
61 3. Anthropic 수치에 토크나이저에 대해 약 1.3을 곱하세요.
62 4. 범위를 제시하고, 가정을 명시하며, 이 파일의 어떤 줄을 사용했는지 말하세요.
63 5. 숫자가 저장소의 일일 상한선을 초과하면, 실행 전에 그렇게 말하세요.
64
65이 파일에서 읽지 않은 가격을 제시하지 마십시오. 여기에 나열되지 않은 모델은
66벤치에 없으며, 추가하는 것은 게이트를 통과해야 하는 라우팅 변경입니다.

구축 방식을 바꾸는 일곱 가지 사실:

  1. 캐시된 입력은 두 연구소 모두에서 90% 할인됩니다. 시스템 프롬프트에 있는 타임스탬프 하나가 매 호출마다 이를 소진시킵니다. 안정적인 접두사, 추가 전용 기록, 항상. 에이전트는 쓰는 1토큰당 약 100토큰을 읽으므로, 이 할인은 청구서의 대부분을 차지합니다.
  2. 캐시 쓰기는 추가 비용이 들지만 빠르게 회수됩니다. Anthropic의 5분 쓰기는 1.25배로 청구되며 단 한 번의 읽기 후에 본전을 찾습니다. GPT-5.6은 OpenAI의 첫 번째 명시적 캐시 중단점 및 유료 쓰기 제품군입니다. 시스템 프로그래머가 메모리 계층 구조를 중심으로 아키텍처를 설계하듯 캐시를 중심으로 아키텍처를 설계하세요.
  3. 최신 Anthropic 토크나이저는 동일한 텍스트에 대해 약 30% 더 많은 토큰을 생성합니다. 유효 가격은 표시 가격보다 높습니다. 유효 가격으로 예산을 책정하세요.
  4. Fable 5의 안전 거부는 오류가 아닙니다. 호출은 성공하고 작업은 설계상 5% 미만의 세션에서 Opus 4.8에 도달합니다. 종료 코드만이 아니라 무슨 일이 일어났는지 읽고, 필요하기 전에 폴백 체인을 구성하세요.
  5. 중간 등급을 기본값으로 사용하지 마세요. 독립적인 테스트에 따르면 일부 Luna 또는 Sol 설정이 비용-품질 최전선에서 항상 Terra를 능가했습니다. 비용을 지불하기 전에 자체 트래픽에서 Terra를 Luna와 비교 테스트하세요.
  6. 배치 API는 밤새 기다릴 수 있는 모든 것을 절반으로 줄이며, 할인은 캐싱과 누적됩니다: 배치 작업의 반복되는 접두사는 약 95% 할인되어 실행됩니다. BUILD 7의 야간 버너는 이를 활용하기 위해 존재합니다.
  7. 가용성은 가상의 위험이 아니라 운영 위험입니다. Fable 5는 6월에 19일 동안 서비스가 중단되었습니다. 여기에 있는 모든 모델 참조에는 폴백이 있습니다: fable-5는 opus로, sol은 terra로 폴백되며, 모든 폴백은 기록됩니다.

두 번째 미터: 좌석은 API 키가 아닙니다

위의 모든 숫자는 100만 토큰당 달러로 가격이 책정되었습니다. 호출당 비용을 지불한다면 올바른 통화입니다.

$200 Codex Pro 좌석 또는 Claude Max 좌석에서 실행한다면 잘못된 통화입니다.

좌석에서 미터는 5시간 창과 주간 창이며, 함께 평가되며, 하나의 요청이 둘 모두에 계산됩니다.

주간 여유가 있더라도 여전히 4시간 동안 잠길 수 있습니다. 단일 메시지가 짧은 창을 소진했기 때문입니다.

동일한 교리입니다. 다른 통화입니다. 세 가지 설정이 하나의 메시지가 창의 얼마나 많은 부분을 차지할 수 있는지 결정합니다:

Avid - inline image

빠른 모드는 비용이 많이 드는 모드입니다. 방금 더 커진 숫자를 곱하기 때문입니다.

GPT-5.6은 5.5보다 메시지당 훨씬 오래 실행됩니다. 대부분 선물입니다. 그러나 소진량을 예측 불가능하게 만듭니다.

  • Theo는 Sol에서 $200,000 이상의 토큰을 소진했다고 보고합니다.
  • 그는 하나의 5.6 메시지가 5시간 창의 15%를 차지하는 것을 목격했습니다.
  • 승수를 적용하면, 단일 메시지로 창의 40%를 차지합니다.

속도는 공짜가 아닙니다. 속도가 청구하는 것은 어차피 소진하려 했던 토큰에 대한 대가입니다. 속도 문서의 승수를 신뢰하기 전에 다시 읽어보세요: 모델별로 게시되며 변경됩니다.

Ultra는 더 미묘한 함정입니다. 인터페이스가 노력 수준이 있는 곳에 파일을 저장하기 때문이며, 그것은 노력 수준 중 하나가 아닙니다.

  • Max는 깊이입니다. 하나의 모델, 하나의 문제, 단일 추론 체인에 더 많은 시간.
  • Ultra는 폭입니다. 작업이 4개의 에이전트로 분산된 다음 종합됩니다.
  • 다른 축입니다. Ultra는 "Max 이상"이 아닙니다.

진정으로 분할되지 않는 작업에 대해, ultra는 하나의 조사를 복제하는 4개의 에이전트를 구매합니다.

Terminal-Bench 2.1에서 약 3.1포인트, 88.8에서 91.9로, 플릿 규모의 소진에 해당합니다. 하위 문제 간의 경계가 실제가 될 때까지 꺼두십시오.

Sol과 Terra가 모두 올바른 기본값인 이유

현장 보고서는 거의 모든 것에 Sol을 실행합니다. 위의 벤치는 Terra를 Codex 일일 드라이버로 만듭니다. 둘 다 옳으며, 미터가 그 이유입니다.

  • 요금표는 Sol의 출력 비용이 Terra의 두 배라고 말합니다.
  • 좌석은 이미 지불했다고 말합니다.
  • 따라서 유일한 실제 질문은 초록불에 도달하는 데 몇 번의 턴이 필요한지입니다.
  • 더 낮은 노력의 더 강력한 모델은 일반적으로 더 적은 턴이 필요합니다.

요금은 비용이 아닙니다. 비용은 요금 곱하기 초록불까지의 턴 수이며, 두 번째 항이 움직이는 항목입니다.

이것은 BUILD 4의 법칙이 다른 방향에서 도착한 것입니다: 다이얼을 건드리기 전에 좌석을 업그레이드하세요. $200 등급에서 high로 Sol을 읽는 좌석에서, 그 아래의 low로 Sol을 읽습니다. 둘 중 하나를 믿기 전에 측정하세요.

지금 Codex 등급을 설정하세요:

text
1# ~/.codex/config.toml
2model = "gpt-5.6-terra" # 일일 드라이버
3model_reasoning_effort = "medium"
4# service_tier = "fast" # 주석 처리된 상태로 두세요. 빠른 모드는 2.5배 크레딧으로 청구됩니다.
5 # /fast status를 실행하여 이미 활성화되어 있지 않은지 확인하세요.
6
7[profiles.fast] # 기계 작업. "빠른 모드"가 아닙니다: 이
8model = "gpt-5.6-luna" # 프로필은 더 저렴한 모델이지, 2.5배
9model_reasoning_effort = "low" # 미터가 아닙니다. 두 가지 다른 것, 하나의 단어.
10
11[profiles.deep] # 계획, 악성 버그, 리뷰
12model = "gpt-5.6-sol"
13model_reasoning_effort = "high"

CHECK 0: 두 CLI 모두 인증되며, 현재 저장소에서 테스트 명령이 0으로 종료됩니다.

BUILD 1: 헌법

이 모델들은 법칙을 따르고 팁에 맞춰 최적화되므로, 모든 줄에는 숫자, 절대 금지 사항, 또는 이를 확인하는 명령이 필요합니다.

CLAUDE.md 생성:

markdown
1# CLAUDE.md
2
3## 절대 금지 (예외는 먼저 물어봐야 함)
4- 세션 중간에 모델을 전환하지 마십시오. 라우팅은 세션 및 서브에이전트 경계에서만 발생합니다. 작업 중간 교체는 캐시를 소진시킵니다.
5- 자신의 diff를 검토하지 마십시오. 검토는 새로운 컨텍스트 또는 다른 계열에서 이루어져야 합니다. Devin의 리뷰어는 에이전트 PR당 2개의 버그를 잡아내는데, 이는 작성자와 아무것도 공유하지 않기 때문입니다.
6- 테스트를 통과시키기 위해 테스트를 편집, 약화 또는 삭제하지 마십시오. 자동 FAIL입니다.
7- 자기 평가로 완료를 보고하지 마십시오. 완료 = gate/verify.sh 통과.
8- 네 번째 어드바이저 자문을 받지 마십시오. 세 번 실패 = BLOCKED, 인간의 차례입니다.
9- eval_gate.py가 BLOCKED한 라우팅 또는 프롬프트 변경을 병합하지 마십시오.
10- MAX_ITERS 및 BUDGET_USD 두 상한선을 모두 설정하지 않고 루프를 실행하지 마십시오.
11- 프론티어 모델이 가동 중이라고 가정하지 마십시오. 폴백: fable-5 -> opus, sol -> terra. 모든 폴백을 progress.log에 기록하세요.
12- 요청받지 않은 서브에이전트를 생성하지 마십시오. 자식은 부모의 모델 AND 노력을 상속받으므로, 열성적인 플릿은 비싼 좌석을 상속받습니다.
13
14## 파견 (첫 번째 일치가 우선)
15| # | 작업 | 좌석 |
16|---|---|---|
17| 1 | 계획 / 아키텍처 / 마이그레이션 | fable-5 계획, sonnet 실행 |
18| 2 | 추출 / 포맷 / 테스트 / 문서 | haiku 또는 luna |
19| 3 | 60k 토큰 이상의 컨텍스트 | Anthropic 1M 플랫 가격 등급 |
20| 4 | 에이전트가 작성한 코드 검토 | codex를 통한 sol, 네이티브 하네스 |
21| 5 | 모호함 | 난이도 점수: 0-1 저렴함, 2 sonnet, 3+ 프론티어 |
22| 6 | 여전히 확실하지 않음 | 저렴하게 한 번 실행, 확인, 실패 시 한 번 에스컬레이션 |
23
24## 완료
25- 모든 작업은 작업 시작 전에 기계로 확인 가능한 done_when을 가지고 있습니다.
26- 새로운 컨텍스트 리뷰어는 사양과 diff를 비교하여 판단하며, 다른 것은 없습니다.
27- gate/verify.sh는 최종 투표를 보유합니다. 한 항목에 대해 두 번의 메이커/체커
28 불일치 -> 중단, 인간을 위해 대기열에 추가.

저장소 루트에 AGENTS.md를 생성하세요. Codex 언어로 된 동일한 법칙입니다. 100줄에 가깝게 유지하고, 목차이지 백과사전이 아닙니다:

markdown
1# AGENTS.md
2
3## 명령어
4| 목적 | 명령어 |
5|---|---|
6| 테스트 | make test (이 명령어가 완료의 정의입니다) |
7| 린트 | make lint |
8
9## 세션 프로토콜
101. 먼저 progress.log와 TASKS.md를 읽습니다. 2. 하나의 체크되지 않은 작업.
113. 구현하고, 전체 스위트를 실행하고, 초록불일 때만 커밋하고, 설명적인 메시지를 작성합니다.
124. 작업에 체크 표시를 하고, progress.log에 한 줄을 추가하고, 중단합니다.
13테스트가 완료를 정의합니다. 절대 테스트를 약화, 건너뛰기 또는 삭제하지 마십시오. 잘못된 테스트 =
14작업을 BLOCKED로 표시하고 그 이유를 말합니다.
15
16## 모델 정책
17기본값: terra, 중간 노력. 기계 작업: 프로필 fast (luna, low).
18계획 및 악성 버그: 프로필 deep (sol, high).
19모델보다 노력이 먼저입니다. 프로필은 세션 시작 시 선택되며, 작업 중간에 변경되지 않습니다.
20빠른 모드 OFF (2.5배 크레딧). Ultra OFF. 둘 다 노력 수준이 아닙니다.
21내가 요청할 때만 서브에이전트를 생성합니다. 자식은 이 세션의 모델 AND 추론 수준을 상속받으므로,
22높은 노력에서 열성적인 생성은 전체 플릿이 높은 노력이 되는 것을 의미합니다.
23
24## 막힘
25신호: 동일한 오류 두 번; 진행 없는 단계 두 번; 두 개의 다른 수정에서 살아남는 테스트. 그런 다음 /fable-advice. 최대 3번의 자문, 그 후 BLOCKED.
26
27## 검토
28병합 전에 새로운 세션에서 /review-hostile을 실행하거나, Claude 측의 교차 차선을 사용하세요.
29자신의 검토되지 않은 작업을 절대 병합하지 마십시오.

하나의 교리는 양쪽에 존재해야 합니다. 그렇지 않으면 더 느슨한 습관을 가진 하네스가 도구를 전환할 때마다 승리합니다.

CHECK 1: 모든 줄에 대해 모델이 80% 준수하고 성공했다고 주장할 수 있는지 물어보십시오. 그렇다면 숫자 또는 절대 금지 사항으로 다시 작성하십시오. wc -l CLAUDE.md가 60 미만입니다.

BUILD 2: 게이트

다른 모든 것이 존재하기 전에 bash 스크립트가 최종 투표를 보유해야 합니다. 이후의 모든 빌드가 이를 가정하기 때문입니다.

스택에 대한 gate/verify.sh 생성:

bash
1#!/usr/bin/env bash
2set -e
3npm run typecheck --if-present
4npm test --if-present
5npm run lint --if-present

모든 미래의 라우팅 또는 프롬프트 변경을 위한 안전벨트인 gate/eval_gate.py를 생성하세요. 50~500개의 보류된 사례를 현재 구성과 제안된 구성을 통해 결정론적 검사만으로 실행합니다:

python
1for case in cases: # {prompt, must_include, must_not_include, max_words}
2 hits += passes(case, run_config(case.prompt))
3verdict = "SHIP" if new_score >= old_score - 0.02 else "BLOCKED"

그런 다음 게이트를 스킬로 건너뛸 수 없게 만듭니다. .claude/skills/ship-gate/SKILL.md:

markdown
1---
2name: ship-gate
3description: 라우팅 규칙, 모델 변경, 시스템 프롬프트 수정, 난이도 조정, 또는 라우터/프롬프트/모델 설정에 영향을 미치는 모든 변경 사항을 배포하기 전에 평가 게이트를 실행합니다. 사용자가 라우팅 규칙 변경, 모델 티어 교체, 시스템 프롬프트 편집, 난이도 수준 조정, 또는 라우터/프롬프트/모델 설정과 관련된 모든 병합을 요청할 때 사용합니다.
4---
5
6# Ship gate (배포 게이트)
7
8라우팅이나 프롬프트에 대한 모든 변경은 게이트가 승인하기 전까지 품질 도박입니다. 이 스킬은 그 도박이 조용히 배포되지 않도록 하기 위해 존재합니다.
9
10 1. eval/cases.jsonl 파일을 찾습니다. 파일이 없으면 중단하고, 사용자에게 먼저 실제 트래픽에서 추출한 50~500개의 대표 케이스를 구축하라고 지시합니다. 직접 케이스를 임의로 생성하지 마십시오.
11 2. 실행: python3 eval_gate.py eval/cases.jsonl, 현재 설정 대비 제안된 설정을 비교합니다.
12 3. BLOCKED (차단): 두 점수를 모두 보고하고, 어떤 케이스에서 성능이 저하되었는지 나열하며, 변경 사항을 적용하지 말고, 게이트를 통과시킬 수 있는 최소한의 롤백을 제안합니다.
13 4. SHIP (배포 승인): 변경 사항을 적용하고, progress.log에 두 점수와 함께 한 줄을 추가합니다.
14
15엄격한 규칙:
16 - BLOCKED (차단) 판정을 절대 무시하지 마십시오. 정중한 요청이 있어도 안 됩니다. 실패한 케이스를 첨부하여 담당자에게 에스컬레이션하십시오.
17 - 라우팅 변경과 동일한 세션에서 케이스 파일을 편집하지 마십시오. 게이트와 변경 사항의 작성자는 달라야 합니다.
18 - 비용 수치는 품질 저하에 대한 변명이 될 수 없습니다. 게이트의 판정이 우선합니다.

게이트는 결정론적 검사만 사용합니다. 검증자를 검증하는 사람(누가 검증자를 검증할 것인가) 문제를 절대 상속받지 않아야 하기 때문입니다. 평가 게이트 없이 라우팅을 변경하는 것은 고객을 대상으로 실행하는 비용 실험에 불과합니다.

CHECK 2: ./gate/verify.sh가 오늘 종료 코드 0을 반환하고, eval_gate.py가 데모에서 SHIP을 출력하는지 확인합니다. verify.sh가 지금 실패하면, 다른 모든 것보다 먼저 수정하십시오. 시스템은 이 스크립트 위에 구축됩니다.

BUILD 3: The Heartbeat (하트비트)

모델은 지능을 가져오고, 루프는 규율을 가져옵니다.

  • 반복마다 새로운 컨텍스트는 컨텍스트 부패를 방지합니다
  • 리포지토리가 모든 기억을 저장합니다
  • 두 개의 상한선(cap)은 통제 불능 에이전트를 10달러짜리 교훈으로 만듭니다

이것은 Anthropic의 16-루프 실행이 약 2만 달러의 비용으로 10만 줄 분량의 C 컴파일러를 구축했을 때 사용한 정확한 형태이며, 오케스트레이터 모델은 어디에도 없었습니다.

loop/PROMPT.md 파일을 생성합니다:

markdown
1progress.log와 TASKS.md를 읽으십시오. 정확히 하나의 체크되지 않은 작업을 선택하십시오.
2해당 작업을 구현하십시오. 테스트를 실행하십시오. 통과하면: 설명적인 메시지와 함께 커밋하고,
3작업을 체크(완료 표시)한 후, progress.log에 한 줄을 추가하고 중단하십시오.
4동일한 작업이 두 번 실패하면, 오류와 함께 BLOCKED(차단)로 표시하고 중단하십시오.
5모든 작업이 체크되고 전체 테스트 스위트가 통과된 경우에만 DONE이라는 파일을 생성하십시오.
6테스트를 통과시키기 위해 테스트 자체를 편집하지 마십시오.

loop/ralph.sh 파일을 생성합니다:

bash
1#!/usr/bin/env bash
2set -u
3MAX_ITERS="${MAX_ITERS:-25}" # cap one: iterations
4BUDGET_USD="${BUDGET_USD:-10}" # cap two: dollars
5MAX_FAILS=3; fails=0; spent=0; i=0
6
7while [ ! -f DONE ] && [ "$i" -lt "$MAX_ITERS" ]; do
8 i=$((i + 1))
9 # fresh session every iteration: no memory except the repo itself
10 claude -p "$(cat PROMPT.md)" --max-turns 30 \
11 --output-format json > out.json 2> err.log \
12 && fails=0 || fails=$((fails + 1))
13 [ "$fails" -ge "$MAX_FAILS" ] && exit 2 # circuit breaker
14 cost=$(jq -r '.total_cost_usd // 0' out.json)
15 spent=$(awk -v a="$spent" -v b="$cost" 'BEGIN{printf "%.4f", a+b}')
16 awk -v s="$spent" -v c="$BUDGET_USD" 'BEGIN{exit !(s>c)}' && exit 3 # cap
17 sleep 2
18done
19[ -f DONE ] && echo "done in $i ticks, \$$spent" || echo "cap hit, \$$spent"

claude 라인을 codex exec로 바꾸면 동일한 루프가 GPT-5.6을 구동합니다.

종료 맵은 의도적입니다: 0은 완료 또는 정지, 2는 회로 차단기, 3은 예산 초과입니다. BUILD 12의 모든 알람은 이 값을 기준으로 작동합니다.

비용 라인은 세션 자체의 JSON 비용 보고서를 읽으므로, 상한선은 예산이 아닌 실제 지출을 기준으로 하네스(harnes)에 의해 적용됩니다.

해당 프롬프트에서 중단(stop) 지점을 세어보십시오. 모든 분기(branch)는 중단으로 끝나며, 이것이 설계이지 단순한 버그가 아닙니다.

이 세대는 이전 세대보다 메시지당 실행 시간이 훨씬 깁니다. 대부분은 장점입니다. 가끔은 비용 청구서이기도 합니다. 왜냐하면 더 이상 계속 실행하라는 격려가 필요 없는 모델은 당신이 확인하고 싶었던 지점을 네 단계나 지나쳐 작업을 계속 수행할 수 있기 때문입니다.

루프는 이 문제를 구조적으로 해결합니다: 틱(tick)당 하나의 작업, 끝에서 하드 스탑(hard stop)입니다.

대화형으로는 직접 말로 해야 합니다. 두 개의 프롬프트가 이 작업을 수행합니다:

  • "계획을 먼저 작성하고, 빌드를 시작하기 전에 멈춰서 나에게 보여줘"
  • 계획이 승인되면: "빌드하고, 테스트하고, PR을 열고, 첫 번째 리뷰 라운드의 코멘트를 처리한 다음 멈춰"

오래 실행되는 모델은 경계가 어디인지 알려주지 않았을 때만 위험합니다.

긴 작업은 컨텍스트가 실패하는 방식과 동일하게 실패하므로, 반복은 짧게 유지되고 환경이 기억을 담당합니다. Fable 5와 Codex 모델은 이제 실행 중에 자체 컨텍스트를 압축하므로, 영리한 메모리 파이프라인을 추가하는 것은 자제하십시오; 적절한 양은 분기마다 줄어들고 있습니다.

CHECK 3: TASKS.md에 두 개의 아주 작은 실제 작업을 넣고, BUDGET_USD=2로 수동으로 한 번의 틱을 실행합니다. 하나의 커밋, 하나의 체크된 작업, 하나의 로그 라인이 생성되고, 루프가 두 번째 작업을 시작하지 않고 종료되는지 확인합니다.

BUILD 4: The Router That Earns Its Job (제 역할을 하는 라우터, 모델 그 다음 노력)

2026년 가장 엄격한 라우팅 벤치마크인 LLMRouterBench는 많은 라우터(상용 라우터 포함)가 최고의 단일 모델을 선택하는 것보다 확실히 더 나은 성능을 보여주지 못한다는 사실을 발견했습니다. 따라서 라우터는 자체 트래픽에서 무죄가 입증될 때까지 유죄입니다.

코드 작성 전의 결정 규칙입니다. 다음 두 가지 조건이 모두 참일 때만 라우터를 추가하십시오:

  • 저렴한 티어와 프론티어 티어 간에 자체 트래픽에서 대략 5배 정도의 성능 대비 비용 차이가 나타납니다
  • BUILD 2의 평가 세트가 이를 감독할 수 있도록 존재합니다

잘 선택된 하나의 모델이 해당 평가에서 라우터를 능가한다면, 라우터를 삭제하고 단순함을 유지하십시오.

기준을 통과하면, router/router.py는 세 가지 레이어를 실행하며, 가장 저렴한 결정부터 먼저 수행합니다. 티어는 좌석(seat) 이름을 지정하며, 가격을 지정하지 않는다는 점에 유의하십시오: 요금은 런타임에 bench 스킬에서 가져오므로, 가격 변동이 라우터에 영향을 미치지 않습니다.

python
1TIERS = { # seats, not numbers
2 "cheap": "gpt-5.6-luna", # or claude-haiku-4-5
3 "mid": "claude-sonnet-5",
4 "frontier": "claude-fable-5", # or gpt-5.6-sol
5}
6PRICES = load_bench(".claude/skills/model-bench/SKILL.md") # one source of truth
7
8RULES = [
9 (kind in {"extract", "format", "summarize"}, "cheap"),
10 (kind in {"plan", "architect", "migrate"}, "frontier"),
11 (context_length > 60_000, "mid"),
12]
13tier = layer1_rules(task) or layer2_classifier(task)
14if tier: return call(TIERS[tier], task)
15return cascade(task) # cheap first, verify, escalate ONCE on fail

중간 레이어는 읽을 수 있는 마커(why, debug, race, deadlock, refactor, security, 프롬프트 내 코드, 이전 실패 시도, 둘 이상의 서브시스템 접촉 등)를 기반으로 난이도를 채점합니다.

0점 또는 1점이면 저렴한 티어(cheap)로 이동합니다. 2점이면 중간 티어(mid)로 이동합니다. 3점 이상이면 프론티어 티어(frontier)로 이동합니다. 캐스케이드(cascade)의 검증기는 결정론적이며 정확히 한 번만 에스컬레이션됩니다.

호출하지 않아도 자동으로 발동되도록 동일한 결정을 하네스에 연결합니다. .claude/skills/model-router/SKILL.md. 스킬은 규칙을 다시 설명하지 않고 읽는다는 점에 유의하십시오. 이는 bench가 가격을 위해 사용하는 것과 동일한 단일 진실 공급원(single-source-of-truth) 트릭입니다:

markdown
1---
2name: model-router
3description: 각 작업을 시작하기 전에 올바른 시트(seat)와 노력 수준으로 라우팅합니다.
4 세션 시작 시, 하위 에이전트를 생성하기 전, 사용자가 어떤 모델을 사용할지 물을 때,
5 또는 작업이 계획과 실행을 혼합할 때 사용합니다.
6---
7
8# Model router (모델 라우터)
9
10ROUTING.md를 읽고 적용하십시오. 정책을 임의로 만들지 말고, 여기에 다시 설명하지 마십시오:
11이 파일은 썩을 수 있고, 정책 파일은 평가 게이트 아래에 있는 파일입니다.
12
13이 스킬이 해당 파일 위에 추가로 적용하는 세 가지 사항:
14
15 1. 경계(boundary)에서만 라우팅하십시오. 세션 시작과 하위 에이전트 생성 시점입니다. 작업 중간에 교체하면 캐시가 무효화되고 캐시된 요금의 10배에 해당하는 비용으로 컨텍스트가 다시 청구됩니다.
16 2. 세션 종료 시, 저렴한 티어(cheap tier)의 비율을 progress.log에 추가하십시오. 대부분의 트래픽이 저렴한 티어로 전환되어야만 절감 효과가 누적되므로, 이 숫자가 주목해야 할 지표입니다.
17 3. ROUTING.md에 대한 모든 변경 사항은 ship-gate 스킬을 통해 배포되어야 합니다. 예외는 없습니다.

결정 순서는 비용을 반영합니다: 먼저 무료 검사, 그 다음 점수 기반 추측, 마지막으로 유료 실험입니다.

핵심은 트래픽 분할(traffic split)이지, 지능적인 알고리즘이 아닙니다.

  • 작업의 70%를 가격이 10분의 1인 티어로 보내면 비용은 약 3분의 2로 감소합니다
  • 프로덕션 보고서는 40%에서 85% 사이의 절감률을 보여주며, 그 차이는 거의 전적으로 분할 비율에 기인합니다
  • 대부분의 트래픽이 저렴한 티어로 전환된 후에야 절감 효과가 누적됩니다

이것이 progress.log의 저렴한 티어 비율이 이 시스템이 당신이 주시하도록 강제하는 유일한 숫자인 이유입니다.

Effort is the second dial (노력은 두 번째 다이얼입니다)

노력은 한 단계 아래의 라우팅입니다: 어떤 모델을 실행할지 대신 모델이 얼마나 오래 생각할지에 동일한 스킬을 적용하는 것입니다.

모든 도구는 이 다이얼을 서로 다른 기본값에 숨깁니다. Claude Code에서는 높음(High). Codex에서는 중간(Medium). 대부분의 앱에서는 숨겨져 있습니다. 그래서 사람들은 모든 것에 대해 하나의 설정만 사용하고, 비용을 과도하게 지불하거나 충분히 생각하지 못하게 됩니다.

Avid - inline image

기본값은 높음(high)으로 설정하고, 최대(max)는 최후의 수단으로 간주하십시오. 과시용이 아닙니다.

  • Anthropic의 자체 노력 문서는 최적점(sweet spot)을 높음(high)으로 지정하고, 최대(max)는 과도한 사고(overthinking)로 이어질 수 있다고 경고합니다
  • 26개의 코딩 작업에 대한 하나의 공개 벤치마크는 높음(high)이 낮음(low)에 비해 품질을 대략 3배 향상시킨다는 것을 발견했습니다
  • 동일한 벤치마크는 xhigh가 비용이 두 배 이상 들지만 그 이득이 거의 본전을 찾지 못한다는 것을 발견했습니다

모델은 다이얼만큼 중요합니다. 낮은 노력으로 실행되는 Fable 5는 종종 xhigh에서 실행되는 이전 모델을 능가하므로, 더 높은 설정보다 더 나은 모델을 먼저 선택하십시오.

이 사다리의 더 높은 단계로 오인되는 두 가지 설정이 있습니다. 둘 다 여기에 해당하지 않습니다.

  • Max는 깊이(depth)입니다. 하나의 모델, 하나의 문제, 더 많은 시간.
  • Ultra는 폭(width)입니다. 하나의 작업을 네 개의 병렬 에이전트로 분산시킨 후 종합합니다.

서로 다른 축입니다. Ultra는 "Max 이상"이 아니며, 진정으로 분할할 수 없는 작업에 Ultra를 적용하면 네 명의 에이전트가 하나의 조사를 중복 수행하게 됩니다.

이 사다리는 버전 간에 이식되지 않습니다. 동일한 단어라도 새 모델에서는 이전 모델과 다른 양의 사고 시간을 의미합니다.

익숙한 작업을 새 시트(seat)로 이동할 때는 신뢰하는 설정보다 한 단계 낮은 곳에서 시작하십시오. 출력이 요청할 때만 올라가십시오.

스웜(swarm)과 관련된 하나의 함정이 특별히 있습니다.

하위 에이전트는 상위 에이전트의 모델과 노력 수준을 상속받습니다. 최대 노력(max-effort) 지휘자(conductor)에서 생성된 함대는 최대 노력 함대이며, 단일 메시지로 창(window)을 고갈시킵니다.

자체 frontmatter에서 하위 에이전트를 고정(pin)하고, 그렇게 할 때 어떤 하네스에 있는지 알아야 합니다. 고정은 그것을 읽는 생성자(spawner)만큼만 신뢰할 수 있기 때문입니다.

  • Claude 측. 아래의 frontmatter가 제어 수단입니다.
  • Codex 측. 5.6은 상위 에이전트의 모델과 추론 수준으로 하위 에이전트를 생성하며, 적극적으로 생성합니다(eagerly). 상위 에이전트의 다이얼이 함대의 다이얼입니다.

Codex 측에서 유일한 실제 제어 수단은 세션을 시작할 때 설정한 값과 AGENTS.md에 "요청하지 않으면 생성하지 마십시오"라고 명시된 한 줄입니다. 어느 것을 신뢰하기 전에 확인하십시오:

yaml
1name: scout
2model: haiku
3effort: low # subagents inherit the parent. a max-effort swarm
4 # empties a window in one message. pin them down.

도구별로 설정하십시오: Claude Code와 Codex TUI의 /effort, codex -e high와 같은 플래그, config의 한 줄, 또는 API의 effort 필드입니다.

모델 라우팅은 누가 생각할지 결정합니다. 노력 라우팅은 얼마나 오래 생각할지 결정하며, 설정의 다른 어떤 것도 변경되지 않고 캐시가 유지되므로 두 번째 다이얼을 돌리는 것이 더 저렴합니다. 루프가 분기(branch)하는 곳에 노력을 투자하십시오. 다른 모든 곳은 세금입니다.

매주 하나의 숫자를 추적하십시오:

bash
1grep '^route' progress.log | awk -F'\t' \
2 '{r++; if($3!="frontier")c++} END{printf "cheap share: %.0f%%\n", c/r*100}'

ROUTING.md, the policy both harnesses read (두 하네스가 모두 읽는 정책 파일)

위의 모든 내용이 리포지토리 루트의 하나의 파일로 압축됩니다.

markdown
1# ROUTING.md
2
3라우팅은 네 가지 결정이며, 순서가 중요합니다:
4 1. WHERE (어디서): 어떤 하네스가 작업을 실행할지
5 2. WHEN (언제): 어느 경계에서 결정이 내려질지
6 3. WHO (누가): 어떤 모델이 시트(seat)를 차지할지
7 4. HOW HARD (얼마나): 해당 모델이 어떤 노력 수준으로 실행될지
8대부분의 팀은 오직 3번에 대해서만 논쟁합니다. 돈은 2번과 4번에 있습니다.
9
10## 1. WHERE: harness before model (모델보다 하네스를 먼저 선택하라)
11하네스 내에서 사후 훈련(post-trained)된 모델은 다른 곳에서는 분포 외(out of distribution) 성능을 보입니다.
12측정된 차이: 동일한 가중치에서 네이티브(native) 20.2% 대 외부(foreign) 7.7%.
13
14| 작업 | 하네스 | 이유 |
15|---|---|---|
16| 코드 작성 | 모델의 네이티브 하네스 | 작성자는 분포 외에서 성능 저하 |
17| 코드 리뷰 | 리뷰어의 네이티브 하네스 | 약한 리뷰는 없는 것보다 나쁨 |
18| 읽기, 스카우팅(scouting) | 어디든 | 읽기는 저렴하고 검증 가능 |
19| 기계적 변환 | 어디든 | 검사가 결정론적이라면 하네스는 거의 중요하지 않음 |
20
21규칙(LAW): 리더(reader)와 리뷰어(reviewer) 레인(lane)을 자유롭게 재매핑하십시오. 라이터(writer) 레인은 자체 평가 세트가 달리 지시할 때까지 하네스 네이티브를 유지합니다. 해당 재정의는 선호도가 아닌 측정값이어야 합니다.
22
23## 2. WHEN: route at boundaries, never inside them (경계에서 라우팅하고, 내부에서는 절대 하지 마라)
24세션 중간에 교체하면 프롬프트 캐시가 무효화됩니다. 캐시된 입력 비용은 새 입력의 10분의 1이므로, 불필요한 교체는 전체 컨텍스트를 10배의 가격으로 다시 청구하고 아무 이득도 없습니다.
25
26합법적인 경계, 라우팅 결정이 발생할 수 있는 유일한 장소:
27 - 세션 시작
28 - 하위 에이전트 생성
29 - 스웜 내 새로운 목표
30 - 다른 계열(lineage)로의 리뷰 핸드오프
31 - 장애 또는 보호 장치(safeguard)에 의해 트리거된 폴백(fallback)
32
33다른 모든 곳은 불법입니다. 턴(turn)별 라우팅 금지. 작업 중 적응형 교체 금지. 캐스케이드는 정확히 한 번의 에스컬레이션을 허용하며, 새로운 경계를 엽니다.
34
35규칙(LAW): 경계가 열릴 때 시트를 선택하고, 다음 경계까지 그 상태를 유지하십시오.
36
37## 3. WHO: the decision procedure (first match wins, log the result) (결정 절차, 첫 번째 일치가 승리하며 결과를 기록)
38
39레이어 1, 규칙. 무료. 항상 먼저 확인하십시오.
40
41| 신호 | 시트 |
42|---|---|
43| extract / format / summarize / classify / tests | Haiku 또는 Luna, 노력 낮음(low) |
44| plan / architect / migrate / root-cause | Fable 계획, Sonnet 실행 |
45| 6만 토큰 이상의 컨텍스트 | Anthropic 100만 토큰 티어 (고정 가격) |
46| 에이전트가 작성한 코드 리뷰 | 다른 계열(lineage), 네이티브 하네스 |
47| 목표가 독립적인 부분으로 분할됨 | 스웜: Fable이 작성 및 채점 |
48
49레이어 2, 점수. 각 항목당 1점:
50 - why / debug / race / deadlock / refactor / security / optimize 단어 포함
51 - 둘 이상의 서브시스템에 영향
52 - 이전 시도가 이미 실패함
53 - 변경이 되돌릴 수 없거나 사용자에게 직접 노출됨
54 0-1 -> 저렴한 티어(cheap tier), 낮은 노력(low effort). 2 -> Sonnet, 중간 노력(medium). 3+ -> 프론티어(frontier), 높은 노력(high).
55
56레이어 3, 캐스케이드(cascade). 저렴한 모델로 실행하고, 결정론적으로 검증하며, 정확히 한 번만 에스컬레이션합니다. 절대 두 번 하지 마십시오. 두 번째 실패는 사양(spec) 문제이며, 더 큰 모델이 사양을 고쳐주지 않습니다.
57
58시트와 폴백은 .claude/skills/model-bench/SKILL.md에 있습니다. 여기에는 가격 정보가 없습니다.
59
60## 4. HOW HARD: effort routing (노력 라우팅)
61노력은 한 단계 아래의 라우팅입니다. 이 파일에서 가장 저렴한 다이얼: 다른 것은 변경되지 않고 캐시가 유지됩니다.
62
63| 노력 수준 | 사용처 |
64|---|---|
65| 낮음(low) | 오타, 이름 변경, 정렬, 추출, 모든 하위 에이전트 기본값 |
66| 중간(medium) | 명확한 사양의 일상적인 코드, 요약, 표준 글쓰기 |
67| 높음(high) | 분해(teardown), 마이그레이션, 까다로운 버그, 모든 지휘자 작업 (기본값) |
68| 최대(max) | 높음(high)이 이미 해결하지 못한 문제만 |
69| 울트라(ultra) | 이 사다리에 없음. 깊이(depth)가 아닌 폭(width): 4개 에이전트 병렬. 기본적으로 비활성화 |
70
71 1. 기본값은 높음(high)입니다. 최적점은 여기에 있습니다; 최대(max)는 과도한 사고로 이어집니다.
72 2. 더 나은 모델이 더 높은 다이얼보다 낫습니다. 설정보다 먼저 시트를 업그레이드하십시오.
73 3. 하위 에이전트는 상위 에이전트의 모델과 노력을 상속받습니다. 최대 노력 지휘자에서 생성된 함대는 최대 노력으로 실행되며 단일 메시지로 창을 고갈시킵니다. 모든 하위 에이전트를 자체 frontmatter에 고정하십시오: effort: low. 생성자가 고정을 무시하는 경우, 상위 에이전트의 다이얼이 함대의 다이얼입니다. 어떤 케이스인지 확인하십시오.
74 4. Max는 깊이(depth)입니다. Ultra는 폭(width)입니다. 하위 문제가 진정으로 독립적인 경우에만 Ultra를 사용하고, 기본값으로 사용하지 말며, 하네스가 과도하게 생성(over-spawn)하는 동안에는 전혀 사용하지 마십시오.
75 5. 이 사다리는 버전 간에 이식되지 않습니다. 새 모델에서는 이전 모델에서 신뢰했던 설정보다 한 단계 아래에서 시작하십시오.
76 6. 빠른 모드(fast mode)도 노력 수준이 아닙니다. 어차피 소비하고 있던 토큰에 대해 2.5배 크레딧으로 지연 시간을 단축합니다. 비활성화 상태.
77다이얼은 네 곳에 있습니다: Claude Code와 Codex TUI의 /effort, codex -e high, config의 model_reasoning_effort, API의 effort 필드. Claude Code는 기본값이 높음(high), Codex는 기본값이 중간(medium), 대부분의 앱은 완전히 숨겨서, 팀이 실수로 모든 것에 대해 하나의 수준만 사용하는 이유입니다.
78
79## 5. Fallbacks: assume the frontier is down (폴백: 프론티어가 다운되었다고 가정하라)
80프론티어 가용성은 보장되지 않으며, 보호 장치(safeguard)가 실행 중에 Opus 4.8로 호출을 재라우팅할 수 있으며, 세션의 5% 미만에서 오류 없이 발생합니다.
81 - 모든 시트에는 명명된 폴백이 있습니다. 예외는 없습니다.
82 - 모든 폴백은 기록됩니다. 자동 재라우팅은 버그입니다. 선택하지 않은 모델의 출력을 읽고 있을 수 있기 때문입니다.
83 - 선택하지 않은 모델의 출력을 절대 반복적으로 개선하지 마십시오.
84
85## 6. The number that decides whether any of this worked (이 모든 것이 효과가 있었는지 결정하는 숫자)
86혼합 비용(blended cost)은 트래픽 분할(traffic split)이며, 다른 것은 없습니다. 70% 저렴한 티어는 비용을 약 3분의 2로 줄입니다. 10%는 용돈만큼 절약합니다. 라우터 정확도는 라우터의 지능보다 훨씬 중요합니다.
87
88BUILD 4의 한 줄 명령어로 추적하십시오. 50% 미만이면 절감 효과가 아직 누적되기 시작하지 않은 것입니다. 여기의 다른 모든 것을 건드리기 전에 분할 비율을 먼저 수정하십시오.
89
90## 7. The gate on this file (이 파일의 게이트)
91규칙(LAW): 이 파일에 대한 변경 사항은 eval_gate.py가 50~500개의 보류 케이스(held-out cases)에서 통과할 때까지 배포되지 않습니다. BLOCKED(차단) 판정은 최종적이며 세션 내에서 재정의될 수 없습니다. 게이트와 변경 사항의 작성자는 달라야 합니다.
92
93## 8. When to delete this file (이 파일을 삭제해야 하는 경우)
94잘 선택된 단일 모델이 평가에서 이 전체 스택을 능가한다면, 라우터를 삭제하고 단순함을 유지하십시오. 2026년 가장 엄격한 라우팅 벤치마크는 많은 상용 라우터를 포함한 많은 라우터가 최고의 단일 모델을 선택하는 것보다 확실히 더 나은 성능을 보여주지 못한다는 것을 발견했습니다.
95먼저 측정하십시오. 그 다음 라우팅하십시오. 기꺼이 삭제하십시오.

CHECK 4: router.py가 오프라인으로 실행되고 결정, 이유 및 분할 비율을 출력합니다. 당신의 노트에는 5배 차이 측정값 또는 라우터가 아직 정당화되지 않았다는 날짜가 적힌 메모가 있어야 합니다.

BUILD 5: The Advisor Inversion (어드바이저 역전)

고전적인 패턴은 똑똑한 모델을 책임자로 두고 대량 실행에 프론티어 토큰을 소모합니다. 이를 역전시키십시오.

Anthropic의 어드바이저 결과: Opus급 어드바이저를 갖춘 Haiku는 어려운 브라우징 벤치마크에서 점수를 두 배 이상 높였습니다(41.2 대 19.7, 단독 사용 시), 중간 티어보다 작업당 비용이 85% 낮았습니다.

실행은 대량입니다. 조언은 그램 단위입니다.

하네스는 드라이버가 막혔을 때를 결정하며, 드라이버가 절대 결정하지 않습니다. .claude/skills/stuck-protocol/SKILL.md:

markdown
1---
2name: stuck-protocol
3description: 진행이 정체될 때 fable-expert 어드바이저에게 에스컬레이션합니다. 동일한
4 오류가 두 번 나타날 때, 오류가 지속되는 동안 두 번의 연속 단계에서 파일이 변경되지 않을 때,
5 두 번의 뚜렷한 수정 시도 후에도 테스트가 실패할 때, 또는 사용자가 에이전트가 제자리
6 맴돌고 있다고 말할 때 사용합니다.
7---
8
9# Stuck protocol (the advisor inversion) (스턱 프로토콜, 어드바이저 역전)
10
11당신은 저렴한 드라이버이며 이것이 기능입니다: 실행은 대량이고, 조언은 그램 단위입니다.
12그러나 작은 모델은 과신하기 때문에, 당신이 괜찮다고 결정할 수 없습니다. 대신 결정론적 신호를 확인하십시오.
13
14스턱 신호 (하나라도 해당되면 프로토콜이 실행됩니다):
15 1. 두 번의 연속 단계에서 동일한 오류 문자열.
16 2. 오류가 지속되는 동안 두 번의 연속 단계에서 파일 변경이 0건.
17 3. 두 번의 진정으로 다른 수정 시도 후에도 동일한 테스트 실패.
18
19절차:
20 1. 이 세션의 컨설트(consult) 횟수를 셉니다. 3회에 도달하면 중단: 오류를 첨부하여 작업을 BLOCKED(차단)로 표시하고, 사람에게 요약한 후 넘어가십시오. 네 번째 컨설트는 절대 안 됩니다.
21 2. 브리프(brief)를 작성합니다. 다른 것은 포함하지 마십시오:
22 GOAL: 한 줄
23 ATTEMPT x2: 마지막 두 번의 시도, 각각 200자
24 ERROR: 정확한 오류, 300자
25 3. 브리프와 함께 fable-expert를 생성(spawn)합니다. 코드가 아닌 지침(guidance)을 반환합니다.
26 4. 다음 단계에서 즉시, 당신의 어떤 것보다 먼저 지침을 적용합니다.
27 5. progress.log에 한 줄을 추가합니다: consult #N, 내용, 성공 여부.
28
29엄격한 규칙:
30 - 전문가에게 작업을 수행하도록 요청하지 마십시오. 응답에 전체 구현이 포함된 경우, 아이디어만 취하고 코드는 폐기하십시오.
31 - 브리프에 당신의 추론 기록을 덧붙이지 마십시오. 전문가의 가치는 깨끗한 컨텍스트입니다; 긴 브리프는 그것을 오염시킵니다.
32 - 지침이 실패하면, 다음 컨설트를 위한 두 번의 시도 중 하나로 계산됩니다. 세 번의 실패한 컨설트는 작업이 이 세션의 처리 능력 이상임을 의미하며, 그렇게 말하는 것이 올바른 출력입니다.

전문가 시트, .claude/agents/fable-expert.md:

markdown
1---
2name: fable-expert
3description: 스턱 상황을 위한 프론티어 어드바이저. stuck-protocol로부터 간결한 브리프를
4 받고, 600 토큰 미만의 지침을 반환하며, 절대 작업 자체를 수행하지 않습니다.
5model: claude-fable-5 # 보존 규칙이 문제가 되면 opus로 교체
6effort: high
7tools: Read, Grep, Glob # 읽을 수는 있지만, 편집할 수는 없음
8---
9
10당신은 전문 컨설턴트이지, 계약자가 아닙니다. 더 저렴한 모델이 운전 중이며 벽에 부딪혔습니다.
11당신의 가치는 그램 단위의 판단력과 깨끗한 컨텍스트입니다: 당신은 드라이버가 어떻게 여기까지 왔는지 전혀 모르며, 이것이 바로 당신의 판단이 더 예리한 이유입니다.
12
13당신은 브리프를 받습니다: GOAL, 마지막 두 번의 ATTEMPT, 그리고 ERROR. 브리프에 특정 파일이 언급된 경우, 해당 파일을 읽을 수 있습니다. 어떤 것도 편집할 수 없습니다.
14
15 1. 브리프에 필요한 것이 누락된 경우, 누락된 것이 무엇인지 한 줄로 답변하십시오. 빈 구멍을 추측하지 마십시오.
16 2. 처방하기 전에 진단하십시오: 실제로 무엇이 잘못되었는지 한두 문장으로 설명하십시오.
17 3. 그런 다음 이 형식으로 답변하고 그 이후에는 아무것도 작성하지 마십시오:
18 GUIDANCE:
19 1. (가장 가능성 높은 수정: 무엇을 시도할 것인지, 그리고 왜 작동해야 하는지)
20 2. (1이 실패할 경우 대비책)
21 3. (진정으로 구별되는 세 번째 경로가 있는 경우에만)
22 CONFIDENCE: high | medium | low
23 4. 600 토큰 미만. 10줄이 넘는 코드 블록은 금지. 아이디어를 제시하고 구현을 제공하지 마십시오. 답변에 전체 솔루션이 포함된 경우, 역할을 실패한 것입니다.
24 5. 작업 자체가 잘못 구상된 경우, 항목 1에서 그렇게 말하고 사람에게 무엇을 알릴지 권장하십시오.
25
26운영자 참고: 조직에서 Mythos 클래스의 보존 규칙을 수용할 수 없는 경우, model 라인을 opus로 변경하십시오. 역할은 동일하게 작동합니다; 어드바이저 결과는 Opus 클래스 어드바이저로 처음 입증되었습니다.

그리고 Codex 세션을 위한 동일한 레인의 역방향, ~/.codex/prompts/fable-advice.md:

bash
1claude --model claude-fable-5 -p "You are an expert advisor.
2 A cheaper model is driving and is stuck. BRIEF: <goal, two
3 attempts, error>. Reply GUIDANCE: up to 3 numbered items,
4 under 600 tokens. Do not do the work."

작은 모델은 과신하기 때문에, 하네스는 묻는 대신 행동을 관찰합니다.

브리프는 작게 유지됩니다. 전문가의 가치는 깨끗한 컨텍스트이며, 긴 브리프는 그것을 오염시키기 때문입니다.

각 컨설트는 수백 토큰의 지침을 실행합니다. 이것이 경제성이 붕괴되는 이유입니다: 실행 수백만 건은 $1 티어를 타고, 판단력은 그램 단위로 $50 per million에 도착합니다.

Cognition이 먼저 실패를 발표했습니다. 한계는 어드바이저가 아닌 드라이버에 의해 결정되며, 패턴은 드라이버가 한 세대 개선된 후에야 성과를 거두었습니다.

열린 문제는 드라이버가 스스로 막혔음을 인지하는 것입니다. 이것이 위의 신호가 행동 기반이고, 하네스에 존재하는 이유입니다.

CHECK 5: advisor_loop.py가 어설션(assertion)을 통과합니다: 드라이버가 동일한 방식으로 두 번 실패하고, 한 번의 컨설트가 실행되며, 작업이 완료되고, 컨설트가 상한선을 초과하지 않습니다.

BUILD 6: The Two-Lane Bench (양방향 벤치)

자신의 숙제를 스스로 채점하는 것은 없다는 것이 법칙이며, 이 빌드는 이를 벤더 전반에 걸쳐 적용합니다.

동일한 가중치라도 외부 하네스에서는 성능이 급락합니다. 2026년의 한 측정값은 네이티브(native) 20.2% 대 타사(third-party) 7.7%를 보여주었습니다.

따라서 각 리뷰어는 자신의 홈 환경에서 실행됩니다. Claude는 Claude Code에서 리뷰합니다. Sol은 Codex CLI를 통해 리뷰합니다.

사내 심사위원, .claude/agents/fresh-eyes-reviewer.md:

markdown
1---
2name: fresh-eyes-reviewer
3description: 컨텍스트가 없는 코드 리뷰어. 에이전트가 변경한 후에 호출합니다.
4 작성자와 히스토리를 공유하지 않으며, diff 자체를 읽고, 수정할 수 없습니다.
5model: haiku # 중요 변경 사항일 경우 opus 로 교체
6effort: medium
7tools: Read, Grep, Glob, Bash
8---
9
10이 변경 사항이 어떻게 작성되었는지에 대한 기억은 없습니다. 그것이 바로 핵심입니다.
11작성자에게 이유를 묻지 마세요. 어떤 요약도 신뢰하지 마세요. 오직 증거만 신뢰하세요.
12
13 1. git diff HEAD~1 (또는 지정된 범위)를 실행하고 모든 헝크를 읽으세요.
14 2. 헝크뿐만 아니라 각 수정된 파일의 전체 내용을 읽으세요. 버그는 변경 사항
15 주변의 변경되지 않은 줄에 숨어 있습니다.
16 3. README 또는 CLAUDE.md 에 명시된 테스트 스위트를 실행하세요.
17 4. 세 가지 전형적인 에이전트 실패를 찾으세요.
18 laziness: 부분 구현, TODO, 한 가지 경우에만 처리
19 self-grading: 약화된 테스트, 삭제된 어설션, 건너뛴 스위트
20 drift: 명시된 작업 범위를 벗어난 변경
21 5. 다음 형식으로 정확하게 평결을 내리세요.
22 VERDICT: PASS 또는 FAIL
23 BUGS: 번호를 매기고 각각 file:line 과 한 문장으로 된 이유를 제시
24 RISK: 이 변경 사항이 건드리는 가장 위험한 부분에 대한 한 문장
25
26엄격한 규칙: 파일을 수정할 수 없으며, 작성자의 작업을 다시 실행할 수 없으며,
27빈 BUGS 목록과 VERDICT: FAIL 은 유효하지 않습니다. 테스트를 실행할 수 없는 경우
28그 이유와 함께 자동 FAIL 입니다.

크로스 벤더 심사관인 .claude/agents/sol-reviewer.md 는 하나의 명령을 실행하고 평결을 그대로 전달하는 파이프라인입니다. Sol 이 리뷰어이며, 이 파일은 이를 자체 하네스에 연결합니다:

markdown
1---
2name: sol-reviewer
3description: 크로스 벤더 리뷰어. 최신 커밋을 Codex CLI 를 통해 GPT-5.6 Sol 에게
4 Sol 의 네이티브 하네스로 보내고, 평결을 그대로 전달합니다.
5model: haiku # 단순 파이프라인입니다. Sol 이 리뷰어입니다.
6effort: low
7tools: Bash, Read
8---
9
10당신은 리뷰어가 아니라 파이프라인입니다. 한 계열의 모델은 사각지대를 공유합니다.
11이 레인이 존재하는 이유는 Sol 이 Claude 의 사각지대를 공유하지 않기 때문입니다.
12
13 1. CLI 를 확인하세요: codex --version. 없으면 VERDICT: FAIL 과 함께
14 "codex CLI 가 설치되지 않음" 이유와 설정 경로(또는 공식 플러그인:
15 /plugin marketplace add openai/codex-plugin-cc, /plugin install, /codex:review)를 출력하세요.
16 2. Sol 의 자체 하네스에서 높은 노력으로 리뷰를 실행하세요.
17
18 codex --profile deep exec "최신 커밋(git show HEAD)을 작성자를 한 번도 만난
19 적이 없는 적대적인 시니어 엔지니어로서 리뷰하세요. 헝크뿐만 아니라 수정된
20 모든 파일을 전체로 읽으세요. 다음을 찾으세요: 부분 구현, 약화되거나 삭제된
21 테스트, 명시된 작업 범위를 벗어난 변경. 'VERDICT: PASS' 또는 'VERDICT: FAIL'
22 뒤에 file:line 과 한 문장으로 된 이유가 있는 번호 매기기 결과를 정확히
23 끝내세요."
24
25 3. 전체 출력을 `.review_sol_<short-hash>.md` 에 저장하세요.
26 4. 위로 전달하세요: 먼저 VERDICT 줄, 그 다음 결과를 그대로 전달하세요.
27 결과를 요약하지 말고, 안심시키는 말을 덧붙이지 말고, Sol 과 논쟁하지 마세요.
28 평결이 FAIL 이면 상위 항목이 무엇을 수정할지 결정합니다. 당신은 아무것도
29 결정하지 않습니다.
30
31엄격한 규칙: 파일을 수정하지 말고, 작성자의 작업을 다시 실행하지 말고, 자신의
32리뷰로 대체하지 마세요. codex 가 실행 중간에 오류가 발생하면 조용히 한 번 이상
33재시도하지 말고 stderr 를 첨부하여 FAIL 로 보고하세요.

CI 의 경우, loop/two_lane.sh 가 전체 교환을 최대 3 라운드로 진행합니다:

bash
1claude -p "구현: $TASK. 테스트를 실행하세요. 통과하면 커밋하세요."
2review=$(codex exec "HEAD 리뷰 ... VERDICT: PASS 또는 FAIL 및 결과.")
3grep -q "VERDICT: PASS" <<< "$review" && exit 0
4claude -p "다른 모델 계열의 리뷰어가 다음 문제를 발견했습니다.
5 모든 문제를 수정하고, 테스트를 다시 실행하고, 커밋하세요: $review"

Claude Code 내에서는 스크립트를 완전히 건너뛸 수 있습니다.

OpenAI는 2026년 3월부터 Claude Code용 공식 Codex 플러그인을 제공하며, 9주 만에 약 2만 개의 GitHub 스타를 받았습니다. 이는 시장이 크로스 벤더 리뷰가 주류가 되었음을 알려주는 신호입니다. 한 번만 설치하면 됩니다:

text
1/plugin marketplace add openai/codex-plugin-cc
2/plugin install codex@openai-codex
3/codex:setup

모든 Claude 세션 내에서 세 가지 동작을 사용할 수 있습니다:

  • /codex:review 표준 패스용
  • adversarial mode, 의도적으로 설계 결정을 공격합니다
  • background handoff Codex 로 전환

중요한 작업에는 adversarial 모드를 사용하세요. Sol 이 가장 강력한 터미널 중심 작업에는 handoff 를 사용하세요.

점점 더 많은 개발자들이 BUILD 7 의 프록시를 통해 Claude Code 내에서 GPT-5.6 Sol 을 실행하고 있으며, 일상 작업에서 Codex 보다 Sol 을 선호하고 있습니다.

이는 논제를 증명합니다: 가중치는 빌리고, 하네스는 소유하라.

단점은 네이티브 하네스 법칙입니다. Sol 이 Claude Code 에서 실행되면 자신의 홈 환경 밖에서 실행되기 때문입니다. 자체 평가 세트에서 확인하세요. 평가 결과 외부 하네스가 더 낫다고 나온다면, 여러분의 평가가 벤치마크보다 우선합니다.

리뷰어를 가치 있게 만드는 세 가지 속성:

  • 클린 컨텍스트. 작성자의 어떤 히스토리도 없이 도착합니다.
  • 다른 계통. 작성자의 사각지대를 공유하지 않습니다.
  • 네이티브 하네스. 최대 강도로 판단합니다.

약화된 평결은 망가진 검증자이므로, 중계는 그대로 이루어집니다. 세 번째 FAIL 은 네 번째 시도를 하는 대신 사람에게 페이지를 보냅니다.

CHECK 6: two_lane.sh 를 실행하거나 마지막 커밋에서 /codex:review 를 실행하세요. VERDICT 가 .review 파일에 기록되고, FAIL 은 작성자 레인으로 다시 라우팅됩니다.

BUILD 7: 선택적 팬아웃 (조건이 나타나면 설치)

정찰대 스웜. 하루에 30분 이상이 리서치나 코드베이스 탐색에 소비될 때 설치하세요. 별도의 조각에서 세 개를 병렬로 생성하세요:

markdown
1---
2name: scout
3description: 리서치 팬아웃을 위한 저렴한 병렬 리더. 코드베이스 조사, 의존성
4 감사, 로그 탐색, 문서 리서치를 위해 여러 개를 한 번에 생성하세요.
5 독트린에 따라 읽기 전용; 읽기는 팬아웃되고, 쓰기는 단일 스레드로 유지됩니다.
6model: haiku
7effort: low # 상속 방지(BUILD 4): 최대 노력을 상속받는
8 # 스웜은 한 메시지로 창을 비웁니다
9tools: Read, Grep, Glob, Bash
10---
11
12당신은 병렬로 실행되는 여러 리더 중 하나일 수 있습니다. 할당된 조각을 조사하고
13작고 날카롭게 보고하세요. 최종 메시지만 상위 항목으로 반환되므로, 400 단어
14미만으로 유지하고 모든 단어가 그 자리를 차지할 가치가 있게 만드세요.
15
16 1. 할당된 작업을 직접 하나의 조각(하나의 디렉토리, 하나의 하위 시스템, 하나의
17 질문)으로 좁히고, 무엇으로 좁혔는지 말하세요.
18 2. 읽기만: Read, Grep, Glob, 읽기 전용 셸(ls, git log, git show, rg).
19 절대 편집, 설치, 삭제하지 마세요. 작업에 쓰기가 필요하면, 수행하지 말고
20 보고하세요.
21 3. 먼저 넓게, 그 다음 가장 핫한 두세 군데를 깊게 파세요.
22
23다음 외에는 아무것도 없는 보고 형식:
24 FINDINGS: 최대 10개의 불릿, 각각 증거(file:line, 커밋 해시 또는 URL)가 있는
25 하나의 사실
26 GAPS: 확인할 수 없었던 것과 그 이유, 그래서 상위 항목이 여전히 어두운 부분을
27 알 수 있도록
28 HOTSPOT: 더 깊이 살펴볼 가치가 있는 단일 파일 또는 함수, 그 이유에 대한 한 줄
29
30편집하지 말고, 구현을 제안하지 말고, 늘리지 마세요. 300개의 유용한 단어를
31반환하는 정찰병이 3,000개의 혼합된 단어를 반환하는 정찰병보다 낫습니다.
32왜냐하면 당신이 내보내는 모든 것은 상위 항목의 컨텍스트 창에 들어가고 상위
33항목이 그 비용을 지불하기 때문입니다.

병렬 리더가 복합되므로 읽기는 팬아웃됩니다. 단어 제한이 있는 이유는 모든 보고서가 상위 항목이 비용을 지불하는 컨텍스트 창에 들어가기 때문입니다.

쓰기는 절대 팬아웃되지 않습니다. 2026년 동등 예산 연구에 따르면 토큰이 일정하게 유지될 때 단일 에이전트가 추론에서 멀티 에이전트 설정과 일치하는 것으로 나타났습니다. 이 레인은 읽기 전용입니다.

야간 소진기. TASKS.md 에 10개 이상의 작은 검증 가능한 항목이 있을 때 설치하세요. 야간 소진기 스킬은 파일을 설정하고, 두 제한을 확인하고, 테스트 명령이 실행되는지 확인한 다음, ralph.sh 를 실행합니다. 아침 인터페이스: git log, progress.log, 체크 표시.

계획 분할. 계획 토큰이 세션 비용의 대부분을 차지할 때 설치하세요. Claude Code 의 한 설정은 계획에 Opus 급 모델을, 실행에 Sonnet 을 사용합니다. 계획은 그램당 프론티어에서, 실행은 대량으로 수행하세요.

트리오 벤치. 까다로운 변경 사항이 세 가지 관점을 필요로 할 때 설치하세요. 두 역할은 읽고 하나는 쓰며, 네 번째 창은 함정입니다. 파이프라인은 아래에 있습니다.

혼합 플릿을 위한 파이프라인

두 개의 오픈소스 구성 요소가 두 벤더 설정을 모든 벤더 설정으로 바꿉니다. 조건이 세 번째 제공자를 요구할 때만 설치하세요.

claude-model-switch (오픈소스, Rust, localhost:4000 에서 실행). Claude Code 와 Anthropic 또는 OpenAI 호환 엔드포인트 간의 로컬 프록시입니다.

  • Claude Code 의 세 가지 내부 계층(haiku, sonnet, opus)을 제공자가 제공하는 모든 모델에 다시 매핑합니다.
  • 재시작 없이 설정 리로드를 통해 제공자를 전환합니다.
  • 슬래시 명령어가 있는 Claude Code 플러그인으로 제공됩니다.
bash
1claude-model-switch init # Claude Code 를 프록시로 지정
2claude-model-switch add openrouter sk-or-xxx
3claude-model-switch add glm \
4 --haiku glm-4.5-air --sonnet glm-4.7 --opus glm-5
5claude-model-switch use glm # 세션당, 작업 중간에는 절대 안 됨
6claude-model-switch orchestrate start --preset trio # 플래너/코더/리뷰어

트리오 사전 설정은 BUILD 7 의 벤치를 물리적으로 만든 것입니다: 세 개의 tmux 창, 각 역할은 다른 제공자에 있고, 각각 주소 지정 가능하며(orchestrate send coder "implement milestone 1"), 제공자가 성능이 저하되면 세션 중간에 역할 재지정이 가능합니다.

CLIProxyAPI (오픈소스). 동일한 트릭이지만 반대 방향을 가리킵니다.

ChatGPT Codex, Claude Code, Gemini, Grok 의 OAuth 로그인을 OpenAI, Claude, Gemini 호환 API 엔드포인트로 래핑합니다.

즉, 이미 비용을 지불하고 있는 구독 좌석이 [ralph.sh](https://ralph.sh/) 및 two_lane.sh 와 같은 스크립트를 위한 라우팅 가능한 API 대상이 되며, 별도의 API 키가 필요하지 않습니다. 커뮤니티 포크는 Factory 및 Amp 로 확장되며, ccs 와 같은 래퍼는 다중 계정 전환을 추가합니다.

BUILD 6 의 데이터에 따르면 두 가지를 모두 지배하는 법칙: 재매핑된 모델은 외부 하네스에서 실행됩니다.

리더와 리뷰어 레인은 자유롭게 재매핑하세요. 저렴하고 검증 가능합니다.

코드를 작성하는 레인은 자체 평가 세트가 반대를 증명할 때까지 네이티브 하네스의 모델로 유지하세요.

CHECK 7: 설치된 모든 팬아웃에는 그 옆에 트리거 조건이 기록되어 있습니다. 이 중 어떤 것이든 투기적으로 설치하면 스택이 비대해집니다.

BUILD 8: The Factory (완료가 데이터베이스 사실이 됨)

지금까지의 모든 것은 작업이 진행되는 순간에 증명합니다. 게이트, 평결, 평가 세트 모두 실행 중에 발동됩니다.

둘 이상의 에이전트가 둘 이상의 세션에 걸쳐 프로젝트를 건드리면, 실행 후에도 살아남는 증거가 필요합니다: 누가 무엇을, 어떤 순서로 작업했는지, 그리고 마지막 리뷰 주기가 통과되었는지 여부.

Avid - inline image

패턴은 pi-factory 데모(github.com/xpriment626/pi-factory)에서 비롯됩니다. 핵심 아이디어는 한 문장입니다.

스레드는 추적입니다. 행은 증거입니다. 게이트는 행을 읽습니다.

progress.log 는 일기입니다. 블랙보드는 원장입니다. SQLite 는 모든 사람이 말을 멈춘 후에도 쿼리 가능하기 때문에 원장입니다.

factory/factory_gate.py 를 생성하세요. 이 파일은 네 개의 테이블(tickets, briefs, evidence, verdicts), 각 에이전트가 작업할 때 호출하는 record 명령, 그리고 완료 게이트를 보유합니다. 게이트의 실패 조건은 작업 자체에 매핑됩니다:

python
1checks = [
2 (tickets == 0, "기록된 티켓이 없습니다."),
3 (done != tickets, "모든 티켓이 완료되지 않았습니다."),
4 (first_brief is None, "아키텍처 브리프가 기록되지 않았습니다."),
5 (first_brief > first_code, "구현 증거가 브리프보다 먼저입니다."),
6 (code_ev == 0, "구현자 코드 증거가 기록되지 않았습니다."),
7 (build_ok == 0, "통과된 빌드 명령 증거가 없습니다."),
8 (test_ok == 0, "통과된 테스트 명령 증거가 없습니다."),
9 (latest("architect") != "green", "최신 아키텍트 평결이 녹색이 아닙니다."),
10 (latest("reviewer") != "green", "최신 리뷰어 평결이 녹색이 아닙니다."),
11]

해당 목록은 전체 독트린을 인코딩합니다.

  • 순서가 강제됩니다. 첫 번째 코드 증거보다 늦은 브리프는 위반이며, 이는 계획-후-구축을 습관이 아닌 확인 가능한 사실로 만듭니다.
  • 두 심사관 모두 동일한 최신 주기에서 녹색이어야 합니다. 하나의 오래된 승인이 새로운 diff 를 전달할 수 없습니다.
  • 통과된 테스트 행이 없으면 완료가 불가능하며, 트랜스크립트가 아무리 확신에 차 있어도 마찬가지입니다.

factory/factory.sh 를 생성하세요. 이 파일은 이미 구축한 좌석을 실행 순서에 연결하고 모든 단계 사이에 행을 기록합니다:

bash
1G ticket "칸반 보드" "열 렌더링, 드래그 지속" # 플래너 행
2G brief "$BRIEF" # 코드 전에
3../loop/ralph.sh && G evidence code pass "루프 완료" # BUILD 3 작동
4npm test && G evidence test pass "npm test 통과"
5G verdict 1 architect green "레이아웃이 브리프와 일치" # Claude 좌석
6G verdict 1 reviewer green "테스트 통과, 범위 깔끔" # Sol 좌석, codex 통해
7python3 factory_gate.py gate factory.db # 행이 결정

새로운 것은 고용되지 않습니다.

Fable 은 티켓을 자르고 브리프를 작성하며, 읽기 전용입니다. BUILD 3 루프가 구현합니다. Claude 와 Sol 은 각각 자체 하네스에서 평결을 반환합니다. 두 개가 모두 녹색이 될 때까지 최대 3번 주기가 반복됩니다.

팩토리는 이미 고용한 직원을 위한 조직도입니다.

실제 실행, 모형이 아닙니다. 두 번째 게이트 호출이 이 빌드의 전체 주장입니다:

text
1$ factory_gate.py record demo.db ticket "kanban-board" "열 렌더링, 드래그 지속"
2
3$ factory_gate.py gate demo.db
4GATE: REFUSED
5 - 모든 티켓이 완료되지 않았습니다.
6 - 아키텍처 브리프가 기록되지 않았습니다.
7 - 구현자 코드 증거가 기록되지 않았습니다.
8 - 통과된 빌드 명령 증거가 없습니다.
9 - 통과된 테스트 명령 증거가 없습니다.
10 - 리뷰 주기가 기록되지 않았습니다.
11 exit: 1
12
13... 에이전트가 작업합니다. 모든 단계가 행을 기록합니다 ...
14
15$ factory_gate.py record demo.db brief "스택: node+sqlite. /tasks CRUD."
16$ factory_gate.py record demo.db evidence code pass "src/board.js 작성됨"
17$ factory_gate.py record demo.db evidence build pass "npm run build exit 0"
18$ factory_gate.py record demo.db done "kanban-board"
19$ factory_gate.py record demo.db verdict 1 architect green "레이아웃이 브리프와 일치"
20$ factory_gate.py record demo.db verdict 1 reviewer green "범위 깔끔"
21
22$ factory_gate.py gate demo.db
23GATE: REFUSED
24 - 통과된 테스트 명령 증거가 없습니다.
25 exit: 1
26
27$ factory_gate.py record demo.db evidence test pass "npm test 33/33"
28
29$ factory_gate.py gate demo.db
30GATE: COMPLETE (1/1 티켓, 주기 1 녹색 x2)
31 exit: 0

두 리뷰어 모두 녹색을 말했습니다. 아키텍트는 레이아웃이 브리프와 일치한다고 확인했습니다. 리뷰어는 범위가 깔끔하다고 확인했습니다.

그리고 게이트는 여전히 거부했으며, 한 줄로: 통과된 테스트 명령 증거가 없습니다. 아무도 테스트를 실행하지 않았습니다.

평결은 의견입니다. 두 개의 의견은 여전히 사실이 아닙니다. 하나의 증거 테스트 통과 행이 추가된 후, 동일한 게이트가 COMPLETE 를 반환하고 exit 0 으로 종료됩니다.

모델은 설득력 있게 자신의 작업을 주장하며, 트랜스크립트는 진실보다는 주장을 포착합니다. 행과는 논쟁할 수 없습니다.

게이트가 거부할 때, 정확히 누락된 아티팩트를 명명합니다. 이는 "실행 실패"를 "통과 테스트 행 생성"으로 바꿉니다. 작업이지, 미스터리가 아닙니다.

설치 조건: 하루에 둘 이상의 작성자 세션, 며칠에 걸친 리뷰 주기, 또는 사후에 무슨 일이 일어났는지 증명해야 할 필요성. 하나의 야간 루프가 있는 단일 저장소의 경우 BUILD 3 으로 충분하며 이것은 부풀림입니다.

CHECK 8: 스크린샷을 재현하세요. 테스트 행을 제외한 모든 것을 기록하고, 게이트가 정확히 하나의 이유로 거부해야 합니다. 행을 추가하면 COMPLETE 를 반환합니다. 그것 없이 통과하는 게이트는 트랜스크립트 리더입니다.

BUILD 9: The Swarm (Fable 이 계획하고, 플릿이 실행하고, Fable 이 점수를 매김)

하나의 드라이버와 하나의 어드바이저가 하나의 작업을 처리합니다. 네 개의 독립적인 조각으로 나뉘는 목표는 네 개의 작업자가 필요합니다.

하지만 플릿이 방향을 유지하려면 하나의 모델이 모든 목표를 계획하고 모든 결과에 점수를 매겨야 합니다. 이것이 이 빌드가 존재하는 전부 이유이며, 스웜이 일반적으로 그것 없이 실패하는 이유입니다.

Rung 3 을 문자 그대로 만듭니다. Fable 이 목표를 작성하고, 플릿이 실행하며, Fable 은 각 결과를 자체 점검에 대해 평가하고, 다음 주기는 놓친 것만 다시 계획합니다.

중단은 주기 제한입니다. 제한이 놓친 항목이 남은 상태로 트리거되면, 네 번째 주기를 실행하는 이유가 아니라 사람에게 가는 사양 문제입니다.

swarm/swarm.sh 를 생성하세요. 세 가지 설정이 독트린을 전달합니다:

bash
1FLEET=4 # 쓰기는 절대 충돌하지 않음: 각각 하나의 작업 트리
2WORKER_MODEL=claude-sonnet-5 # 또는 순수 실행용 haiku / luna / kimi
3WORKER_EFFORT=low # 절대 지휘자의 노력을 상속하지 않음
4CONDUCTOR=claude-fable-5 # 또는 보존 규칙이 문제가 되면 opus-4-8

이 세 줄은 기본값이 아니기 때문에 명시적입니다.

상속하는 플릿은 지휘자의 모델과 지휘자의 노력을 모두 가져옵니다. 기계적인 작업을 수행하기 위해 높은 노력의 Fable 이 네 개의 높은 노력의 Fable 작업자를 생성하는 것은 가장 저렴한 일을 하는 가장 비싼 방법입니다.

설정하세요. 절대 기본값으로 두지 마세요.

크로스 하네스 팬아웃은 합법적이며, 이는 ROUTING.md 의 첫 번째 법칙에 대한 예외처럼 보이지만 그렇지 않습니다.

  • codex exec 을 호출하는 Fable 지휘자는 Codex 내에서 Sol 을 네이티브로 실행합니다. 이는 법칙을 준수한 것이지, 우회한 것이 아닙니다.
  • 법칙을 위반하는 것은 GPT 모델 문자열을 착용한 Claude 측 서브에이전트이거나 그 반대입니다.

하네스는 지휘자가 아닌 작업자와 함께 이동합니다.

지휘자는 목표를 작성하고, 절대 코드를 작성하지 않으며, 각 목표는 자체 점검 명령을 전달하므로 완료는 사실로 유지됩니다:

json
1{"id":"strip-legacy-auth","spec":"routes/ 에서 v1 인증 경로 제거","check":"npm test -- tests/auth"}
2{"id":"migrate-sessions","spec":"세션 저장소를 새 어댑터로 이동","check":"npm test -- tests/session"}

그런 다음 디스패치, 점수 매기기 및 재계획:

bash
1# 디스패치: 목표당 하나의 git 작업 트리, FLEET 만큼 병렬로
2claude --model "$WORKER_MODEL" --effort "$WORKER_EFFORT" -p "이 스펙을 정확히
3 실행하세요. 범위를 확장하지 마세요. 테스트를 실행하세요. 통과할 때만 커밋하세요."
4
5# 점수 매기기: 지휘자가 각 목표를 자체 점검 명령에 대해 채점합니다.
6# 작업자의 확신은 증거가 아닙니다. 종료 코드가 증거입니다.
7bash -c "$chk" && echo "$id" >> passed.txt || misses=$((misses+1))
8
9# 재계획: 다음 주기는 passed.txt 를 보고 놓친 것만 다시 계획합니다

좌석별:

  • Sonnet 5 코딩 실행용
  • Haiku 또는 Luna 순수 기계 작업용
  • Kimi 같은 오픈 가중치 작업자 작업이 반복적이고 가중치가 무료일 때
  • Sol 작업이 터미널 중심일 때
  • Opus 4.8 작업자 좌석에서, 서브에이전트가 추론해야 할 때만

Fable 은 저렴한 모델이 할 수 없는 두 가지 작업, 즉 목표 작성과 채점을 위해 예약하세요.

플릿은 비용 전략이지, 지능 전략이 아닙니다.

멀티 에이전트 실행은 동등한 작업에 대해 3~10배의 토큰을 소모하며, 2026년 동등 예산 연구에 따르면 토큰이 일정하게 유지될 때 단일 에이전트가 추론에서 일치하는 것으로 나타났습니다.

스웜은 목표가 독립적이고 대부분 기계적일 때만 그 가치를 증명합니다. 쓰기는 작업 트리당 단일 스레드로 유지되고, 병합은 직렬로 이루어지며, 사람이 마지막 커밋을 가져갑니다.

CHECK 9: 세 가지로 나뉘는 목표에서 스웜을 실행하세요. 실패한 목표는 results.tsv 에서 FAIL 로 돌아와야 하며, 2주기에서 다시 계획되어야 하고, 절대 완료로 선언되지 않아야 합니다.

BUILD 10: Rung 4 (한 번 통과한 것은 절대 감시되지 않은 채로 남지 않음)

지금까지의 모든 것은 작업이 만들어지는 동안 검증합니다. 지금까지의 어떤 것도 6주 후에 완료된 작업이 더 이상 사실이 아니게 되는 것을 알아차리지 못합니다. 한 번 검증한 목표는 타임스탬프가 있는 가정입니다.

Rung 4 는 두 부분으로 구성되며, 중단이 종료만큼 중요합니다: 이번 주에 어떤 제안도 게이트를 통과하지 못하면 시스템은 변경되지 않으며, 그것은 성공입니다.

첫 번째 부분, 상시 목표. 완료된 모든 것은 술어와 함께 불변 항목으로 졸업하여 매일 영원히 재검증됩니다. goals/ 에 완료된 항목당 하나의 파일을 생성하세요:

text
1predicate: npm test -- tests/auth 2>&1 | tail -1 | grep -q passing
2born: 2026-07-13
3status: satisfied
4last-pass: 2026-07-13
5on-violation: 깨워 주세요. 자동 수정하지 마세요.

그런 다음 system/verify_goals.py 가 전체를 실행하고 불변 항목이 깨지면 exit 1 로 종료하며, 목표, 마지막으로 유지된 날짜, 설정한 정책을 명명합니다:

python
1held = subprocess.run(["bash","-c",predicate], timeout=60).returncode == 0
2g["status"] = "satisfied" if held else "VIOLATED"
3# 타임아웃은 위반이지 통과가 아닙니다: 비싼 술어는 깨진 술어입니다

술어 규칙은 의도적으로 엄격합니다: 셸 명령, exit 0 은 불변 항목이 유지됨을 의미하며, 저렴하고 읽기 전용입니다.

형용사는 금지됩니다. 셸이 확인할 수 없으면 모델도 확인할 수 없습니다.

비코드 목표도 동일한 방식으로 작동합니다. test -s reports/$(date +%Y-%m)-review.md 는 월간 보고서를 위한 훌륭한 상시 목표입니다.

두 번째 부분, 퇴비화. 일주일에 한 번, 시스템이 이미 생성한 배기 가스를 읽으세요: BLOCKED 작업, 실패한 게이트 실행, 거부된 팩토리 게이트, 되돌려진 PR, 위반된 목표.

그런 다음 최대 3개의 변경 사항을 제안하세요. 헌법에 대한 새로운 법칙. 계속 같은 방식으로 실패하는 스킬에 대한 수정. 또는 누락된 상시 목표.

제안만 하세요. 서명은 당신이 합니다.

bash
1claude --model claude-fable-5 --effort high --allowedTools "Read,Grep,Glob" \
2 -p "이번 주 배기 가스를 읽으세요: progress.log 의 BLOCKED 줄, GATE REFUSED
3 항목, VIOLATED 목표, 병합되지 않고 닫힌 PR. 최대 3개의 제안을 추출하세요:
4 새 법칙(사건 인용), 스킬 수정(동일한 실패 반복), 또는 우리에게 없었던
5 상시 목표. 제안만 하고, 아무것도 편집하지 마세요. 깨끗한 주는 유효한
6 답변입니다. 그렇게 말하고 중단하세요."

이 rung 은 평가와 심사관이 시스템이 개선되었다고 말할 때만 닫힙니다. 즉, 시스템이 개선을 위해 자체 실패에 대한 기억이 필요함을 의미합니다.

퇴비화 실행은 스크립트를 제도로 바꾸는 것입니다.

상시 목표는 완료를 안전하게 만드는 것입니다. 센티넬이 감지하고, 일반 파이프라인이 수정하며, 어떤 것도 조용히 썩지 않습니다.

CHECK 10: verify_goals.py 데모가 깨진 불변 항목을 마지막 통과 날짜와 함께 명명하고 건강한 항목은 그대로 둡니다. 그런 다음 마지막으로 완료한 작업에 대한 하나의 실제 상시 목표를 작성하세요.

BUILD 11: Rung 5 (당신의 좌석, 그리고 그것이 절대 비워지지 않는 이유)

Rung 5 에는 감상적인 이유가 아닌 기계적인 이유로 당신의 이름이 적혀 있습니다.

루프는 중지 조건에 도달했지만 여전히 틀릴 수 있습니다. 테스트는 통과하고, 게이트는 녹색이 되고, 두 리뷰어 모두 서명했지만, 마지막 커밋은 여전히 실수입니다.

이 아래의 모든 빌드는 그 위험을 줄이기 위해 존재합니다. 그 중 어느 것도 위험을 없애지 않습니다.

당신의 상시 의무는 모두 저렴합니다:

  • 커피와 함께 큐를 읽으세요: BLOCKED 작업, GATE REFUSED 줄, VIOLATED 목표, 저렴한 계층 몫. 10분.
  • 병합되기 전에 마지막 커밋을 확인하세요. 모든 diff 가 아니라, 마지막 것, 시스템이 가장 확신했던 것입니다.
  • 세 가지 퇴비화 제안에 서명하거나 거부하세요. 그것이 헌법에 법칙이 들어가는 유일한 방법입니다.

세 가지 플레이는 필요할 때가 아니라 주기적으로 실행되는데, 실제 비용이 들고 방향으로 지불되며 diff 로 지불되지 않기 때문입니다:

플레이 1, 프로젝트 피드백 루프, 월간.

Fable 을 이미 출시한 것에 읽기 전용으로 지정하고, 상세한 개선 계획을 작성하게 하세요. 그런 다음 해당 계획의 실행을 Opus 4.8 또는 Sol 에게 넘기세요.

비싼 모델은 복리 효과가 있는 부분, 즉 무엇을 변경할지에 대한 판단을 하고, 그렇지 않은 부분인 타이핑은 절대 하지 않습니다.

bash
1claude --model claude-fable-5 --effort high --allowedTools "Read,Grep,Glob" \
2 -p "이 프로젝트를 처음부터 끝까지 검토하세요. 영향력 순으로 순위가 매겨진
3 개선 계획을 작성하세요: 무엇이 취약한지, 무엇이 과도하게 구축되었는지,
4 무엇이 누락되었는지, 무엇을 삭제해야 하는지. 코드를 작성하지 마세요.
5 수용 기준이 있는 작업을 출력하세요." \
6 > plans/$(date +%F)-improvement.md

Play 2, 행동 분석, 매월.

두 하네스에서 세션과 프로젝트 기록을 모두 입력하고, 어떻게 구축하고 어디서 막히는지 매핑하도록 요청하세요.

이것은 시스템에서 유일하게 주제가 당신 자신인 보고서입니다. 보통 가장 많이 변화하는 보고서이기도 합니다.

Play 3, 두 번째 뇌 감사, 분기별. 노트, 문서, 백로그를 가리키고 자신의 사고가 다음에 무엇을 구축할 가치가 있고 무엇을 삭제할 가치가 있다고 말하는지 물어보세요. 출력물을 제안서로 취급하세요, 정확히 퇴비처럼요.

아래 단계들은 실행을 최적화하며, 실행은 이제 저렴한 부분입니다. 방향성이 부족한 입력이며, 방향성이 프론티어 모델에 지불할 가치가 있는 이유입니다. 판단력은 그램 단위로, 실행은 톤 단위로 구매하고, 최종 서명은 직접하세요.

CHECK 11: 자신의 저장소에서 play 1을 실행하세요. 계획이 이미 취약하다고 알고 있던 것을 언급하지 않는다면, 컨텍스트 파일이 너무 얇은 것이며, 이는 BUILD 1 문제입니다.

BUILD 12: Ops

에이전트는 채팅 호출보다 10~100배 많은 토큰을 소모하며, 입력이 대략 100 대 1로 지배적입니다.

BUILD 0의 네 가지 레버(분할, 캐시, 배치, 압축)를 쌓으면 팀들은 최적화되지 않은 기준선 대비 70~90% 절감 효과를 보고합니다.

참고로: 개발자 한 명당 활동일 기준 $13이 Claude Code 엔터프라이즈 평균이며, 사용자의 90%는 $30 미만으로 유지됩니다.

새로운 하위 시스템 대신 하나의 규율 라인: 작업 클래스는 20회 이상의 실행에서 95% 통과율을 기록한 후에만 자동 병합 가능하며, 단 한 번 90% 미만으로 떨어지면 즉시 권한을 박탈합니다.

bash
1awk -F'\t' '$2=="fix-lint"{r++; if($3=="pass")p++}
2 END{printf "%d runs, %.0f%%\n", r, (r?p/r*100:0)}' progress.log

주간 지출, ralph.sh가 이미 기록하는 틱당 비용 기준:

bash
1grep '^cost' progress.log | awk -F'\t' \
2 -v d="$(date -d '7 days ago' +%F)" \
3 '$2>=d{s+=$3} END{printf "week: $%.2f\n", s}'

크론을 걸기 전에 대사율을 계산하세요. 일일 비용은 틱 수에 평균 틱 비용을 곱한 값입니다.

조용한 '할 일 없음' 틱을 처리하는 시트가 청구서를 결정합니다. 저렴한 티어에서는 센트 단위, 프론티어 모델의 높은 노력에서는 달러 단위로, 동일한 "할 일 없음" 응답에 대해 말이죠.

한계 내에서 실행하기

이 모델들은 토큰을 빠르게 소모하며, 실행 방식에 따라 벽에 부딪히기 전에 하루 작업의 얼마나 많은 부분이 완료되는지가 결정됩니다.

먼저, 어떤 벽인지 파악하세요.

  • API 키 사용 시, 벽은 청구서입니다. progress.log가 이미 이를 감시합니다.
  • 구독 시트 사용 시, 벽은 5시간 창과 주간 창을 함께 판단하는 것입니다. 둘 다 위 로그에는 전혀 나타나지 않습니다.

실제로 사용 중인 미터기를 확인하세요: Codex 설정의 사용량 패널, Claude 측의 /usage, 또는 ccusage나 codexbar와 같은 모니터를 화면 구석에 고정해 두세요.

읽지 않는 한계는 시계에 4시간 남았고 실행할 것이 없는 상태에서 부딪혀서야 발견하는 한계입니다.

여섯 개의 레버, 가장 저렴한 순서. 대부분은 토큰이 소모되는 단계 0~2에서 작동합니다:

  1. CLAUDE.md와 AGENTS.md를 필수 사항만 남기고 정리하세요. 모든 단일 프롬프트가 이를 읽으며, 활성화한 모든 스킬과 도구도 마찬가지입니다. 사용하지 않는 것은 끄세요; 사용하지 않는 MCP 서버는 모든 메시지에 부과되는 세금입니다.
  2. 최상위 단계가 필요하지 않을 때는 노력 수준을 낮추세요. 기본값 medium 또는 high로 설정하세요. max는 그것이 필요한 문제를 위해 아껴두세요. 그리고 fast mode가 꺼져 있는지 확인하세요. 켜져 있으면 선택한 수준을 배가시키기 때문입니다.
  3. 모델에게 명확한 중단 지점을 제공하세요. 이 모델들은 기본적으로 길게 실행됩니다. 계획을 완료하고 실행 전에 확인하도록 하세요. 이것이 plan mode의 실제 역할입니다.
  4. 하위 에이전트는 낮은 노력 수준으로 유지하세요. 하위 에이전트는 부모의 모델과 다이얼을 모두 상속받으며, max로 설정된 무리는 한 메시지에 창을 비웁니다. 저렴한 해결책은 두 헌법 모두에 규칙을 추가하는 것입니다: 요청받지 않으면 생성하지 말 것.
  5. 고가 모델을 대량 작업에 사용하지 마세요. Fable이 저토크 지휘자로서 상단에 위치하든, 조언자로서 대기하든, 결정 지점에서만 그 가격을 정당화하며, 천 번째 줄을 입력하는 동안에는 절대 안 됩니다.
  6. 한 메시지의 비용을 확인한 다음, 위의 다섯 가지를 그 숫자에 맞춰 조정하세요. 이것은 다른 다섯 가지 중 어느 것이 문제인지 알려주는 유일한 레버입니다.

이 레버들은 함께 작동하여 최고의 모델을 한계에 도달하기 전까지 얼마나 오래 실행할 수 있는지를 결정합니다.

2주차가 시작될 때 크론 설정:

bash
1# task loop: the daily tick, both caps set
20 7 * * 1-5 cd /path/to/repo/loop && BUDGET_USD=5 ./ralph.sh >> ../progress.log 2>&1
3
4# system loop: nothing that passed once goes unwatched
530 7 * * * cd /path/to/repo && python3 system/verify_goals.py goals/ >> progress.log 2>&1
6
7# system loop: failures become laws, once a week, proposals only
80 9 * * 1 cd /path/to/repo && codex --profile deep exec \
9 "$(cat ~/.codex/prompts/compost.md)" >> proposals/$(date +\%F).md 2>&1

런북입니다. 각 알람과 그에 대한 조치:

Avid - inline image

30일 일정입니다. 단계별 이행을 건너뛰지 마세요. 각 단계가 다음 단계를 잠금 해제합니다.

Avid - inline image

커맨드 덱(Command Deck)

여기 있는 모든 루프는 키 입력 하나로 접근 가능합니다. 슬래시 명령어는 Codex 측의 ~/.codex/prompts/에 있으며, 파일 이름이 명령어가 됩니다. Claude 측의 .claude/skills/에도 있습니다. CLI 클립은 cron과 CI가 실행하는 헤드리스 버전입니다.

Codex 슬래시 명령어

Avid - inline image

/plan-stop과 /effort가 가장 빠르게 비용을 절감합니다. 둘 다 수백 개의 토큰을 사용하여 수십만 개의 토큰 소모를 막습니다.

이 모델들은 길게 실행되므로, 지출 전에 체크포인트가 필요합니다. /plan-stop은 계획, 완료 조건 명령어, 영향 범위, 비용, 그리고 인간에게 물을 한 가지 질문을 반환한 후 중단됩니다.

두 파일을 ~/.codex/prompts/에 넣으세요. 파일 이름이 명령어가 됩니다.

effort.md는 /effort가 되며, 라우팅 다이얼을 명시적으로 만듭니다:

markdown
1# /effort - 지출하기 전에 노력 수준을 선택하세요
2
3아직 작업에 응답하지 마세요. 먼저 라우팅하세요.
4
5점수를 매기세요. 각 항목당 1점:
6 - why, debug, race, deadlock, refactor, 보안 문제, 또는 optimize를 포함하는가
7 - 둘 이상의 하위 시스템에 영향을 미치는가
8 - 이전 시도가 이미 실패했는가
9 - 변경이 되돌릴 수 없거나 사용자 앞에 배포되는가
10
11그런 다음 매핑:
12
13| 점수 | 노력 수준 | 시트 |
14|---|---|---|
15| 0-1 | low | codex -e low, 또는 프로필 fast (Luna). 절대 프론티어 시트를 사용하지 마세요. |
16| 2 | medium | Terra를 medium으로 사용하는 것이 시트입니다. |
17| 3+ | high | 실제 작업의 기본값이며, 최적 지점이 있는 곳입니다. |
18
19high가 이미 시도되었고 실패한 경우에만: max를 추천하고, 추가적인 사고가 무엇을 가져올 것으로 예상되는지 명확히 말하세요. 당신이 반대하는 기본 확률은 대략 두 배의 비용이며, 일반적으로 그 이익이 비용을 상쇄하지 못합니다.
20
21업그레이드를 추천하기 전에 두 가지를 상기시키세요:
22 1. 낮은 노력 수준의 더 나은 모델이 일반적으로 max의 약한 모델을 이깁니다. 다이얼보다 시트를 먼저 바꾸세요.
23 2. 이 작업이 하위 에이전트를 생성하는 경우, 해당 노력 수준을 명시적으로 지정하세요(입증되지 않으면 low). 하위 에이전트는 부모를 상속받으며, max로 설정된 함대는 한 메시지에 컨텍스트 창을 비웁니다.
24
25정확히 다음과 같이 출력하세요:
26 EFFORT: low | medium | high | max
27 SEAT: <model>
28 WHY: < 줄, 점수를 얻은 항목을 명시>
29 SUBAGENTS: <지정할 노력 수준, 또는 none>
30그런 다음 중단하세요. 인간이 당신이 지정한 수준에서 작업을 실행합니다.

실제 응답은 다음과 같으며, 수백 개의 토큰으로 수십만 개의 토큰 소모를 방지합니다:

text
1EFFORT: high
2SEAT: gpt-5.6-sol
3WHY: contains "why", touches auth and sessions, prior attempt failed
4SUBAGENTS: low

plan-stop.md는 /plan-stop이 되며, 지출 전 체크포인트입니다:

markdown
1# /plan-stop - 작업을 계획한 후 중단하세요
2
3이 모델들은 길게 실행됩니다. 계획이 옳을 때는 장점이지만, 그렇지 않을 때는 비용이 많이 드는 실수입니다. 이 명령어는 지출 전에 체크포인트를 확보합니다.
4
5작업을 계획하세요. 단 하나의 파일도 편집하지 마세요. 빌드를 실행하지 마세요. 시작하지 마세요.
6
7다음을 생성하세요:
8 GOAL: < >
9 ASSUMPTIONS: <당연하게 여기는 것들; 이것들이 틀리면 계획도 틀립니다>
10 STEPS: <번호가 매겨진, 각각 커밋 하나 분량의 작업>
11 DONE_WHEN: < 단계가 완료되었음을 증명하는 정확한 명령어>
12 BLAST RADIUS: <영향을 받는 파일과 시스템; auth, payments, migrations, prod config를 명시적으로 언급>
13 COST: <대략적인 토큰 또는 달러, 그리고 단계를 실행하는 시트>
14 UNKNOWNS: < 가지 질문을 있다면 인간에게 물을 >
15
16그런 다음 중단하고 기다리세요.
17
18계획 중 규칙:
19 - 모호함은 UNKNOWNS에 넣으세요. 추측하고 진행하여 해결하지 마세요. 실행 단계까지 살아남은 추측은 질문보다 백 배 더 많은 비용이 듭니다.
20 - 계획에 이 저장소에 기록되지 않은 자격 증명, 엔드포인트 또는 규칙이 필요한 경우 중단하고 그렇게 말하세요. 절대 만들어내지 마세요.
21 - DONE_WHEN이 셸 명령어가 아닌 경우, 해당 단계를 다시 작성하세요. 셸이 확인할 수 없으면 검토자도 확인할 수 없습니다.
22 - 영향 범위가 AGENTS.md의 금지 목록에 닿는 경우, 상단에 그렇게 명시하고 인간에게 큐잉을 추천하세요.
23
24당신은 여기서 diff가 아닌 계획에 대해 비용을 받습니다. 실제 불확실성이 있는 짧고 정직한 계획이 잘못된 것을 조용히 가정한 확신에 찬 계획을 이깁니다.

fable-advice.mdreview-hostile.md는 /fable-advice와 /review-hostile이 됩니다. 둘 다 이미 작성한 파일의 Codex 측 미러입니다: BUILD 5의 어드바이저 브리핑과 BUILD 6의 적대적 검토자 계약입니다. 동일한 규칙, 동일한 한도, 벤더 라인을 가로질러 반대 방향을 가리킵니다.

compost.md는 /compost가 되며, 단계 4의 주간 제도 구축자입니다:

markdown
1# /compost - 이번 주의 실패를 다음 주의 규칙으로 전환하세요
2
3이번 주의 모든 배출 데이터를 읽고, 다른 것은 읽지 마세요:
4 - progress.log의 BLOCKED 라인 (세 번의 어드바이저 자문을 이기지 못한 작업)
5 - GATE: REFUSED 항목 (완료를 증명할 수 없었던 실행)
6 - VIOLATED 상시 목표 (완료된 것이 더 이상 유효하지 않게 된 경우)
7 - 회로 차단기 및 예산 종료 (코드 2 및 3)
8 - 루프가 열고 병합되지 않고 닫힌 PR (인간이 조용히 동의하지 않음)
9 - 통과율이 90% 미만으로 떨어진 작업 클래스
10
11최대 3개의 제안을 추출하세요. 3개는 하드 캡이며 목표가 아닙니다. 깨끗한 주는 유효한 결과이며, 그렇게 말하는 것이 작업을 만들어내는 것보다 더 유용합니다.
12
13각 제안은 정확히 다음 중 하나여야 합니다:
14 1. CLAUDE.md 또는 AGENTS.md를 위한 새로운 규칙. 그것이 방지했을 사건을 인용하세요. 하나의 사건만 있는 규칙은 우연입니다; 두 번째를 기다리세요.
15 2. 동일한 실패가 같은 장소에서 반복될 때의 스킬 수정. 스킬, 패턴, 그것을 깨는 가장 작은 수정을 명시하세요.
16 3. 무언가가 조용히 썩어갈 때 누락된 상시 목표. 조건을 셸 명령어로 작성하거나, 제안하지 마세요.
17
18출력:
19 WEEK: <날짜>
20 EXHAUST: <개수: blocked, refused, violated, reverted>
21 PROPOSAL n: <law | skill fix | standing goal>
22 EVIDENCE: <사건들, 인용>
23 CHANGE: <추가할 정확한 텍스트 또는 조건>
24 COST OF NOT DOING IT: < >
25 VERDICT: < 하나만 있다면 무엇을 먼저 것인가>
26
27엄격한 규칙:
28 - 제안만 하세요. CLAUDE.md, AGENTS.md, 스킬, 또는 목표 파일을 편집하지 마세요. 인간이 서명하거나, 일어나지 않습니다.
29 - 게이트를 약화시키거나, 예산을 늘리거나, 금지 사항을 완화하는 규칙을 제안하지 마세요. 그것들은 시스템이 더 편안하게 실패하도록 허락해 달라고 요청하는 것입니다.
30 - 빈 배출 데이터: "clean week"라고 말하고 중단하세요. 실행을 정당화하기 위해 작업을 찾아다니지 마세요.

CLI 클립

스크래치 파일에 보관하세요. 이것들은 터미널에서 접근 가능한 전체 시스템입니다:

bash
1# the daily tick, capped in both dimensions
2BUDGET_USD=5 MAX_ITERS=20 ./loop/ralph.sh
3
4# plan first, spend later (the single highest-leverage habit here)
5codex -e high exec "$(cat ~/.codex/prompts/plan-stop.md)
6
7TASK: migrate the session store off the legacy adapter"
8
9# cross-vendor review of the last commit, in Sol's native harness
10codex --profile deep exec "$(cat ~/.codex/prompts/review-hostile.md)"
11
12# the mirrored lane: Codex stuck, Claude advises
13claude --model claude-fable-5 --effort high -p "$(cat ~/.codex/prompts/fable-advice.md)"
14
15# the goal loop: Fable plans, the fleet runs, Fable scores
16CYCLES=3 FLEET=4 WORKER_EFFORT=low ./swarm/swarm.sh "split the auth migration"
17
18# the system loop: nothing that passed once goes unwatched
19python3 system/verify_goals.py goals/ # exit 1 names what rotted
20python3 gate/eval_gate.py eval/cases.jsonl # exit 1 blocks the routing change
21
22# rung 3, the factory: rows decide, not transcripts
23./factory/factory.sh "build the kanban and notes app per PRD.md"
24python3 factory/factory_gate.py gate factory.db
25
26# the weekly institution-building run
27codex --profile deep exec "$(cat ~/.codex/prompts/compost.md)"
28
29# the one number that says whether any of this worked
30grep '^route' progress.log | awk -F'\t' \
31 '{n++; if($3!="frontier") c++} END{printf "cheap share: %.0f%%\n", c/n*100}'

전체 정책은 두 하네스가 모두 읽는 BUILD 4의 ROUTING.md에 있습니다.

규칙 (출력 가능)

  1. 팁이 아닌 규칙: 숫자, 금지 사항, 또는 이를 확인하는 명령어.
  2. 모델은 임대입니다. 루프는 당신의 것입니다. 당신은 단계 5에 살고 있습니다.
  3. 중단 없는 루프는 청구서입니다. 모든 루프에 두 가지 한도: 반복 횟수와 비용.
  4. 증거는 위로 흐르고, 통제는 아래로 흐릅니다. 어떤 단계도 아래 단계의 보고서만으로 종료되지 않습니다.
  5. 루프가 중단되어도 여전히 틀릴 수 있습니다. 병합 전 마지막 커밋을 확인하세요.
  6. 경계에서 라우팅하세요. 모델보다 노력 수준을 먼저 결정하세요. 캐시는 전환에 반대합니다.
  7. 기본값은 high입니다. max는 깊이, ultra는 폭, fast mode는 2.5배 세금, 하위 에이전트는 부모의 시트와 다이얼을 모두 상속받습니다.
  8. 라우터는 평가에서 최고의 단일 모델을 이길 때까지 유죄입니다.
  9. 절감액은 트래픽 분할입니다. 요금표가 아닌 저렴한 점유율을 확인하세요.
  10. 실행은 대량, 조언은 그램 단위입니다. 자문을 3회로 제한하세요.
  11. 아무도 자신의 숙제를 채점하지 않습니다. 새로운 컨텍스트, 다른 계보, 기본 하네스.
  12. 스레드는 추적입니다. 행은 증거입니다. 게이트는 행을 읽습니다.
  13. 통과시키기 위해 테스트를 편집하지 마세요. BLOCKED 게이트를 넘어 병합하지 마세요.
  14. 한 번 확인한 목표는 타임스탬프가 있는 가정입니다.
  15. 한 번에 하나의 단계 이행. 매달 무언가를 삭제하세요.

마무리

지금부터 30일 후, 확인 사항을 수행했다면:

  • 루프가 결정론적 게이트 뒤에서 지루한 작업을 무인으로 배송합니다
  • 저렴한 드라이버가 막힐 때만 프론티어 전문가에게 전화합니다
  • 모든 의미 있는 diff는 그것을 작성하지 않은 모델에 의해 평가됩니다
  • progress.log의 하나의 숫자가 경제성이 복리 효과를 내는지 알려줍니다

모델은 결코 어려운 부분이 아니었습니다. 당신이 지켜보지 않을 때도 정직함을 유지하는 시스템이 어려운 부분이며, 그것이 단계 5에 여전히 당신의 이름이 있는 이유입니다.

오늘 밤 이를 증명하는 20분으로 시작하세요. BUILD 2의 verify.sh. BUILD 3의 한 번의 수동 실행 틱. 마지막 커밋에 대한 다른 계보의 검토 한 번.

작성자와 컨텍스트를 공유하지 않는 검토자가 당신이 확실히 완료했다고 생각한 작업에서 실제 버그를 처음 발견할 때, 나머지에 대해 설득이 필요하지 않을 것입니다.

오늘 밤 게이트를 구축하세요. 첫 실행에서 무엇을 잡아냈는지 답변하세요.

면책 조항

저자의 연구 노트와 검증된 출처를 바탕으로 작성되었으며, Claude의 초안 작성 및 사실 확인 지원을 받았습니다. 모든 가격과 모델 동작은 게재 주간에 공식 가격 및 문서 페이지와 대조 확인되었습니다. 변경될 수 있으므로 예산 책정 전에 확인하세요.

이 글은 위 단락에서 언급한 바와 같이 저자의 노트를 바탕으로 작성되었으며, Claude Opus 4.7로 편집되었습니다.

추가 수정 사항이 있으면 댓글로 남겨주세요.

YouMind에서 다시 만들기

Turn one viral article into a full content workflow

Collect the source, decode the pattern, create assets, draft the story, and distribute from one AI workspace.

Explore YouMind
크리에이터를 위해

당신의 Markdown을 깔끔한 𝕏 글로

직접 쓴 장문을 올릴 때 이미지, 표, 코드 블록을 𝕏에 맞게 정리하는 일은 번거롭습니다. YouMind는 전체 Markdown 초안을 깔끔하고 바로 게시할 수 있는 𝕏 글로 바꿔 줍니다.

Markdown → 𝕏 사용해 보기

분석할 패턴 더 보기

최근 바이럴 아티클

더 많은 바이럴 아티클 보기