Community寫作與編輯github.com

ptmrio/harness-subagent

將 Claude Code、Codex 或 Grok 作為一次性子代理派發,然後綜合結果。

harness-subagent 是什麼?

Harness Subagent 是一個 AI 代理技能,旨在將其他編碼代理(如 Claude Code、Codex 或 Grok)作為一次性子代理來派發,然後綜合其輸出。其主要原則是將 harness 視為子代理,而非預言機——模型審視自身工作會複製其盲點。你必須判斷子代理的回覆,而不能直接轉發。支援的平台包括 Claude Code、Codex CLI、Grok Build、Gemini CLI 以及 Cursor Agent 等。工作流程定義了清晰的命令層級(L0/L1/L2),以防止循環呼叫,並包括一個完整的編排循環(實踐、實施、驗證、最終一致性)。它還支援使用者配置、一次性與完整循環的優先級規則,以及跨平台處理(Linux、macOS、WSL、Windows PowerShell),確保安全且受控的派發。

相容平台✓Claude Code✓Codex CLI✓Cursor✓Antigravity✓Gemini CLI✓OpenCode
npx skills add ptmrio/harness-subagent

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Harness Subagent (編排子代理)

將另一個編碼代理 harness 作為一次性子代理派發,然後綜合結果。

核心原則:harness 是子代理,而非預言機。 模型審視自身工作會複製其自身的盲點。如果你未經判斷就直接轉發答案,那麼這個價值就被破壞了。

編排者語氣: CTO 級別——簡潔、扼要、使用項目符號,當 ASCII 預覽優於文字時使用。與人類操作者保持一致(揭示假設;針對不可逆操作和未確定的產品偏好提問;不要默默增加範疇)。

黏性路由: 如果子代理遇到使用量/速率限制(或任何可能誘使切換的軟性失敗),不要重新導向到其他後端或模型。報告失敗,標記為 UNVERIFIED(未驗證)/ 阻塞,並詢問一次。例外情況:一個「未裁決」的相同系列/「哪個 harness」的詢問是一個巢狀洩漏——重寫身份圍欄,重新啟動一次,使用相同的後端;不要詢問,也不要切換。在完整的編排循環中,停止檢查清單——不要在沒有失敗階段交付物的情況下繼續進行後續階段(例如,如果「實踐」因限制而失敗,則不要執行「實施」)。

不要根據任務刻板印象選擇 harness,除非使用者設定包含該金鑰(請參閱 references/user-config.md)。路由順序:此話語 → 使用者設定 → 詢問一次。 後端協議相同。角色個性與超能力對應表:references/roles.md(權威)。

預設為審查(不要編輯應用程式檔案)。僅當使用者(或已批准的計劃)要求「實施」時才允許寫入應用程式。審查和視覺化可以建立暫存檔案和寫入報告。

命令層級(請勿混用)

此技能為一次性。子代理不得重新進入此技能。供應商 CLI 可能允許巢狀 Agent/spawn_agent;但這並非執行此協定的許可。

層級誰命令禁止作為「你的」命令
L0人類/harness-subagent、「編排」、指定的 harness、固定 selfspawn.sh 標誌
L1載入此技能的父代理scripts/spawn.sh --backend --mode、設定路由、相同系列跳過、詢問一次、綜合將 spawn.sh 調用放入簡報中;詢問子代理哪個 harness
L2CLI spawn.sh 啟動僅角色超能力、Playwright/指定的截圖、report.md此技能、spawn.sh、requesting-code-review、「哪個 harness?」、相同系列詢問

L1 調用 scripts/spawn.sh --mode …。該 argv 不是子代理的指令。如果你處於 L2(已設定 HARNESS_SUBAGENT_RUN,或提示以 YOU ARE THE WORKER 開頭),請停止閱讀此 spawn 協定,並執行被分派的工作。

spawn.sh 匯出 HARNESS_SUBAGENT_RUN 並設定 CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH=1。巢狀的 spawn.sh 會失敗(變數已設定)。

編排 vs 一次性

