멀티 스텝 에이전트를 구축하려는 대부분의 사람들은 결국 직선 구조를 만들게 됩니다. 1단계, 2단계, 3단계 - 각 단계는 이전 단계가 끝나기를 정중히 기다립니다.
10명 중 9명은 그 절반의 단계가 전혀 기다릴 필요가 없었다는 것을 깨닫습니다.
그들은 라우팅하지 않습니다. 분기하지 않습니다. 병렬화하지 않습니다. 그저 대기열에 넣을 뿐입니다 - 하나의 헤드, 하나의 컨텍스트, 한 번에 한 가지씩, 창이 가득 차서 에이전트가 자신이 무엇을 하고 있었는지 잊어버릴 때까지요.
제 Substack을 팔로우하여 최신 AI 알파를 받아보세요:
이것이 바로 14단계 로드맵입니다. 단일 파일 라인을 그래프로 바꿔줍니다: 플릿 전체로 펼쳐지고, 자체 결과를 검증하며, 단일 에이전트가 절대 유지할 수 없는 결과로 수렴합니다.

아무도 명확히 설명하지 않는 전환이 여기에 있습니다. 프롬프트는 문장입니다. 루프는 사이클입니다. 하네스는 에이전트가 서 있는 바닥입니다.
하지만 작업 자체의 형태 - 무엇이 무엇보다 먼저 실행되는지, 무엇이 동시에 실행될 수 있는지, 무엇이 다른 모든 것을 기다려야 하는지 - 그 형태는 그래프입니다. 노드는 사고를 담당합니다. 에지는 결과를 전달합니다.
Claude Code가 이러한 그래프를 직접 구축할 수 있는 도구를 출시했습니다: 동적 워크플로우.
Claude는 일반 JavaScript 오케스트레이션 스크립트를 작성한 다음, 이를 실행할 조정된 서브에이전트 플릿을 생성합니다. 그리고 조정 자체는 모델 토큰을 소모하지 않습니다. 코드이지 대화가 아니기 때문입니다.
01. 노드는 작업입니다. 에지는 흐름입니다.
그래프에는 정확히 두 가지 요소가 있으며, 이를 제대로 이해하면 대부분의 혼란이 해소됩니다. 노드는 작업의 단위입니다 - 하나의 에이전트, 하나의 경계가 정해진 작업, 하나의 입력과 하나의 출력.
에지는 의존성입니다: 이 노드의 출력이 저 노드의 입력으로 전달된다는 의미입니다. 그 이상도 이하도 아닙니다.

실수는 "그리고 나서"를 에지로 취급하는 것입니다. "파일을 요약하고 그리고 나서 날씨를 알려줘"는 두 작업 사이에 에지가 없습니다 - 날씨는 요약 내용을 소비하지 않습니다.
이는 선형 스크립트가 불필요하게 연결한 두 개의 분리된 노드입니다. 에지는 데이터가 실제로 그 위를 가로지를 때만 존재합니다.
에이전트의 모든 "그리고 나서"에 대해 질문하는 법을 배우세요: 다음 단계가 이전 단계의 출력을 읽습니까? 그렇지 않다면 에지가 없으며, 기다림은 낭비입니다.
1박스와 화살표로 그리세요. 박스는 agent() 호출입니다.2화살표는 한 호출의 반환값에서 다른 호출의 프롬프트로 전달되는 변수입니다.3화살표를 그릴 수 없다면 - 즉, 어떤 변수도 교차하지 않는다면 - 두 박스는4독립적이며, 독립성이야말로 이 과정의 나머지 부분에서 활용하게 될 요소입니다.
02. 선형 스크립트는 퇴화된 그래프입니다
에이전트를 "A를 하고, B를 하고, C를 하고, D를 해"라고 작성하면, 여러분은 그래프를 그린 것입니다 - 분기하지 않는 단일 체인입니다. 모든 노드는 정확히 하나의 입력 에지와 하나의 출력 에지를 가집니다.
올바르게 실행됩니다. 하지만 느리고 취약하게 실행되기도 합니다. 체인에는 중복성이 없기 때문입니다: C가 중단되면 D는 절대 실행되지 않으며, A의 작업은 상류에 갇혀 갈 곳이 없습니다.

