Claude Code Update · 2026-06-02

A Harness for
Every Task
dynamic workflows

Claude Code가 작업에 맞는 harness를 런타임에 스스로 작성한다. 이 업데이트가 제시한 6 오케스트레이션 패턴3 실패모드는 새로운 게 아니라 — 내 user-scope harness가 이미 hook·rule·skill로 결정화해 둔 것이다. dynamic workflow는 이를 ultracode opt-in 시 런타임 JS 오케스트레이션으로 격상한다.

출처 — claude.com/blog · A harness for every task · Thariq Shihipar, Sid Bidasaria

전체 실행 아키텍처

새 도구를 도입하지 않는다. /init-project §12/team Phase 3는 이미 Workflow opt-in 연결점을 갖고 있다. ultracode opt-in 게이트가 켜질 때에만 이 두 지점이 dynamic workflow의 6 패턴으로 펼쳐진다.

DYNAMIC WORKFLOWS HARNESS · 전체 실행 아키텍처사용자 요청/init-project §12체이닝 부트스트랩/team Phase 3specialist 구현workflow-worthy?classify-and-actAgent 병렬 tool-use기본 — 일반 작업NOYESworkflow-cost-gate.shPreToolUse[Workflow] · HARD 비용 게이트exit 2 차단패턴 미선언 시workflow.jsonl모든 호출 측정패턴 선언 → allow▸ 동적 ceiling — workflows (opt-in)team-deliver.jsloop-until-done +adversarial verificationteam-implement.jsfan-out-and-synthesize + verifyinit-project-bootstrap.jsfan-out-and-synthesize독립 생성 단계 병렬team-deliver 라이프사이클 — JS 루프가 강제 (md 선언 아님)① 선언task list② 구현worktree③ verifyadversarial④ evidenceschema 강제⑤ 완결성lazy 차단evidence records → .qa-evidence.jsonacceptance_verified[]▸ 정적 floor — hooks · 항상 ON (HARD 게이트)task-quality-gate.shHARD · project-scope acceptance floorpush gatesqa-gate-before-push · adversarial-reviewentry / floor판단 · 비용 게이트(HARD)workflowslifecycle 실행block / 실패
요청 → classify-and-act 판단 → (Agent 병렬 | Workflow) → workflow-cost-gate(HARD) → workflows → team-deliver 라이프사이클(선언·구현·verify·evidence·완결성) → .qa-evidence.json → task-quality-gate(HARD floor) → push gates. 동적 ceiling(opt-in)이 evidence 생산, 정적 floor(항상 ON)가 검증하는 폐루프.
정적 워크플로우 → 동적 워크플로우

기존 harness는 코딩에 최적화된 단 하나였다. 정적 워크플로우(claude -p · Agent SDK)는 모든 엣지케이스를 수용하느라 generic하다. Opus 4.8 + dynamic workflows는 use-case 전용 harness를 즉석에서 JS로 작성한다 — subagent를 spawn/coordinate하고, 모델 선택·worktree 격리·체크포인트 resume까지 스스로 결정한다.

before — static

Static Workflow

"모든 케이스를 수용하는 범용 harness"

  • claude -p / Agent SDK로 사전 정의
  • 모든 엣지케이스 수용 → generic
  • 단일 컨텍스트 윈도우에서 실행
  • 고정 패스 수 (예: 리뷰어 N명 항상)
  • laziness · bias · goal drift에 취약
now — dynamic (Opus 4.8)

Dynamic Workflow

"작업 전용 harness를 런타임에 자가 작성"

  • JS 파일이 subagent를 spawn/coordinate
  • use-case 맞춤 → custom harness
  • fan-out 병렬 + worktree 격리 결정
  • stop-condition 기반 동적 spawn
  • interrupt 후 체크포인트 resume
6 오케스트레이션 패턴 → 내 harness 매핑

블로그가 명명한 6개 패턴은 내가 이미 정적으로 결정화한 것이다. 각 카드의 초록 칩이 내 harness의 기존 구현이다 — dynamic workflow는 이를 런타임 JS로 재조립할 뿐.

Pattern 01

classify-and-act

분류 에이전트가 작업 유형을 결정한 뒤, 유형별로 다른 에이전트/동작으로 라우팅.

내 harness
/auto-issue 라벨 분류 agent-delegation 키워드 deterministic assign_agent
Pattern 02

fan-out-and-synthesize

작업을 잘게 쪼개 각 단계에 에이전트를 병렬 실행 → barrier에서 구조화 결과를 하나로 머지.

내 harness
/team Phase 3 병렬 parallel() / 요약만 반환 worktree-parallel-agents
Pattern 03

adversarial verification

spawn된 각 결과를 별도 에이전트가 rubric/기준으로 적대적으로 반박 검증.

내 harness
Codex 이중 리뷰 blind-validation-layer adversarial-review gate
Pattern 04

