多個 agent 透過文件信箱通信
從 subagent 到 teammate:一次 → 持久;無名 → 有名字;無通訊 → 文件信箱。
Subagent 和 Teammate 有什麼不同?
S04 的 subagent 簡單粗暴:spawn → 跑 → 回 summary → 死。一次性,沒有名字,父子之間沒有雙向通訊。
s09 的 teammate 是一個有名字、能被重複喚醒、能收發訊息的獨立 agent:
subagent (s04): spawn -> execute -> return -> destroyed
teammate (s09): spawn -> work -> idle -> work -> ... -> shutdown
兩個機制的用途不同:
- subagent 適合「做一個具體探索」(如 review 一個 PR)。
- 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 就是讀完整個檔案、parse 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 路由裡處理。