그래프 엔지니어링의 첫 번째 진짜 기술은 체인을 다시 그리는 것입니다. 선형 에이전트를 가져와 각 화살표에 대해 1단계 질문을 던지세요.
대부분의 체인에는 데이터를 전달하지 않는 화살표가 두세 개 있습니다. 그저 우연히 입력한 순서일 뿐입니다.
그 화살표들을 잘라내면 체인은 더 넓은 무언가로 붕괴됩니다: 모두 동시에 실행될 수 있는 몇 개의 독립적인 노드들이, 그것들을 모두 필요로 하는 단일 노드로 공급됩니다.
03. 모든 노드에 계약을 부여하세요
추론할 수 없는 노드는 병렬화할 수 없는 노드입니다. 해결책은 계약입니다: 경계가 정해진 입력, 경계가 정해진 출력, 정확히 하나의 작업.
입력은 노드가 읽는 모든 것입니다 - 명시적으로 전달되며, 공유 창에서 가져온 것으로 가정하지 않습니다. 출력은 정의된 형태이며, 이상적으로는 검증되어 다음 노드가 추측 없이 소비할 수 있습니다.

워크플로우에서 이 계약은 스키마로 강제됩니다. JSON 스키마와 함께 agent() 호출을 Claude에 전달하면, Claude가 생성한 서브에이전트는 검증된 구조화된 데이터를 반환하도록 강제됩니다 - 검증은 도구 호출 계층에서 발생하므로, Claude는 불일치 시 다시 시도하고, 파싱하고 기도해야 하는 자유 텍스트를 전달하지 않습니다.
이것이 Claude가 그래프에 연결할 수 있는 노드와 인간이 출력을 읽을 때만 작동하는 노드의 차이입니다.
1// 실제 계약이 있는 노드: 입력 경계 지정, 출력 검증, 하나의 작업.2const ITEM = {3 type: 'object', additionalProperties: false,4 properties: {5 title: { type: 'string' },6 url: { type: 'string' },7 impact: { type: 'string', enum: ['high', 'medium', 'low'] },8 },9 required: ['title', 'url', 'impact'],10};1112const result = await agent(source.prompt, {13 label: `research:${source.key}`,14 schema: ITEM, // 검증된 구조화된 출력을 강제함15 agentType: 'general-purpose',16});17// result는 이제 다음 노드가 신뢰할 수 있는 형태 — 자유 텍스트가 아님.
04. 에지를 데이터 계약으로 취급하세요
에지는 단순히 "B가 A 다음에 온다"가 아닙니다. 그것은 무엇이 교차하는지에 대한 약속입니다: A는 이 형태를 생성하고, B는 이 형태를 소비하도록 구축되었습니다. 에지를 순서가 아닌 데이터로 이름 지으면 두 가지가 더 쉬워집니다.

에지가 실제인지(데이터가 실제로 이동하는지) 즉시 확인할 수 있으며, 형태가 유지되는 한 그래프를 깨뜨리지 않고 양쪽 끝의 노드를 교체할 수 있습니다.
실제로 에지는 일반 JavaScript로 존재합니다. 팬 아웃과 합성 사이의 리듀스 단계 - 평탄화, 중복 제거, 필터링 - 은 노드가 반환한 형태에 대해 작동하는 코드일 뿐입니다.
에이전트가 필요 없습니다. 그래프 사고의 조용한 승리 중 하나: 사람들이 모델 토큰을 소모하는 엄청난 양이 실제로는 에지이며, 에지는 무료입니다.
1유혹은 "결과를 결합"하기 위해 에이전트를 생성하는 것입니다. 저항하세요.2결합이 평탄화 및 중복 제거를 의미한다면, 그것은 results.flatMap(...)3과 Set입니다 — 결정론적이고, 즉각적이며, 토큰이 0입니다. 에이전트는4판단을 위해, 배관을 위해 사용하지 마세요. 모든 에지가 에이전트인 그래프는5자체 배선에 임대료를 지불하는 그래프입니다.
05. parallel()로 팬 아웃하세요
이것이 모든 것을 정당화하는 움직임입니다. N개의 독립적인 노드 - 확인할 N개의 소스, 검토할 N개의 파일, 감사할 N개의 경로 - 가 있을 때, 체인으로 연결하지 마세요.
Claude에게 팬 아웃하여 한 번에 실행하도록 지시하세요. 워크플로우에서는 parallel()입니다: Claude는 thunk 배열을 가져와 thunk당 하나의 서브에이전트를 생성하고, 모두 동시에 실행한 다음, 결과 배열을 반환합니다.

