Munder Difflin: 터미널 코딩 에이전트 여러 개를 서로 메시지 주고받는 팀으로 만드는 데스크톱 앱

Munder Difflin 소개

코딩 에이전트를 하나만 쓸 때는 터미널 윈도우 하나로 충분합니다. 그런데 작업을 나눠 여러 개를 동시에 돌리기 시작하면 사람이 라우터 역할을 하게 됩니다. 여러 터미널 탭을 옮겨 다니며 어느 에이전트가 무엇을 하고 있는지 확인하고, A가 알아낸 내용을 복사해 B에게 붙여 주고, 같은 브랜치를 두 에이전트가 건드려 충돌이 나는지 지켜봐야 합니다. 에이전트가 늘어날수록 그 조율 부담도 같이 늘어나서, 결국 사람이 병목이 됩니다.

이번에 소개할 Munder Difflin은 그 조율을 앱이 맡도록 만든 데스크톱 하네스(Harness)입니다. 이미 설치해 쓰고 있는 터미널 에이전트 명령줄 도구(CLI)를 그대로 감싸서 각각을 하나의 에이전트로 세우고, 그 사이에 우편함과 공유 기억, 그리고 배정을 담당하는 총괄 에이전트를 추가합니다. 사용자는 총괄 에이전트 한 명과만 대화하고, 나머지 배정과 전달은 앱 안에서 일어납니다. 에이전트들은 2D 사무실 화면의 아바타로 표시되어 지금 누가 일하고 있고 누가 누구에게 메시지를 보냈는지 눈으로 확인할 수 있습니다.

기술 구성은 Electron, React, TypeScript 위에 화면용으로 Pixi.js, 터미널 표시에 xterm.js, 실제 프로세스 실행에 node-pty를 쓰는 조합입니다. 지원 대상은 Claude Code, Antigravity(Gemini), OpenAI Codex, xAI Grok, Kimi Code, Qwen, OpenCode, Crush, pi.dev, GitHub Copilot CLI이고 직접 지정한 명령도 에이전트로 세울 수 있습니다. 자체 API 키(BYOK)와 Ollama, LM Studio, vLLM 같은 로컬 모델 서버도 연결할 수 있습니다. 개발자 Chaitanya Giri는 저장소를 아직 작동하는 프로토타입(working prototype) 단계로 표시해 두었습니다.

여러 에이전트를 돌리는 기존 방식과 Munder Difflin의 차이

에이전트를 여럿 실행하는 방법 자체는 이미 여러 갈래로 나와 있습니다. Emdash처럼 Git 워크트리(worktree)로 에이전트를 격리해 병렬 실행하는 도구가 있고, Gas Town처럼 Git 자체를 조율 기반으로 삼아 수십 개를 관리하는 시스템도 있습니다. 격리에 초점을 둔 방식은 충돌은 막아 주지만 에이전트끼리 정보를 주고받지는 못하기 때문에, A가 알아낸 사실을 B에게 넘기는 일은 여전히 사람 몫으로 남습니다.

Munder Difflin이 그 자리에 놓은 것이 하이브(hive)입니다. 하이브는 평범한 파일들로 이루어진 로컬 Git 저장소이고, 각 에이전트는 자기 outbox/ 에 메시지를 쓰고 하네스의 라우터가 그것을 수신자의 inbox/ 로 넣어 줍니다. 여기서 설계 판단이 하나 드러납니다. 에이전트는 Git을 직접 건드리지 않고, 커밋은 하네스만 합니다. 저장소는 이 단일 커미터(single-committer) 설계가 index.lock 손상을 막기 위한 것이라고 밝히고 있습니다. 병렬로 도는 여러 프로세스가 같은 저장소에 커밋을 시도할 때 실제로 나는 사고를 구조로 차단한 셈입니다. 워크트리 격리도 선택 항목으로 함께 제공되므로 격리와 메시지 전달 중 하나를 포기하지 않아도 됩니다.

전체 설계는 HIVE.md에 따로 정리되어 있습니다.

Munder Difflin의 작업 흐름

위 그림의 다섯 단계 중 성격이 다른 것은 네 번째입니다. 총괄 에이전트는 들어온 요청을 읽고 대부분은 스스로 처리해 시스템이 계속 동작하도록 두지만, 비용이 드는 일, 되돌릴 수 없는 삭제 작업, 범위가 바뀌는 결정은 승인 큐로 올려 사람이 판단하게 합니다. 저장소는 이 관계를 "He's the boss of the floor; you're still the boss of him"이라고 설명하고 있습니다.

