TL;DR:這一兩年 AI 寫 code 的重心,悄悄從嵌在編輯器裡的補全,搬回了終端機(Claude Code、Codex CLI 那一類)。我覺得這不是復古情懷。編輯器整套設計是繞著「鍵盤前的那個人」轉的;終端機是繞著「你不會盯著看的 process」轉的。當 AI 從「幫我打下一行」變成「替我把這件事做完」,它就搬回了那個本來就為自動 process 而生的地方——pipe、背景執行、log、exit code,這些終端機早就有了。
前陣子我才意識到,自己已經很少在編輯器裡按 Tab 接受補全了。大部分時間是開著一個終端機,丟一句話給 agent,然後去做別的事,回頭看它寫了什麼、跑了沒。
一開始我沒多想,就當是換了個順手的工具。但這陣子越用越覺得,搬回終端機這件事好像不只是工具偏好,底下有個更基本的形狀在那。
編輯器是為「打字的人」設計的
你想想 IDE 的設計中心是什麼。是游標。
補全跳在游標旁邊,diff 標在 gutter 上,即時 accept 或 reject。整套體驗都繞著「一個人正在編輯、即時收到建議」這件事轉。對「AI 幫我打字」這個任務,這個設計剛剛好——互動的單位是一個小建議,小到掃一眼就能隨手接受,視線幾乎不用離開那一行。
2021、2022 年那一代的 Copilot 就是長這樣,它本質上是一個很聰明的自動補全。嵌在編輯器裡是對的,因為它做的事,就是編輯器最擅長的事。
但 agent 是「任務」尺寸的東西
叫 agent「幫付款模組加上合理的錯誤處理」,它得先讀十幾個相關檔案、摸清架構、提一批改動、跑一下測試、看結果不對再改。這一跑就是好幾分鐘。
互動的單位變了。不再是「一個建議」,是「一個任務」。而任務想要的東西,跟建議想要的幾乎沒有交集:它想被丟到背景去跑、想留下一份 log 事後好翻、想一次開好幾個平行做、跑完給一個乾淨的結果,最好還有個明確的成功或失敗。
這些需求列出來,會發現有點眼熟。
因為終端機做這件事做了五十年
pipe、重導向、exit code、背景執行、&、nohup、tmux——終端機天生就是拿來跑「你不會一直盯著的 process」的地方。
agent 剛好就是這種 process。所以 Claude Code、Codex CLI、Aider 會長成終端機程式、而不是 IDE 外掛,我覺得是回到了本來就為這種工作而生的地方,跟復古沒什麼關係。
真正的槓桿是 composability。在終端機裡,一個 coding agent 就只是一個 process:可以 git worktree 開三份工作目錄、平行跑三個 agent 各做一塊;可以把它的輸出 pipe 給別的工具;可以包進 shell script、丟進 CI、半夜自己跑;全程都有 log 可以回頭看。在編輯器裡,agent 是關在那個 IDE 事件迴圈裡的客人,能做的事被框死在「外掛被允許的範圍」內。
(這是 dynamic workflows 那篇 的延伸:當 orchestration 本身變成一段可以被 script、被存起來重跑的 code,需要的其實是一個能跑 process 的地方。)
IDE 還是有它贏的地方
這篇要是寫成「終端機完勝」就不是事實。
IDE 還是有它真的贏的地方。最明顯的是看 diff——並排、點一下跳到定義,比在 pager 裡捲一份 unified diff 舒服太多。導航那一整套(LSP、跳定義、找 reference),review agent 改了什麼的時候天天在用。至於新手怎麼上手、怎麼隨手接受一個小修改,那本來就是編輯器的主場,沒什麼好爭的。
所以實際上多數人不是二選一,是兩個一起開:終端機那邊派任務,IDE 這邊讀程式碼、看 agent 改了什麼。
看工具自己往哪邊長
連 Cursor 這種 IDE 出身、做得很好的工具,後來也加了 agent mode、background agent。它的 background agent 甚至是開一台雲端機器自己跑、在一條分支上做完、丟一個 PR 回來——要的話,這比本機的 process 還更「不用盯著」,而且正是 IDE 在伸手去抓這篇講的那個形狀。另一邊,Terminal-Bench 那個榜的前段,清一色是終端機型的 agent(自己寫的 harness 跟 Codex CLI、Claude Code 那類 CLI 工具都在上面),IDE 出身的工具一個都沒擠進去。
(老實說這個榜也不能說死——它量到的比較是底下那顆模型,不全是 harness 在不在終端機;CLI 工具排前面,一部分是因為它們配的是前沿模型。榜上能看出來的是「終端機型的工具站得上去」,不等於「因為在終端機所以才贏」。)
當對立的兩邊開始長出對方的形狀,底下通常是有個真的東西在拉。我猜那個東西就是上面講的:寫 code 這件事,有一塊從「打字」變成了「派工作」。
延伸閱讀:
- Claude Code 多了個 dynamic workflows,我打開那段 JS 看了一下:當 orchestration 本身變成可以被 script 的 code
- 怎麼讓 AI agent 照流程走:閘門只記帳,不攔人:terminal 裡跑 agent 之後,流程怎麼掛上去
- AI 說「完成了」,怎麼確認它真的做完?:派工作出去之後,怎麼收貨
English version:Why coding agents are moving back to the terminal
