Theme / v0.5.0

CatDesk

把 ChatGPT Web 變成本地 Coding Agent

工作流組合

長任務模式:start → poll → cancel 背景工作流

瞭解 CatDesk 為何把長時間指令與 MCP HTTP 請求生命週期解耦,並掌握 run_command、start_command、poll_command、cancel_command 四個工具的正確分工。

長任務模式:start → poll → cancel 背景工作流

建置 (builds)、編譯、相依套件安裝、長時間測試套件、開發伺服器 (dev servers)——這些都是典型的長任務。CatDesk 刻意將長時間執行的指令與 MCP HTTP 請求的生命週期解耦 (decoupled):指令在背景跑,不會因為單次 MCP 請求結束而被中斷。你透過「啟動 → 輪詢 → 必要時取消」三段式流程掌控它們。


步驟 1:判斷任務類型,選對工具

CatDesk 提供兩條執行 shell 指令的路徑:

工具 類型 適用場景
run_command Shell 執行短指令並等待完成,最長 120 秒逾時 (timeout)
start_command Job 啟動長任務,立即回傳 job ID

判斷準則很簡單:

  • 短指令lscatgit status、單檔搜尋 → run_command
  • 長任務:建置、編譯、相依套件安裝、長時間測試套件、開發伺服器 → start_command

步驟 2:用 start_command 啟動背景工作

ChatGPT 呼叫 start_command 後會立即拿到一個 job ID,指令在背景執行。這代表你不用傻等建置跑完才繼續對話。

步驟 3:用 poll_command 進入輪詢迴圈

拿到 job ID 後,用 poll_command 讀取增量輸出 (incremental output) 與狀態。輪詢回應是有界 (bounded) 的,預設為 10 秒長輪詢 (long polling)。若回應中 hasMoreOutputtrue,就帶著回傳的 nextCursor 繼續輪詢,把緩衝區裡剩餘的輸出排空 (drain)。

⚠️ 重點:即使指令已達終止狀態 (terminal state),只要 hasMoreOutput 還是 true,就必須繼續用 nextCursor 輪詢,否則會漏掉最後一段輸出。

步驟 4:判讀終止狀態

輪詢回應會攜帶任務狀態。當指令達到終止狀態(例如建置完成、測試跑完),且 hasMoreOutput 已排空為 false,本次背景工作即告結束,把結果回報給 ChatGPT 繼續下一步。

步驟 5:必要時用 cancel_command 中止

任務失控(無限迴圈、卡住的 dev server、想換方向)時,用 cancel_command 停止背景指令。它會一併終止子程序樹 (child process tree),不會留下孤兒程序 (orphan processes) 佔用 port 或資源。

步驟 6:在 ChatGPT Web 實際操作

以下是在 ChatGPT Web 中真實會用到的提示詞序列 (prompt sequences):

啟動 dev server 並盯著輸出直到就緒:

用 start_command 啟動 npm run dev,然後用 poll_command 看輸出直到 server ready。

跑長時間測試套件:

用 start_command 在背景執行 pnpm run build,完成後回報是否有錯誤。

中止失控任務:

這個 server 一直重啟失敗,用 cancel_command 把它停掉。

一圖看懂整條流程

start_command ──▶ job ID


              poll_command (10s long polling)

        hasMoreOutput == true ──▶ 用 nextCursor 繼續輪詢

        hasMoreOutput == false


        terminal state?── yes ──▶ 結束
                     │ no(任務失控)

              cancel_command(殺掉子程序樹)