優先順序(按順序評估):

  1. 單一工作縮減優先於一次性 —— 話語指定一個工作(第二意見、審查此 diff、僅實施…、重寫 README、研究 X)→ 一份簡報,一次 spawn。開頭的「編排這個──」不強制執行完整循環。
  2. 明確的完整循環優先 —— 使用者說「執行完整循環」/ 同時指定實踐+實施+審查 / 開放式的「端到端編排此功能」且沒有單一工作名詞 → 執行下面的完整檢查清單。此處指定的 harness 僅為每個階段固定後端(或按階段設定);它不會將循環折疊為一次性。
  3. 否則詢問一次他們想要什麼(完整循環 vs 一個工作)。

完整循環檢查清單(跳過已完成或使用者放棄的步驟;每個 spawn 一個工作):

  1. 實踐 —— 研究(或父代理的 self,如果已固定):恰好兩個錨點——一個 Anthropic 的官方指南 + 一個 OpenAI 的官方指南。可選擇補充(而非取代)Cursor/xAI 的內容,當堆疊/harness 使其相關時。引用 + 標註日期。
  2. 實施 —— 根據這些實踐的限定切片。貼上來自 roles.md 的完整 TDD 表格。
  3. 驗證 —— code-review(對抗性的)。當涉及 UI 時,添加 code-review-visual。
  4. 最終一致性 —— 父代理預設 self(或一次簡短的審查 spawn):邏輯、冗餘、與兩個錨點和原始請求的總體合理性。

如果任何階段被阻塞(包括黏性路由限制),停止並詢問——不要跳過。

選擇後端

絕不 spawn 父代理自身的系列,除非使用者本輪指定了它(Grok 父代理 → 沒有 grok;Claude Code 父代理 → 沒有 claude;Codex 父代理 → 沒有 codex;Antigravity 父代理 → 沒有 agy)。每個問題一個 harness,除非使用者要求多個意見。

系列是父產品/CLI,而非模型 ID。Cursor Agent、cursor-agent 和 Grok Bot 都是 cursor(即使模型是 Grok)。Grok Build CLI 是 grok。Claude Code 是 claude。Codex CLI 是 codex。Antigravity CLI 是 agy。舊版 Gemini CLI 是 gemini(一個不同的系列;不要將其視為 agy)。一個 Cursor 父代理,其 defaults.implement = "cursor" 會跳過並詢問一次——該 token 是一個後端,而非 self。當此會話應執行該工作時,固定為 self。

使用者說二進位檔 (PATH)預設模型(最新系列)預設思考模式標誌
Claude, Opus, Fable, ask-claudeclaudeopus(同時 fable、sonnet、haiku)xhighreferences/backend-claude.md
GPT, Codex, Sol, Terra, Luna, ask-gptcodexgpt-5.6-solxhighreferences/backend-codex.md
Grok, ask-grokgrokgrok-4.6xhighreferences/backend-grok.md
Gemini, Antigravity, agy, ask-geminiagy供應商預設(省略 --model;列出: agy models)highreferences/backend-agy.md
未指定在使用者設定中匹配 defaults.* 金鑰(spec、spec-ui、plan、plan-ui、implement、implement-ui、writer、research、code-review、code-review-visual、…),如果已設定且(後端不是父系列,或值為 self-class);否則詢問一次。審查別名:code-review-task / code-review-adversarial / code-review-adverserial / review → code-review(請參閱使用者設定中的解析順序)。設定 [models] / [effort],否則使用表格預設—references/user-config.md

如果使用者指定了模型 ID,請使用它。Cursor Agent / OpenCode / Droid / 舊版 Gemini CLI:references/more-clis.md(不在 scripts/spawn.sh 中)。設定 token gemini 是該舊版 CLI,而非 agy 的別名。

列出此機器實際擁有的內容:

claude --help
codex debug models --bundled
grok models
agy models
cursor-agent --list-models

Windows PowerShell:Get-Command claude,codex,grok,agy。不要硬編碼 ~/.local/bin/…。PATH 上的 agent 通常是 Grok Build,而非 Cursor。 Cursor 的 CLI 是 cursor-agent。

沒有 harness-spawn 技能。陳舊的 ask-claude / ask-gpt / ask-grok 佔位:此技能。

