Lesson 09 · 협업

여러 agent가 파일 메일함으로 통신한다

subagent에서 teammate로: 일회성 → 지속; 익명 → 이름 있음; 통신 없음 → 파일 메일함.

⏱ 약 12 분 · 📝 3 개 인터랙티브 컴포넌트 · 🧑‍💻 기반 shareAI-lab · s09_agent_teams.py

Subagent와 Teammate의 차이점은?

S04의 subagent는 간단합니다: spawn → 실행 → summary 반환 → 소멸. 일회성이고 이름이 없으며 부모/자식 간에 양방향 통신이 없습니다.

s09의 teammate는 이름이 있고, 반복적으로 깨울 수 있으며, 메시지를 주고받을 수 있는 독립적인 agent입니다:

subagent (s04):  spawn -> execute -> return -> destroyed
teammate (s09):  spawn -> work -> idle -> work -> ... -> shutdown

두 메커니즘의 용도는 다릅니다:

  • subagent는 "구체적인 탐색 하나를 수행"할 때 적합합니다 (예: PR 하나 review).
  • teammate는 "지속적으로 역할을 담당"할 때 적합합니다 (예: 장기 reviewer, 새 commit이 있을 때마다 깨워줌).

메일함은 JSONL 파일

팀원들이 어떻게 통신할까요? s09는 가장 단순한 메커니즘을 사용합니다: append-only JSONL 파일.

.team/
  config.json          # 팀원 명단
  inbox/
    alice.jsonl        # alice에게 보내는 메시지는 여기에 append
    bob.jsonl
    lead.jsonl

send는 open("alice.jsonl", "a").write(msg)이고, read는 전체 파일을 읽고 JSONL을 파싱한 다음 truncate으로 비웁니다 (drain 의미론).

왜 메모리 큐가 아닌 파일을 쓰나요? 파일은 자연적으로 지속됩니다. agent 재시작, 프로세스 충돌, 심지어 서버 재부팅 후에도—메일은 그대로 있습니다. 읽을 수 있고 grep할 수 있어서 디버깅 경험이 매우 좋습니다.

lead에서 alice까지 메시지의 전체 흐름 보기

아래 widget에서 alice에게 메시지를 보내고 각 단계에서 디스크에 무슨 일이 일어나는지 보세요.

5가지 메시지 유형

s09는 5가지 메시지 유형(VALID_MSG_TYPES)을 정의하지만 앞의 두 가지만 구현됩니다. 나머지 세 가지는 s10 프로토콜 강의에서 추가됩니다:

  • message — 일반 텍스트 메시지.
  • broadcast — 자신 외 모든 teammate에게 전송.
  • shutdown_request / shutdown_response — 우아한 종료 요청/응답 (s10).
  • plan_approval_response — 계획 승인 (s10).

왜 선언만 하고 구현하지 않을까요? s09는 "프로토콜 확장"을 개방형으로 만들고 싶어서입니다—메시지 유형은 열거형이고, 새 유형을 추가하려면 딕셔너리에 한 줄 추가하고 _exec 라우터에서 처리하면 됩니다.

Interactive

Widget 1 · Mail Flow · 메시지가 lead에서 alice까지 가는 과정

Send를 클릭해 파일시스템의 각 단계를 추적하세요: lead.send → alice.jsonl에 append → alice가 다음 라운드에 inbox 읽기 → truncate.

Interactive

Widget 2 · Team Config · 누가 온라인이고 상태는 무엇인가

.team/config.json은 팀원 명단입니다. 몇 가지 작업(spawn / message / shutdown)을 해보고 설정이 어떻게 변하는지 확인하세요.

작업
.team/config.json

        
Interactive

Widget 3 · Subagent vs Teammate · 어떤 것을 사용할지 결정

6가지 작업 시나리오에서 subagent (spawn-then-die) 또는 teammate (spawn-then-live)를 선택하세요. 작업이 "일회성"인지 생각하세요.

0 / 6 정답