두 가지 세부 사항이 이를 강력하게 만듭니다. 첫째, parallel()은 배리어입니다 - 모든 thunk가 반환될 때까지 기다렸다가 다음 단계가 전체 집합을 볼 수 있도록 합니다. 둘째, 예외를 던지는 thunk는 전체 배치를 거부하는 대신 null로 해석되므로, 하나의 불안정한 에이전트가 실행을 망칠 수 없습니다.
항상 .filter(Boolean)로 결과를 필터링하세요. 동시성은 코어 수와 초과 큐 주변에서 제한되므로, 100개의 thunk를 전달해도 모두 완료됩니다 - 한 번에 몇 개씩 처리됩니다.
1phase('Research');23// 9개 소스, 9개 에이전트, 모두 동시에.4const raw = await parallel(5 SOURCES.map((s) => () =>6 agent(s.prompt, {7 label: `research:${s.key}`,8 phase: 'Research',9 schema: ITEM_SCHEMA, // 각 노드는 검증된 JSON 반환10 agentType: 'general-purpose',11 }),12 ),13);1415const collected = raw.filter(Boolean); // 실패한 에이전트의 null 제거
팬 아웃은 모델 대화가 아닌 Claude가 작성한 코드에 존재합니다. Claude의 자체 컨텍스트는 9개의 소스를 동시에 보유하지 않습니다 - 각 서브에이전트가 자체 소스를 가지며, 최종 답변만 돌아옵니다.
이것이 Claude가 세션을 익사시키지 않고 수십 또는 수백 개의 서브에이전트로 워크플로우를 확장할 수 있게 하는 것입니다. 오케스트레이션 계층은 토큰을 소모하지 않습니다. Claude가 생각하는 또 다른 턴이 아니기 때문입니다.
06. 배리어에서 팬 인하세요
팬 아웃은 무언가가 그것을 모을 때만 유용합니다. 팬 인은 에지가 수렴하는 노드입니다 - 하나의 에이전트(또는 하나의 코드 조각)가 모든 상류 결과를 한 번에 보고 전체 집합이 필요한 작업을 수행하는 곳: 소스 간 중복 제거, 영향별 순위 지정, 전체가 비어서 돌아온 경우 조기 종료. 이것이 배리어가 벽시계 시간 비용을 정당화하는 유일한 장소입니다.

그래프를 빠르게 유지하는 규칙: 단계가 진정으로 모든 이전 결과를 함께 필요로 할 때만 배리어를 사용하세요. 모든 소스에서 중복 제거? 배리어 - 정답입니다.
1// 에지: 일반 JS, 에이전트 없음, 토큰 0.2const flat = collected.flatMap((c) => c.items);3log(`Collected ${flat.length} items`);45phase('Curate');6// 배리어 노드: 중복 제거 + 순위 지정을 위해 전체 집합이 필요함.7const curated = await agent(8 `다음 항목을 중복 제거하고 영향별로 순위를 매기세요:\n${JSON.stringify(flat)}`,9 { phase: 'Curate', schema: CURATED_SCHEMA },10);
목록을 평탄화하는 것뿐이라면? 그것은 에지이므로 인라인으로 수행하세요. 냄새 테스트는 잔인하고 간단합니다: parallel → transform → parallel을 작성했는데, 그 중간 transform이 항목 간 의존성이 없다면, 파이프라인을 사용하고 배리어를 완전히 건너뛰어야 했습니다.
07. 다이아몬드: 분할 → 작업 → 병합
팬 아웃과 팬 인을 합치면 모든 진지한 에이전트 그래프의 핵심 토폴로지인 다이아몬드가 탄생합니다.
하나의 노드가 작업을 분할하고, 많은 노드가 병렬로 작업을 수행하며, 하나의 노드가 병합합니다. 이것은 시장 스캔, 의존성 감사, 코드 리뷰, 연구 보고서의 기본 형태입니다 - 소스와 프롬프트를 교체하면 동일한 골격이 적응합니다.

