Урок 09 · Совместная работа

Несколько агентов общаются через файловые почтовые ящики

От subagent к teammate: одноразовый → постоянный; анонимный → именованный; без связи → файловый почтовый ящик.

⏱ ~12 мин · 📝 3 интерактивных компонента · 🧑‍💻 На основе shareAI-lab · s09_agent_teams.py

Чем teammate отличается от subagent?

Subagent из S04: spawn → работа → summary → уничтожен. Одноразовый, без имени, без двусторонней коммуникации между родителем и ребёнком.

Teammate из s09 — это независимый агент с именем, который можно многократно будить и который может отправлять и получать сообщения:

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

Два механизма для разных целей:

  • subagent подходит для «сделать одно конкретное исследование» (например, review PR).
  • teammate подходит для «постоянно выполнять роль» (например, долгосрочный reviewer, которого будят при каждом новом коммите).

Почтовый ящик — это JSONL-файл

Как общаются члены команды? В s09 используется самый простой механизм: append-only JSONL-файл.

.team/
  config.json          # список членов команды
  inbox/
    alice.jsonl        # все письма для alice попадают сюда
    bob.jsonl
    lead.jsonl

Отправить — это open("alice.jsonl", "a").write(msg); прочитать — прочитать весь файл, распарсить JSONL, затем truncate для очистки (drain-семантика).

Почему файлы, а не очередь в памяти? Файлы персистентны по природе. Перезапуск агента, аварийный выход процесса, даже перезагрузка машины — письма никуда не денутся. Плюс их можно читать и grep-ать для отладки.

Путь одного сообщения от lead к alice

Виджет ниже позволяет отправить alice сообщение и наблюдать каждый шаг на уровне файловой системы.

5 типов сообщений

В s09 определены 5 типов сообщений (VALID_MSG_TYPES), но реализованы только первые два; остальные добавляются в уроке s10:

  • message — обычное текстовое сообщение.
  • broadcast — отправить всем teammate, кроме себя.
  • shutdown_request / shutdown_response — запрос/ответ на корректное завершение (s10).
  • plan_approval_response — согласование плана (s10).

Почему объявлены, но не реализованы? В s09 «расширение протокола» намеренно открытое — типы сообщений перечислены, добавить новый значит добавить запись в словарь и обработку в _exec.

Интерактив

Виджет 1 · Mail Flow · путь сообщения от lead к alice

Нажмите Send и отслеживайте каждый шаг на файловой системе: lead.send → append alice.jsonl → alice читает inbox на следующем раунде → truncate.

Интерактив

Виджет 2 · Team Config · кто онлайн, какой статус

.team/config.json — список членов команды. Выполните несколько операций (spawn / message / shutdown) и наблюдайте, как меняется конфигурация.

Операции
.team/config.json

        
Интерактив

Виджет 3 · Subagent vs Teammate · решите, что использовать

6 сценариев задач. Решите: subagent (spawn-then-die) или teammate (spawn-then-live). Думайте: это «разовая сделка» или нет.

Правильно: 0 / 6