使用者設定

可選。在技能更新後仍然存在。絕對不要將偏好儲存在技能克隆中(npx skills add 會分散到每個代理目錄)。

  • 如果設定了 $HARNESS_SUBAGENT_CONFIG:該檔案。檔案缺失 → 詢問一次(不要 fall through)。
  • 否則:${XDG_CONFIG_HOME:-$HOME/.config}/harness-subagent/config.toml

模式、搜尋和「總是使用 X」的寫入路徑:references/user-config.md。除非使用者要求固定,否則不要建立該檔案。

如果匹配的 defaults.* 值是 self、orchestrator、parent 或 you,則在此會話中執行該工作。不要撰寫簡報。不要呼叫 scripts/spawn.sh。父系列後端(當你是 Grok 時為 grok)不是 self——跳過並詢問一次,除非此話語指定了該 harness。

作業系統、暫存目錄、標準輸入

父代理經常傳遞標準輸入。將其視為有敵意的。

Linux / macOS / WSLWindows cmdWindows PowerShell
執行目錄${TMPDIR:-/tmp}/harness-subagent/<run-id>%TEMP%\harness-subagent\<id>Join-Path $env:TEMP "harness-subagent\<id>"
Spawnbash <skill>/scripts/spawn.sh …Git Bash 在腳本路徑上Git Bash 檔案 argv(如下)—— 永遠不要使用雙引號的 -lc 配方

從你本次回合載入的 SKILL.md 的技能目錄(路徑在技能標題上)調用 scripts/spawn.sh。npx skills add -g 會分散副本;不要在一次會話中混合 ~/.claude/skills、~/.cursor/skills 和 ~/.agents/skills。

cwd / -C / --cwd 必須是該 CLI 能理解的路徑(WSL 的 /mnt/d/… vs Windows 的 D:\…)。不要將 Windows 的 claude.exe 混入 WSL。

視覺截圖:Claude 和 Cursor Agent 需要 --add-dir "$RUN",並將截圖放在 $RUN 中。agy Review/Visual 也一樣;agy Implement 必須不傳遞 --add-dir(這會使 $RUN 成為可寫入的工作區)。Grok:將截圖複製到 --project(應用程式樹)中,絕不能只放在 $RUN 中——Grok 無法讀取暫存執行目錄。Codex:-i(腳本 --image)。

Windows PowerShell(陷阱——不要跳過)

PowerShell 會在 bash 看到 $(…)、cat 和 $RUN 之前對其進行展開。一個用雙引號括起來的 & bash -lc "claude … $(cat $RUN/brief.md) > $RUN/last.md" 將查詢 D:\c\Users\…,將 last.md 寫入 /,或傳遞一個空白/扁平化的提示。system32\bash.exe 是 WSL——它無法看到 %TEMP% 作為 /c/…。

  1. 固定 Git Bash:"$env:ProgramFiles\Git\bin\bash.exe"(確認 Test-Path;不要使用 WSL bash)。
  2. 使用 Write 工具(UTF-8)寫入 brief.md。不要從 PowerShell 5.1 使用 Out-File / >(會產生 UTF-16LE + NUL 字元)。
  3. 將技能腳本作為參數執行,將 Shell 呼叫置於背景(在 Cursor 中為 block_until_ms: 0):
& "$env:ProgramFiles\Git\bin\bash.exe" -- "<skill-dir>\scripts\spawn.sh" --backend claude --mode review --project "D:/Code/app" --run "C:/Users/<you>/AppData/Local/Temp/harness-subagent/<id>"
  1. 使用 Shell(Get-ChildItem / ls)列出執行目錄。Cursor 的 Glob 是工作區範圍的,會錯過 %TEMP%。
  2. 兩次失敗啟動 → 停止。根據父代理證據回答。將該 harness 標記為 UNVERIFIED。不要發明第三個引號配方。

如果此父代理僅自動允許某些 CLI,則 spawn 將因 bash / bash.exe、此腳本或目標後端(codex、…)而阻塞。要求使用者允許這些,或使用可以允許該單次 spawn 的批准模式。不要硬編碼機器允許清單。