정식 형태에는 기억할 가치가 있는 이름이 있습니다: 팬 아웃 → 리듀스 → 합성. 팬 아웃하여 폭을 수집하고, 일반 코드로 리듀스하여 압축하고, 최종 에이전트로 합성하여 답변을 작성합니다.
다이아몬드를 보게 되면 "에이전트가 더 많은 단계를 수행하게 하려면 어떻게 해야 할까"라는 질문을 멈추고 "분할은 어디에 있고, 병합은 어디에 있을까"라는 질문을 시작합니다 - 이것이 실제로 확장되는 질문입니다.
08. 조건문으로 런타임에 에지를 라우팅하세요
모든 그래프가 고정된 것은 아닙니다. 때로는 취해야 할 에지가 노드가 찾은 것에 따라 달라집니다. 라우터 노드는 결과를 검사하고 어떤 다운스트림 경로가 실행될지 결정합니다 - 티켓을 분류한 다음 올바른 핸들러로 분기하고, diff 크기를 확인한 다음 빠른 검토를 수행하거나 전체 감사를 시작합니다.
워크플로우에서는 노드의 검증된 출력에 대한 JavaScript if 또는 switch일 뿐입니다. 제어 흐름이 코드에 있기 때문입니다.

여기서 결정론이 제한 사항이 아닌 기능이 됩니다. 라우터의 결정은 Claude 기반일 수 있지만(서브에이전트가 분류), 라우팅은 Claude가 작성한 코드이므로 동일한 분류에 대해 매번 동일한 방식으로 실행됩니다.
노드에서는 Claude의 판단을, 에지에서는 스크립트의 신뢰성을 얻습니다. "Claude가 감사를 건너뛰기로 결정한" 예상치 못한 상황은 없습니다 - 건너뛰기가 그래프에 작성되어야 하기 때문이며, 그렇지 않습니다.
1// 라우터 노드: 에이전트가 분류하고, 코드가 에지를 선택함.2const { severity } = await agent(3 `이 diff의 위험을 분류하세요:\n${diff}`,4 { schema: { type: 'object',5 properties: { severity: { enum: ['low', 'high'] } },6 required: ['severity'] } },7);89let review;10if (severity === 'high') {11 // 무거운 경로: 전체 병렬 감사12 review = await parallel(FILES.map((f) => () => agent(`감사 ${f}`)));13} else {14 // 가벼운 경로: 한 번의 빠른 검토15 review = await agent(`빠른 검토 ${diff}`);16}
09. 에지에 검증기를 배치하세요
그래프의 진정한 레버리지는 더 많은 에이전트가 아니라, 그 주위에 감싸서 신뢰도를 높일 수 있는 구조입니다.
검증기 노드는 결과가 다운스트림으로 허용되기 전에 에지에 위치하며, 유일한 임무는 발견을 무효화하려고 시도하는 것입니다. 살아남으면 통과합니다. 그렇지 않으면 답변에 도달하지 못합니다.

