에이전트 셋에게 같은 일 시키기

어려운 과제 하나를 워커 셋에게 한꺼번에 주고, 각자 자기 worktree에서 낸 결과를 비교해 가장 나은 것을 남깁니다.

목표. 답이 하나로 정해지지 않은 버그나 설계 문제를 에이전트 셋에게 동시에 맡깁니다. 바꾼 내용을 나란히 비교해 마음에 드는 하나를 병합하고, 나머지 둘은 정리합니다.

필요한 것

  • git 저장소가 있어야 합니다. st 0.3.107부터는 git이 없는 폴더도 됩니다(st가 스냅숏을 뜹니다. 작업, 범위, worktree 참고). 워커는 저마다 자기 worktree와 브랜치를 받고, 지금 checkout한 커밋에서 시작합니다.
  • st 0.3.84 이상을 쓰고, st hooks install과 st plugin install을 해 둡니다.
  • st가 공유하는 세션의 pane에서 Claude Code가 실행 중이어야 합니다. 에이전트를 섞으려면 Codex도 있어야 합니다.

1. 과제 쓰기

워커 누구든 이 파일 하나만 읽고 일할 수 있게 씁니다. 무엇이 문제인지, 무엇을 고쳐도 되는지, 고쳐졌는지 어떻게 아는지를 적습니다.

# Fix the flaky login test
 
`go test ./internal/auth -run TestLogin -count 20`이 다섯 번에 한 번꼴로 실패한다.
원인을 찾아 테스트가 아니라 원인을 고친다. internal/auth만 고친다.
위 명령이 20번 중 20번 통과하면 끝. 자기 브랜치에 커밋한다.

첫 줄이 워커 이름이 됩니다(fix-the-flaky-login-1, -2, -3). 더 짧은 이름을 쓰려면 --name을 줍니다.

2. 코디네이터에게 부탁하기

/sophonz:orchestrate fix.md를 워커 셋에게 동시에 맡겨. Claude와 Codex를 섞어서.
셋 다 끝나면 각자 무엇을 바꿨는지 보여 줘. 고르는 건 아직 하지 마.

코디네이터는 이렇게 실행합니다.

st worker start --fan 3 --agent claude,codex --task fix.md
st worker wait --timeout 30m
st worker fan

--fan(같은 과제를 여러 워커에게 주기)에는 워커 수를 2에서 8까지 줄 수 있습니다. 이렇게 함께 시작한 워커들을 묶음이라고 부릅니다. --agent 목록은 차례로 돌아가며 쓰므로, 워커가 셋이면 Claude, Codex, Claude가 됩니다.

3. 지켜보기

코디네이터 세션에 워커마다 창이 하나씩 새로 열립니다. 데스크탑 앱에서는 에이전트 그래프와 사이드바의 코디네이터 아래에, 폰 앱에서는 창 목록에 다른 에이전트와 똑같이 나타납니다. 창을 열면 일하는 모습을 보거나 직접 입력할 수 있습니다.

4. 비교하기

st worker fan은 묶음의 워커를 나란히 보여 줍니다.

  fix-the-flaky-login
    %15   claude   done    2 files changed, 14 insertions(+), 3 deletions(-)
          Guarded the token cache with a mutex; 20/20 passes
    %16   codex    done    1 file changed, 6 insertions(+), 2 deletions(-)
          Fixed the clock in the test fixture; 20/20 passes
    %17   claude   working no changes

줄 끝에 (+ not committed)가 붙으면 그 워커가 커밋하지 않은 변경을 남겼다는 뜻입니다.

diff는 화면에서도 볼 수 있습니다.

  • 데스크탑 앱(0.1.30 이상). 에이전트 그래프에서 워커 카드를 고르고 Changes · fan …을 누릅니다. 그 워커의 diff가 묶음의 다른 워커와 나란히 보입니다.
  • 웹 터미널(st 0.3.84 이상). 사이드바에서 그 워커의 창 행에 있는 Δ를 누릅니다.

5. 하나 고르기

그 화면에서 Use this one을 누르거나 코디네이터에게 "%16으로 골라"라고 하면, 다음 명령이 실행됩니다.

st worker pick %16

st는 그 워커의 브랜치를 지금 checkout에 병합하고, 다른 워커들의 창을 닫고, 그 worktree와 브랜치를 지웁니다.

  • 커밋하지 않은 변경이 있으면 거절합니다. 워커에게 커밋하라고 하거나 --commit을 붙여 고릅니다.
  • 충돌이 나면 아무것도 병합하지 않고 아무것도 지우지 않습니다. 그 워커에게 "main을 네 브랜치에 병합하고 충돌을 풀어 커밋해" 같은 말을 보낸 뒤 다시 고릅니다.
  • --keep을 주면 병합만 하고 다른 워커는 그대로 둡니다.

6. 마무리

고른 워커의 창과 worktree는 남아 있습니다. 병합한 결과가 괜찮으면 정리합니다.

st worker stop %16 --yes   # 창 닫기
st worker clean %16        # worktree와 브랜치 지우기

묶음과 worktree는 워커, 작업, 범위, worktree에 더 자세히 나옵니다.