# MAM demo

https://git.godopu.com/tmpl/multi-agent-mux

- resume
	```bash
	/multi-agent-mux-resume
	```

- stop
	```bash
	/multi-agent-mux-resume
	```

- create
	```
	/multi-agent-mux-create --no-isolate --onboard 다음 새로운 에이전트를 생성해줘.
	```

- delegate-job
	```bash
	/multi-agent-mux-delegate-job agy creator에게 파이썬 초급자를 대상으로 정렬 학습을 위한 예시 코드 작성을 지시해줘.
	```

- loop
	```bash
	/multi-agent-mux-loop --plan --all-reviewer /goal 생성된 예시를 바탕으로 수업에 사용할 학습 자료를 만들어줘. 다음 조건을 충족하여야해. 
	
	- 파이썬 초급자가 보더라도 이해하기 쉽도록 실생활 예시를 통해 상세한 설명이 수록되어야 함
	- 모든 예시의 주요 코드에 대한 line 별 코드 설명이 있어야 함
	```

# herdr 사용법

실습: 세션 생성 → 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`으로 환경변수를 설정하면 이후 명령에서 생략 가능합니다.

# a2a 실습
## 🗺️ 5단계 학습 로드맵 (Learning Roadmap)

### [Step 01] crewai를 통한 multi-agent 시작하기
*   **디렉토리**: [lib/crewai-example/](crewai-example/)
*   **학습 목표**: CrewAI 프레임워크와 로컬 Ollama 모델을 활용해 두 개 이상의 에이전트(기술 연구원, 작가)가 순차적으로 협업하여 분석 보고서를 도출하는 기초 워크플로우를 이해합니다.
*   **실행**:
    ```bash
    ./lib/crewai-example/run.sh
    ```

- https://docs.crewai.com/v1.15.1/ko/tools/overview
### [Step 02] a2a 기초 알아보기 (FastAPI 기반 직접 구현)
*   **디렉토리**: [lib/a2a-echo-example/](a2a-echo-example/)
*   **학습 목표**: SDK 도움 없이 원시 FastAPI를 사용해 JSON-RPC 2.0 프로토콜, 탐색 엔드포인트(`/.well-known/agent-card.json`), 메시지 수발신 규약을 직접 작성해보며 A2A 프로토콜의 밑바닥 동작 원리를 이해합니다.
*   **실행**:
    ```bash
    # 터미널 1: 에코 에이전트 서버 구동
    ./lib/a2a-echo-example/run.sh server
    # 터미널 2: 테스트 메시지 클라이언트 실행
    ./lib/a2a-echo-example/run.sh client
    ```

### [Step 03] a2a sdk 알아보기 (공식 SDK 전환)
*   **디렉토리**: [lib/a2a_sdk/](a2a_sdk/)
*   **학습 목표**: 정식 `a2a-sdk`를 적용하여 `AgentExecutor` 기반으로 비즈니스 에코 로직을 구현합니다. 복잡한 소통 인프라(FastAPI 라우트 마운트, 에러 처리, 큐 통신 등)가 SDK에 의해 얼마나 깔끔하게 자동화되는지 비교 체험합니다.
*   **실행**:
    ```bash
    # 터미널 1: SDK 기반 에코 서버 구동
    ./lib/a2a_sdk/run.sh server
    # 터미널 2: SDK 규격 호환 클라이언트 실행
    ./lib/a2a_sdk/run.sh client
    ```

### [Step 04] a2a를 이용하여 multi agent 구현해보기
*   **디렉토리**: [lib/a2a-ollama-example/](a2a-ollama-example/)
*   **학습 목표**: 앞선 SDK 뼈대에 실제 로컬 생성형 AI 모델인 `gemma4:31b-cloud`를 이식하여, 들어오는 질문에 지능적으로 답하는 실질적인 AI 비서 에이전트를 조립합니다.
*   **실행**:
    ```bash
    # 터미널 1: Ollama 연동 AI 에이전트 서버 구동
    ./lib/a2a-ollama-example/run.sh server
    # 터미널 2: 질문 전송 테스트
    ./lib/a2a-ollama-example/run.sh client "프랑스의 수도는 어디야?"
    ```

### [Step 05] 작업 할당은 어떻게 이루어질까? (오케스트레이션)
*   **디렉토리**: [lib/advanced-a2a-ollama-example/](advanced-a2a-ollama-example/)
*   **학습 목표**: 사용자의 복잡한 질의를 받으면 LLM을 통해 어떤 에이전트가 적합한지 동적으로 판별(분류)하고, 대상 전문 에이전트(Chat Agent 또는 Coder Agent)를 호출하여 답변을 취합하는 고급 오케스트레이션 설계 패턴을 습득합니다.
*   **실행**:
    ```bash
    # 터미널 1: 두 독립 에이전트(Chat:8001, Coder:8002) 서버 동시 구동
    ./lib/advanced-a2a-ollama-example/run.sh server

    # (선택) 개별 터미널에서 서버를 분리 구동하고 싶을 때
    # 터미널 1A: Chat 에이전트만 구동 (Port 8001)
    ./lib/advanced-a2a-ollama-example/run.sh server chat
    # 터미널 1B: Coder 에이전트만 구동 (Port 8002)
    ./lib/advanced-a2a-ollama-example/run.sh server coding

    # 터미널 2: 오케스트레이터 작동 및 분류 인터랙션 실행
    ./lib/advanced-a2a-ollama-example/run.sh client "프랑스의 수도는 어디야?"
    ```

### [Step 06] 동적 라우팅과 서비스 탐색 (Dynamic Binding)
*   **디렉토리**: [lib/advanced-dynamic-a2a-ollama-example/](advanced-dynamic-a2a-ollama-example/)
*   **학습 목표**: 하드코딩 라우팅의 한계를 이해하고, 런타임에 분산된 에이전트들의 명세 카드(`agent-card.json`)를 동적으로 검색(Discovery)해 스킬 목록을 추출하고, 최적 매칭 노드에 실시간으로 메시지를 라우팅 및 바인딩하는 기법을 실증합니다.

* **터미널 A (Chat 에이전트 - Port 9501)**:
```bash
OLLAMA_MODEL="gemma4:31b-cloud" ./lib/advanced-dynamic-a2a-ollama-example/run.sh server chat
```

* **터미널 B (Coder 에이전트 - Port 9502)**:
```bash
OLLAMA_MODEL="gemma4:31b-cloud" ./lib/advanced-dynamic-a2a-ollama-example/run.sh server coding
```

* **터미널 C (Translator 에이전트 - Port 9503)**:
```bash
OLLAMA_MODEL="gemma4:31b-cloud" ./lib/advanced-dynamic-a2a-ollama-example/run.sh server translate
```

* **클라이언트 질의 터미널 (오케스트레이터 클라이언트로 번역 질문)**:
```bash
# 오케스트레이터가 번역에 맞는 스킬을 찾아 Translator(9503 포트)로 매칭하는 것을 확인
OLLAMA_MODEL="gemma4:31b-cloud" ./lib/advanced-dynamic-a2a-ollama-example/run.sh client "안녕하세요를 영어로 번역해줘."
```

