在遵循此工作流程之前,請先閱讀執行階段適配器。其執行階段對應關係適用於所有被引用的腳本和 playbook。
Pstack 三體
三個智能體,一個 Herdr 或 Rex 工作階段,一個儲存庫。主控者擁有判斷權,搭檔擁有工作目錄,顧問擁有第二意見。它們之間的每一則訊息都是 trio store 中的一個檔案,加上一行命名該檔案的名字。終端機絕非記錄,因為在備用螢幕上的智能體不會留下捲動緩衝區。
此三體是 pstack-pair 加上一個顧問。配對的計劃回合、簡報、簽到、轉向和審查保持不變;顧問參與每個計劃回合,並在發現問題改變設計時回答諮詢。它從不向搭檔發送訊息,也從不寫入共享目錄。
先決條件
- 在 Herdr (
test "${HERDR_ENV:-}" = 1) 或 Rex (REX_BLOCK已設定) 內部。如果兩者都不是,請說明並停止。 - 載入複用器的技能以控制窗格和智能體:Herdr 的
~/.agents/skills/herdr/SKILL.md(或當該檔案不存在時的herdr --skill),或 Rex 的rex skill show。其安全規則貫穿始終。在 Rex 中,請閱讀在 Rex 中執行。 herdr或rex,以及 PATH 上的 Python 3.11 或更高版本 (python3)。scripts/pair.sh help會列出每個儲存和頻道操作;對於三體,請使用它,而不是手動呼叫herdr或rex。- 在主控者、搭檔和顧問中,至少有兩種不同的智能體類型。
pair.sh spawn會從複用器讀取主控者的類型,並且如果三者相同則退出 8;請告訴人類選擇另一個類型或使用pstack-pair。搭檔和顧問可以共享同一類型。 - 以自動模式啟動主控者。Devin 預設使用
--permission-mode dangerous繞過權限。其他類型繼承主控者的模式。pair.sh permission會列印檢測到的主控者模式。--permission <mode>會覆寫兩個衍生角色;--consultant-permission <mode>僅覆寫顧問。--後的原生權限標誌會覆寫該次呼叫衍生的每個角色的預設值。--permission auto會選擇 Devin 的智慧模式。沒有對應翻譯的類型會接受--後的原生標誌。spawn也會跳過每個類型的資料夾信任提示,這會導致未經監管的智能體在未見過的資料夾中掛起:pi 會取得--approve,Devin 會取得--respect-workspace-trust false。--後的信任標誌會覆寫它。衍生的 Claude 也會在沒有 MCP 伺服器的情況下啟動 (--strict-mcp-config和空配置),因為每個伺服器都是每個工作階段的一個程序;--後的--mcp-config會保留您的配置。Claude 和 Codex 會要求信任它們未見過的資料夾;該決定屬於人類,因此spawn會拒絕對話並停止,並提供下一步操作:在儲存庫中開啟該智能體一次並信任它。
角色
| 主控者 | 搭檔 | 顧問 | |
|---|---|---|---|
| 擁有 | 計劃、簡報、諮詢、審查、決策、人類 | 工作目錄、測試、診斷、證據 | 設計批判、二次審查、原型 |
| 以 pstack 身分執行 | poteto-mode 框架、how、architect、審查技能 | 每個簡報命名的 playbook,及其待辦事項清單 | how、why、architect 替代方案、interrogate 姿態、blast-radius(用於差異) |
| 寫入 | 僅限 trio store | 簡報範圍內的檔案,以及其進度記錄和報告 | 建議檔案,以及它會移除的暫用工作目錄 |
| 讀取目錄 | 始終,唯讀;在暫存區的某個提交點執行檢查 | 始終 | 始終,唯讀 |
| 透過...溝通 | 計劃、簡報、轉向、諮詢、審查、常規命令、閘門 | 進度行、報告 | 建議 |
進入你的角色。主控者:references/master.md。搭檔:references/sidekick.md。顧問:references/consultant.md。
Trio store
${XDG_STATE_HOME:-$HOME/.local/state}/pstack/trio/<slug>/,由 pair.sh init 建立。每個檔案一個寫入者。
| 路徑 | 寫入者 | 內容 |
|---|---|---|
pair.json | 主控者透過 pair.sh | 智能體名稱、窗格 ID、類型、當前工作目錄、git 根目錄、開啟的暫存區列表、搭檔的備用和故障轉移、窗格佈局(分割或標籤) |
standing-orders.md | 主控者 | 按路徑貼入每個簡報的編號約束 |
plans/NNN-<slug>.md | 主控者 | 一個計劃回合,來自計劃範本 |
briefs/NNN-<slug>.md | 主控者 | 一個單元,來自簡報範本 |
progress/NNN-<slug>.md | 搭檔透過 pair.sh progress | 每個完成的步驟或方法變更一個時間戳記行 |
steers/NNN-<slug>-s<k>.md | 主控者 | 針對單元 NNN 的中間簡報方向 k,來自轉向範本 |
consults/NNN-<slug>-c<k>.md | 主控者 | 關於單元 NNN 向顧問提出的問題 k,來自諮詢範本,帶有 kind: 為 design、finding、objection 或 review |
reports/NNN-<slug>-s<k>.md | 搭檔 | 對轉向 k 的反對,來自轉向回應範本 |
reports/NNN-<slug>.md | 搭檔 | 簡報 NNN 的證據,來自報告範本,或對計劃 NNN 的同意/反對回應,來自計劃回應範本 |
advice/NNN-<slug>.md | 顧問 | 對計劃 NNN 的設計批判,來自計劃建議範本 |
advice/NNN-<slug>-c<k>.md | 顧問 | 對諮詢 k 的回答,來自建議範本 |
scratch/<id> | 顧問或主控者透過 pair.sh scratch | 指向一個用於一次諮詢 (NNN-<slug>-c<k>) 或審查 (NNN-<slug>-review) 的暫用工作目錄的連結,位於某個提交點或即時狀態,保留在 repo 之外 ${XDG_STATE_HOME:-~/.local/state}/pstack/scratch/(PSTACK_SCRATCH_ROOT 可移動它),Claude 和 Codex 必須在每個主機上信任一次(kitchen.py doctor 會檢查);完成後移除 |
reviews/NNN-<slug>.md | 主控者 | 對單元 NNN 的裁決,來自審查範本;列出其所依據的建議以及任何推翻 |
gates.md | 主控者 | 向人類提出的開放性問題 |
decisions.tsv | 主控者透過 pair.sh log | 展示你工作的軌跡 |
status.md | pair.sh status | 衍生表格;切勿手動編輯 |
queue | 主控者透過 pair.sh queue 和 dispatch | 下一個簡報的路徑,一個插槽 |
steps/NNN-<slug>.tsv | 搭檔透過 pair.sh step | 每個已提交步驟一行:編號、提交、時間、所解決的筆記、摘要 |
notes/NNN-<slug>-n<k>.md | 主控者透過 pair.sh new-note 和 note | 透過步驟 k 對單元步驟的審查,來自筆記範本:阻塞項目和後續行動 |
followups.md | 主控者透過 pair.sh note | 來自每個筆記的後續行動,用於稍後的簡報或問題 |
session-handoff.md | 主控者 | 精簡的恢復和下一個任務上下文,在引導時讀取 |
sessions/ | pair.sh spawn / rotate | 先前的準備就緒報告;保留的工作階段匯出和計時證據 |
events.tsv | 每個 pair.sh 命令 | 每個訊息、報告、喚醒和記錄條目一行,由 pair.sh metrics 讀取 |
NNN 是一個由計劃或簡報、報告、建議和審查共享的零填充序列,因此一個單元的檔案會一起排序。
訊息
| 提示文字 | 方向 | 發送者的輔助工具 | 接收者的動作 |
|---|---|---|---|
| bootstrap (命名技能、角色和 store) | 主控者到搭檔和顧問 | pair.sh spawn | 引導步驟,reports/000-ready.md 或 advice/000-ready.md,回覆 READY |
pstack-trio PLAN <plan-path> | 主控者同時發送給搭檔和顧問 | pair.sh discuss | 搭檔將計劃在程式碼中落地;顧問批判設計;各自寫入同意或反對,結束該輪 |
pstack-trio BRIEF <brief-path> | 主控者發送給搭檔 | pair.sh dispatch | 執行簡報,撰寫其報告,執行 pair.sh finish,然後以 REPORT 行結束該輪 |
pstack-trio BRIEF <brief-path>,已排隊 | 主控者發送給工作中的搭檔 | pair.sh queue | 主控者在新工作階段後分發它;pair.sh next 拒絕 |
pstack-trio STEER <steer-path> | 主控者發送給工作中的搭檔,或一個因反對而暫停的搭檔 | pair.sh steer | 在工具呼叫之間讀取它;同意並繼續,或以證據反對並結束該輪 |
pstack-trio CONSULT <consult-path> | 主控者發送給顧問 | pair.sh consult | 讀取命名檔案,如果需要則在暫存區中製作原型,寫入建議,結束該輪 |
pstack-trio REPORT <report-path> | 搭檔發送給主控者 | pair.sh finish (或 notify) | 讀取報告,審查 |
pstack-trio ADVICE <advice-path> | 顧問發送給主控者 | pair.sh notify | 讀取建議,決定 |
pstack-trio STOP <store> | 主控者發送給搭檔和顧問 | pair.sh stop | 安全暫停,寫入停止報告或建議 |
discuss 會在兩個智能體都安定後返回,並帶有每個角色的一個回應路徑和狀態。忙於某個單元的搭檔不會阻礙回合進行:顧問會立即收到計劃,搭檔的那一半是 deferred(退出碼 4),並且在搭檔報告後再次執行 discuss 只會發送那一半。consult 會在顧問安定到 idle、done 或 blocked 時返回。dispatch 和 wait 會在搭檔的回覆到達、報告在訊息後寫入,或當它處於 blocked 時返回;僅來自複用器的安定狀態是不可信的:Devin 搭檔在提示到達時和步驟之間顯示為空閒,並且在狹窄的窗格中可以顯示為整個執行完成,因此會根據窗格的「esc to interrupt」行檢查安定狀態,對於在 1 分鐘內沒有報告且保持安定狀態的窗格,wait 會以 report: missing 結束。dispatch 和 wait 也會在簽到間隔返回摘要。wait 也會在已分發的簡報的報告落地時立即返回,即使搭檔已經接受了排隊的簡報;running: 隨後會命名它所處的簡報。notify 僅在主控者空閒時提示主控者。壓縮後您收到的訊息仍會命名此技能和要讀取的檔案,因此請重新載入技能並從該檔案繼續。
先計劃
實施僅從搭檔同意且顧問已提供建議的計劃開始。主控者起草 plans/NNN-<slug>.md,包含所選設計、它所權衡的替代方案及其優缺點,然後透過 pair.sh discuss 發送,該訊息會同時到達兩個智能體。搭檔會根據程式碼檢查每個步驟,並以證據回答同意或反對。顧問批判設計本身:資料形狀、邊界、替代方案表遺漏的內容,並回答同意或反對。主控者將兩者合併到下一輪或一個帶有裁決 agreed 的審查中。
顧問是諮詢性的。來自顧問的 object 不會阻止 agreed;主控者可以在審查的「已推翻」部分下以理由和一條決定行推翻它。然而,一個計劃回合的建議檔案必須存在:pair.sh dispatch 會拒絕一個 feature、bug-fix、refactoring、perf-issue 或 pstack-tdd 簡報,如果其計劃沒有存檔的顧問建議或沒有 agreed 的審查。唯讀和取證簡報不需要計劃;錯誤的診斷簡報在其計劃之前執行。三個回合未能達成協議將成為一個給人類的閘門,所有立場都記錄在 gates.md 中。
諮詢
諮詢是主控者在計劃回合之外向顧問提出的問題。pair.sh new-consult <store> <NNN> --kind <kind> 會為單元 NNN 建立檔案;pair.sh consult 會發送它並等待建議。
| 類型 | 時機 | 顧問回答 |
|---|---|---|
| design | 主控者在計劃或轉向之前權衡方向 | 哪條路以及為什麼,附帶權衡取捨 |
| finding | 簽到摘要、報告或差異顯示出意外情況 | 它是否如所見,以及它改變了什麼 |
| objection | 搭檔反對轉向 | 根據證據誰是對的,以及替代方案 |
| review | 裁決被質疑或單元處於第二次修訂 | 接受、修訂或拒絕,附帶發現 |
| glance | 簽到顯示第一個提交或一個較大差異,針對一個修訂成本最高的單元 | 五分鐘內:審查是否會說修訂,以及為什麼,或 none |
在以下情況下必須進行諮詢:偏離商定設計的轉向、在搭檔反對之後的後續轉向,以及對單元第二次嘗試的 revise 裁決。在其他情況下是可選的,並且不會為著陸單元發送任何諮詢:每個討論和審查都在著陸前結束。每個單元三次諮詢;new-consult 會在沒有 --force 的情況下拒絕第四次,因為第四次意味著設計有問題,應該屬於一個計劃回合。glance 不在此上限之內,每個單元一次,並且絕非強制性的:顧問的配額是稀缺資源,因此請將其花費在後期修訂成本最高的地方。
每個諮詢隨時可以執行,無論搭檔是否在工作。consult 會在檔案上蓋上搭檔的狀態和 HEAD 戳記;顧問會讀取該 HEAD 上的已提交工作,以及任何未提交的工作(僅透過 pair.sh scratch 快照,絕非在其下移動的目錄)。每個諮詢都帶有一個時間盒,預設為 15 分鐘,glance 為 5 分鐘;超過時間盒,顧問會撰寫 partial 建議並結束該輪。
簽到與轉向
與 pstack-pair 相同:搭檔附加進度行,dispatch 和 wait 在間隔返回簽到摘要,並且轉向是可能到達工作中的搭檔的唯一訊息。每個簡報兩個新的轉向,每個轉向兩輪。顧問增加了一個步驟:當摘要或反對顯示改變設計的發現時,主控者在轉向之前進行諮詢,並且轉向的「方向」會引用建議路徑。
每種智能體的任務工作階段
任何類型的搭檔(Claude、Codex、Devin、pi、Prime、Muse)都使用一個新的對話...
[因翻譯而截斷]