Claude Code와 Codex를 하나의 리포지토리에서 함께 실행하는 방법 (그리고 문제점)
요약
본 기사는 Claude Code와 Codex 같은 여러 AI 코딩 도구를 단일 코드베이스에서 함께 사용하려는 개발자들의 어려움을 다룹니다. 기존의 수동 호출, 복사/붙여넣기 방식은 비효율적이며, Git worktree를 이용한 방법 역시 많은 수작업과 동기화 문제를 야기합니다. 필자가 만든 오픈 소스 도구 Quorus는 이러한 문제들을 자동화하여 에이전트 간의 원활한 협업 환경을 제공합니다.
핵심 포인트
- 여러 AI 코딩 도구를 하나의 리포지토리에서 통합 사용하기 어렵다.
- 수동 호출이나 복사/붙여넣기는 비효율적이며, 작업자가 개입해야 한다.
- Git worktree를 이용해도 파일 누락 및 수작업 병합 과정이 필요하다.
- Quorus는 에이전트 간의 대화를 자동화하고 통합된 환경을 제공한다.
여러분은 Claude Code와 Codex에 비용을 지불하고 있으며, 이 둘이 동일한 코드베이스에서 작동하기를 원합니다. 하나는 작성하고 다른 하나는 검토하거나, 각각 절반의 작업을 맡길 수 있습니다. 이를 수동으로 수행하는 세 가지 일반적인 방법이 있습니다. 각 방법 모두 작동하지만, 결국 프로그램이 할 수 있는 일을 여러분이 직접 해야 하는 상황을 만듭니다. 다음은 그 방법들과 각 방식에서 발생하는 문제점들, 그리고 제가 만든 오픈 소스 도구인 Quorus가 동일한 설정을 어떻게 처리하는지에 대한 내용입니다.
1. 한쪽에서 다른 쪽 호출하기
Claude Code에 머무르면서 Codex를 외부로 호출하거나, 그 반대로 헤드리스(headless) 실행(codex exec ... 또는 claude -p ...)이나 하나를 감싸는 플러그인을 사용합니다.
문제점:
- 블로킹 호출은 순차적입니다. 외부 에이전트가 내부 실행을 기다리는 동안, 두 가지 의견은 얻지만 두 명의 작업자는 확보할 수 없습니다.
- 각 실행은 새로운 세션을 시작합니다. 신선한 헤드리스 실행은 리포지토리와 그 지침 파일을 읽을 수는 있지만, 외부 에이전트의 대화(계획, 시도했던 내용과 이유)는 전달받아야 합니다.
- Diff를 충분히 보내기 어렵습니다. 리뷰어에게
git diff를 파이프하면, Arun이 자신의 worktree gotchas 게시물에서 지적했듯이,git add -N .을 먼저 수행하지 않으면 추적되지 않은 파일이 조용히 누락됩니다.
2. 작성자 + 검토자, 그리고 여러분이 중간에 개입하기
한 에이전트가 작성합니다. 여러분은 그 diff나 계획을 복사하여 다른 에이전트에게 붙여넣고 검토를 요청한 다음, 그 결과를 다시 가져옵니다.
문제점:
- 여러분이 메시지 버스 역할을 합니다. Two agent CLIs, one repo에서 Rashid는 일주일에 여섯 번의 핸드오프(handoff)가 각각 약 11분씩 걸려, 대략 한 시간 분량의 복사/붙여넣기 작업이 필요하다고 측정했습니다.
- 공유 지침이 표류합니다.
CLAUDE.md와AGENTS.md를 수동으로 동기화하는 과정에서 그에게는
각 에이전트는 동일한 리포지토리에서 자체 체크아웃과 브랜치를 얻습니다. 이것은 올바른 아이디어이며, 그에 따른 번거로움도 있습니다. Arun의 게시물에 따르면 다음과 같습니다:
- 하나의 브랜치, 하나의 작업 트리(worktree). Git은 다른 작업 트리가 이미 가지고 있는 브랜치는 체크아웃하는 것을 거부합니다.
- 무시된 파일이 함께 오지 않습니다. 새로운 작업 트리에는
.env와node_modules가 누락됩니다. - 스태시는 공유됩니다. 모든 작업 트리는 동일한
git stash를 봅니다. - 정리 작업이 번거롭습니다.
git worktree remove --force는 커밋되지 않은 작업을 폐기하며,rm -rf는 오래된 등록 정보를 남깁니다. - 여전히 수동으로 병합(merge), 검토(review) 및 정리해야 합니다. 또한 누가 작업하고 있고 누가 막혀 있는지 확인하기 위해 각 터미널을 지켜봐야 합니다.
Quorus의 방식
Quorus는 방이 있는 릴레이입니다. 에이전트들이 방에 참여하면, 그룹 채팅처럼 그곳에서 그들과 대화할 수 있습니다. 내부적으로 이것은 옵션 3의 작업 트리별 에이전트 설정을 자동화합니다:
pipx install quorus-ai
quorus # 첫 실행: 이름을 선택하고 Enter를 누르면 이 컴퓨터에 릴레이가 시작됩니다.
quorus agent add claude --room general --repo ~/code/my-app --mode autonomous
...
그런 다음, 채팅에서:
@<you>-claude 테스트를 사용하여 split()의 충돌을 수정하고, <you>-codex가 이를 검토하도록 요청합니다.
발생하는 일은 다음과 같습니다:
- 각 에이전트는 백그라운드에서 실행되며, 언급(@-mentioned)될 때 깨어납니다. 에이전트별로 터미널을 열어둘 필요가 없습니다.
- 각 에이전트는 자체 git worktree에서 빌드하며, 이는 Quorus가 생성하고 유지 관리합니다. 에이전트가 완료되면, Quorus는 해당 브랜치를 사용자의 리포지토리로 다시 게시하고 채팅방에 이를 알립니다.
- 리뷰어는 커밋을 기준으로 지정됩니다. 같은 리포지토리의 변경 사항을 읽고, 예를 들어
/vote approve <sha>또는 블로킹(blocking)하는 발견 사항을 게시합니다. Codex가 Claude Code의 작업을 검토하게 하거나, 그 반대로 할 수 있습니다. 이것은 측정된 승리라기보다는 리뷰 전략입니다. Arun이 말했듯이, 자신의 작업을 검토하는 에이전트는 "작성할 때 놓쳤던 것들을 놓치기 쉽다"는 것입니다. - 각 에이전트가 무엇을 하고 있는지 (
⋯ @you-claude editing relay.py 1m 20s와 같이) 볼 수 있으며, 에이전트가 배포(ships)하거나, 사용자에게 무언가를 요청하거나, 또는 막혔을 때 데스크톱 알림을 받습니다. - 코드를 수정할 수 있는 것은 사용자 본인과 자신의 에이전트만 가능합니다. 방에 있는 다른 사람의 메시지는 읽기 전용(read-only) 차례를 갖게 됩니다.
사용자가 이를 신뢰하기 전에 알아야 할 두 가지 사항:
- 리뷰가 게시(publish) 자체를 막는 것은 아닙니다. 판결이 도착할 때 이미 변경 사항은 사용자의 브랜치에 있습니다. 블로킹 발견 사항은 빌더의 다음 작업이 되거나, 사용자 본인이 롤백(revert)합니다.
- Quorus는 자율 에이전트를 격리(sandbox)하지 않습니다.
--mode autonomous를 사용할 경우, Claude Code와 opencode가 자체 worktree에서 사용자 권한으로 실행됩니다. 먼저 보안 참고 사항을 읽으십시오.
다른 도구: opencode도 무료 또는 로컬 모델을 사용하여 깨어납니다 (quorus agent add opencode --room general --model opencode/deepseek-v4.1-flash-free). Gemini CLI는 ~/.gemini/.env에 있는 Google AI Studio API 키로 작동합니다. Quorus는 사용자의 Google 로그인 기능을 사용하지 않으며, gemini-cli 0.64.0에서 무료 키로 마지막 테스트를 진행했습니다. Cursor, Windsurf 및 Cline은 MCP를 통해서만 연결됩니다.
누가 작성한 코드가 살아남았을까? 다시 계산할 수 있는 숫자들
quorus scorecard는 어떤 에이전트와 어떤 공급업체의 커밋이 리포지토리에서 유지되었는지, 되돌려졌는지(reverted), 또는 검토 중 플래그가 지정되었는지 보여줍니다. 이것이 무엇을 의미하는지 확인하기 위해, 저희는 동일한 원장(ledger) 코드를 자체 공개 히스토리에 실행했으며 재실행에 필요한 모든 것을 담아 그 결과를 발표했습니다 (case study):`
- 범위: v0.6.5 릴리스까지의 공개
main브랜치에서 544개의 커밋입니다. - 출처(Attribution): 이 중 332개는 Quorus가 게시할 때 기록하는 메모를 통해 에이전트에게 출처가 부여되었습니다. 나머지 212개는 출처가 없으며, 연구에서는 추측하는 대신 그렇게 명시합니다.
- 되돌림(Reverts): 출처가 부여된 커밋에서 세 번의 명시적인 되돌림이 감지되었습니다.
- 재현 가능성: 새로 클론하면 모든 숫자가 바이트 단위로 재구축됩니다.
이 연구는 보여줄 수 없는 것들에 대해서도 똑같이 명확합니다. 에이전트 순위를 매기지는 않습니다. 작업은 불균등하게 할당되었고, 에이전트들이 자신들을 측정하는 도구를 구축했으며, 릴리스 체리픽(cherry-picks)은 main에 도달하지 못한 작업을 숨깁니다. 여러분에게 유용한 부분은 이 스코어카드가 여러분의 리포지토리와 여러분의 에이전트를 기반으로 실행된다는 점입니다.
quorus demo로 사용해 보기
pipx install quorus-ai
quorus demo
두 개의 에이전트가 무료 오픈 소스 모델을 사용하여 임시 리포지토리(throwaway repo)에 심어진 버그를 수정합니다. 한 개체는 수정하고 커밋하며, 다른 개체는 검토하고, 여러분은 이를 실시간으로 지켜봅니다. 이 데모는 opencode 2.x가 필요하며 (brew install opencode), 사용자의 자체 설정에는 아무것도 건드리지 않습니다.
- 폴백(Fallback): 만약 opencode가 없거나 모든 무료 모델이 바쁘면, 데모는 대신 이미 로그인된 Claude Code 또는 Codex를 사용하여 실행되며, 이 경우 사용자 할당량(quota)을 사용합니다.
- 시간: 0.6.5 버전을 두 번의 깨끗한 HOME 환경에서 실행했을 때, 수정 사항은 데모가 메시지를 게시한 후
main브랜치에 각각 39초와 51초 만에 올라왔습니다. 여기에는 Quorus 설치나 데모 자체 설정 확인 시간은 포함되지 않습니다.
Quorus는 MIT 라이선스입니다: github.com/Quorus-dev/Quorus · quorus.dev. 만약 두 개의 터미널을 사용하는 설정을 사용해 오셨다면, 어떤 부분이 작동하지 않았는지 듣고 싶습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기