我的 iTerm 不知道我在跑 Claude Code,Warp 知道
寫於 2026 年 8 月 24 日,9 月才上線(部落格的發佈額度在 8 月中用完了,稿子積壓了三週)。文中對 Warp 的描述以 8 月 24 日的官方文件與定價頁為準,你讀到時可能已經改版。
我的 iTerm 不知道我在跑 Claude Code。
它知道有個子程序開著、正在往畫面丟字元,其中一部分是 ANSI 顏色碼。它畫得很快也很漂亮,但它畫的是一條文字流。哪一段是 agent 在想事情、哪一段是它跑出來的測試結果、哪一條指令是我自己手打的,對 iTerm 來說沒有差別,都是字。所以 Warp 我只關心一件事:那個資訊落差。終端機本身知道有 agent 在,跟完全不知道,差在哪一步?差得夠不夠讓你把用了好幾年的終端機換掉?它的 agent 強不強我不打算比,市面上每一家都在同一批模型上打,強弱是這個月的事。
我沒有裝過 Warp,這篇全部是 8 月 24 日官方文件上寫的行為,不是我跑出來的結果。
差別不在功能表,在誰看得到你剛剛打的那行
Warp 自己在文件的機器可讀索引裡把自己叫 the agentic development environment。它列自家差異化的第一條是這樣寫的:
It works in a real terminal - The agent runs shell commands, reads live output, and drives interactive programs like REPLs, database shells, and full-screen apps.
聽起來像行銷詞。往下翻到 agent context 那一章,這句話才有具體的兌現方式。官方寫,在 agent 對話裡你自己跑的任何 shell 指令,輸出會 “automatically included as context for your next query”。他們給的例子是跑完 npm test,然後直接問 “why did these tests fail?”,不用貼。
這個動作我每天都在做。在 iTerm 裡,Claude Code 看得到的是它自己用 Bash tool 跑出來的東西;我在隔壁 pane 打的那條 curl,它一無所知。我要它知道,只有兩條路:複製貼上,或者叫它自己再跑一次。第二條路聽起來省事,實際上要看那條指令有沒有副作用、要跑多久。
它小到不會被寫進任何功能比較表,可是那個落差平常就長這樣。
官方還把 block 分成兩種歸屬:你直接在終端機裡跑的是 Terminal blocks,官方寫它 “can be attached as context to multiple conversations”;在對話裡跑的(不管是你跑的還是 agent 跑的)叫 Agent conversation blocks,”These only appear within that specific conversation and don’t clutter your terminal block list.”
要做出這個區分,終端機得先知道哪些指令是 agent 送出去的。這句話講出來像廢話,但它是後面每一項的地基。
它知道你上一條指令炸了
Terminal mode 的提示列有一條功能,官方原文:
Error block attachment - When the last command failed, shows a hint to attach the output as agent context (e.g.,
⌘↑ attach 'npm install...' output as agent context).
上一條指令失敗,UI 主動冒出「把這段輸出交給 agent」的捷徑。這行提示要成立,終端機得同時知道兩件事:這條指令的結果是失敗,以及旁邊有一個 agent 可以接手。
底層靠的是 block 這個單位。官方對 block 的定義是把指令跟它的輸出綁成一塊,而且 “Blocks that quit with a non-zero exit code have a red background and red sidebar.”。非零 exit code 的整塊變紅底加紅側邊。歷史輸出也不必回頭撈 scrollback,CMD-UP 掛上一個 block,按住 CMD 用上下鍵挑別的,CMD-DOWN 移除。官方說最常見的用法就是把錯誤掛上去,然後打 “fix it”。
這裡我要停一下,把一條線畫清楚。exit code 在官方文件裡出現在兩個地方:block 的顏色,跟 command history 的 metadata 敘述。這兩個都是終端機的功能,官方從來沒有寫過 agent 會拿到 exit code 這個數值。 從「block 帶著 exit code」順推到「agent 讀得到 exit code」看起來很自然,我不推。這種順手補齊的句子,最後都會變成別人引用時的假事實。
把 agent 叫進一個已經在跑的 psql
Full Terminal Use 這一頁是我讀完之後印象最深的。官方寫:
The agent can see the live terminal buffer (terminal state), write to the PTY to run commands, respond to prompts, and continue working inside the running process while you stay in control.
適用對象官方自己舉了例:psql、vim、python、gdb、top、dev server。
比這個更有意思的是進場方式。文件寫,如果你已經自己開了 psql 或 npm run dev,可以用終端機頁腳的 Use Agent 按鈕或 Cmd+I 把 agent 叫進那個正在跑的 session,Warp 會把 agent 接到目前這個 PTY 上。控制權還可以來回交接,你接手打字的時候 shell 不會關,交還給它的時候官方寫 “The agent resumes where you left off, with full access to the current terminal state.”
一個 CLI agent 結構上做不到這件事。它自己就是那個 shell 裡的一個程式,你手上這個已經在跑的 psql,不在它的世界裡。
反過來,它也在看著你的 Claude Code
Warp 官方文件有一頁叫 Claude Code in Warp。他們沒有把 Claude Code 當競品擋在門外:
Warp auto-detects Claude Code when you run it, giving you access to rich input controls, code review, agent notifications, and other integrated features.
官方列的支援項目裡,有幾個很具體:通知會在你需要回應的時候跳出來,而且通知的 UI 會把目前的 git branch 跟 agent 狀態一起顯示;Warp 的垂直分頁列上有狀態指示器,可以直接盯著幾個 Claude Code session;code review 面板可以把 inline 註解直接送給 agent;還有一個 Remote Control,官方寫 “Publish your Claude Code session so you can monitor and steer it from another device.”
這一整排東西是終端機在觀察 agent,agent 並沒有因此拿到更多資訊。你買到的是一副看得見 agent 在幹什麼的儀表板,不是一個變聰明的 agent。
自動偵測是真的,但那個通知功能要在 Claude Code 那一側裝 plugin 才成立,指令是 /plugin marketplace add warpdotdev/claude-code-warp 加上 /plugin install warp@claude-code-warp,裝完要重啟或 /reload-plugins。那個 repo 我查了元資料:未封存、MIT 授權、最後一次 push 是 8 月 17 日,離我寫這篇剛好七天。是現行維護中的官方整合,不是掛在那裡生灰的東西。
搬過去的摩擦比我想的小
換工具最貴的從來不是學新介面,是你那份規則檔跟一堆 MCP 設定要重寫一遍。
Warp 的 Project Rules 存成 AGENTS.md(或者 WARP.md,向後相容用),官方還特地放了一條 Caution:檔名必須全大寫才認得,agents.md 跟 Agents.md 都不行。生效優先序是當前子目錄的 project rules、root 的 project rules、Global Rules,由近到遠。哪幾條 rule 在這一輪真的生效了,官方說會顯示在對話的 References 區。AGENTS.md 這個檔名現在是好幾家共用的,我 8 月初寫過同一個 repo 裡兩個 agent 對它的態度不一樣(同一個 repo 兩個 agent:Codex 讀 AGENTS.md,Claude Code 不讀)。
讓我停下來的是下一句。用 /init 可以把既有的 Rules 檔連結到 AGENTS.md,官方列的完整支援清單是 CLAUDE.md、.cursorrules、AGENT.md、GEMINI.md、.clinerules、.windsurfrules、.github/copilot-instructions.md。我那份一條一條累積出來的 CLAUDE.md 不必重寫。
MCP 那邊同一套思路。官方文件裡有一張供應商對照表,直接寫明 Claude Code 的 global config 是 ~/.claude.json、專案層是 root 的 .mcp.json,Warp 會去 pick up 第三方 agent 供應商的設定,官方的說法是 “The same server definition follows you across tools and repos.”。要注意兩個開關:第三方的 global server 要先去 Settings 開 “Auto-spawn servers from third-party agents”,而 “Project-scoped servers from any provider require explicit approval.”
一個工具敢直接讀競品的設定檔,代表它算過帳了。擋住你搬家的不是功能,是那幾份檔案。
權限這層你得自己讀完
Warp 把 agent 的行為收在 Agent Profiles 裡,位置是 Settings 底下的 Agents、Profiles。官方給的 profile 命名範例是 “Safe & cautious” 跟 “YOLO mode”,很好懂。權限類型官方列了六種:套用 code diff、讀檔、建計畫、執行指令、跟正在跑的指令互動、問你釐清問題。每一種可以獨立轉四個檔位,官方的說明分別是 Agent Decides(有信心就自己做,不確定就問)、Always ask(做任何事之前都要你核准)、Always allow(永遠不問)、Never(永遠不做)。
比檔位更需要注意的是清單。allowlist 跟 denylist 兩邊都是正規表示式,官方給的 denylist 預設範例是 wget(\s.*)?、curl(\s.*)?、rm(\s.*)?、eval(\s.*)?;allowlist 官方寫 “It’s empty by default”,而且加進去的東西 “will always auto-execute, even if they are not read-only operations.”。你自己寫的 regex 有多寬,你放出去的權限就有多寬。
兩份清單撞在一起的時候,官方寫得很清楚:
The denylist takes precedence over both the allowlist and
Agent decides: if a command matches the denylist, the Agent asks for permission even when that action type is set to Always allow.
文件上還特地放了一個 Caution,解釋為什麼有人設了 Always allow 還一直被問。這是我看過的設計裡比較誠實的一種:優先序寫在同一頁上。
然後是 Run until completion(CMD + SHIFT + I),官方自稱 “the purest form of “YOLO” mode”,並且在同一段告訴你,這個模式預設也會跑掉那些符合你 denylist 的指令。要讓 denylist 在這個模式下繼續生效,得去關掉 Input 設定裡那個 “Allow auto-approve to bypass command denylist”。唯一的例外是團隊透過 Admin Panel 強制的 denylist,官方寫它 “always require approval and are never bypassed”。
一個人開發的話,Admin Panel 就是你自己,沒有人幫你守。
什麼情況下它反而是壞選擇
第一種壞情況是你已經不看終端機了。如果你的用法是丟一個任務、切去做別的事、二十分鐘後回來看結論,那「指令失敗時主動冒出捷徑」這種提示對你等於不存在。
第二種是你大部分時間人不在那台機器前面。官方講得很清楚,Warp Agent CLI 跑 warp 指令就能在任何終端機模擬器、SSH 過去的連線、甚至沒裝 Warp app 的機器上開對話,而且他們的說法是三種到達方式的差別在你人在哪裡,不在 agent 能做什麼。我上面引的那些主動提示,位置全部在 app 的 UI 上:Terminal mode 的提示列、終端機頁腳的 Use Agent 按鈕、Cmd+I。人不在 app 前面的時候,你拿到的是那個 agent,不是那個落差。
如果你有在管團隊就會踩到。Warp 的 rules 是檔案,AGENTS.md 進 repo、能 code review、能跟著 PR 走;可是 profile、allowlist、autonomy 那幾層在 Settings 裡。如果你的紀律是「權限規則本身要能被 review、能跟著版本走」,那一層搬不過去。
Run until completion 預設繞過你自己寫的 denylist,這個預設我不喜歡。把 rm(\s.*)? 寫進 denylist 的人,要的就是它在最放鬆的模式下也還在,結果它剛好在那個模式下被預設放掉,還得再進設定關一個開關。功能沒錯,預設值選錯了邊。
文件之外我不知道的
定價、AI credit 額度、各方案差多少,我沒查證,所以這篇從頭到尾沒有出現一個價格。另外 Agent Memory、Codebase Context、Computer Use、Skills for agents 這幾頁我只確認了頁面存在跟標題,內文沒讀,所以這篇不談。
我會怎麼選
判準只有一個,而且不在功能表上:你一天裡自己手打的指令,跟 agent 打的指令,比例是多少。
如果你是那種先自己摸一輪、卡住了才叫 agent 接手的人,換過去是划算的。 那個落差每天替你省掉一整串複製貼上,psql 開著就能把 agent 叫進來,而且 CLAUDE.md 跟 MCP 設定都不用重寫。代價是要重新讀一遍它的權限模型,尤其是那個 YOLO 模式的預設值。
如果你的用法是丟任務走開,不要換。
來源
- Warp Agent 總覽(定位原文、三種使用位置)
- Blocks as Context(自動進 context、兩種 block 歸屬、快捷鍵)
- Terminal and Agent modes(Error block attachment)
- Block basics(非零 exit code 變紅)
- Full Terminal Use(live terminal buffer、PTY、Takeover)
- Claude Code in Warp(自動偵測、支援功能、plugin 安裝)
- Rules for agents(
AGENTS.md、全大寫、優先序、/init連結外部 Rules) - Model Context Protocol (MCP)(供應商設定檔對照表、auto-spawn)
- Profiles & Permissions(六種權限、四種自主層級、allowlist/denylist、Run until completion)
- warpdotdev/claude-code-warp(官方 plugin 原始碼)










