배턴 패스 (Baton Pass)
목적: 여러 에이전트 간 연속성을 최소한의 텍스트로 유지합니다.
저토큰 워크플로 유틸리티이며, 문서화 의식이 아닙니다.
빠른 설정
모든 에이전트에 설치 (머신당 한 번)
npx github:netheremp/baton-pass-netheremp install
이 스킬을 ~/.claude 및 모든 ~/.codex* 홈 디렉토리에 설치합니다. 그 다음:
- Claude Code (CLI + IDE) — 스킬이 자동 로드됨;
/new-game/save-state/baton-pass/foresight/dragon-dance/party-check/hindsight - Codex CLI — 스킬이 자동 로드됨; 명시적으로
$baton-pass실행 - Codex 데스크탑 앱 — 스킬이 자동 로드됨; 컴포저에서
/prompts:baton-pass입력
대안: /plugin marketplace add netheremp/baton-pass-netheremp (Claude Code) 또는 /plugins → 설치 (Codex).
멀티 에이전트 작업을 위한 리포지토리 초기화
npx github:netheremp/baton-pass-netheremp init
--track-state를 추가하면 핸드오프 상태를 git에 커밋합니다 (공유 히스토리가 필요한 팀용). 기본값은 로컬 전용 (gitignore 처리됨)입니다.
다음 파일이 생성됩니다:
baton-pass.config.json— 워크플로가 메모리 파일을 찾는 설정baton-pass.state.json— 가벼운 공유 소유권 상태docs/agent-handoff.md— 모든 에이전트를 위한 리포지토리별 규칙docs/current-state.md— 현재 진행 중인 작업docs/next-task.md— 작업 소유자와 다음 단계docs/progress.md— 실행 중인 세션 로그 (추가 전용)
init은 또한 /move 슬래시 명령어를 리포지토리의 .claude/commands/에 추가합니다.
기술 목록 (The Move Set)
new-game= 새 리포지토리에서 워크플로 초기화save-state= 핸드오프 없이 안전하게 일시 중지baton-pass= 토큰이 부족하거나 소유권이 변경될 때 작업 인계foresight= 작업을 받거나 재개하고, 정렬을 확인한 후 계속 진행dragon-dance= 실제 교훈이 있을 때만 워크플로 개선party-check= 마지막 작업자, 다음 작업자, 현재 리포지토리 상태 확인hindsight= 전체 배턴 체인 감사 — 주장된 마일스톤, 검증 사항, 전달된 위험, 미해결 항목
핵심 규칙
델타(변경분)를 기본으로, 요약하지 마십시오.
수신자가 안전하게 계속 진행할 수 없는 경우가 아니라면, 안정적인 프로젝트 이력을 반복해서 말하지 마십시오.
각 기술 사용 시기
new-game
리포지토리 시작 시 한 번 사용하거나, 공유 메모리 파일이 없는 리포지토리에 이 워크플로를 도입할 때 사용합니다.
save-state
다음과 같은 경우에 사용합니다:
- 갑자기 중단해야 할 때
- 나중에 작업을 재개하기 위해 일시 중지할 때
- 소유권이 아직 변경되지 않았을 때
save-state는 로컬 체크포인트이며, 인계가 아닙니다.
baton-pass
다음과 같은 경우에 사용합니다:
- 토큰이 부족할 때
- 다른 에이전트가 작업을 인계받을 때
- 이전 가능한 연속성 패키지가 필요할 때
baton-pass는 인계 체크포인트입니다.
foresight
다음과 같은 경우에 사용합니다:
- 배턴을 받을 때
save-state후 돌아왔을 때- 기록된 상태가 여전히 리포지토리와 일치하는지 의심될 때
dragon-dance
다음과 같은 경우에만 사용합니다:
- 워크플로 자체가 무언가를 배웠을 때
- 수신자가 드리프트(차이)를 발견했을 때
- 배턴이 중요한 내용을 누락했을 때
- 새로운 규칙이 반복적인 낭비를 확실히 방지할 수 있을 때
dragon-dance를 반사적으로 실행하지 마십시오.
모든 세션이나 baton-pass에 기본으로 포함하지 마십시오.
party-check
다음과 같은 경우에 사용합니다:
- 누구 차례인지 잊어버렸을 때
- 여러 에이전트가 리포지토리를 공유할 때
- 전체
foresight비용을 지불하지 않고 현재 상태를 확인하고 싶을 때
party-check는 세션 내 기술입니다. 일반 터미널(에이전트 없음, 토큰 없음)에서
baton-pass status를 실행하면 동일한 소유권 정보와 최근 배턴 체인이 출력되며,
baton-pass status --json은 스크립트와 훅을 위한 기계 판독 가능 출력을 제공합니다.
hindsight
다음과 같은 경우에 사용합니다:
- 마일스톤이나 주요 기능이 완료되어 깔끔한 기록이 필요할 때
- 무언가 잘못된 느낌이 들어 실제로 주장된 것과 완료된 것을 추적해야 할 때
- 새로운 에이전트가 합류하여 마지막 배턴뿐만 아니라 전체 이력이 필요할 때
foresight에서 심각한 드리프트를 발견하여 그 시작점을 파악해야 할 때- 프로젝트가 검토 중이거나, 사람에게 인계되거나, 보관될 때
모든 배턴 후에 hindsight를 실행하지 마십시오.
이는 감사(audit)이지, 일상적인 체크포인트가 아닙니다.
각 기술이 기록해야 할 내용
save-state
최소 출력:
- 현재 작업
- 중단 시점
- 수정한 파일
- 다음 즉시 조치
- 차단 요소 또는 위험
baton-pass
최소 출력:
- 목표
- 완료된 작업
- 작업 (작업 계획을 사용하는 경우 각 작업 상태: 완료 / 진행 중 / 대기 중)
- 파일
- 작업 트리 (git worktree를 사용하는 경우 브랜치 이름과 작업 트리 경로)
- 검증 완료 항목
- 이탈 사항 (원래 계획과 다르게 세션 중 결정된 사항)
- 환경 (다음 에이전트가 확인해야 할 전제 조건: 실행 중인 서비스, .env 변수, 테스트 DB 등)
- 다음 단계
- 위험
- 다음 에이전트
커밋 규율:
- 인계 전에 커밋하거나, 그렇지 않은 이유를 문서화하십시오.
- 커밋되지 않은 상태를 명시적으로 언급하지 않고 더티 작업 트리를 인계하지 마십시오.
- 검증을 실행하지 않은 경우, 그렇게 말하십시오 — 통과한 것으로 암시하지 마십시오.
작업, 작업 트리, 이탈 사항, 환경이 중요한 이유: 세션 메모리는 인계 시 손실됩니다. 20개 작업 계획의 중간에 있다면, 다음 에이전트는 git 로그만으로 어떤 작업이 완료되었는지 재구성할 수 없습니다 — 상태를 명시적으로 기록하십시오. 작업 트리 내에서 작업 중이라면 다음 에이전트는 정확한 경로가 필요합니다. 계획과 다르게 무언가를 수정했다면 기록하십시오 — 다음 에이전트는 계획을 다시 읽고 잘못된 방식으로 다시 시도할 것입니다. 환경이 특정 상태여야 한다면(데이터베이스 실행 중, .env 설정됨) 이름을 지정하십시오 — 새 에이전트는 그것 없이 동일한 장애물에 부딪힐 것입니다.
foresight
최소 출력:
- 정렬 여부
- 정렬되지 않은 경우, 무엇이 오래되었거나 누락되었는지
- 필요한 경우에만 수정된 다음 단계
드리프트가 심각한 경우(배턴이 작업이 완료되었다고 주장하지만 리포지토리가 그렇지 않은 경우), 계속 진행하기 전에 구조화된 드리프트 보고서를 작성하십시오:
- 주장된 내용
- 리포지토리가 실제로 보여주는 내용
- 다시 해야 할 작업
- 이 드리프트가
dragon-dance를 정당화하는지 여부
dragon-dance
최소 출력:
- 문제
- 영향
- 개선 사항
- 새로운 규칙
party-check
최소 출력:
- 상태
- 마지막 기술
- 마지막 에이전트
- 다음 에이전트
- 업데이트 시간
- 간단한 요약
hindsight
최소 출력:
- 감사 범위 (전체 체인 또는 제한된 범위)
- 배턴 체인 테이블 (발신자 → 수신자, 날짜, 목표 요약)
- 에이전트별 주장된 마일스톤 및 검증 상태
- 검증 격차 (증거 없이 주장된 내용)
- 배턴 간 전달된 위험
- 배턴 간 발견된 드리프트
- 미해결 항목
- 감사 평결:
clean,gaps found,risks unresolved, 또는action required
확인할 출처:
docs/progress.md— 전체 세션 로그docs/next-task.md— 턴 상태 이력baton-pass.state.json— 프로그램 상태- git 로그 — 커밋 메시지 및 날짜
- progress에 참조된 저장된 배턴 또는 save-state 파일
foresight 수신 절차
실수를 피하기 위해 필요한 최소한만 확인하십시오:
- 현재 사용자 목표
- 작업 트리 상태
- 최신 커밋
current-statenext-task- 최신
progress항목 - 저장된 상태 또는 배턴에 명명된 파일
- 계획이 진행 중인 경우 작업 목록 상태
그런 다음 결정:
- 정렬되면 계속 진행
- 정렬되지 않으면 배턴을 수정하고 계속 진행
- 정렬 불일치가 재사용 가능한 교훈을 드러내면
dragon-dance실행
에이전트 간 스킬 검색
스킬이 프로젝트 로컬에 설치되면(.claude/commands/ 또는 플러그인 설치를 통해 리포지토리에), Codex 및 리포지토리를 사용하는 다른 에이전트도 동일한 스킬 정의를 찾을 수 있습니다. 스킬 파일은 리포지토리와 함께 이동합니다.
세션 경계를 넘어 전달되지 않는 스킬:
- 인메모리 작업 관리자의 작업 상태 (TaskCreate 목록은 세션이 종료되면 손실됨)
- 하위 에이전트 실행 상태 (어떤 검토 루프가 완료되었는지, 어떤 에이전트가 실행되었는지)
- 환경 상태 (어떤 서비스가 실행 중인지, 어떤 .env 변수가 설정되었는지)
배턴 패스는 이 모든 것을 명시적으로 기록해야 합니다. 스킬은 에이전트에게 작업 방법을 알려주고, 배턴은 상황이 어떻게 진행 중인지 알려줍니다.
상태 모델
공유 상태 파일을 사용하여 다음을 추적합니다:
- 현재 상태
- 마지막 기술
- 마지막 에이전트
- 다음 에이전트
- 업데이트 시간
- 요약
권장 상태:
activepausedhanded-offclaimedblocked
검증 용어
일관된 언어를 사용하여 수신자가 정확히 무엇이 확인되었는지 알 수 있도록 합니다.
passed— 로컬에서 실행, 출력이 깨끗함 확인됨passed outside sandbox— 로컬에서 실행되었지만 CI/빌드 환경에서는 아님not run — [reason]— 건너뜀, 이유 명시expected to pass, unverified— 실행되지 않았지만 정확하다고 믿음
expected to pass, unverified일 때 passed라고 절대 쓰지 마십시오.
이 하나의 모호함이 핸드오프 재작업의 가장 큰 원인입니다.
턴 상태 (Turn State)
next-task의 턴 상태 블록은 사람이 읽을 수 있는 기본 소유권 신호입니다.
baton-pass.state.json은 프로그램 사용을 위해 이를 미러링합니다.
하나를 업데이트할 때는 둘 다 업데이트하십시오. 둘이 일치하지 않으면 next-task가 우선합니다.
둘 다에서 권장되는 state 값:
active— 누군가 작업 중paused— 안전하게 중단됨, 동일한 에이전트가 재개 예정handed-off— 전송됨, 수신자가 수신 대기 중claimed— 수신자가foresight를 실행하고 계속 진행 중blocked— 진행 불가, 이유가next-task에 있어야 함
안티 패턴
피해야 할 사항:
- 모든 사소한 체크포인트에
baton-pass사용 - 아무것도 배우지 않았을 때
dragon-dance사용 - 사소한 작업을 위해 모든 메모리 파일 재작성
- 매번
foresight를 전체 리포지토리 감사로 전환 - 모든 배턴 후
hindsight실행 — 이는 감사이지 일상적인 단계가 아님 - 델타 대신 전체 프로젝트를 반복해서 말하기
expected to pass, unverified일 때passed라고 쓰기- 커밋되지 않은 상태를 명시하지 않고 더티 작업 트리 인계
- 번호가 매겨진 계획 중간일 때 작업 상태 생략
- git worktree 내에서 작업 중일 때 작업 트리 경로 생략
- 새 에이전트가 알지 못할 환경 전제 조건 생략
모범 실무 흐름
일시 중지:
save-state- 나중에
foresight
인계:
baton-pass- 수신자가
foresight실행
개선:
foresight가 의미 있는 워크플로 문제를 드러낸 경우에만dragon-dance
턴 소유권 확인:
party-check
전체 체인 감사:
hindsight- 격차 또는 미해결 위험이 발견되면
dragon-dance실행