generate-and-filter

N개 아이디어 생성 → rubric/검증으로 필터, 중복 제거 → 최고 품질·검증된 것만 반환.

내 harness
trend-harvester 5축 필터 keep / discard self-improve dedup
Pattern 05

tournament

N개 에이전트가 서로 다른 접근으로 같은 작업에 경쟁 → pairwise 판정으로 승자 도출.

내 harness
population + parent select llm-council pairwise judge
Pattern 06

loop until done

작업량이 불명일 때 고정 패스가 아니라 stop 조건(새 발견 없음/에러 0)까지 반복 spawn.

내 harness
Phase 4 STUCK 13전략 convergence-loop autoresearch NEVER STOP
3 실패모드 → 정적·동적 이중 방어

dynamic workflow가 막으려는 3가지 실패모드는, 내 harness가 항상 켜진 정적 방어(hook/rule)로 이미 차단하던 것이다. ultracode가 켜지면 동적 방어(spawn된 verifier/loop)가 추가되어 — 두 층에서 동시에 막는다.

Failure 01

agentic laziness

복잡한 멀티파트 작업을 부분 완료(50 중 35)한 뒤 "완료" 선언.

정적 방어 always on
  • acceptance-criteria (anti-Goodhart)
  • premature-completion-detector hook
  • convergence-loop-no-mid-question
동적 방어 opt-in
  • rule당 verifier 1개 spawn
  • loop-until-done (stop 조건까지)
Failure 02

self-preferential bias

자기 결과/판정을 선호 — 특히 자기 출력을 rubric으로 자가 검증할 때.

정적 방어 always on
  • Codex 크로스 리뷰 (다른 모델)
  • blind-validation-layer
  • proof-by-exploitation ("no exploit, no report")
동적 방어 opt-in
  • 별도 spawn된 verifier/refuter 패널
  • pairwise 비교 판정
Failure 03

goal drift

compaction 이후 원래 목표와 "don't do X" 제약이 점진적으로 손실.

정적 방어 always on
  • /init-project Goal-normalized intake [HARD]
  • hard-process-contract goal edges
  • persistent-file-based-planning
동적 방어 opt-in
  • resume 시 team-handoff.json에서 goal 복원
  • 체크포인트 = 파일 상태
⚠ 정직한 scope — "항상 ON"의 범위

정적 floor가 전부 user-scope 상시는 아니다. bias·laziness 핵심 방어(adversarial-review · premature-completion)는 user-scope hook이라 모든 프로젝트에서 항상 ON. 반면 acceptance · goal-drift(task-quality-gate · hard-process-contract)는 project-scope/init-project를 돌린 프로젝트에만 설치된다(전역 자동 설치는 의도적 미배선). 미-init 프로젝트는 user-scope 방어만 받는다.

그리고 block-강제는 아키텍처상 PreToolUse[Workflow] 한 곳뿐이다 — 도구 실행 후(PostToolUse·Stop)엔 차단이 불가능하고, Workflow는 async dispatch라 그 뒤로는 측정만 가능하다. 그래서 비용 게이트가 단일 지점인 것이 맞다.

실제 적용 — user-scope 변경

분석에서 멈추지 않고 harness에 적용했다. canonical 패턴 카탈로그 rule 1개를 추가하고, 이미 Workflow를 언급하던 두 스킬에 cross-reference를 연결했다 — additive·reversible.

~/.claude/
├── 📄 rules/dynamic-workflows-harness.md NEW
│     6 패턴 / 3 실패모드 → 정적·동적 이중 방어 매핑 + ultracode opt-in 비용 게이트
├── 🔧 skills/team/SKILL.md Phase 3 Workflow 섹션 → 패턴 카탈로그 cross-ref 추가
├── 🔧 skills/init-project/SKILL.md §12 자동 체이닝 → fan-out-and-synthesize 명시 + cross-ref
├── 🛡️ hooks/workflow-cost-gate.sh NEW · HARD
│     PreToolUse[Workflow] — 패턴 미선언 시 exit 2 차단 + 모든 호출 .claude/logs/workflow.jsonl 측정
├── ⚙️ settings.json PreToolUse matcher "Workflow" 등록 (게이트 활성화)
└── 📁 workflows/ NEW
    ├── 🔁 team-deliver.js loop-until-done: 작업 리스트 선언 → 구현 → 완료확인 → QA → evidence → 완결성 게이트(부분완료를 "완료"로 못 만듦)
    ├── 🔀 team-implement.js fan-out-and-synthesize + adversarial verification
    └── 🔀 init-project-bootstrap.js fan-out-and-synthesize 독립 생성 단계 병렬
⚠ 비용 게이트 — classify-and-act로 판단

