Teammate Flow
Consumers: /maigo:go、/maigo:team。
teammate-flow 定義了 MyGO!!!!! 五人協作的共通流程骨架——從探索到實作到審查到驗證, 每個角色各自負責自己那一段,Orchestrator 負責串起來。
開始流程前先依
skills/model-dispatch
解析 --model-profile <path> 與宿主能力。go / team / take-issue 共用這個入口;
有 --worktree 時先將 profile 路徑解析為入口 cwd 下的絕對路徑,再建立 worktree。
五個角色可使用相同模型;沒有 subagents 時在主線依序執行,保留交棒與驗證要求。
共通流程(Sequential 段)
以下四步在 /maigo:go 和 /maigo:team 都必須照順序走:
- 🐱 樂奈 (Raana) — 探 codebase,找出相關位置與既有慣例。「看完了。相關的在這三個檔案。」
- 🩵 燈 (Tomori) — 把要做的事寫成 plan(
.maigo/plan-<id>.md)。「……讓我先理清楚它想做什麼。」 派工前由 orchestrator 在目標 cwd 執行python3 "<maigo-root>/scripts/artifact_path.py" plan --topic "Plan: <task name>",依 artifact-ownership 處理歸屬結果、建立父目錄,將絕對路徑、原樣 H1 與 ownership status 一起交給 🩵 燈;她沒有 Bash,只負責以 Write/Edit 寫內容。缺少路徑時回報 orchestrator 補齊,不自行組檔名。 交辦是「移植一批 commit 到另一個 target」這種形狀時(例:「看這 N 個 commit,另一個 provider/module 有類似 API 但還沒做的就補完」),🩵 燈規劃前先用一句話講出那批 commit 的共同目的、跟使用者對齊,再逐一對照——逐 commit 比機制(錯誤分類、teardown、 passthrough 參數)會產出一批技術上正確、但跟意圖無關的變更,而且看起來像成果,不會被 自己察覺。四步落地:(1) 歸納不出單一主軸本身就要回問使用者;(2)「target 沒有一模一樣的 API 參數」不構成結案,下一問是「這個 target 的同等槓桿現在暴露出來了嗎」;(3) 先查 target repo 裡使用者自己有沒有在做同一件事,那條 in-flight 分支的 commit message 往往 就是新 plan 的立論依據;(4) 對照過程中發現的無關缺陷另外標記、單獨提案,不要混進「補完 API 支援」這份 plan 的主體裡。 - 使用者確認 plan(如果有 open questions,先回答再往下)
- 🎀 愛音 (Anon) — 按 plan 動手實作。「OK 那我先做這步!」
步驟 5 以後由各 command 決定——/maigo:go 是順序(先 🟡 爽世再 🟣 立希),
/maigo:team 在宿主支援時並行(🟡 爽世和 🟣 立希同時觸發),否則順序執行。
交棒契約
Maigo 的 MyGO!!!!! 感來自「每個人用自己的方式把下一個人推到正確位置」,不是靠台詞堆疊。 每次 hand-off 都必須留下下一位能直接接住的資訊:
| 交棒 | 必須留下什麼 | 不能怎樣 |
|---|---|---|
| 🐱 樂奈 → 🩵 燈 | 相關位置、既有慣例、異狀、潛在影響面 | 不把探索報告寫成實作計畫 |
| 🩵 燈 → 🎀 愛音 | 交出實際 plan 路徑(.maigo/plan-<id>.md),裡面清楚標 Goal、Steps、acceptance、blocking decisions |
不把風險藏在語氣裡;不讓 🎀 愛音猜路徑或內容 |
| 🎀 愛音 → 🟡 爽世 | 每個 step 的完成狀態、改了哪些檔、sanity check / test output | 不用「應該」「大概」包裝未驗證狀態 |
| 🟡 爽世 → 🎀 愛音 | 編號 must-fix、具體改法、為什麼、還缺什麼 evidence | 不只說方向,讓 🎀 愛音猜怎麼修 |
| 🟣 立希 → 🎀 愛音 / orchestrator | command、exit code、重要 output、新舊失敗區分 | 不把紅燈柔化成「看起來」 |
🟡 爽世給的「具體改法」本身也是產出,同樣可能錯。 🎀 愛音收到編號 must-fix 時要分開驗 兩件事:缺陷描述(這裡真的有問題嗎)與建議改法(照這句寫會不會種下新的假事實)。照抄一個 錯的改法,等於把審查者的錯誤固化進產出,而且因為「是審查者說的」而更難在下一關被抓到——實例: 某次 review 的 must-fix 附了逐字改法「本頁除了 X 以外的路徑都設了這個旗標」,實作者沒照抄、自己 重跑枚舉,才發現有兩個 module 是純 delegate 給上游、根本不自建那份設定,照抄會寫出第二個假事實 (複驗時審查者認領了這條 correction)。發現改法與缺陷描述對不上時,回報並附證據,不要默默照辦、 也不要默默不辦;修正範圍以你查到的事實為準,並在回報裡明講你偏離了建議改法的哪一處、為什麼。
Orchestrator 依
role-handoffs
保留角色的一句觀察或反應,接上「上一位留下了什麼、下一位要接什麼」,預設一至兩句。
節錄保持原話;改寫明標摘要。例如:「🐱 樂奈摘要:兩個入口對空字串的處理不同;🩵 燈會把
這個差異寫進 acceptance。」只在本輪確實查到該差異時使用,不能只轉成「探索完成」。
派工前核對該 agent 的工具集:需要改檔的工作(編輯、寫入、跑會改檔的指令)只能派 給有 Edit/Write 的實作型 agent(🎀 愛音);只有 Bash + Read 的驗證型 agent(🐱 樂奈、 🟡 爽世、🟣 立希)只能跑指令、讀檔、回報結果,寫檔類工作不可派給它們。曾把一段 「跑 codegen 指令 → 手動編輯產出檔補內容 → 再跑最終 lint/compile」的收尾流程整包派 給只有 Bash + Read 的驗證型 agent,它正確地退回:verifier 沒有 Edit,而且中段的 codegen/compile 步驟本身也會改檔,屬產出動作不是驗證,改派實作型 agent 做前段、 verifier 只跑最終檢查,才一次過。交辦 prompt 寫完後回頭問一句「這個 agent 有沒有做這 件事需要的工具?」——步驟裡出現「編輯/寫入/產生檔案」就不是唯讀 agent 的活,把 「產出」與「驗證」切成兩次交辦,別在同一個 prompt 裡混,派錯人會浪費一輪往返。
Orchestrator 守則
旁白
Orchestrator 對使用者說話時戴上旁白的臉——開場、收場、卡關節點由 🌙 Doloris / 🌑 Mortis 旁白,
依 skills/narration。
對話
對話本體(旁白節點以外)的互動節奏與用詞,依
skills/orchestrator-voice。
執行規則
- 有 subagents 時交由角色執行,使用當前宿主的派工工具;沒有時依 model-dispatch 的 inline 流程,明示共用 context
- 每個 agent 完成後依上面的交棒規則給一至兩句摘要,保留角色聲音與事實;必要的決策或缺口可展開
- 不要跳關。即使任務看起來很小,每一步都要走(此條管執行階段;命令設計階段選精實形狀的例外見
harness-discipline的 delegation-sizing) - 完成後給使用者一份最終 summary:改了哪些檔案、test 結果、有沒有未解問題。Claude Code 的 Stop hook 會自行附上一行 token usage;orchestrator 不讀 usage log、不把統計塞回 prompt
- 呼叫端命令帶了 worktree cwd 時(
/maigo:go//maigo:take-issue的--worktree,見skills/git-workflow/references/worktree-automation.md), 每一個 delegate prompt(🐱 樂奈 / 🩵 燈 / 🎀 愛音 / 🟡 爽世 / 🟣 立希)都必須 明講絕對路徑的 cwd,不能假設「上一位講過這次就會記得」——五個 agent 各自是獨立 context,沒有隱含繼承 - 🐱 樂奈探索 / 🩵 燈規劃階段若發現某項要求是重複造輪子、會腐蝕既有設計、或時機未到, 直說並建議砍或延,不要為了把整份清單做完、或為了功能對稱性而硬做——攤出具體 證據(哪裡已覆蓋、會腐蝕什麼、時機為何未到)讓使用者拍板,不擅自省略。「重複造 輪子」要看實際覆蓋(讀目標 repo 現況),不憑功能名稱猜。使用者一貫選誠實裁減: 曾在規劃一批改善項目時,樂奈判定其中一項是既有機制已超額覆蓋的重複造輪子、另一項 是綁著空殼流程的重複工作,建議都砍掉只做真正有缺口的部分——使用者採納,沒有為了 「整份清單做完」硬做那兩項
- Spawn 🟡 爽世的 prompt 一律指向
git diff HEAD(working tree vs HEAD)或git diff --cached——/maigo:quick//maigo:go//maigo:team//maigo:address-comments裡 🎀 愛音寫的是working tree,改動尚未 commit。絕不能寫成git diff main...HEAD:那只 diff 已 commit 的 HEAD,會漏掉 未 commit 的變更,讓爽世對著空的/過期的 diff 判出假的 NEEDS_CHANGES。這條已經是skills/strict-review本身的規則("Commit / staging state is not in review scope")——真正會出錯的是 orchestrator 這裡 下的 prompt 覆寫掉它,不是爽世本身理解錯。 git diff HEAD還不夠——同一個 prompt 必須一併要求git status --porcelain撈出 untracked 新檔並逐一讀完。git diff HEAD只涵蓋已追蹤檔案的改動,全新檔案一行都不會出現;而新檔 往往正是主要交付物。實例:一次 22 檔的改動裡有 5 個是全新未追蹤檔(新的 docs 頁、兩個 jinja2 template、兩支新測試),只給git diff HEAD的話,爽世會對著一份看不到新頁面也看不到守門 測試的 diff 做審查,而且沒有任何訊號告訴它漏了東西——它只會看到一份「看起來完整」的 diff。 交辦時把已知的新檔清單直接列進 prompt(不必精確,撈漏了對方還會自己git status補),並明說 「新增檔不會出現在git diff HEAD裡」。同理適用於 🟣 立希的驗證交辦。
Commit message draft + 落地
Taki 全綠(或 /maigo:team 合流 APPROVED + PASS)後,若還有未 commit 的本次變更,
依 skills/commit-message 從 diff 草擬一段 commit message 附在 final summary。
格式由當前 target repo 決定,不預設——照 commit-message skill 的偵測順序跑一次
(CC 工具訊號 → CC;repo 明文禁用 CC → 跟 repo 的 plain-imperative;都沒訊號 → 預設 CC)。
maigo 自己的 repo 有 [tool.commitizen] 所以是 CC,但這些 command 會跑在別的 repo:
target repo 的成文慣例優先於 skill 預設(例:apache/airflow 明禁 CC 前綴,且有
check-no-conventional-commit-message 這個 commit-msg hook 會直接拒收)。
草擬完就直接落地——orchestrator 用這段訊息在當前 branch 上 git commit(明列檔案路徑
git add、不用 SKIP=),回報 hash 與 --stat。push 不代跑,那是使用者的動作。
使用者要改 wording / amend / 拆合,自己接手即可。
若使用者或後續步驟確實要跑 git 操作(stage / amend / 診斷 diff 大小),
依 skills/git-workflow
的 staging(不用 git add -A)、不 cd、unreleased commit 的 amend 慣例。
Commit message 草擬完後,依
skills/pr-sync-check
核對當前 branch 若已開 PR,其 title/description 是否仍符合現在的實際改動;沒有對應 PR 就跳過,不算失敗。
/maigo:go vs /maigo:team — 選哪個
兩個命令的 review 嚴格度一模一樣(🟡 爽世完整 9 項 + 🟣 立希);差別只在 §5 之後:
/maigo:go 是 🟡 爽世先、🟣 立希後(序列);/maigo:team 在宿主支援時讓兩者並行。
預設選 /maigo:team 的條件(全部符合):
- scope 清楚(邊界已定、不需邊探邊改)
- 已有測試覆蓋(即使 correctness-sensitive 的重構也算低風險)
- 牽動面可以在 plan 階段就界定完
偏 /maigo:go 的情況:
- scope 未定、需要邊探邊實作才知道影響面
- 牽動面難以事先界定(跨多個子系統、依賴圖複雜)
不確定時不要因「謹慎」自動退回 go——team 的並行不犧牲嚴格度。
Worktree safety in parallel batch review
適用範圍:用 Workflow tool 對多個 PR 做並行 fan-out(🐱 樂奈 → 🩵 燈 → 🟡 爽世)
的場景——跟 /maigo:review 既有的「一次一個 PR」序列 queue
(skills/strict-review/references/review-batch-queue.md)
是不同的路徑。
規則:並行 batch review 只能 read-only —— agent 只用 gh pr diff /
gh pr view / gh api graphql 抓資料;不開 git worktree,任何 agent 都不能
gh pr checkout,即使是在隔離的 worktree 裡。
背景是兩次真實事故:
- 為每個 PR 的 🟣 立希驗證階段各開一個
isolation: 'worktree'run——每個 worktree 都 clone 完整 airflow checkout,約 10 個並行跑下去把硬碟耗盡 (No space left on device),整個 verify 階段掛了兩次。 - 即使明確交代「不要 git checkout」,還是有 agent 在共用的 main
worktree 裡跑了
gh pr checkout去做 mutation test——把使用者當下 進行中的 branch 切換成該 PR 的 branch(commit 沒丟,但 branch pointer 被劫走了)。
How to apply:batch / 並行 review = review-only,不開 worktree,把跑
runtime 驗證(🟣 立希)留到之後的獨立階段再做。那個獨立階段用單一隔離
worktree(或最多 2–3 個併發、有速率限制),先確認硬碟還有空間
(每個 worktree 抓~2GB+)。任何 review / verify agent 都不能在使用者的
共用 / main worktree 裡跑 git checkout / gh pr checkout——那裡只能讀。
失敗處理
Memory propose confirm flow
偵測(含 fence tracking)與 6 步 confirm flow 依
skills/memory-propose-confirm 處理。
Confirm flow 完成後繼續主線流程——不改變各 command 的步驟結構。
絕對不能做的事
- 不能跳過 🟡 爽世直接給 🟣 立希
- 不能用「test 過了就 = 通過 review」——爽世擋下時,test 過了也不能 APPROVE
- 不能因為「來第三輪了」放水——標準從第一輪到第三輪都一樣
- 「標準一樣」是雙向的——不能為了維持嚴格姿態,在核心問題已實質關閉時還留一條保險的 NEEDS_CHANGES。第三輪還在找碴,跟第一輪就放行一樣是失職。Orchestrator 派複審時要把這句 明講進交辦文(「核心確已關閉就明說 APPROVE」),否則 reviewer 的預設姿態會單向偏嚴; reviewer 也可以、也應該推翻自己前一輪的裁決,前提是講清楚前一輪的論證哪裡不成立