Files
multi-agent-paper/docs/herdr_manual/herdr_guide.md
T

154 lines
8.6 KiB
Markdown

# Herdr 사용 가이드
## 소개
### TMUX란?
**TMUX(Terminal Multiplexer)**는 하나의 터미널 창/세션 안에서 여러 개의 가상 터미널(Window 및 Pane)을 생성, 접근, 제어할 수 있게 해주는 텍스트 기반 터미널 다중화(Multiplexing) 도구입니다.
#### 등장 배경
- **세션 유실 문제**: 기본 터미널 환경에서는 SSH 원격 접속이 끊어지거나 터미널 창을 닫으면 실행 중이던 장시간 작업(서버 실행, 빌드, 데이터 처리 등)이 강제 종료되는 한계가 있었습니다.
- **멀티태스킹의 불편함**: 단일 원격 세션에서 여러 작업을 동시에 모니터링하고 제어하려면 매번 새 SSH 접속을 추가로 열어야 했습니다.
- 이러한 한계를 극복하고 **세션의 지속성(Persistence)**과 효율적인 터미널 멀티태스킹을 지원하기 위해 등장했습니다.
#### 주요 기능
- **세션 분리 및 재연결 (Detach & Attach)**: 터미널 접속이 끊겨도 백그라운드에서 프로세스가 계속 실행되며, 언제든 기존 세션에 다시 재연결(Attach)하여 이전 상태 그대로 작업을 이어갈 수 있습니다.
- **화면 분할 및 창 관리 (Window & Pane)**: 하나의 터미널 화면을 상하/좌우 패널(Pane)로 자유롭게 분할하거나 여러 탭(Window)을 생성하여 다중 작업을 한눈에 관리할 수 있습니다.
- **세션 공유**: 동일한 tmux 세션에 여러 사용자가 동시 접속하여 실시간 화면 공유 및 원격 협업이 가능합니다.
### HERDR란?
**Herdr**는 AI 코딩 에이전트 다중화 및 상태 관리에 특화된 **터미널 워크스페이스 매니저(Agent Multiplexer)**입니다. "코딩 에이전트를 위한 tmux"로서 여러 AI 에이전트(Claude Code, Codex 등)를 개별 터미널 패널(Pane)에서 병렬로 실행하고 통합 제어할 수 있는 Rust 기반 로컬 바이너리 도구입니다.
#### 등장 배경
- **AI 에이전트 모니터링의 복잡성**: 기존 tmux 환경에서는 여러 AI 에이전트를 동시 실행할 때 각 패널의 입출력 및 완료/대기 상태(`blocked`, `working`, `done`)를 한눈에 파악하기 어려웠습니다.
- **오케스트레이션 및 자동화 한계**: 스크립트나 외부 오케스트레이터가 개별 터미널 패널과 프로그래밍 방식으로 상호작용(명령 입력, 결과 캡처, 상태 대기)할 표준 인터페이스가 부족했습니다.
- 이러한 한계를 극복하여 **AI 에이전트 중심의 상태 모니터링**과 **소켓 기반 프로그래밍 제어**가 가능한 터미널 작업 환경을 제공하기 위해 등장했습니다.
#### 주요 기능
- **에이전트 상태 모니터링 사이드바**: 각 패널에서 실행 중인 에이전트의 상태(`working`, `blocked`, `done`, `idle`)를 사이드바에서 한눈에 확인 가능합니다.
- **소켓 API & CLI 프로그래밍 제어**: CLI 및 소켓 인터페이스를 통해 명령 전송(`pane run`), 결과 읽기(`pane read`), 상태 대기(`wait agent-status`) 등 자동화 연동을 지원합니다.
- **세션 지속성 및 원격 재연결 (Detach & Attach)**: 클라우드 계정이나 GUI 없이 백그라운드 세션을 유지하여 SSH/원격 접속 시에도 기존 에이전트 세션에 그대로 재연결할 수 있습니다.
- **워크스페이스/세션 격리**: 프로젝트 단위의 워크스페이스(Workspace)와 독립 세션(Session) 분리를 통해 복수의 코딩 작업을 완전히 격리하여 운용할 수 있습니다.
공식 사이트: [herdr.dev](https://herdr.dev)
## 주요 사용사례
- 여러 에이전트를 동시에 병렬로 실행하며 상태만 사이드바에서 훑어보기
- SSH나 휴대폰으로 원격 접속해 백그라운드 세션에 이어 붙기 (detach/reattach)
- 소켓 API/CLI로 스크립트나 다른 에이전트(오케스트레이터)가 에이전트에 명령을 넣고 결과를 읽어오는 자동화
- 서버 재시작 후에도 에이전트 네이티브 세션을 복원해서 이어가기 (Claude Code, Codex 등 통합 시)
- 하나의 워크스페이스(프로젝트) 안에서 여러 개의 서로 다른 workspace/session으로 완전히 격리된 작업 공간 운용
## 개념 정리
| 개념 | 설명 |
| --------- | ----------------------------------------------------------------------------------------------------------------- |
| Session | 지속되는 Herdr 서버 하나(런타임 인스턴스). `herdr`는 기본 세션에 붙고, `herdr --session <name>`으로 named session을 launch-or-attach 할 수 있음 |
| Workspace | 세션 안의 최상위 프로젝트 컨테이너. 보통 repo/작업 단위로 하나씩 |
| Tab | workspace 안의 레이아웃 |
| Pane | 실제 터미널 하나 |
| Agent | Herdr가 pane 안에서 인식하는 프로세스 (Claude Code, Codex 등). 상태: blocked/working/done/idle/unknown |
## 주요 단축키
prefix 키 기본값은 `ctrl+b`. `prefix+?`로 언제든 전체 목록 확인 가능.
가장 먼저 배울 5가지:
| 동작 | 키 |
|---|---|
| 새 탭 | `prefix+c` |
| 좌우/상하 분할 | `prefix+v` / `prefix+minus` |
| 패널 이동 | `prefix+h/j/k/l` |
| 워크스페이스 탐색 | `prefix+w` |
| detach (세션 유지) | `prefix+q` |
추가 자주 쓰는 것:
| 동작 | 키 |
|---|---|
| 패널 확대(zoom) | `prefix+z` |
| 패널 닫기 | `prefix+x` |
| 카피 모드 | `prefix+[` |
| 다음/이전 탭 | `prefix+n` / `prefix+p` |
| 새 워크스페이스 | `prefix+shift+n` |
| 사이드바 토글 | `prefix+b` |
마우스만으로도 클릭/드래그/우클릭 메뉴로 대부분 조작 가능 (mouse-native).
## 실습: 세션 생성 → Claude 실행 → 소켓으로 프롬프트 전달 → 결과 확인
### 1. 현재 디렉터리를 cwd로 하는 새 세션 `new_session` 생성
```bash
cd <현재 작업 디렉터리>
herdr --session new_session
```
Herdr의 세션은 launch-or-attach 모델이라 이 한 줄로 세션이 없으면 생성하고 동시에 attach까지 됩니다.
### 2. 생성된 세션에서 Claude 실행
attach된 pane 안에서:
```bash
claude --dangerously-skip-permissions
```
(테스트용으로 권한 프롬프트를 건너뛰려면 `claude --dangerously-skip-permissions`. 신뢰된 환경에서만 사용 권장.)
### 3. 다른 터미널에서 herdr 명령으로 프롬프트 전달 (직접 타이핑 아님)
새 터미널에서 에이전트 목록과 pane_id 확인:
```bash
herdr --session new_session agent list
herdr --session new_session agent get claude
```
텍스트 입력 + Enter 제출을 원자적으로 수행:
```bash
herdr --session new_session pane run <pane_id> "파이썬으로 정렬 프로그램을 작성해줘"
```
### 4. Claude의 결과 화면 출력
완료될 때까지 기다렸다가 읽기:
```bash
herdr --session new_session wait agent-status <pane_id> --status idle
herdr --session new_session pane read <pane_id> --source recent --lines 150
```
현재 화면만 바로 보기:
```bash
herdr --session new_session pane read <pane_id> --source visible --lines 80
```
`--session new_session`을 매번 붙이는 대신 `export HERDR_SESSION=new_session`으로 환경변수를 설정하면 이후 명령에서 생략 가능합니다.
## 참고: 다중 workspace 간 에이전트 제어
Herdr의 소켓 API/CLI는 workspace 단위로 격리되지 않고 세션 전체가 하나의 소켓을 공유합니다. `pane_id`가 `w1:p1` 같은 전역 ID라서, 지금 어느 workspace에 있든 다른 workspace의 에이전트를 `agent send`, `agent read`, `wait agent-status`, `pane run` 등으로 그대로 제어할 수 있습니다.
```bash
herdr workspace create --cwd ~/project --label claude-test
herdr workspace list # 방금 만든 workspace_id 확인
herdr agent start claude-test --workspace <workspace_id> -- claude
herdr agent send claude-test "테스트"
herdr wait agent-status claude-test --status idle
```
## 출처
- [herdr.dev/docs](https://herdr.dev/docs/)
- [herdr.dev/docs/cli-reference](https://herdr.dev/docs/cli-reference/)
- [herdr.dev/docs/socket-api](https://herdr.dev/docs/socket-api/)
- [herdr.dev/docs/keyboard](https://herdr.dev/docs/keyboard/)
- [herdr.dev/docs/agents](https://herdr.dev/docs/agents/)
- [herdr.dev/docs/persistence-remote](https://herdr.dev/docs/persistence-remote/)