herdr에서 Claude Code와 Codex 에이전트를 계정별로 병렬 실행하기

herdr는 에이전트를 창마다 띄워 두고 지켜보게 해 줍니다. 여기에 clausona를 더하면 창마다 다른 계정으로 Claude Code(클로드 코드)나 Codex를 돌릴 수 있어요. DeepSeek 같은 API 모델도 됩니다.

업데이트

herdr-fleet 플러그인을 설치합니다. 조율 플러그인들이 함께 쓰는 규칙인 fleet-core도 같이 설치됩니다.

claude plugin marketplace add larcane97/clausona
claude plugin install herdr-fleet@clausona

그다음 herdr 창에서 Claude Code에게 이렇게 요청합니다. "이 작업들을 herdr에서 내 계정들에 나눠 줘: CONTRIBUTING.md는 claude:side에서 Sonnet으로 쓰고, .editorconfig는 DeepSeek로 추가해 줘."

그러면 계획을 세우고 작업마다 워커 창을 하나씩 띄웁니다. 각 워커는 정해진 계정으로 돌아가요. 정리하기 전에는 워커가 낸 결과를 직접 확인합니다.

herdr에서 자기 계정의 Opus로 돌아가는 메인 Claude Code 세션이, 두 번째 Claude 계정의 Sonnet 워커와 API로 연결한 DeepSeek 워커를 각자의 worktree와 창에 띄우고, 브랜치를 하나씩 확인해 필요한 곳에 다시 지시한 뒤 worktree를 정리하는 화면.
실제 실행 화면을 빨리 감아 보여 줍니다. 메인 세션은 자기 계정의 Opus로 돌아가요. 워커 하나는 두 번째 계정의 Sonnet, 다른 하나는 API로 연결한 DeepSeek입니다. 이번 실행에서는 메인 세션이 Sonnet 워커가 쓴 CONTRIBUTING.md에서 따라 해도 안 되는 단계를 찾아냈습니다. 고쳐 달라고 다시 보냈고, 고친 걸 확인한 뒤에 정리했어요.

herdr에서 보이는 것

워커마다 git worktree가 따로 만들어지고, herdr 사이드바에도 워크스페이스가 하나씩 생깁니다. 라벨에 하는 일과 clausona 프로필이 붙어 있어서, 어느 계정이 무엇을 하는지 한눈에 보여요.

herdr의 agents 목록은 워커마다 working, idle, blocked, done 상태를 보여 줍니다. 창 화면에서 상태를 읽기 때문에 Claude Code든 Codex든 똑같이 보입니다.

워커 창으로 옮겨 가서 직접 입력할 수도 있습니다. 하나가 엉뚱한 쪽으로 가면 그것만 멈추고, 나머지는 그대로 두면 됩니다.

실행 흐름

메인 세션은 먼저 clausona list로 프로필을 읽고 작업마다 하나씩 고릅니다. 요청에도 fleet.json에도 계정이 정해져 있지 않으면, 계획을 보여 주고 확인을 기다립니다.

그다음 작업마다 herdr worktree create로 worktree를 만들고, 새 worktree의 창에서 고른 프로필로 clausona run을 실행합니다.

브리프는 worktree 안에 파일로 넣습니다. 워커에게는 그 파일을 읽으라는 한 줄만 보냅니다. 긴 글을 터미널에 붙여 넣을 일이 없습니다.

기다릴 때는 herdr agent prompt --wait를 씁니다. 이 명령은 워커가 실제로 일을 시작했다가 멈춰야 끝납니다. 그래서 브리프를 아직 읽기 시작하지도 않은 워커 때문에 메인 세션이 깨어나는 일이 없습니다.

워커가 끝났다고 하면 메인 세션이 직접 확인합니다. 커밋과 diff를 보고, 브랜치가 깨끗한 상태로 push됐는지도 봅니다.

확인이 끝나면 herdr worktree remove로 worktree를 지웁니다. 기본값은 사용자가 승인한 뒤에 지우는 것이고, retire가 auto면 바로 지웁니다. 커밋하지 않은 변경이 있으면 herdr가 지우지 않습니다. 지워도 브랜치는 그대로 남아요.

