Theme / v2.1.15

Chat On Steroids

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

基礎觀念

worker 團隊、Goal/Loop 與續航

CoS 最像「agent 平台」的部分:agents 的 spawn/message/status/finish、會睡覺的 worker、Goal 與 Loop 的自動續跑、Compact & Resume 的跨對話接力,以及絕不能踩的 provider 紅線。

worker 團隊、Goal/Loop 與續航

免責聲明:本文整理自官方 v2.1.15 的 setup.md 與 tool-surface.md。這些續航功能不增加任何 provider 配額,也不能用來繞過限制——詳見文末紀律。

一切都從「本地 session 歷史」開始

在 CoS 裡,session 歷史屬於本地工作階段,不屬於某個 ChatGPT 分頁。companion extension 會記錄訊息與真實的本地工具結果,所以:

  • 你可以關掉分頁、隔天回來,app 與模型仍能讀到先前的工作脈絡。
  • 這是 Compact & Resume、worker 重用與 agent 身分機制的共同基礎。
  • 記錄預設開啟、保留 30 天,可以關閉;它是本地 durable 歷史,與 OS 安全儲存是兩回事。

Compact & Resume:換對話,不換任務

長任務撞到 context 天花板時,CoS 的做法不是叫你重講一遍:

  1. Compact & Resume 先要求一次 handoff(交接)。
  2. 開一個全新的 provider 對話,再把同一個 session 重新綁上去。
  3. 任務與 worker 歷史跟著搬家。

幾個細節:

  • 自動 compaction 使用本地估算與「合格的在飛工作」決定時機;Pro 模型永不自動 compact(避免在昂貴模型上做未預期的交接)。
  • 模型看不到 save_handoff/resume_session 這類工具——Compact & Resume 是 app/browser 層的編排,不是模型可呼叫的能力。
  • 遇到 COMPACTION_IN_PROGRESS 時:讓來源對話把 handoff 做完,工作會在替換後的對話繼續。

worker 團隊:agents 的四個動作

agents 工具(multi-agent 模式開啟時可用)恰好四個動作:

動作 做什麼
spawn 從一份共享 context 加上每位 worker 的任務,建立 worker 對話。每次 run 只用一次;需要再用就重用既有 worker。
message 送出一則訊息,或 all-or-nothing 的批次。對睡著的 worker 傳訊息就是喚醒它——在它自己的對話裡。
status 回報 run 與 workers 狀態:誰在睡、還有幾個 worker 名額。
finish worker 向 prime 交棒:報告結果,然後進入睡眠。

spawn 可以指定模型與 reasoning effort

  • 模型:每位 worker 可帶 optional model slug(fresh-chat URL 的 ?model=<slug>)。用途很實際——prime 在受限的貴模型上工作時,可以派 worker 去便宜的模型;不帶=帳號預設,slug 認不得也開預設。模型在該對話的生命中固定,包含 sleep/wake 重用時。
  • reasoning effort:pro、none、minimal、low、medium、high、xhigh、max、ultra。獨立於 model 轉發——effort 永遠不會選模型或改模型。不帶=app 設定預設,或帳號預設。

worker 會「睡覺」,不是「下班」

  • 睡著的 worker 保留它的 ChatGPT 對話,可以喚醒重用;睡覺時不佔名額——名額只算真正在工作中的 worker。
  • 喚醒需要一個空位:CoS 會重開/聚焦那位 worker 自己的聊天,把 prime 的訊息當成一般使用者訊息打進去。
  • 名額:預設同時 2 個,可調到 8 個。
  • 永久 finished 只發生在該 worker 的對話撞到 400,000 token 上限(app 自己的 session 計數)時。越界不會打斷在飛的工作,只是讓「下一次停止」變成最後一次。
  • worker 永不跑 Compact & Resume(自動或手動皆然):對話就是它的 durable agent 身分;400K 的邊界只改變之後能不能再喚醒,不會另開替代對話。

身分是綁在對話上,不是發憑證

沒有模型可自行提供的 agent credential,也沒有 agent_key。worker/prime 的身分,是結合 extension 的證據綁在 ChatGPT conversation 上;證明不了就 fail closed——這就是 CALLER_IDENTITY_REQUIRED 與 WORKER_IDENTITY_LOST 這兩個錯誤碼的來源。

Goal 與 Loop:讓任務自己往下走

  • Goal:可以自行判定「任務完成了」,選擇什麼都不送直接收尾。
  • Loop:在 brief 範圍內持續推進,直到你停用。
  • 兩者都能使用 ChatGPT 的 helper 模式,或接上可選的 API backend;v2.0.7 起也可以自帶 OpenAI-compatible Goal provider 憑證。

Astra finish boundary:把尾巴收乾淨

開啟 Session finish 後,Astra 的 finish 邊界可以在同一個工作回合內透過工具接收:排隊中的指令、計畫檢查點與自動 follow-up。你也可以直接從 composer 結束回合。

重點:這只是把「收尾階段的指令」擠進當前回合,不會移除 provider 的用量或 context 限制。

使用紀律(請當成硬規則)

  • 續航功能不授予額外配額或存取權。不要用新對話、worker、Goal/Loop 或 compaction 去規避 provider 的限制。
  • 監督自動化工作;一旦工作流收到限制或政策警告,停用它的 Goal/Loop 自動化,照 provider 的申訴/重置流程處理。
  • 不要換帳號、換對話、換模型、換 connector 或換 tunnel 來繞過限制。本地的重試或重新連線,不構成「限制已解除」的證據。
  • 帳號層級的處置問題屬於 provider 的支援/申訴管道,不要拿公開 issue 處理。

下一步