Spawn 會固定自動等效權限:Claude/Grok --permission-mode auto。Codex 所有模式 --approve-for-me(不要同時傳遞 --sandbox:0.147 互斥)。agy Implement --dangerously-skip-permissions(agy 沒有分類器 Auto;這是 YOLO)。agy Review 省略它。Claude Review 仍然在 --tools 中省略 Edit/Write(Bash 保留用於暫存檔案)。不要傳遞 --ask-for-approval 給 codex exec(僅 TUI;exec 拒絕它)。應用程式編輯的限制在於簡報(Do not edit application files.),而不是唯讀沙箱。

共享協定

  1. 關卡。 說出你無法從此倉庫/此上下文回答的一件事。如果你無法說出它,就不要 spawn——除非此話語已經指定了一個 harness(話語仍然優先;writer=self 不會抑制「讓 Claude 重寫 README」)。命名、風格、格式化和「已經嘗試過」且已經是答案的內容不值得一次執行。持續的 writer/research(重寫 README、競爭性查詢)不是「命名」:當解析後的路由是 CLI 時才 spawn。
  2. 在暫存執行目錄下寫入 brief.md(絕不在倉庫內部)。
  3. 在背景中 Spawn scripts/spawn.sh(幾分鐘;前景逾時會消耗花費)。不要複製或編輯腳本。
  4. 等待直到進程退出。然後讀取 $RUN/last.md 和 $RUN/capture-status.txt。進程仍在運行 + 尚無 VERDICT → 尚未完成。spawn.sh 已經偏好 $RUN/report.md 而非最終標準輸出,並標準化了粗體/VERDICT: 行。如果狀態是 usage-limit 或 no-verdict,將該 harness 標記為 UNVERIFIED / 阻塞——不要發明裁決,也不要重新導向後端(黏性路由)。例外情況:no-verdict 是相同系列/「哪個 harness」的詢問是一個巢狀洩漏——重寫身份圍欄並重新啟動一次(相同的後端)。不要因為序言而重新啟動一個已完成的任務。
  5. 綜合——絕不只是貼上。

撰寫簡報

任務描述,而非數據傾印。不要貼上 diff 或檔案內容——指定路徑和有限範圍的調查。例外情況:從工作目錄無法訪問的檔案(暫存執行目錄下的截圖)。

  • 偏好指定的檔案/符號,而非「探索倉庫」。
  • Diff:確切範圍,git diff <A>..<B> -- <paths…>。
  • 視覺化/確認:禁止 git log、全樹 git diff、狀態傾印。spawn.sh --image 僅限 Codex。Claude:將截圖複製到 $RUN(已經獲得了 --add-dir "$RUN")。Grok:將截圖複製到 --project。 在簡報中命名這些檔案。
  • 將父代理證據放在已經嘗試過的內容下。偏好「驗證這個」而非「重新發現」。如果你已經執行了 gh/curl 而 Codex Review 可能沒有網路,則在此處輸出結果並禁止重新執行這些命令。
  • 產品覆蓋: 如果使用者鎖定了一個產品決策,請說明。

六個部分,按順序:

  1. 子代理身份圍欄 —— 首先貼上,逐字,來自 references/roles.md。絕對不要在簡報中寫入 scripts/spawn.sh 或 --mode visual(L2 會將其視為重新編排的命令)。
  2. 目標 —— 一句話,命名裁決/交付物(角色卡片目標提示)。
  3. 從何處查看 —— 路徑、限定的命令、符號;如果是實施,則編輯允許清單。
  4. 已經嘗試過的內容
  5. 什麼會改變我的想法 —— 確認證據(審查)或接受門檻(實施)。
  6. 回傳格式 —— 從 references/roles.md 貼上:該角色的回傳合約(包括在清理前寫入 report.md)、超能力對應表(確切名稱)、必須/不得,以及對於 implement/implement-ui 的完整 TDD 策略表格(絕不能僅是「參閱 roles.md」)。角色卡片優先於任何舊的佔位措辭。指定 report.md 的執行目錄路徑。

…

[為翻譯而截斷]

相關技能