손에 넣을 가치가 있는 세 가지 패턴이 있습니다.
- 적대적 검증: 각 발견에 대해, 이를 반박하도록 프롬프트된 N개의 독립적인 회의론자를 생성합니다; 과반수가 살아남는 경우에만 유지합니다.
- 관점 다양성 검증: 각 검증기에 고유한 렌즈(정확성, 보안, 재현 가능성)를 제공합니다. 다양성은 N개의 동일한 검사가 절대 잡지 못하는 실패 모드를 포착하기 때문입니다.
- 심사위원 패널: 다른 각도에서 N개의 시도를 생성하고, 병렬 심사위원으로 점수를 매기고, 승자에서 합성하면서 준우승자의 최고 부분을 접목합니다.
이것이 바로 실제 팀이 적대적 코드 리뷰를 루프에 내장하여 Bun 런타임을 포팅할 수 있게 한 패턴입니다.
10. 하나의 실패가 그래프를 오염시키지 못하도록 노드를 격리하세요
체인에서는 실패가 연쇄됩니다 - C가 죽으면 D는 절대 실행되지 않고, 전체가 중단됩니다. 그래프에서는 실패는 해당 노드에 국한되어야 합니다.
이는 이미 부분적으로 사실입니다: parallel() 내부에서 예외를 던지는 thunk는 null로 해석되므로, 8개의 좋은 에이전트는 여전히 반환되는 반면 하나의 나쁜 에이전트는 탈락합니다. .filter(Boolean)이 격리입니다.
완전한 집합을 가정하기보다는 누락된 입력을 견딜 수 있도록 모든 팬 인을 설계하세요.

더 미묘한 실패는 노드가 서로 충돌하는 것입니다. 에이전트가 병렬로 파일을 쓸 때 충돌이 발생할 수 있습니다.
해결책은 격리입니다: "작업 트리" - 각 에이전트는 자체 git 작업 트리에서 실행되고, 샌드박스에서 작업을 수행하며, 깔끔하게 병합됩니다.
노드가 실제로 병렬로 쓸 때만 사용하세요. 필요한 토폴로지를 위한 안전벨트이지, 모든 실행에 대한 기본 세금이 아닙니다.
11. 사이클을 추가하세요 - 하지만 수렴하게 만드세요
때로는 작업에 들어가기 전까지 작업의 크기를 알 수 없습니다: 알 수 없는 크기의 발견, 하나의 버그를 찾으면 세 개가 더 드러나는 버그 청소. 이것은 사이클이 필요합니다 - 이전 노드로의 제어된 에지.
위험은 명백합니다: 수렴하지 않는 사이클은 예산이 소진될 때까지 에이전트를 생성하는 무한 루프입니다.

