CMUX에서 분할창의 각 CLI끼리의 대화를 종합하는 자동화 멀티 에이전트(스킬?)을 만들어보았습니다.

소개

지난 "22기 스타트업실험실" 스터디 중 여행가J님께서 프롬프트 하셔서 만들게 되었습니다 ㅎㅎ
(여행가J님 감사합니다)

CMUX는(manaflow-ai 개발)는 여러 개의 AI 코딩 에이전트(Claude Code, Codex 등)를 병렬로 실행하고
감독하는 데 최적화된 macOS 네이티브 터미널 앱입니다.
(윈도우는 wmux가 있는 것으로 압니다. 그 외에도 있겠지요)

정보가 넘쳐나다 못해 대홍수인 요즘 시대에 맘만 먹으면 공부하여 못할게 뭐가 있겠습니까?
기본 검색은 구글로 해서 저는 다음의 글을 참고하였습니다.

https://goddaehee.tistory.com/557

글을 읽고 어느 정도는 이해했지만 선뜻 이해가 안되어 제미나이에 다음과 같이 요청했습니다.
요즘에 이렇게 해도 기가막히게 문서 정리를 잘해줍니다.

아래 웹 문서를 실제로 실행할거야 초보가 따라하기 쉽게 다시 정리해서 이해하게 문서화해줘.
"https://goddaehee.tistory.com/557"

CMUX를 깔아놓은 상태였는데 문서를 읽고, 터미널에서 설치를 시도하다가 꼬여서 재설치를 2번 더 했습니다.
화면이 깨지는 현상이 생기더라구요. 참고 부탁드립니다.

CMUX 화면 분할을 하기 전에 개념을 위 포스팅에서 잘 설명해주었습니다.

다양한 종류의 한국어가 있는 테이블

그리고 분할 명령어도 제미나이가 잘 분석해서 잘 알려주어 그대로 실행했습니다.

# 1. 'my-ai-project'라는 이름의 새로운 작업 공간(층) 만들기
cmux new-workspace --cwd ~/Documents/my-ai-project

# 2. 현재 화면을 오른쪽으로 반 갈라서 새로운 터미널 창(방) 만들기
cmux new-split right

# 3. 방금 만든 오른쪽 화면을 다시 아래로 반 갈라서 분할하기
cmux new-split down

# 4. 방금 쪼개진 공간에 터미널 대신 '웹 브라우저' 띄우기 (AI가 직접 볼 수 있는 창입니다!)
cmux new-surface --type browser --url https://google.com

CMUX를 설치 후 터미널 창에서 위와 같이 폴더 생성 및 분할을 하면 아래와 같이 분할 됩니다.

Google 검색 페이지의 스크린샷

여기까지 CMUX 분할 생성까지 환경 설정을 한 후 만들기 시작했습니다.

진행 방법

사용한 CLI는 Claude Code, Codex, Antigravity Cli입니다.
참고로 CMUX에서 터미널창끼리는 대화가 불가능하고, 한 터미널 창 내에서 분할 실시로 사용해야 대화가 됩니다.

우선 클로드 코드에 다음과 같이 말했습니다.

지금 이 터미널에서 띄워진 각 cli의 창에서 같은 대화로 작업을 한 후 종합해서 답을 해주는 멀티 에이전트를 구축하고 싶어.

클로드 코드가 열심히 작업을 합니다. 뚝딱뚝딱.
superpowers 스킬 셋을 설치해놓아서 브레인 스토밍을 잘해줍니다.
질문에 맞추어 내가 원하는 방향을 답하며 설계해 갑니다.

한국어 스크린샷

작업 후 실제 분할 된 창에 작업을 실행합니다.

Step 0 — 메커니즘 검증부터
  시작합니다. 먼저 내 패널 식별자를 확인하고,
  Antigravity(surface:4)에 무해한 프로브를
  보내보겠습니다.

⏺ Bash(B=/Applications/cmux.app/Contents/Resources/bin;
      echo "CMUX_SURFACE_ID=$CMUX_SURFACE_ID"; echo
      "CMUX_WORKSPACE_ID=$CMUX_WORKSPACE_ID"; echo "===
      identify self =…)
  ⎿  CMUX_SURFACE_ID=3D425ED1-8C53-404E-A958-38F2D
     9E1713C
     CMUX_WORKSPACE
     … +12 lines (ctrl+o to expand)

⏺ 내 패널은 surface:1. 이제 Antigravity(surface:4)에
  텍스트만 먼저 보내(Enter 없이) 입력창에 들어가는지
  확인합니다.