핵심은 "언제 안 쓸지"다. dynamic workflow는 토큰을 더 쓴다 — 고가치·복잡 작업 전용이다. 그래서 무조건 Workflow도, ultracode일 때만도 아니다: /init-project·/team"이 작업이 workflow로 갈 만한가"를 판단(classify-and-act)해서 그럴 때만 Workflow로 진행한다(ultracode · "workflow" 요청 · 대규모 migration/refactor · N-rule 검증 등). 그 외 일반 작업은 기본값 Agent 병렬. 이 판단은 SOFT지만 — escalate 시 workflow-cost-gate.sh(HARD)가 패턴 선언을 강제하는 backstop이다.

"For regular coding tasks, ask: does it really need more compute? Most traditional coding tasks do not need a panel of 5 reviewers."

이 경제성 원칙은 prose가 아니라 HARD hook으로 강제된다 — workflow-cost-gate.sh(PreToolUse[Workflow])가 script에 6 패턴 중 하나가 선언되지 않으면 exit 2차단하고, 모든 호출을 .claude/logs/workflow.jsonl에 측정한다. "패턴을 못 대면 Workflow 대신 Agent 병렬" = compute 낭비를 구조적 마찰로 차단. (우회: WORKFLOW_COST_GATE=0)

md 선언 → JS 강제: 라이프사이클 폐루프

가장 깊은 변화: 실행이 markdown prose가 아니라 결정론적 JS 제어흐름이라서 — workflow 코드 자체가 작업 라이프사이클을 강제한다. md는 "하라"고 요청만 하지만, JS 루프는 "안 하면 못 끝낸다"로 강제한다. ~/.claude/workflows/team-deliver.jsargs.tasks=[{id,spec,acceptance}]를 받아 5단계를 코드로 닫는다.

Stage ①

작업 리스트 선언

log(declared N tasks: ...) — 처리할 항목을 먼저 명시한다. 빠뜨리면 추적에 드러남.

강제
명시 기록
Stage ②

항목별 구현

각 task를 worktree 격리 agent로 빠짐없이 순회 구현 — pipeline이 항목을 건너뛸 수 없음.

강제
fan-out · worktree
Stage ③

완료확인 + QA

각 결과를 adversarial verify — acceptance 기준 반박, 숨김/no-op으로 통과 금지.

강제
adversarial verification
Stage ④

evidence 필수

VERIFY_SCHEMA{done, evidence, criterion}을 강제 — evidence 비면 미완료 처리.

강제
schema 강제
Stage ⑤

완결성 게이트

done && evidence 아닌 항목은 incomplete[]로 노출, all_done은 전부 충족 시에만 true.

강제
lazy 완료 차단
team-deliver(args.tasks) — loop-until-done 라이브 실증
입력 T1 evidence ✓ · T2 evidence ✗ · T3 evidence ✓
결과 { total: 3, completed: 2, incomplete: ["T2"], all_done: false }·agent 0 · 3ms
판정 evidence 없는 T2가 lazy 완료에서 구조적으로 차단됨 — "50 중 35만 하고 완료"(agentic laziness)를 루프가 막는다
🔁 floor + ceiling 폐루프

반환 records[{id, done, evidence, criterion}]의 evidence를 .qa-evidence.jsonacceptance_verified[]로 매핑 → project-scope task-quality-gate.sh(HARD acceptance 게이트)가 그 evidence를 검증한다. 동적 workflow(ceiling)가 evidence를 생산하고, 정적 HARD 게이트(floor)가 받는 폐루프. prose 규칙(completion-verification · acceptance-criteria)이 "하라"고 요청만 하던 걸, 이제 JS 루프 + HARD 게이트가 "evidence 없으면 못 끝낸다"로 강제한다.

적용 효과
Effect 01

패턴 어휘 통일

Workflow 작성 시 6개 canonical 패턴명(classify-and-act 등)으로 즉시 매핑. 매번 오케스트레이션을 재발명하지 않아 탐색 토큰 절감.

Effect 02

이중 방어

3 실패모드를 정적 hook(항상 ON) + 동적 workflow(opt-in)의 양층에서 차단. ultracode가 꺼져 있어도 laziness·bias·drift 방어는 그대로 유지된다.

Effect 03

goal 보존

/init-project/team의 goal-edge handoff가 dynamic workflow resume에서도 goal-drift 방어로 작동. 체크포인트 = 파일 상태이므로 compaction 후에도 복원.

Effect 04

비용 게이트 강제 (HARD)

"does it really need more compute?"를 prose가 아닌 exit 2로 강제. workflow-cost-gate.sh가 패턴 미선언 Workflow를 차단 — 일반 코딩은 Agent 병렬, 고가치만 Workflow.

Effect 05

측정 실측 (HARD)

모든 Workflow 호출이 .claude/logs/workflow.jsonl에 자동 기록 — 사용 패턴·source. 정량 추적 + soft→hard 승격 메트릭 공급.

연결된 분석
raground@gmail.com 복사됨