┌───────────────────────────────────────────────────────────────┐
│                     Electron Renderer (React)                  │
│   ┌──────────────────┐    ┌──────────────────────────────┐    │
│   │ Office Floor      │    │ Terminal + Command Bar       │    │
│   │ (Pixi.js)        │    │ Files + Git tabs (xterm.js)  │    │
│   └─────────▲────────┘    └────────────▲─────────────────┘    │
│             │ avatar state             │ pty bytes / fs / git  │
└─────────────┼──────────────────────────┼───────────────────────┘
              │ IPC (contextBridge: window.cth)
       ┌──────┴──────────┐        ┌──────┴─────────────┐
       │  Event Plane    │        │  Terminal Plane    │
       │  hooks / hive   │        │  node-pty PTYs     │
       │  router + GOD   │        │  + fs + git        │
       └────────▲────────┘        └──────▲─────────────┘
                │ hook payloads          │ stdin / stdout
                └─────────┬──────────────┘
                   ┌──────┴──────────────┐
                   │ claude / agy / codex│
                   └─────────────────────┘

에이전트 하나하나는 실제 프로세스입니다. claude, codex, grok 같은 명령이 각자의 의사 터미널(pseudo-terminal)에서 자기 작업 디렉토리와 신원을 갖고 돌아가고, 화면에는 그 출력이 그대로 표시됩니다. 그래서 사람이 중간에 아무 세션에나 직접 타이핑해 개입할 수 있고, 그 세션의 파일과 Git 이력을 열어 볼 수도 있습니다.

사무실 화면이 부담스러우면 더 단정한 전체 화면 모드로 바꿀 수 있습니다. 개발사는 홈페이지에서 이 시뮬레이션이 결정적(deterministic)으로 동작하며 토큰을 소비하지 않는다고 밝히고 있습니다. 아바타 15명은 미국 드라마 The Office 등장인물을 가져온 것이고, 저장소는 이것이 애정 어린 패러디이며 NBC와는 무관하다고 명시해 두었습니다.

Munder Difflin의 기억과 안전장치

기억은 마크다운 파일이 먼저입니다. 에이전트마다 자기 기억 파일을 갖고, 그 위에 의미 기반 검색 색인이 얹히는 구조입니다. 색인 쪽은 MemPalace (:pytorch::kr: MemPalace: LongMemEval 벤치마크 96.6%를 달성한 로컬 우선 AI 메모리 시스템) 명령줄 도구를 감싸서 쓰는데, 이 도구가 설치되어 있지 않으면 조용히 동작하지 않는 상태로 내려가고 마크다운 기억만으로도 계속 동작합니다. 색인이 없어도 앱이 멈추지 않는다는 뜻이라, 처음 설치할 때 준비물을 하나 덜 챙겨도 됩니다.

자율적으로 도는 에이전트에 대한 제동 장치도 함께 들어 있습니다.

  • 사람 게이트: 비용, 범위 변경, 파괴적 작업은 승인 큐로 올라옵니다. 실행 중간에 방향을 바꾸거나 정상 종료시킬 수 있습니다.
  • 회로 차단기(circuit breaker): 같은 자리를 반복하거나 오류를 쏟아내거나 예산을 초과한 에이전트에 대해 방향 수정, 제약, 중지의 세 단계로 개입합니다.
  • 예산과 관측: 에이전트별 토큰 예산, 대화 기록에서 계산한 실제 비용, 지속되는 비용 원장, OpenTelemetry 스팬, 도구 호출 타임라인(tool waterfall) 뷰가 제공됩니다.

작업을 관리하는 쪽에는 의존 관계를 지정할 수 있는 칸반 보드, 예약 실행과 하트비트, 여러 에이전트의 상태를 한 번에 보는 모니터링, 기억 검색, 활동 로그, CI 감시가 들어 있습니다. Slack 채널이나 웹훅으로 들어온 요청을 받아 총괄 에이전트가 임시 작업자를 띄우고 스레드에 답한 뒤 정리하는 경로도 제공됩니다.

Munder Difflin 설치 및 사용법

서명과 공증을 마친 macOS 빌드, Windows 빌드, Linux 빌드는 릴리스 페이지에서 받을 수 있습니다. 저장소에서 직접 실행하려면 준비물이 몇 가지 있습니다. macOS, Windows, Linux 중 하나와 Node.js 18 이상, 그리고 node-pty의 네이티브 애드온을 빌드할 C/C++ 툴체인이 필요합니다. macOS에서는 다음 명령으로 준비합니다:

xcode-select --install

여기에 지원 대상 에이전트 CLI가 최소 하나는 PATH 에 있어야 합니다. 없는 CLI는 대부분 하네스가 터미널에서 설치 과정을 실행한 뒤 새 실행 파일로 이어 가므로 직접 챙기지 않아도 됩니다. 저장소를 클론해 실행하는 절차는 다음과 같습니다:

git clone https://github.com/chaitanyagiri/munder-difflin.git
cd munder-difflin
npm install        # postinstall이 Electron ABI에 맞춰 node-pty를 다시 빌드합니다
npm run dev        # 핫 리로드가 붙은 Electron 앱이 실행됩니다

첫 실행에서는 온보딩 마법사를 지나 사무실 화면에 도착합니다. 여기서 에이전트 추가를 눌러 첫 세션을 만들면 총괄 에이전트는 자기 자리에 자동으로 앉습니다. Electron 버전을 올린 뒤 node-pty가 로드되지 않으면 npm install 을 다시 실행해 현재 ABI에 맞춰 재빌드합니다.

Munder Difflin을 쓸 때 알아둘 점

아직 프로토타입입니다: 저장소는 스스로를 작동하는 프로토타입으로 표시하고 있으며 최근 릴리스 노트도 그 성격을 보여줍니다. v0.4.4에서는 Windows에서 에이전트끼리 메시지를 주고받지 못하던 문제가 고쳐졌습니다. 프로토콜이 여러 줄 명령으로 전달되는데 cmd.exe 가 첫 줄바꿈에서 잘라 버려, 에이전트들이 정상으로 보이면서도 서로를 무시하고 있었다고 합니다. v0.3.8을 쓰고 있다면 사용량 한도 가드가 붙잡은 에이전트를 풀어 주지 않는 문제가 있어 갱신이 권고됩니다.

텔레메트리가 기본으로 켜져 있습니다: 공식 빌드는 앱 실행, 에이전트 생성, 기능 사용 같은 익명 사용 이벤트를 보냅니다. 저장소는 프롬프트, 코드, 파일 경로, 에이전트 출력은 보내지 않는다고 밝히고 있으며, 설정에서 끄는 방법, DO_NOT_TRACK 환경 변수, 소스에서 직접 빌드하는 방법 세 가지로 비활성화할 수 있습니다(포크는 키 없이 컴파일되어 아무것도 보내지 않습니다). 항목별 목록은 TELEMETRY.md에 있습니다.

오픈소스 앱과 유료 서비스가 나뉘어 있습니다: 앱 자체는 내 컴퓨터에서 무료로 계속 쓸 수 있고, 개발사는 그 위에 두 가지 서비스를 판매합니다. 하나는 에이전트별 전용 샌드박스 가상 머신에서 24시간 실행하는 클라우드이고, 다른 하나는 팀원들의 컴퓨터 사이를 종단 간 암호화(End-to-End Encryption)로 연결하는 네트워크와 공유 조직 지식베이스입니다. 혼자 로컬에서 쓰는 구성은 무료입니다.

Munder Difflin은 누구에게 유용한가

이미 코딩 에이전트 CLI를 두세 개 병행하고 있고, 그 사이에서 정보를 옮기는 일이 반복 작업이 되었다면 시험해 볼 값어치가 있습니다. 기존 구독의 시간당 한도 안에서 돌아가고 별도 API 비용을 요구하지 않는다는 점도 진입 장벽을 낮춥니다. 반대로 에이전트 하나로 충분한 작업만 하고 있다면 하이브와 총괄 에이전트가 얹는 층이 이득 없이 복잡도만 늘립니다. 자율 실행에 대한 승인 게이트와 회로 차단기가 있다고 해도 프로토타입 단계라는 표시는 그대로이므로, 되돌리기 어려운 작업을 맡기기 전에 승인 정책과 예산을 먼저 확인하는 편이 안전합니다. 상업적 환경에서 쓸 계획이라면 아래 라이선스 항목을 먼저 읽어야 합니다.

Munder Difflin의 라이선스

Munder Difflin의 소스 코드MIT 라이선스로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.

단, 함께 포함된 픽셀 아트는 조건이 다릅니다. 타일셋과 지도, 아바타의 원본 캐릭터 시트는 LimeZu의 무료 버전 라이선스를 따르며 비상업적 용도로만 사용할 수 있고, 이 저장소에서 색을 바꿔 만든 스프라이트도 같은 제한을 물려받습니다. 상업적으로 쓰려면 해당 에셋을 교체하거나 LimeZu의 유료 라이선스를 구매해야 합니다. 출처와 조건은 저장소의 ATTRIBUTION.md에 정리되어 있습니다.

:house: Munder Difflin 공식 홈페이지

:github: Munder Difflin 프로젝트 GitHub 저장소

더 읽어보기




이 글은 GPT 모델로 정리한 초안을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 댓글로 알려주시기를 부탁드립니다. :hugs:

이 도구를 직접 설치해 사용해보셨다면, :pytorch:파이토치 한국 사용자 모임:south_korea: 회원들을 위해 경험이나 팁을 댓글로 남겨주세요! :folded_hands: