Theme / v2.1.15

Chat On Steroids

把 ChatGPT 對話變成會寫程式、會派工的本地開發環境

實戰範例

用 worker 團隊平行重構

把獨立工作交給 worker:spawn 一次建立、message 喚醒重用、status 看誰在睡、finish 交回結果。認識同時名額、400,000 token 天花板與模型/reasoning 參數。

用 worker 團隊平行重構

一個對話只能做一件事。當你手上有一批彼此獨立的整理工作,CoS 的 agents 工具可以開出 worker 對話,讓它們各自帶著自己的 context 幹活,再由 prime(主對話)收攏結果。


情境

monorepo receipt-workspace 累積了三件獨立工作:

  • A:packages/core 把散落各檔的 Receipt 型別集中到 types.ts。
  • B:packages/api 把所有 console.log 換成專案的 logger 介面。
  • C:packages/web 替 formatTotal() 補測試。

A 與 B 可以立刻平行;C 需要 A 完成後的新型別。

目標

讓 prime 負責規劃與驗收,worker 負責執行:一次 spawn 出 A、B,A 完成後在原對話喚醒它接著做 C,全程用 update_plan 讓你看得到進度。

步驟一:先留下乾淨的 checkpoint

git add -A && git commit -m "checkpoint before worker run"

平行修改最怕的是事後分不清誰改壞了什麼;commit 是最便宜的保險。

步驟二:給 prime 的 prompt

I have three cleanup jobs in this monorepo:
A. packages/core: consolidate the Receipt types into types.ts.
B. packages/api: replace direct console.log calls with the logger interface.
C. packages/web: add tests for formatTotal().

C depends on A, so start with A and B.

Use the agents tool: spawn workers for A and B, and give each worker the
exact files to touch and the acceptance command to run. Keep reports
short: what changed, which command proved it, and anything unfinished.

When A is done, reuse that worker for C using the new types.
Track everything with update_plan, and use status to check who is asleep
and how many slots are free. Don't push or commit anything.

預期的工具呼叫序列

1. update_plan(plan: ["A: core types", "B: api logger", "C: web tests"])

2. agents(action: "spawn",
          tasks: [
            { id: "A", task: "packages/core:集中 Receipt 型別;驗收:pnpm -F core test" },
            { id: "B", task: "packages/api:console.log 換 logger;驗收:pnpm -F api test" }
          ],
          model: "<較便宜的 model slug>",
          reasoning_effort: "medium")

3. agents(action: "status")
   → run 與各 worker 狀態、誰在睡、還剩幾個名額

4. agents(action: "message",
          to: "A",
          message: "Report status and paste the test output.")
   → 喚醒睡著的 worker:需要名額,會重新開啟它自己的對話,
     並把這段訊息當一般使用者訊息打進去

5. (worker 自己的對話)
   agents(action: "finish", result: "A 完成:…;pnpm -F core test 全綠")
   → 回報並進入睡眠

6. agents(action: "message",
          to: "A",
          message: "Now do C: packages/web,替 formatTotal() 補測試,使用新的 Receipt 型別。")
   → 同一個 worker 帶著原本的 context 繼續

7. agents(action: "status")
   → 確認 B 已睡、名額釋放

agents 的參數欄位以連接器當下暴露的 schema 為準;model/reasoning_effort 是文件中明列的可選項。

認識 agents 的四個動作

agents 恰有四個動作,沒有第五個:

動作 行為
spawn 由一份共享 context 加上每個 worker 的任務建立 worker 對話。一次執行只用一次:之後需要 worker 就重用已經有的。
message 送出一則訊息,或一個全有全無的批次。喚醒睡著的 worker 就是送訊息——在原對話裡當成一般使用者訊息。
status 回報 run 與 worker,包括誰在睡、還有多少名額。
finish worker 對 prime 的交接:回報結果並讓自己睡眠。

幾個容易搞錯的細節:

  • Worker 是睡著,不是結束。 睡著時名額釋放,所以「同時上限」只計算真正在工作的人。預設每個 family 同時 2 個,可設定到 8 個。
  • 喚醒需要一個空名額,會重新開啟或聚焦該 worker 自己的對話。
  • spawn 可帶可選的 model slug:worker 的新對話以 ?model=<slug> 開啟,適合讓 prime 留在貴的模型、worker 跑便宜的。slug 被省略、或 ChatGPT 不認識,就用帳號預設。模型在該對話生命期內固定,包括睡醒重用之後。
  • 也可帶可選的 reasoning_effort:pro、none、minimal、low、medium、high、xhigh、max、ultra,與 model 獨立轉送。層級本身不會挑選或改變模型;兩者都省略時繼承 App 設定或帳號預設。
  • 400,000 token 天花板:跨過界線不會打斷進行中的工作,只會讓「下一次停止」成為最後一次。之後該 worker 不能再被喚醒。
  • Worker 永遠不跑 Compact & Resume(自動或手動都不行):它的對話就是它的耐久代理身分。
  • 沒有模型提供的代理憑證或 agent_key;worker/prime 身分綁在 ChatGPT 對話上、由擴充套件證據證明,無法證明時控制呼叫會 fail closed,例如回 CALLER_IDENTITY_REQUIRED 或 WORKER_IDENTITY_LOST。需要時,直接在已配對的瀏覽器裡使用那個對話。

驗收方式

  • 三個 package 的變更都在,且每個 worker 的 finish 回報都能對應到真實 diff。
  • Prime 用命令自己重跑一次驗收(例如 pnpm -r test),而不是只信 worker 的敘述。
  • agents(action: "status") 最終顯示沒有 worker 還在工作中。

注意事項

  • 只平行彼此獨立的工作;兩個 worker 改同一批檔案遲早會撞。
  • Worker 與 prime 共用同一個帳號的模型可用性與用量限制。Worker、Goal/Loop 只是組織工作,不給額度,也不得用來規避任何 provider 限制。
  • 平行產出越漂亮,越要記得:合併前自己看過 diff。詳見worker 團隊與 Goal/Loop、worker 團隊、Goal/Loop 與續航。