어떤 프로필이 이 저장소를 처음 열면 Claude Code나 Codex가 폴더를 신뢰할지 묻습니다. herdr에는 blocked로 표시됩니다. 메인 세션은 화면을 읽고 답하는데, 작업을 맡긴 저장소일 때만 답합니다.

Codex를 메인 세션으로 쓰기

Codex도 조율을 맡을 수 있습니다. Codex에 플러그인을 설치하면 되는데, Codex는 플러그인 의존성을 지원하지 않아서 fleet-core를 따로 추가해야 합니다.

codex plugin marketplace add larcane97/clausona
codex plugin add fleet-core@clausona
codex plugin add herdr-fleet@clausona

Codex로 조율하면 워커도 기본으로 Codex 계정을 씁니다. Claude Code로 조율하면 Claude Code 계정을 쓰고요. 다른 도구의 프로필은 직접 지정하거나 workers에 넣어 둔 경우에만 워커가 됩니다.

Codex 워커는 --disable hooks로 띄웁니다. 그래야 Codex의 "Hooks need review" 화면에서 멈추지 않아요. hook을 신뢰할지는 여전히 사용자가 정합니다.

Codex 기본 샌드박스에서는 Codex 워커가 .git에 쓸 수 없고 네트워크에도 나가지 못합니다. 그래서 커밋 전에 한 번, push 전에 또 한 번 승인을 물어요. 워커 창에서 승인하면 됩니다.

알아서 하게 하려면 아래 설정 파일의 permissions에 "codexSandbox": "danger-full-access"를 넣으세요. 이러면 워커의 Codex 샌드박스가 꺼집니다.

Codex 설정에서 하나 더 볼 게 있습니다. [shell_environment_policy]에 inherit = "core"가 있으면, Codex가 실행하는 명령에서 herdr 환경 변수가 보이지 않습니다. 메인 세션을 -c shell_environment_policy.inherit=all로 띄우면 다시 herdr를 쓸 수 있어요.

설정

조율 플러그인들은 ~/.clausona/fleet.json 파일 하나를 함께 씁니다. 워커로 쓸 프로필 목록, 자연어로 적은 배정 규칙, 사용량 한도, 끝난 워커를 자동으로 정리할지를 여기에 적습니다. 각 키의 설명은 에이전트 병렬 실행 가이드에 있습니다.

말로 해도 됩니다. "claude:personal은 워커로 쓰지 마"라고 하면 메인 세션이 파일을 고쳐요.

자주 묻는 질문

메인 세션이 herdr 안에서 돌아야 하나요?

네. herdr 명령은 자기가 실행된 창의 세션과 통신합니다. 그래서 Claude Code나 Codex를 herdr 창에서 띄우고, 거기서 요청해야 해요.

Windows와 Linux에서도 되나요?

됩니다. herdr와 clausona 모두 macOS, Linux, Windows에서 돌아가고, 플러그인은 세 OS 모두에서 같은 명령으로 herdr를 다룹니다. Windows의 Codex 메인 세션은 명령을 PowerShell로 실행하는데, 플러그인이 PowerShell용 명령도 알려 줍니다.

워커를 정리하다 작업이 날아갈 수 있나요?

커밋하지 않은 변경만 그럴 수 있는데, herdr worktree remove는 그런 worktree를 지우지 않습니다. 메인 세션은 강제로 지우지 않고, 지우기 전에 브랜치가 push됐는지도 확인해요.

herdr 창마다 다른 계정을 쓰려면 플러그인이 꼭 필요한가요?

아니요. 어느 창에서든 clausona run claude:work를 실행하면 그 창은 그 계정으로 돌아갑니다. 플러그인은 그 위에 작업을 나누고 결과를 확인하는 조율 세션을 더합니다.

써 보기

clausona와 플러그인은 무료 오픈소스입니다. 계정을 아직 등록하지 않았다면 계정 설정 가이드부터 보세요. 플러그인은 그다음에 설치하면 돼요.

전체 설명은 GitHub의 herdr 사용 사례 문서(영문)에 있습니다. 써 보고 막히는 곳은 이슈로, 쓸 만했다면 별로 알려 주세요.