⏺ Bash(B=/Applications/cmux.app/Contents/Resources/bin;
      echo "=== send text (no enter) ==="; "$B/cmux"
      send --surface "surface:4" "Reply with exactly
     … +12 lines (ctrl+o to expand)

⏺ 내 패널은 surface:1. 이제 Antigravity(surface:4)에
  텍스트만 먼저 보내(Enter 없이) 입력창에 들어가는지
  확인합니다.

⏺ Bash(B=/Applications/cmux.app/Contents/Resources/bin;
      echo "=== send text (no enter) ==="; "$B/cmux"
      send --surface "surface:4" "Reply with exactly
      one line: PROBE_O…)
  ⎿  === send text (no enter) ===
     OK surface:4 workspace:1
     exit=0
     … +17 lines (ctrl+o to expand)
  ⎿  Allowed by PermissionRequest hook

⏺ send가 입력창에 텍스트를 넣었고 자동 제출은 안
  했습니다(좋음). 이제 Enter로 제출합니다.

⏺ Bash(B=/Applications/cmux.app/Contents/Resources/bin;
      echo "=== send Enter ==="; "$B/cmux" send-key
      --surface "surface:4" Enter 2>&1; echo "exit=$?")
  ⎿  === send Enter ===
     OK surface:4 workspace:1
     exit=0
  ⎿  Allowed by PermissionRequest hook

⏺ 제출됨. Antigravity가 응답 중일 겁니다. 잠시 후
  캡처합니다.

⏺ Bash(B=/Applications/cmux.app/Contents/Resources/bin;
      "$B/cmux" capture-pane --surface "surface:4"
      --lines 20 2>&1)
  ⎿  OK surface:6 pane:4 workspace:1
     educalvin7@EduAlvin7-MacBook-Pro ~ % aggy
     zsh: command not found: aggy
     … +19 lines (ctrl+o to expand)

⏺ 메커니즘 검증 성공 — Antigravity가 질문을 받아
  PROBE_OK로 응답 중이고 "⣾ Generating..." / "esc to
  cancel"이 busy 신호입니다. 완료되면 "? for shortcuts"
  idle로 돌아옵니다. 완료 확인 캡처:

⏺ Bash(B=/Applications/cmux.app/Contents/Resources/bin;
      "$B/cmux" capture-pane --surface "surface:4"
      --lines 20 2>&1)
  ⎿  OK surface:6 pane:4 workspace:1
     educalvin7@EduAlvin7-MacBook-Pro ~ % aggy
     zsh: command not found: aggy
     … +21 lines (ctrl+o to expand)

⏺ 완벽합니다

workspace 1개(건물, 즉 터미널 창 1개)에 pane(방, 즉 분할창 4개 중 프로브를 보내 응답을 받은 내용을 보여줍니다.

작업을 하면서 각 분할된 각각의 cli 창에 다음과 같이 메세지를 보낸 후

좋은 코드의 가장 중요한 특성 하나는 변경에 강하고 읽는 사람이 쉽게 이해할 수 있는 명확성입니다.

의장인 클로드 코드가 종합하여 답을 출력해주는 것을 확인했습니다.

실제 작동 데모 (방금 라이브 실행)

  질문: "좋은 코드의 가장 중요한 특성 하나는?" → 12초 만에 두 멤버 모두 응답

  - 🟢 Antigravity (Gemini 3.5 Flash): 다른 사람이 쉽게 읽고 이해·수정할 수 있는 가독성/유지보수성
  - 🔵 Codex (gpt-5.4-mini): 변경에 강하고 읽는 사람이 이해하기 쉬운 명확성

  의장(나) 종합: 두 모델이 사실상 같은 결론입니다 — 둘 다 "기계가 아니라 사람이 읽고 고치기 쉬운가"를 1순위로 꼽았습니다. Antigravity는 유지보수성에, Codex는 *변경 내성(명확성)*에 강조점을 두는 미묘한 차이만 있고요. → 결론: 가독성/명확성(= 사람이 이해하기 쉬움)이 좋은 코드의 가장 중요한 특성. 성능·영리함보다 우선합니다.

위 절차를 확이 후 다음과 같이 작동하도록 설정했습니다.

사용법
  /cmux-council 질문내용              ← 명령으로
  "카운슬 소환해서 ~ 물어봐"      ← 자연어로
  실행하면 Codex·Antigravity 패널에 같은 질문이 들어가 실시간으로 답하는 게 보이고, 끝나면 내가 종합합니다.
  패널 구성이 바뀌어도 매번 자동 탐지하고, 90초 넘으면 수동 확인으로 폴백합니다.

특히 자동 응답이 90초 이상 없으면, 사용자가 수동 확인 하도록 설정했습니다.

1차 완성 후 배포 및 저장 등을 고민하다가 아예 자동으로 분할 화면도 띄워지고 cli도 불러올 수 있도록 다음과 같이 추가로 명령했습니다. 명령 시 AI가 제안한 추가 제안도 포함해서요.

[/talk]라고 명령하면 창분할이 자동으로 4분할로 띄워지고 각 창에서 cli를 선택해서 띄울 수 있는 기능을 포함해줘. 그리고 제안해준 readme 보강 및 새 cli 시그니처 추가해줘.

그리고 작업을 하니 실제로 아래 사진과 같이 구현 되었습니다.
각 분할 창에서 cli를 선택할 수 있는 모습이 보여집니다.
(단, 각 cli는 설치 되어 있어야 합니다)

다양한 유형의 데이터를 보여주는 컴퓨터 화면의 스크린샷

그래서 이렇게 2시간 정도만에 완성이 되었습니다.
실제 구동명령은 아래와 같습니다.

/talk : 각 분할 창이 띄워지며 cli 선택, 의장 분할창은 직접 입력
/cmux-council : 프롬프트 실행하면 각 cli에 보내 응답 실행 후 종합 한 후 답변

코드 저장은 필수 이므로 깃허브에도 git commit 했습니다.

항목 목록을 보여주는 화면의 스크린샷

결과와 배운 점

배운 점 cmux를 자주 썼는데 금번 계기로 각각의 cli끼리 대화로 모델별 응답 내용을 종합해서
작업 가능한 것을 배웠습니다.
앞으로 유용하게 사용할 것 같습니다.

도움 받은 글 (옵션)

실험해볼 수 있도록 도움을 주신 여행가J님 감사합니다.

4
2개의 답글

뉴스레터 무료 구독