수렴하는 패턴은 마를 때까지 루프입니다: K번의 연속 라운드가 새로운 것을 발견하지 못할 때까지 파인더를 계속 생성한 다음 중지합니다. 이를 성패시키는 한 가지 세부 사항 - 그리고 거의 모든 사람이 처음에 실수하는 것 - 은 무엇에 대해 중복 제거하느냐입니다.
확인된 결과가 아닌 본 모든 것에 대해 중복 제거하세요. 그렇지 않으면 거부된 발견이 매 라운드마다 다시 나타나고, 루프는 마르지 않으며, 동일한 막다른 길을 영원히 재발견하는 데 비용을 지불하는 기계를 구축하게 됩니다.
1const seen = new Set(); const confirmed = []; let dry = 0;23while (dry < 2) { // 2번의 빈 라운드 후 중지4 const found = (await parallel(5 FINDERS.map((f) => () => agent(f.prompt, { schema: BUGS }))6 )).filter(Boolean).flatMap((r) => r.bugs);78 const fresh = found.filter((b) => !seen.has(key(b)));9 if (!fresh.length) { dry++; continue; } // 새로운 것 없음 → 마름 방향10 dry = 0;11 fresh.forEach((b) => seen.add(key(b))); // 확인된 것이 아닌 본 것에 대해 중복 제거1213 // 각 새로운 발견을 다중 렌즈로 검증한 후에야 집계14 const judged = await parallel(fresh.map((b) => () =>15 parallel(['correctness', 'security', 'repro'].map((lens) => () =>16 agent(`"${b.desc}"를 ${lens} 렌즈로 판단 — 실제인가요?`, { schema: VERDICT })))17 .then((v) => ({ b, real: v.filter(Boolean).filter((x) => x.real).length >= 2 }))));1819 confirmed.push(...judged.filter((v) => v.real).map((v) => v.b));20}
12. 노드 전체에 모델을 계층화하세요
모든 노드가 최고의 모델을 필요로 하는 것은 아닙니다. 그래프는 단일 에이전트가 절대 하지 않는 방식으로 이를 명확하게 만듭니다: 일부 노드는 경계가 정해져 있고 반복적이며(이 필드 추출, 이 티켓 분류), 일부는 실제 판단을 수행합니다(보고서 합성, 발견 사항 판정).
지루한 노드는 더 저렴한 모델에서 실행하고, 판단이 실제로 있는 곳에 비싼 토큰을 사용하세요.

워크플로우에서 Claude가 생성하는 모든 서브에이전트는 스크립트가 재정의하지 않는 한 세션 모델을 상속합니다 - 따라서 기본적으로 대규모 실행은 전적으로 세션 계층에서 청구됩니다. 단일 agent() 호출의 model 옵션은 Claude에게 해당 노드만 다른 곳으로 라우팅하도록 지시합니다.
대규모 실행 전에 /model을 확인한 다음, Claude가 팬 아웃의 반복적인 노드를 더 저렴한 모델로 라우팅하고 병합 노드는 상위 모델로 유지하도록 하세요. 이것이 형태를 건드리지 않고 토큰을 많이 소비하는 그래프를 비싼 것에서 경제적인 것으로 바꾸는 레버입니다.
13. 토폴로지 는 비용이자 지연 시간입니다
그래프의 형태는 미용상의 문제가 아닙니다 - 벽시계 시간에 대한 가장 큰 단일 레버입니다. 모든 사람을 걸려 넘어지게 하는 선택: parallel() 대 pipeline(). parallel() 배리어는 모든 것이 다음 단계가 시작되기 전에 가장 느린 노드를 기다리게 만듭니다.
pipeline()은 각 항목을 모든 단계를 통해 독립적으로 스트리밍하며, 배리어가 없습니다 - 항목 A가 3단계에 있는 동안 항목 B는 여전히 1단계에 있을 수 있습니다. 빠른 항목은 느린 항목 뒤에서 유휴 상태가 되는 대신 일찍 완료됩니다.

기본값은 pipeline()입니다. 단계가 진정으로 모든 이전 결과를 한 번에 필요로 할 때만 배리어를 사용하세요 - 교차 집합 중복 제거, 전체에 대한 조기 종료, "다른 발견 사항"과 비교하는 프롬프트. "코드가 더 깔끔하다"와 "단계가 분리되어 있다"는 이유가 아닙니다; 배리어 지연 시간은 실제적이고, 측정 가능하며, 낭비되는 시간입니다. 분리된 것은 동기화된 것과 같지 않습니다.
14. Claude가 그래프를 그리게 하세요 - 셀프 라우팅
미리 계획할 수 없는 작업을 위해 손으로 그래프를 그리는 것을 중단하는 것이 최종 움직임입니다.
동적 워크플로우를 사용하면 목표를 설명하고 Claude가 직접 오케스트레이션 스크립트를 작성합니다 - 작업을 분해하고, 팬 아웃을 선택하고, 조정된 서브에이전트 플릿을 생성하고, 결과를 합성합니다. 맞추길 바랐던 고정된 그래프 대신 이번 실행에 맞춤화된 그래프를 얻습니다.

세 가지 진입 방법이 있습니다. 프롬프트에 "워크플로우" 라는 단어를 말하면 Claude가 해당 작업에 대한 워크플로우를 작성합니다. 저장된 또는 번들된 것을 실행합니다 - /deep-research는 프로덕션에서 실제로 배송되는 그래프입니다: 범위 → 병렬 검색 → 가져오기 → 적대적 검증 → 합성, 이 과정의 정확한 골격입니다.
또는 ultracode를 켜면 Claude가 세션의 모든 중요한 작업에 대한 워크플로우를 계획합니다. 실행이 좋으면 s를 눌러 스크립트를 .claude/workflows/에 저장합니다 - 버전 관리되고, 이름으로 재실행 가능하며, 리포지토리를 클론하는 사람이라면 누구나 실행할 수 있는 그래프입니다.
1› src/routes/ 아래의 모든 경로에서 누락된 인증을 감사하는 워크플로우를 실행하세요.2 경로 파일당 하나의 에이전트를 생성한 다음, 보고하기 전에 각 발견을 검증하세요.3● Claude가 오케스트레이션 스크립트를 작성했습니다 · 백그라운드에서 실행 중…4/workflows — auth-audit · 실행 중 ✓ 범위 1/1 2.1k 토큰 · 4초 ✓ 팬 아웃 18/185 경로 파일당 하나의 에이전트 ◯ 검증 11/18 발견당 3표 회의론자… ○ 합성 0/16 검증 대기 중 세션은 응답 가능 — 플릿이 실행되는 동안 계속 작업하세요
이번 주에 Claude로 구축할 여섯 가지 그래프

- 모든 경로에 대한 보안 청소. Claude는 경로 파일당 하나의 서브에이전트를 생성하고, 각각 누락된 인증 확인을 찾은 다음, 검증기 패스가 보고서에 도달하기 전에 모든 발견을 확인합니다. 단일 컨텍스트가 유지할 수 없는 폭입니다.
- 인용 보고서와 /deep-research. 이미 Claude Code에서 배송되는 그래프입니다. Claude가 질문을 고유한 각도로 분해하고, 병렬 검색을 실행하고, 소스를 중복 제거한 다음, 모든 주장을 세 표 회의론자로 적대적으로 검증한 후 작성합니다.
- 모듈을 파일별로 포팅하세요. Bun 천장, 리포지토리에 맞게 확장되었습니다. Claude가 파일 전체에 번역을 팬 아웃하고, 각 파일에 대한 게이트로 테스트 스위트를 실행하며, 실패를 다시 루프백합니다 - 적대적 검토가 단일 패스가 깨진 상태로 배송할 것을 포착합니다.
- Diff의 적대적 검토. Claude가 diff 크기에 따라 라우팅합니다: 작은 변경은 한 번의 빠른 패스를, 큰 변경은 전체 병렬 감사를 트리거하며, 검토자는 정확성, 보안, 성능 등 고유한 렌즈를 가지고, 그런 다음 심사위원 패널이 합성합니다.
- 예약된 에코시스템 스캔. 한 번 저장하고 영원히 재실행합니다. Claude가 많은 소스를 병렬로 확인합니다 - 릴리스, 블로그, 토론 - 배리어에서 영향별로 순위를 매기고 다이제스트를 작성합니다. .claude/workflows/에 버전 관리되어 이름으로 실행 가능합니다.
- 알 수 없는 크기의 발견. 얼마나 많은 버그가 있는지 알 수 없습니다. Claude가 파인더를 병렬로 실행하고, 각 새로운 발견을 본 모든 것에 대해 중복 제거하고, 생존자를 검증하며, 두 라운드가 새로운 것을 발견하지 못할 때까지 계속 루프한 다음 중지합니다.
결론:
프롬프터는 질문을 합니다. 아키텍트는 그래프를 그립니다.
선형 에이전트는 결코 천장이 아니었습니다 - 그것은 단지 첫 번째 형태였고, 우리가 입력하는 방식과 일치하기 때문에 모든 사람이 먼저 사용하는 형태였습니다. 한 줄, 하나의 헤드, 한 번에 한 가지.
노드와 에지를 볼 수 있게 되면, 에이전트에게 더 많은 것을 요청하는 것을 멈추고 그래프에게 더 넓게 하도록 요청하기 시작합니다: 작업이 독립적인 곳에서 팬 아웃하고, 신뢰도가 중요한 곳에서 에지를 게이트하고, 판단이 필요하지 않은 곳에서 모델을 계층화합니다.
대부분의 사람들은 계속해서 단계를 한 줄로 대기열에 넣을 것입니다. 그래프를 그리는 법을 배운 사람들은 플릿을 운영할 것입니다 - 그리고 나머지가 갇혀 있는 천장을 결코 알아차리지 못할 것입니다.





