做 coding agent 時,最順手的寫法常常是:聊天 UI 載入 → while 或輪詢開始跑 → 工具呼叫寫在同一個前端 bundle。Demo 漂亮。然後你一切分頁、一重整、一讓 UI 晚點掛上——迴圈就跟畫面一起蒸發。
山姆鍋愈來愈把一句話當預設:
對話 UI 負責說話與展示;任務迴圈住在別處。
目錄
展開目錄
為什麼要拆
- UI 可以晚掛、可以不掛(headless)、可以換皮。
- 迴圈需要自己的生命週期:啟動、暫停、恢復、收尾。
- 副作用出口(打 API、改檔)最好跟「渲染按鈕」脫鉤,才好測、好重跑。
這不是什麼新哲學,比較像把「畫面」跟「服務」分開——只是 agent 時代大家又一次踩進同一條河。
案例:Controller
在遊樂場的 SAM 模型裡,常駐邏輯偏向 controller.js(Controller);畫布 UI 經 functions.js 跟後端說話,而不是自己私藏無限迴圈當唯一執行面。總管要能在 UI 還沒就緒時仍被驅動——這對「對口」這種角色很實際。
你在別的宿主上可以用 worker、用伺服器行程、用 extension background。名字不重要,別跟 React/Svelte 元件壽命綁死比較重要。
結語
若你的 agent 關掉視窗就不會收尾,或開著視窗才敢跑長任務,值得重新畫一張責任圖。山姆鍋自己也是被「重整等於暗殺 agent」整過才改口。你有更粗暴但好用的拆法,下面留言區歡迎開講。