소개
지난 "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.comCMUX를 설치 후 터미널 창에서 위와 같이 폴더 생성 및 분할을 하면 아래와 같이 분할 됩니다.
여기까지 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님 감사합니다.