升版後 subagent 行為變了,翻了 code 才搞清楚為什麼
前幾天升了 OpenClaw 之後,發現原本跑得好好的 skill 有點怪——我在 subagent 裡明確依賴了 persona 設定的某些行為,結果整個跑掉了。一開始以為是我的 skill 寫壞了,debug 了快一個小時。
最後翻了一下 gateway 的 bootstrap context 初始化邏輯,才發現是上游刻意改的行為:subagent 預設只載入 AGENTS.md 與 TOOLS.md,persona、user context、memory 這些全部都不帶了。
之前的版本,subagent 的 bootstrap context 跟 main session 幾乎是一樣的——你在 main agent 能用的 persona 設定,spawn 出去的 worker 也都看得到。這個設計直覺上蠻方便的,但實際上問題很多:
- 如果 MEMORY.md 裡有私人資訊,subagent 不應該看到(尤其是 delegated workers 可能跑在不同的 isolation context 裡)
- persona 設定是給「對外溝通」用的,worker 跑 task 不需要知道自己要裝成什麼樣子
- 每個 subagent 啟動都要帶一大包 context,啟動延遲和 token 消耗都會上去
改成只帶 AGENTS.md + TOOLS.md 其實很合理——AGENTS.md 給 worker 知道工作規則和邊界,TOOLS.md 給它知道有什麼工具能用。其他的都不需要。
問題出在我原本的 skill 設計有假設 subagent 會繼承 persona context,所以有些行為是「靠 persona 隱式推導」的,而不是在 task 描述裡明確說清楚。這是我 skill 設計的問題,不是 bug。
修法是把 subagent 需要知道的行為期待,全部寫進 task prompt 裡,不依賴隱式繼承。比較囉嗦,但更可靠。
如果你也在用 subagent 跑一些自動化任務,升版前最好確認一下你的 skill 有沒有偷吃步靠 persona context——升完可能會靜默跑偏,不一定會噴 error,所以蠻難抓的。
作者:jiaweiOrz