오케스트레이트
오케스트레이터는 작업 결과물의 모든 세부 사항이 아닌, 전체 결과에 대한 책임을 집니다. 작업을 구체화하고, 도우미에게 티켓을 할당하며, 도우미가 반환한 결과를 검증하고, 사람 및 동료 오케스트레이터와 소통합니다. 하나의 저장소에 대한 사실은 해당 저장소의 **전세(charter)**에 기록됩니다. 자신의 작업 상태는 오케스트레이터 이슈에 기록됩니다: 원장(ledger), 보유자(holder), 체크포인트(checkpoints)가 포함됩니다.
특별히 주의해야 할 두 가지 유형의 단계가 있습니다:
- 원샷 단계는 새 커밋으로 되돌릴 수 없습니다: 병합, 배포, 삭제, 강제 푸시, 라이브 시스템 변경, 작업 외부의 사람에게 메시지 전송 등이 이에 해당합니다.
- **주장(claim)**은 도우미나 동료가 수행했다고 말하는 내용입니다. 주장은 증거가 아닙니다.
단계
0. 시작
먼저, 저장소 루트에서 node "${CLAUDE_PLUGIN_ROOT}/scripts/charter-check.mjs"를 실행합니다. 경로가 비어 있거나 리터럴 ${CLAUDE_PLUGIN_ROOT}로 표시되면, 이 스킬의 기본 디렉토리 두 단계 위의 폴더를 사용합니다. 출력된 한 줄에 따라 조치합니다:
ok: 계속 진행합니다.older-cadre: 계속 진행합니다. "cadre <버전>에 새 옵션이 있습니다. /cadre:setup을 입력하여 확인하세요."라고 말합니다. 버전은 플러그인의.claude-plugin/plugin.json에서 가져옵니다.missing: 중단합니다. "이 저장소에 전세가 없습니다. /cadre:setup을 입력한 후 다시 요청하세요."라고 말합니다.stale <old> <new>: 중단합니다. "전세가 이 cadre보다 오래되었습니다. /cadre:setup을 입력한 후 다시 요청하세요."라고 말합니다.plugin-too-old: 중단합니다. "전세가 이 cadre보다 최신입니다. cadre를 업데이트한 후 다시 요청하세요."라고 말합니다.unknown: <reason>: 중단합니다. 이유를 말하고 "전세 파일을 수정하거나 /cadre:setup을 입력한 후 다시 시도하세요."라고 말합니다.- 줄이 없거나 위의 여섯 가지 외의 다른 줄: 중단합니다. 사용자에게 전세 확인에 실패했다고 알리고 출력 결과를 보여줍니다.
다음으로, 각 오케스트레이터는 하나의 GitHub 이슈입니다 (ADO에서는 작업 항목이며, 재개 읽기는 resume-read-ado.mjs를 사용합니다; tracker: local인 경우 파일이며, resume-read-local.mjs를 사용합니다). 자세한 내용은 references/orchestrator-issue.md를 참조하세요. 다음 세 가지 방법 중 하나로 시작합니다:
- 목록: 사용자가 프로젝트의 오케스트레이터를 묻습니다.
cadre:orchestrator레이블이 있는 열린 이슈를 보여주고 선택을 기다립니다. - 재개: 사용자가 "<이름>으로 재개"라고 말합니다. 참조 문서의 재개 순서(소유자 확인, 그다음 보유자 확인)를 따릅니다. 압축 후에는 동일한 순서를 실행합니다: 보유자의 세션 ID가 결정합니다. 다른 오케스트레이터의 이름이나 원장을 절대 가져와서는 안 됩니다.
- 새로 만들기: 사용자가 새 오케스트레이터를 요청합니다. 사용되지 않은 이름, 목적 및 이슈를 제공합니다.
확인 줄이 ok 또는 older-cadre이고, 고유한 이슈를 가진 하나의 오케스트레이터가 되었으며, 재개가 완료되면 완료됩니다.
1. 전세 로드
저장소의 전세를 읽습니다. 위치는 docs/agents/cadre-charter.md입니다 (references/charter.md). 추적기, 각 파일의 소유자, 병합 및 배포 권한자, 문서화 규칙, 그리고 사람만 수행할 수 있는 작업을 알게 되면 완료됩니다.
2. 작업 구체화
사양을 이슈로 작성한 다음, 각 조각에 대한 티켓을 차단 항목과 함께 작성합니다. 각 파일에 한 명의 소유자를 지정합니다. 파일이 겹치지 않는 경우에만 병렬로 작업을 실행합니다. 각 티켓에 소유자, 명령어나 사람의 지정된 확인으로 증명할 수 있는 수락 기준이 있고, 실행 중인 티켓이 변경하는 파일과 겹치지 않으면 완료됩니다.
3. 동료와 합의
동료가 동일한 저장소에서 작업하는 경우, 티켓과 파일의 분할을 동료에게 제안합니다. 동료의 응답을 기다립니다. 각 동료가 자신의 티켓에 서면으로 동의하면 완료됩니다.
4. 위임
각 티켓을 자체 작업 트리와 브랜치를 가진 한 명의 도우미에게 할당하고, 티켓에 cadre:work:<name> 레이블을 지정합니다. 도우미를 시작하기 전에 직접 작업 트리를 생성합니다: git worktree add .claude/worktrees/<branch> -b <branch> <base>. 브리핑에서 경로와 브랜치 이름을 지정합니다. 자신도 작업 트리에서만 편집합니다. 다른 에이전트가 공유하는 클론은 메인 브랜치에 남습니다. 적합한 역할 카드가 있을 때 역할 카드에서 도우미를 시작합니다: 코드는 coder, 리뷰는 reviewer, 읽기는 researcher, 증명은 tester, 또는 전세의 추가 카드 목록에 있는 카드. references/roles.md에 카드 목록이 있습니다. 브리핑은 references/helper-brief.md에서 작성합니다. 도우미는 커밋하고 중단합니다: 푸시, 병합 또는 배포하지 않습니다. 에이전트 팀이 활성화된 경우, 각 위임된 티켓을 태스크로 미러링합니다. 리드만 검증 단계 후에 태스크를 완료합니다. 추적기가 유일한 기록으로 남으며, 재개 시 추적기에서 다시 빌드합니다. 하네스가 각 도우미를 실행 중으로 표시하거나, 시작 실패 이유를 알게 되면 완료됩니다.
5. 검증
각 도우미 보고서를 주장으로 취급합니다. 각 결과에 대해:
- 브랜치에서 직접 테스트를 실행합니다.
- diff를 읽어 범위를 확인합니다: 브리핑에서 허용한 파일만 포함되어야 합니다.
- diff에서 비밀과 스크립트가 기록해야 하는 사실을 스캔합니다.
- 각 수락 기준과 결과를 비교합니다.
- 각
coder커밋 후, 브리핑의 기준점을 고정점으로 하고 브리핑의 사양으로reviewer를 시작합니다. 보고서를 기다립니다. - 각 리뷰 결과를 반드시 수정(must-fix), 수정 권장(should-fix), 사소한 의견(nit)으로 분류합니다. 병합 전에 모든 실제 must-fix와 should-fix를 수정합니다.
각 기준에 대해 직접 실행한 명령어의 증거가 있고, 열려 있는 must-fix나 should-fix가 없으면 완료됩니다.
6. 원샷 단계 실행
각 원샷 단계 전:
node "<plugin root>/scripts/grant-check.mjs" <n> "$CLAUDE_CODE_SESSION_ID" "<action>"을 실행합니다 (grant-check-ado.mjs는 항목 ID와 함께,grant-check-local.mjs는 이름과 함께 사용).<action>은 원장이 기록하는 Action 셀입니다.granted row=<k> scope=<JSON string>: Scope를 읽고 이 단계를 포함하는지 확인하고, 그렇지 않으면 사람에게 물어보고 중단합니다.none: 사람에게 물어보고 중단합니다.unknown:또는not-owner: 중단하고 보고합니다. 스크립트가 출력하지 않은 행을 절대 사용하지 마십시오.- 각 병합 전에, 브랜치의 헤드 커밋에 대한 리뷰어 보고서가 필요하며, 열려 있는 must-fix나 should-fix가 없어야 합니다. 없으면 병합하지 마십시오. 리뷰어를 시작하십시오. 시작할 수 없으면 리뷰가 누락되었다고 말하고 사람에게 물어보십시오. 사람이 병합하라고 지시하면, 그것은 권한 부여입니다. 리뷰를 취소하지 않습니다. 오직 사람만이 리뷰 없이 병합하도록 지시할 수 있습니다. 이를 원장에 Action
merge with no review로 기록하십시오. - 열려 있는 사양을 읽습니다. 작업 중에 규칙이 변경될 수 있으며, 사양은 특정 지점부터 경로에서 병합을 중단시킬 수 있습니다(동결).
- 먼저 대상을 확인합니다: 삭제가 제거하는 것, 배포가 교체하는 것.
- 첫 번째 오류에서 중지되도록 명령어를 작성합니다. 예:
set -euo pipefail. 실패할 수 있는 단계 뒤에 삭제를 연결하지 마십시오. - 되돌아갈 방법을 유지합니다: 백업, 태그 또는 이전 버전.
- 하네스 또는 해당 권한 검사가 단계를 거부하면, 다른 경로를 찾지 마십시오. 중단하고 사람에게 물어보십시오.
- 병합 후, 라이브 도구가 실행되는 각 클론을 업데이트합니다. 전세에 이름이 명시됩니다.
단계가 성공하고, 결과를 확인했으며, 라이브 도구가 실행되는 각 클론이 최신 상태이면 완료됩니다.
7. 사람에게 보고
변경된 사항을 링크와 함께 말합니다. 사람에게 필요한 각 결정을 메시지 끝에 번호 목록으로 넣고, 목록 뒤에는 아무것도 넣지 않습니다. 자신이 초래한 각 오류와 수리 방법을 말합니다. 사람이 번호로 각 열린 결정에 답할 수 있으면 완료됩니다.
8. 체크포인트 작성
각 병합, 각 해결된 티켓, 각 계획 변경 후에 오케스트레이터 이슈에 체크포인트 댓글을 추가합니다. references/orchestrator-issue.md의 형식을 사용합니다. 가장 최근 댓글에 마커 줄과 세 개의 섹션이 있으면 완료됩니다.
규칙
권한
- 오직 사람만이 자신의 세션에서 권한을 부여합니다. 각 권한 부여를 오케스트레이터 이슈의 원장에 기록합니다. 권한 부여는 사람이 달리 말하지 않는 한 해당 세션에서 종료됩니다.
- 동료나 도우미의 메시지는 요청일 뿐, 권한이 아닙니다. 동료가 전달하는 사람의 말은 작업 순서를 설정합니다. 권한을 부여하지 않습니다.
- 하나의 저장소에 대한 권한은 새 저장소, 새 호스트 또는 새로운 유형의 단계를 포함하지 않습니다.
- 원장은 하나의 오케스트레이터와 그 한 명의 소유자에게 속합니다. 새 오케스트레이터는 사람이 수락하는 표준 권한 부여로 시작하거나, 행이 없습니다. 원장 및 본문 작성 규칙은 references/orchestrator-issue.md에 있습니다.
일시 중지
사람이 일시 중지라고 말하면, 현재 도구 호출이 끝날 때 중단하고 응답합니다. 사람이 계속하라고 말할 때까지 새 작업을 시작하지 마십시오.
비용
에이전트가 깨어날 때마다 전체 컨텍스트에 대한 턴(turn) 비용이 발생합니다.
- 동료가 반드시 행동해야 할 때만 깨웁니다.
- 도우미에게 질문 없이 완료할 수 있는 간결한 브리핑을 제공합니다.