
하나의 리포지토리에서 여러 개의 Claude Code 세션 실행하기? 세션들이 서로를 인지하도록 만들었습니다
요약
Claude Code의 native hooks 기능을 활용하여 동일 리포지토리 내 여러 세션이 서로 통신할 수 있게 하는 'Crewmates' 도구를 소개합니다. 에이전트 간 작업 점유, 파일 편집 경고, 상태 브로드캐스트 등을 통해 병렬 작업 시 발생하는 충돌을 방지합니다.
핵심 포인트
- Claude Code의 hooks 기능을 이용해 세션 간 메시징 구현
- 에이전트 간 작업 점유(claim) 및 파일 편집 충돌 경고 기능 제공
- 작업 보드와 발견 사항(findings)을 통해 진행 상황 공유 가능
- 세션 종료 후에도 유지되는 append-only 방식의 메모리 관리
- Bun 환경 기반의 설치 및 실행 (bunx crewmates)
저는 서로 다른 기능 구현을 위해 동일한 리포지토리/프로젝트 내에서 여러 세션을 병렬로 정기적으로 실행하고 있는데, 이 과정에서 에이전트들이 동일한 파일을 작성하거나, 변경 사항이 어디서 왔는지 이해하지 못해 혼란을 겪는 등의 문제가 자주 발생했습니다. 따라서 당연하게도 이에 대한 해결책은 에이전트들이 서로 메시지를 주고받을 수 있도록 하는 도구를 만드는 것이었습니다. 제 에이전트들은 서로 다른 세션에 존재하기 때문에 subagents 등을 사용하는 것은 불가능했고, 마크다운 (markdown) 기반의 메시징은 취약해 보였기에, Claude Code의 native 기능인 hooks를 사용하여 구현할 수 있겠다고 생각했습니다. hooks가 생소하시다면, 이는 기본적으로 Claude Code가 특정 동작(turn 종료, 키워드 표시 등)을 수행한 후에 실행되는 액션이라고 이해하시면 됩니다. 이를 위해 저는 Crewmates를 작성했습니다 (Claude의 명백한 도움과 실제 환경 테스트를 거쳤습니다)! 이 hook 기반 도구는 동일한 폴더/리포지토리에 있는 모든 에이전트가 무언가를 활발히 작업하고 있는 한 서로 통신할 수 있게 해줍니다. hooks의 제한 사항으로 인해, hooks는 세션이 활발히 작업 중일 때만 실행됩니다. claude -p를 사용하지 않는 한, 잠들어 있는 세션으로부터 이를 활성화할 방법은 없습니다. 설치는 bunx crewmates이며, hooks가 Bun 환경에서 실행되므로 Bun이 필요합니다. 설치 후에는 세션을 재시작하세요. hooks는 세션 시작 시 읽힙니다. 또한 /statusline을 사용하여 Claude에게 statusline에 이름을 추가하도록 요청할 수 있으며, Crewmates를 통해 그들의 이름을 거기에 추가하도록 요청할 수도 있습니다. 이를 통해 세션들을 서로 구분하기가 매우 쉬워집니다. 제가 이 도구를 우선적으로 저 자신을 위해 만들었기에, 개인적으로 좋아하는 몇 가지 기능은 다음과 같습니다:
- 모든 에이전트는 서로 통신할 때 사용할 무작위로 할당된 이름을 가집니다.
- 에이전트는 질문을 하거나, 작업을 점유(claim)하거나, 리포지토리 전역의 조사 결과(findings)를 저장하거나, 메모리(memories)를 가질 수 있습니다.
- 자신이 무엇을 작업하고 있는지, 어떤 파일에 접근했는지를 다른 에이전트들에게 브로드캐스트(Broadcast)합니다.
- 에이전트가 파일을 편집하기 전에, 현재 활성화된 다른 에이전트가 동일한 파일을 열고 있다면 경고를 받습니다.
상대방이 워크트리 (worktree)에 있는 경우에는 위험 요소가 다르기 때문에 경고 방식도 달라집니다. 에이전트가 파괴적인 변경 사항 (breaking change)을 공지하면, 해당 파일에 실제로 있었던 에이전트들에게만 전달됩니다. 발견 사항 (Findings)은 폴더 단위로 기록될 수 있으므로, 몇 달 후에 해당 폴더를 편집하는 누구에게나 자동으로 전달됩니다. 작업 보드 (work board)가 있어 에이전트가 자신의 계획을 단계별로 적고 체크할 수 있으며, 모두가 다른 사람이 무엇을 하고 있고 얼마나 진행되었는지 확인할 수 있습니다. 이는 기본 작업 목록 (native task list)이 다른 에이전트들에게 브로드캐스트 (broadcast)되지 않기 때문입니다. 에이전트들은 서로에게 약속을 하고, 미결 사항 (owed)으로 기록될 질문을 던지며, 작업을 인계하고, 위험 요소를 경고할 수 있습니다. 이 모든 것은 추가 전용 (append-only) 방식이므로 세션 (session)이 종료되어도 유지됩니다. 에이전트는 이전 에이전트의 역할과 그에 따른 기억을 상속받을 수 있습니다. 그러면 역할에 따라 그들의 "제자 (disciples)"가 됩니다. 하위 에이전트 (Subagents)는 미니언 (minions)이라고 불립니다. 예를 들어 결제 (billing) 관련 작업을 했던 이전 세션이 있다면, "어떤 에이전트가 결제 작업을 했지?"라고 물어볼 수 있고, 질문을 받은 에이전트는 이를 검색하여 claude --resume uuid 명령어를 알려줄 수 있습니다. 특정 파일에 누가 있었는지 물어보면 해당 파일을 건드린 모든 사람을 최신순으로 확인할 수 있습니다. 이는 Git 워크트리 (git worktrees) 전반에 걸쳐 작동하며, 동일한 리포지토리의 모든 워크트리는 하나의 명부 (roster)를 공유합니다. Git이 전혀 없는 폴더에서도 작동합니다. 락 파일 (lockfiles)과 테스트 스크립트를 읽어 리포지토리 설정과 CLAUDE.md 블록을 작성해 주는 init 명령어가 있습니다. 선택적으로 에이전트가 자신의 이름으로 커밋에 서명하도록 강제할 수 있어, git log를 통해 어떤 에이전트가 무엇을 했는지 알 수 있습니다. 간단한 예시를 들어보겠습니다: Ada는 로그인 흐름 리팩터링 (refactoring)을 작업 중입니다. Hopper는 동시에 2단계 인증 (2FA)을 추가하고 있습니다. Ada는 Hopper가 로그인에 새로운 필드를 추가한 것을 보고, 현재 리팩터링 중임을 Hopper에게 알립니다. Hopper는 이를 보고 어떻게 진행 중인지 묻고, Ada가 답변함으로써 이제 그들은 함께 나아갈 공유된 방식을 갖게 됩니다. 이전 방식이었다면 이는 머지 충돌 (merge issues)과 추가적인 토큰 비용을 발생시켰을 것입니다. 수행하지 않는 기능에 대한 참고 사항: 아무것도 강제되지 않습니다.
약속(promise)은 자신이 피하겠다고 약속한 편집(edit)을 차단하지 않습니다. 그것은 단지 적절한 시점에 적절한 에이전트(agent)에게 전달되는 메모일 뿐입니다. 유일한 예외는 커밋 서명(commit signing)이며, 이는 활성화되어 있을 경우 거부(deny)합니다. 따라서 Ada가 Claude Opus 5 대신 Feature X를 커밋한 것을 확인할 수 있습니다. 참고: 이것은 OpenClaw와 같은 종류의 자율 에이전트 프레임워크(autonomous agentic framework)가 아닙니다. 그저 훅(hooks)과 로컬 SQLite 데이터베이스를 사용하여 Claude Code(앱용이 아님)를 위해 만든 메시징 시스템(messaging system)일 뿐입니다. 인터넷 호출이 전혀 없으므로 에이전트(agents)와 함께 완전히 로컬에서 작동합니다. 또한 MIT 라이선스로 완전히 무료입니다. 확인해 보세요: https://github.com/asutekku 질문이나 기능 요청이 있다면 기쁘게 듣겠습니다. 공개 사항: 게시물 문법 검토는 Crewmates 에이전트인 Barnaby, Reddit Whisperer(에이전트가 선택한 역할)가 수행하였으며, /u/asutekku가 제출했습니다 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기