137 lines
9.4 KiB
Markdown
137 lines
9.4 KiB
Markdown
# tmux-agent-orchestration (다중 에이전트 Tmux 오케스트레이션 및 메시징 백플레인)
|
|
|
|
Tmux와 MQTT 브로커를 기반으로 구축된 고신뢰성 **다중 에이전트 오케스트레이션 및 메시징 백플레인** 프레임워크입니다. Claude, Hermes 등 다중 LLM 백엔드 에이전트 전반에 걸쳐 장시간 수행되는 작업(코드 생성, 리팩토링, 보안 검토 등)을 조정, 격리 및 감사할 수 있도록 설계되었습니다.
|
|
|
|
---
|
|
|
|
## 🚀 개요
|
|
|
|
최근의 에이전트 워크플로우는 세션 타임아웃, 프로세스 격리 부재, 터미널 뷰포트 잘림(스크롤백 한계로 인한 디버그 로그 유실), 복잡한 동시성 경쟁 등의 문제를 자주 겪습니다.
|
|
|
|
**tmux-agent-orchestration**은 다음과 같은 솔루션을 통해 이를 해결합니다:
|
|
1. **Tmux 기반 프로세스 격리:** 개별적으로 격리된 tmux 환경 내부에 에이전트 CLI 세션을 띄워, 백그라운드에서 끊김 없이 장시간 작업이 영속되도록 보장합니다.
|
|
2. **비동기 이벤트 기반 아키텍처:** MQTT 브로커를 메시징 백플레인으로 활용하여, 에이전트 간 상태 전이 단계(`started`, `progress`, `completed`, `error`)를 긴밀하게 제어 및 조정합니다.
|
|
3. **Multi-Agent Mux (MAM):** 파일 기반의 어드바이저리 락(`fcntl`) 및 SQLite WAL 데이터베이스(`.mam/agent-sessions.db`)를 결합하여, 동시성 작업 선점 경쟁을 방지하고 에이전트 세션의 라이프사이클을 드리프트 없이 관리합니다.
|
|
4. **리뷰어 기반 고신뢰 검증 루프:** Worker 에이전트가 구현한 코드 변경 사항에 대해 상이한 강점을 지닌 전문 검증 에이전트(예: 논리 흐름을 정밀 검토하는 Claude, 셸 문법 및 안전성을 빠르게 확인하는 Hermes)들로부터 최종 `PASS` 판정을 획득한 뒤 머지하도록 교차 검증 루프를 자동화합니다.
|
|
|
|
---
|
|
|
|
## 🛠️ 핵심 스킬 및 구조
|
|
|
|
모든 오케스트레이션 스킬들은 `.agents/skills/` 디렉터리 하위에 정의되어 있습니다:
|
|
|
|
* **`multi-agent-mux-create`**: 격리된 tmux 세션을 생성하고 특정 에이전트 CLI를 백그라운드에서 구동합니다. 프로세스 PID 캡처, 메타데이터 레지스트리 업데이트 및 에이전트 인증 검증을 처리합니다.
|
|
* **`multi-agent-mux-stop`**: 에이전트 CLI 세션을 정상 종료 키 입력(`/exit` 또는 `Exit`)을 통해 안전하게 닫고, 격리된 대화 히스토리 및 데이터베이스 로그를 삭제(purge)하는 클린업 작업을 수행합니다.
|
|
* **`multi-agent-mux-resume`**: 디스크 또는 캐시에서 특정 워크스페이스의 세션 UUID를 조회하여 기존 대화 상태(`claude -r <uuid>` 또는 `hermes --resume <uuid>`) 그대로 세션을 복구하고 재개합니다.
|
|
* **`multi-agent-mux-status`**: 활성화된 모든 세션의 실시간 작동 상태를 쿼리하여 PID 정합성, 실행 명령 포맷, tmux 실제 상태와 데이터베이스 간의 동기화 드리프트를 감지합니다.
|
|
* **`multi-agent-mux-monitor`**: 백그라운드에서 Kanban Reconcile 프로세스로 실행되어, 실시간 tmux 세션 변화를 모니터링하고 `.mam/agent-sessions.yaml` 메타데이터 파일에 상태를 동기화합니다.
|
|
* **`multi-agent-mux-delegate-job`**: 태스크를 비동기식 독립 잡으로 위임 및 관리하는 핵심 모듈입니다:
|
|
* `registry.py`: 파일 락(`fcntl`)을 활용해 경쟁 조건 없이 잡을 원자적으로 등록 및 점유(claim)합니다.
|
|
* `job_subscriber.py`: MQTT 백플레인 채널을 구독하여 실시간 상태 이벤트를 수집하고 이를 감사 로그(audit trail)에 기록합니다.
|
|
* `publish_event.py`: 실행 상태 전환 및 세부 에러 내용을 워크스페이스 스크립트에서 백플레인으로 발행합니다.
|
|
* `mqtt_common.py`: 브로커 접속 규칙, 크레덴셜 인증 및 HMAC 서명 기능을 공통 관리합니다.
|
|
|
|
---
|
|
|
|
## 📐 아키텍처 및 조정 루프 (Review Loop)
|
|
|
|
Project Manager(PM), Worker, Reviewer 역할 간의 협업 구조는 엄격한 교차 검증 루프를 따릅니다:
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
autonumber
|
|
actor User as User
|
|
participant PM as Project Manager
|
|
participant W as Worker
|
|
participant R as Reviewers
|
|
participant M as MQTT Backplane
|
|
|
|
User->>PM: 요구사항 전달
|
|
Note over PM: 태스크 수립 및 Job 등록
|
|
PM->>M: Job 등록 및 Subscriber 시작
|
|
PM->>W: 작업 위임 (Job ID 및 가이드 제공)
|
|
W->>M: 'started' 이벤트 발행
|
|
Note over W: 코드 변경 및 자체 검증 수행
|
|
W->>M: 'completed' (또는 'error') 발행
|
|
PM->>R: 병렬 리뷰 요청 (Diff 제공)
|
|
Note over R: 에이전트 교차 검증 (Claude, Hermes)
|
|
alt 리뷰 피드백 (NOT PASS)
|
|
R->>PM: NOT PASS (대안 코드 블록과 함께 피드백 전달)
|
|
Note over PM: PM 직접 수정 또는 다시 위임 결정
|
|
PM->>W: 리뷰 피드백 반영 재요청
|
|
else 검증 통과 (PASS)
|
|
R->>PM: PASS
|
|
end
|
|
PM->>User: 최종 머지 완료 보고 및 변경사항 커밋
|
|
```
|
|
|
|
---
|
|
|
|
## 🔒 보안 프로토콜 및 Replay 공격 방어
|
|
|
|
공용 MQTT 브로커 환경에서도 통신의 무결성을 보장하기 위해 **HMAC-SHA256 암호화 서명** 체계를 갖추고 있습니다:
|
|
* **PoC 모드 (무인증):** 기본 설정 모드로 `auth_token`이 `null`로 세팅되어 간단한 로컬 환경 검증 시 암호화 시그니처 체크를 건너뜁니다.
|
|
* **프로덕션 모드 (인증 필수):** 각 잡마다 무작위 암호화 토큰이 발급되며, 백플레인을 오가는 모든 페이로드에 토큰 기반으로 생성된 `hmac_sig` 서명을 탑재해야 수신측에서 수용합니다.
|
|
* **Replay 공격 방어:** 각 이벤트는 단조 증가하는 정수형 시퀀스 번호(`seq`)를 포함합니다. 구독자(`job_subscriber.py`)는 특정 잡에 대해 이미 수용한 최대 시퀀스 번호보다 크지 않은 시퀀스 번호를 가진 페이로드를 즉시 폐기합니다. 페이로드 바디에 대한 HMAC 서명과 결합하여, 이 메커니즘은 클록 동기화에 의존하지 않고 재전송(re-injected) 및 순서가 바뀐 패킷을 차단합니다. 메시지 내 타임스탬프 필드는 참고용 메타데이터이며, 백플레인은 시간 오차(clock-skew) 윈도우를 별도로 검증하지 않습니다.
|
|
|
|
---
|
|
|
|
## 📁 리포지토리 구성
|
|
|
|
```text
|
|
.
|
|
├── .agents/
|
|
│ └── skills/ # 코어 오케스트레이션 셸 스크립트 및 라이브러리
|
|
│ ├── lib.sh # 공통 오케스트레이션 셸 함수 라이브러리
|
|
│ ├── multi-agent-mux-create/
|
|
│ ├── multi-agent-mux-stop/
|
|
│ ├── multi-agent-mux-resume/
|
|
│ ├── multi-agent-mux-status/
|
|
│ ├── multi-agent-mux-monitor/
|
|
│ └── multi-agent-mux-delegate-job/
|
|
│ ├── requirements.txt # 파이썬 의존성 패키지 선언
|
|
│ └── scripts/ # 파이썬 기반 백플레인 구현체
|
|
├── .mam/ # Multi-Agent Mux 메타데이터 (git-ignored)
|
|
│ ├── agent-sessions.db # SQLite WAL 세션 데이터베이스
|
|
│ ├── agent-sessions.yaml # 텍스트 형식의 세션 레지스트리 스냅샷
|
|
│ └── jobs/ # 비동기 잡 메타데이터 JSON 파일들
|
|
├── scripts/
|
|
│ └── generate-env.sh # 환경 파일(.env) 템플릿 복사 스크립트
|
|
├── AGENT.ko.md # 에이전트 역할 행동 강령 (한국어 백업)
|
|
├── AGENT.md # 에이전트 역할 행동 강령 및 뷰포트 스냅샷 규칙
|
|
├── BOOTSTRAP.ko.md # 프로젝트 초기 설치 가이드 (한국어 백업)
|
|
├── BOOTSTRAP.md # 프로젝트 초기 설치 및 검증 상세 가이드
|
|
├── MESSAGING.md # MQTT 메시징 프로토콜 와이어 규격서
|
|
└── README.md # 프로젝트 대표 소개 파일
|
|
```
|
|
|
|
---
|
|
|
|
## 🚦 빠른 시작
|
|
|
|
자세한 빌드 절차는 **[BOOTSTRAP.md](./BOOTSTRAP.md)** 문서를 참조하십시오. 아래는 간략한 요약입니다:
|
|
|
|
1. **환경 설정 파일(.env) 생성:**
|
|
```bash
|
|
./scripts/generate-env.sh
|
|
```
|
|
2. **가상환경 생성 및 의존성 패키지 설치:**
|
|
```bash
|
|
python3 -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -r .agents/skills/multi-agent-mux-delegate-job/requirements.txt
|
|
```
|
|
3. **레지스트리 및 환경 작동 자가 검증:**
|
|
```bash
|
|
.venv/bin/python3 .agents/skills/multi-agent-mux-delegate-job/scripts/registry.py list
|
|
```
|
|
|
|
---
|
|
|
|
## 📝 협업 에이전트 준수 사항
|
|
|
|
이 프로젝트에 새로 합류한 에이전트는 다음 규칙을 준수해야 합니다:
|
|
1. **[AGENT.md](./AGENT.md)** 문서를 정독하여 프로젝트 매니저(PM), 작업자(Worker), 리뷰어(Reviewer) 간의 역할 및 개발 제약조건을 인지하십시오.
|
|
2. 장시간 명령을 실행하는 경우 터미널 스크롤백 로그 유실을 방지하기 위해 `AGENT.md` (제4장)에 기재된 **뷰포트 스냅샷 규칙(Pane Snapshotting Rules)**을 반드시 적용하십시오.
|
|
3. 리뷰어 세션에 diff 검증을 요청하기 전에는 어떠한 코어 파일의 임의 수정도 프로덕션 브랜치에 승인 없이 머지할 수 없습니다.
|