코디네이터 모드

Claude가 직접 작업하지 않고, 세션 상태를 맞춘 뒤 워커를 조율하는 전용 운영 모드.

01

개요

코디네이터 모드는 CLAUDE_CODE_COORDINATOR_MODE=1만 켠다고 끝나는 단순 토글이 아닙니다. 공개 레퍼런스에서는 현재 실행이 live coordinator 경로인지, 재개한 세션이 원래 coordinator였는지, 그리고 그 결과 어떤 도구 집합을 노출해야 하는지를 함께 맞춘 뒤에야 실제 coordinator 동작이 활성화됩니다.

핵심 코드 위치: session mode matching · coordinator tool filtering · worker context injection · coordinator system prompt

핵심 설계 원칙은 다음 네 가지입니다.

02

활성화, feature gate, 세션 매칭

공개 레퍼런스의 핵심은 원하는 모드와 실제 실행 모드를 분리해서 본다는 점입니다. 사용자가 env var로 coordinator를 요청했더라도, 라이브 coordinator 경로가 아니면 일반 단일 에이전트 동작으로 남을 수 있습니다. 반대로 세션 재개 시점에 이전 세션이 coordinator였다면, 현재 셸에 env var가 빠져 있어도 세션 매칭 단계가 coordinator로 다시 맞춥니다.

// 개념 요약: 원하는 모드와 재개 세션 모드를 맞춘다
function matchSessionMode({ resumeMode, requestedMode, isLiveCoordinatorPath }) {
  if (resumeMode === 'coordinator') {
    process.env.CLAUDE_CODE_COORDINATOR_MODE = '1'
    return {
      mode: 'coordinator',
      warning: requestedMode === 'single-agent'
        ? '재개 세션이 coordinator였으므로 해당 모드로 복원합니다.'
        : undefined,
    }
  }

  if (requestedMode === 'coordinator' && isLiveCoordinatorPath) {
    return { mode: 'coordinator' }
  }

  return { mode: 'single-agent' }
}
주의

여기서 중요한 점은 matchSessionMode()가 단순 경고 함수가 아니라는 것입니다. 실제로는 이후의 도구 열거와 시스템 프롬프트 조립이 이 결과를 기준으로 달라지므로, 세션 모드를 먼저 확정해야 coordinator 제한이 정확히 걸립니다.

03

허용 도구 제한과 코디네이터 시스템 프롬프트

코디네이터 모드의 가장 중요한 차이는 도구 열거 단계입니다. 공개 레퍼런스 기준으로 coordinator는 전체 도구 목록에서 필요한 것만 남기는 식이 아니라, 처음부터 coordinator 전용의 극도로 좁은 목록을 사용합니다. 그래서 Bash, Read, Edit, Glob, Grep 같은 직접 작업 도구는 아예 빠집니다.

// 개념 요약: coordinator는 4개 도구만 본다
const COORDINATOR_TOOLS = [
  'Agent',
  'SendMessage',
  'TaskStop',
  'SyntheticOutput',
]

function getAllowedTools(mode, workerMode) {
  if (mode === 'coordinator') return COORDINATOR_TOOLS
  if (workerMode === 'simple') return ['Bash', 'Read', 'Edit']
  return FULL_TOOLSET
}

시스템 프롬프트도 이 제한을 전제로 작성됩니다. 요지는 간단합니다. 코디네이터는 직접 실행하지 말 것, 먼저 작업을 쪼갤 것, 워커 결과를 종합할 것, 필요한 경우 기존 워커에 이어서 지시할 것, 그리고 최종 응답은 조정자 관점에서 정리할 것입니다.

// 개념 요약: coordinator system prompt의 핵심 톤
당신은 직접 편집하거나 셸 명령을 실행하지 않는다.
작업을 적절한 워커로 위임하고, 결과를 비교하고, 다음 단계를 결정한다.
전체 대화 대신 정제된 컨텍스트와 완료 조건을 워커에 전달한다.
같은 워커를 계속 쓸지, 새 워커를 띄울지 비용과 컨텍스트 보존을 기준으로 판단한다.
04

워커 컨텍스트 주입, coordinator와 single-agent 비교

single-agent 모드에서는 하나의 에이전트가 사용자 지시, 파일 조사, 편집, 검증까지 한 흐름 안에서 처리합니다. 반면 coordinator 모드에서는 그 흐름을 여러 워커에 나눠 맡기므로, 각 워커가 필요한 만큼만 이해할 수 있게 요약 컨텍스트를 주입해야 합니다.

// 개념 요약: 워커에게 전체 로그 대신 작업 요약을 넣는다
function buildWorkerContext({ task, repoFacts, constraints, acceptance, priorFindings }) {
  return [
    `목표: ${task}`,
    `이미 확인한 사실: ${repoFacts.join('; ')}`,
    `제약: ${constraints.join('; ')}`,
    `완료 조건: ${acceptance.join('; ')}`,
    priorFindings?.length ? `이전 워커 결과: ${priorFindings.join('; ')}` : '',
  ].filter(Boolean).join('\n')
}
05

scratchpad, continue vs spawn

이 문맥의 scratchpad는 마법 같은 공유 메모장이 아닙니다. 핵심은 코디네이터가 워커 출력에서 중요한 사실만 뽑아 다음 지시에 재주입하는 작업 메모 계층이라는 점입니다. 공개 레퍼런스에서 강조되는 부분도 여기에 있습니다. scratchpad가 풍부할수록 같은 워커를 계속 사용할 때 이득이 커지고, 부족할수록 새 워커를 띄울 때 다시 컨텍스트를 꾸려야 합니다.

딥 다이브, scratchpad에 실제로 담아야 하는 것

좋은 scratchpad에는 발견한 파일 경로, 이미 확인한 불변 조건, 수정 범위, 남은 검증 항목, 실패한 접근이 들어갑니다. 반대로 장황한 전체 대화 로그를 통째로 넣는 것은 scratchpad가 아니라 단순 복사입니다. coordinator 모드의 효율은 바로 이 압축 품질에서 갈립니다.

// 개념 요약: continue는 동일 워커의 문맥을 살리고, spawn은 새 역할을 분리한다
if (workerAlreadyKnowsTargetFiles && nextStepUsesSameContext) {
  SendMessage(workerId, synthesizedSpec)
} else {
  Agent({ role: 'verification', context: verificationPacket })
}
06

구체적 세션 예시

예를 들어 사용자가 “두 레슨 문서를 공개 참조와 맞춰 고쳐 달라”고 요청했다고 가정해 보겠습니다. coordinator는 먼저 탐색 워커에게 관련 HTML 구조와 누락 항목을 조사하게 하고, 그 결과를 scratchpad에 압축한 뒤 같은 워커에 계속 수정 지시를 내리거나 별도 검증 워커를 띄웁니다.

// 예시 세션 흐름
User: 21번과 45번 레슨 문서를 참조와 맞춰 수정해 줘.

Coordinator:
1. 탐색 워커 생성, 현재 섹션 구조와 누락 사실 수집
2. scratchpad 갱신, "21은 세션 매칭과 도구 제한 누락, 45는 buddy 아키텍처가 참조와 다름"
3. 수정 워커에 한국어 서술, 기존 번호 체계 유지, 두 파일만 편집 조건 전달
4. 필요 시 검증 워커에 HTML 일관성과 퀴즈 문항 점검 지시

Worker context:
목표: 지정된 두 레슨 HTML만 수정
제약: 로컬 lesson scaffold 유지, 한국어 유지, unsupported API 금지
완료 조건: 누락 섹션, 코드 블록, 세부 사실 반영
실무 포인트

이 예시에서 coordinator가 직접 파일을 열거나 수정하면 모드 경계가 무너집니다. coordinator의 가치는 “스스로 작업하는 능력”이 아니라 “어떤 워커에게 무엇을 어떤 밀도로 넘길지 결정하는 능력”에 있습니다.

07

핵심 요약

핵심 포인트

  • coordinator는 CLAUDE_CODE_COORDINATOR_MODE=1 요청만으로 끝나지 않고, live 경로와 세션 매칭 결과까지 반영해 실제 모드를 확정합니다.
  • 재개 세션이 coordinator였다면 matchSessionMode()가 env var와 실행 모드를 다시 맞춰 이전 세션의 작업 방식을 복원합니다.
  • coordinator에 허용되는 도구는 Agent, SendMessage, TaskStop, SyntheticOutput 네 개뿐입니다.
  • single-agent와 달리 coordinator는 워커에게 전체 대화가 아니라 요약된 컨텍스트 패킷을 주입합니다.
  • scratchpad의 핵심은 워커 출력 압축이며, continue와 spawn 선택은 이 압축 품질과 역할 분리에 따라 달라집니다.
  • simple worker 모드가 함께 켜진 경우 워커 쪽 도구는 Bash, Read, Edit로 더 좁아지고 Agent는 빠집니다.
08

지식 확인

퀴즈, 5문제

Q1. coordinator 자체에 허용되는 도구 조합으로 맞는 것은?

  • A) Bash, Read, Edit, Agent
  • B) Agent, SendMessage, TaskStop, SyntheticOutput
  • C) Read, Grep, Glob, SyntheticOutput
  • D) 전체 도구 세트
coordinator는 직접 작업하지 않으므로 Agent, SendMessage, TaskStop, SyntheticOutput 네 개만 봅니다.

Q2. 재개 세션이 원래 coordinator였는데 현재 셸이 일반 모드로 시작되면?

  • A) 세션 매칭 단계가 coordinator로 복원한다
  • B) 항상 일반 모드를 유지한다
  • C) 세션 재개를 막는다
  • D) 사용자가 수동으로 파일을 수정해야 한다
공개 레퍼런스의 핵심은 이전 세션 모드를 존중하는 것입니다. 세션 매칭이 coordinator 상태를 다시 맞춥니다.

Q3. coordinator가 워커에게 전체 로그 대신 요약 컨텍스트를 주입하는 이유는?

  • A) 네트워크를 끊기 위해
  • B) 워커가 사용자와 직접 대화하게 만들기 위해
  • C) 중복 탐색을 줄이고 역할별 작업 밀도를 높이기 위해
  • D) scratchpad를 없애기 위해
coordinator 모드의 효율은 요약 품질에 달려 있습니다. 워커는 필요한 사실과 완료 조건만 빠르게 받아야 합니다.

Q4. continue 대신 spawn이 더 적합한 상황은?

  • A) 같은 파일과 맥락을 이어서 수정할 때
  • B) 이미 탐색한 워커에게 구현 스펙만 추가할 때
  • C) 기존 워커 결과를 그대로 재사용할 때
  • D) 별도 검증 역할처럼 다른 작업 문맥이 필요할 때
역할이 달라지거나 문맥 분리가 필요할 때는 새 워커를 띄우는 편이 더 깔끔합니다.

Q5. simple worker 모드가 함께 켜졌을 때 워커 도구 제한으로 맞는 것은?

  • A) Agent, Bash, Read, Edit
  • B) Bash, Read, Edit만
  • C) Read와 SyntheticOutput만
  • D) coordinator와 동일한 4도구
simple worker는 Bash, Read, Edit만 사용합니다. Agent가 빠지므로 재귀 스폰이 되지 않습니다.
0 / 5