你是不是也遇過這種情況:開了某個 AI 程式助手,它硬要你走「先規劃 → 再開子代理 → 再審查」的流程,結果改一個小 bug,也得等它跑完一整串儀式?咖啡都喝完了,bug 還在讀取中。

市面上很多 Coding Agent 越來越像「整套 IDE 替代品」,而不是「幫你省時間的夥伴」。如果你想要的是:極簡、快、能嵌進自己習慣的終端工作流,那值得認識 Pi Coding Agentpi.dev)。

這篇會帶你從「它是什麼」一路走到「怎麼安裝、怎麼設定、怎麼跟 Cursor 分工」。讀完後,你應該能判斷 Pi 是否適合自己的工作流,也知道該從哪一種模式開始試。

快速參考

項目說明
是什麼跑在終端機的 AI 程式助手(作者:libGDX 創始人 Mario Zechner)
安裝npm install -g @earendil-works/pi(詳見下方安裝章節)
核心特色僅 4 個內建工具、可擴充、不綁定特定 IDE 流程
適合誰已有終端工作流、想要輕量 Agent 的開發者
不適合誰需要全功能 IDE 整合、重度 GUI 操作的使用者
延伸閱讀Pi vs Claude Code · Oh My Pi

什麼是 Pi Coding Agent?

Pi Coding Agent 是跑在終端機(Terminal)裡的 AI 程式開發助手,作者是 Mario Zechner(GitHub 帳號 badlogic,Java 遊戲框架 libGDX 的創始者),套件目前發佈在 @earendil-works 之下。它的設計哲學可以濃縮成一句話:

世界上有很多 Agent 框架,但這一個是你的——工具來適應你,不是你來適應工具。

先講一個對照組。Devin 是 Cognition 推出的自主 AI 軟體工程師(devin.ai):接到任務後會自行拆解步驟、讀 repo、寫 code、跑測試、開 PR,人類多半只需審核結果。這類「大而全」的 agent 平台內建規劃模式與子代理編排,能獨立完成整個 feature,但工作流往往也由工具決定,而不是開發者自己拼裝。

Pi 剛好站在對面,走的是 「極簡核心+按需擴充」

  • 核心工具很少:預設只給模型四個工具(下面會逐一說明)
  • 不把所有工作流塞進核心:子代理、網頁存取或 MCP 等能力可透過套件與 Extension 加入
  • 規則與能力由你組合AGENTS.md、Skills、Extensions、Pi Packages 都能納入專案設定

到底是哪四個工具?

這是很多介紹文章都跳過的地方,但它其實是理解 Pi 的鑰匙。預設情況下,Pi 只給模型這四個:

工具做什麼對應你平常的動作
read讀檔案cat / 在編輯器裡打開檔案
write建立或覆寫檔案新增檔案、整檔重寫
edit局部修改檔案改幾行、套一個 patch
bash執行 shell 指令你在終端敲的任何東西

還有三個唯讀工具 grepfindls 是內建的,但不在預設清單裡,要用 --tools 明確指定才會開啟(Windows 上另有 powershell)。

為什麼四個就夠?因為 bash 本身就是萬能鑰匙——需要搜尋就跑 rg,需要跑測試就跑 npm test,需要裝東西就 npm install。工具數量少,模型的選擇就少,出錯與繞路的機會也跟著少,system prompt 也能壓得極小。

白話說:你在專案資料夾打 pi,就能用自然語言叫 AI 讀檔、改 code、跑測試;要不要加 MCP、子代理、網頁搜尋,全由你決定。

四層架構(看懂 Pi 在幹嘛)

層級做什麼
CLI / TUI終端互動介面:訊息、編輯器,以及顯示 token 用量與花費的狀態列
Agent 協調ReAct 迴圈:想 → 做 → 看結果 → 再修正
工具與上下文四個核心工具,加上 Extension 注入的額外上下文或工具
持久化Session 樹狀歷史、JSONL 日誌,可 fork、可匯出

這裡要先講清楚一件很重要的事:Pi 預設沒有「執行前請你確認」的彈窗。它唯一會攔你的是首次開啟專案時的 trust 詢問(下面 Project Trust 那節會說);工具真的要動手改檔案或跑指令時,不會再問第二次。這是刻意的設計取捨,也代表安全防線得由你自己架——最實際的做法就是先 commit,並善用下面會提到的唯讀模式。

把 AI 直接放在終端的好處很實際:不用再「複製錯誤訊息 → 貼到聊天窗 → 複製修復 code 回來」。Linter 報錯、測試失敗,Agent 可以直接讀輸出並迭代修正。

Pi vs Cursor vs Claude Code:該選誰?

Pi 不是 Cursor 的平替,而是不同取捨。下面這張表先幫你快速抓到方向;實際功能仍會隨版本與已安裝套件改變:

維度Pi Coding AgentClaude CodeCursor Agent
核心取向極簡核心,靠套件與 Extension 擴充終端工作流,並整合 Anthropic 生態IDE、CLI 與雲端 Agent 工作流
上下文來源AGENTS.mdCLAUDE.md、Skills、Prompt Templates、Packages 與 ExtensionsCLAUDE.md、對話內容、Skills、MCP 與工具搜尋專案索引、Rules、@ 上下文與對話內容
Sub-agents核心不預設提供,可由套件加入官方支援 Subagents提供背景與平行 Agent 工作流,名稱與能力依產品版本而定
Plan mode用 Prompt Template 或 Extension 組合官方支援 Plan mode官方支援 Plan mode
程式碼搜尋/索引由 Extension 或套件自行加入依工具、上下文與工作流而定提供 codebase understanding/索引,實際行為依設定與版本而定
Session樹狀分支 + compactSession resume、branching、平行 sessions 與 compact多個 chat/Agent sessions,並支援平行 Agent 與 worktree
部署CLI / RPC / SDK 嵌入CLI、IDE、Desktop、Browser 與 Agent SDKDesktop IDE、CLI 與 Cloud Agent
Token 取捨核心設計偏小,細節由你控制依模型、工具與上下文而定依模型、索引、Rules 與專案上下文而定
最適合終端實驗、SDK 嵌入、可版本控制的 Agent 設定Anthropic 生態與終端工作流使用者日常 IDE 編輯、平行 Agent 與 UI 工作流

依場景選工具

你的情境建議
大型 monorepo、要靠自動索引Cursor / Claude Code
Side project、終端一把梭Pi
本地模型、低 VRAM、要控 tokenPi
Agent 設定要進 Git(AGENTS.md.pi/Pi
自建產品要嵌 Agent(SDK)Pi
UI 調像素、邊預覽邊改Cursor

實戰分工可以這樣想:主專案用 Cursor 改 UI、做多檔 refactor;Pi 負責終端批次任務、長跑腳本或低成本實驗。同一目錄、同一時間只讓一邊寫檔;若要並行,請用 Git worktree 隔離。兩個 Agent 同時改同一檔案,最後通常不是協作,是 merge conflict 的聯誼會。

四種運作模式

Pi 不只有「開 TUI 聊天」:

模式怎麼用適合
Interactive(互動)專案目錄執行 pi日常對話、除錯、改 code
Print / JSONpi -p "分析此 repo" 或 JSON event stream腳本自動化、結構化事件流
RPCstdin/stdout JSON 協議非 Node 系統整合
SDK嵌入自己的 TS 應用自建 Agent 產品

互動模式裡有一組很實用的即時控制:Agent 還在跑的時候,你不必乾等,可以直接插話。

按鍵行為什麼時候用
EnterSteering:排入一則糾偏訊息,等目前這輪工具呼叫跑完就送出看到它方向歪掉,想馬上拉回來
Alt + EnterFollow-up:排隊下一則訊息,等目前所有工作結束後才接上已經想好下一步,先排隊不打斷
Esc中斷目前工作,並把排隊中的訊息退回編輯器完全跑錯,直接喊停
Alt + ↑把排隊中的訊息取回編輯器修改打完才發現講錯

另外兩個新手很容易卡住的:多行輸入是 Shift + Enter(直接按 Enter 會送出),Ctrl + G 可以開外部編輯器寫長 prompt。

長對話別硬撐——用 /compact 壓縮舊訊息,或用 /tree 回到某個節點、從那裡繼續另一條路。完整歷史仍保存在 JSONL session 檔案中,但壓縮後的摘要不是逐字備份,重要決策最好另外寫進專案檔案。

上下文工程:Pi 真正厲害的地方

AI 回得好不好,八成看上下文怎麼塞。Pi 的策略是:Harness 保持極簡,上下文全部可組合、可版本控制。

1. Context Files(AGENTS.md / SYSTEM.md

Pi 啟動時會從目前目錄往上尋找並載入指令檔:

載入順序路徑用途
全域~/.pi/agent/AGENTS.md個人通用規範
父目錄向上尋找的 AGENTS.mdCLAUDE.mdMonorepo 子專案繼承
當前目錄./AGENTS.md./CLAUDE.md專案專屬規則

這幾層是疊加的,不是互相取代——全域規範會跟專案規範一起進 context。如果某個目錄放了 AGENTS.override.md,Pi 在那一層會改讀它、跳過該層的 AGENTS.md / CLAUDE.md,其他層照常疊加;monorepo 裡想讓某個子專案「不吃上層某些規則」時很好用。

範例(專案根 AGENTS.md):

# Project Instructions
- 改 code 後跑 `npm run check`- 不要動 production 設定檔。
- 不確定時先問我。

改完記得重開 pi 或執行 /reload,不然它讀的還是舊的。

再上一層是 system prompt 本身,這跟 AGENTS.md 不同——AGENTS.md 是附加的專案說明,SYSTEM.md整份換掉預設系統提示:

檔案放哪裡效果
SYSTEM.md.pi/SYSTEM.md(專案)或 ~/.pi/agent/SYSTEM.md(全域)完全取代預設 system prompt
APPEND_SYSTEM.md同上兩個位置在預設 prompt 後面追加

九成情況你要的是 APPEND_SYSTEM.md,拿來放「一律用繁體中文回答」「危險操作先問」「不確定就停下來問人」這類跨專案共通規則。SYSTEM.md 是核彈級選項:換掉之後 Pi 內建那套關於工具使用的指示也會一起消失,除非你很清楚自己在替換什麼,否則別動它。專案特有的規範請留在 AGENTS.md

2. Skills:按需載入的能力包

Skills 是 Markdown 檔,frontmatter 有 namedescription。Pi 只在 system prompt 放摘要;Agent 要用 read 才載入全文——避免一次塞爆 context。

手動觸發:/skill:git-workflow。發現路徑分兩類——全域的 ~/.pi/agent/skills/~/.agents/skills/,以及專案層的 .pi/skills/.agents/skills/(專案 skills 需先 trust 專案才會載入)。

順帶一提,如果你原本就有 Claude Code 或 Codex 的 skills,不必搬家,在 settings.jsonskills 陣列指向那些目錄就能共用。

3. Prompt Templates:可重用的 / 指令

帶參數的 Markdown 模板,例如 /review src/auth.ts 展開成完整審查 prompt。支援 $1$ARGUMENTS 等替換。適合標準化 code review、部署 checklist。

4. Extensions:用程式碼決定進 context 的東西

前面三種都是 Markdown,Extension 則是 TypeScript 模組——能註冊新工具、新的 / 指令、快捷鍵與自訂 TUI。對「上下文工程」來說最關鍵的是它能訂閱 context 事件,在每一次呼叫模型之前動手改 message 陣列。

具體能拿來做什麼:依照這一輪的問題動態撈相關檔案塞進去(也就是自己接一套 RAG)、把不需要的舊訊息剔掉、或在特定情況下追加提醒。換句話說,前三種是「準備好素材等模型來拿」,Extension 是「模型每次開口前,你都能插手一次」。這也是為什麼社群套件能做到 MCP、子代理這些核心沒有的東西——它們本質上都是 Extension。

門檻確實比寫 AGENTS.md 高,但不必自己從零開始:官方的建議是直接叫 Pi 幫你寫一個(write + bash 它都有),寫完 /reload 就能用。

Project Trust(安全邊界)

當專案含有 .pi/ 資源或專案層級的 .agents/skills,而你又還沒對這個資料夾做過決定時,Pi 會在啟動時問你要不要 trust 這個專案。這個問題比它看起來嚴重,因為按下信任等於一次同意四件事:

  1. 載入 .pi/settings.json
  2. 載入 .pi/ 底下的各種資源
  3. 自動安裝該專案宣告但你還沒裝的套件
  4. 執行專案自帶的 Extension(也就是跑 repo 裡的 TypeScript)

第 3、4 點值得再看一次——git clone 一個陌生 repo 再進去打 pi,按下信任的瞬間就等於同意執行對方寫的程式碼。所以第一次打開陌生專案,先看一下有沒有 .pi/、裡面放了什麼,再決定。這個確認不是裝飾品。

信任決定會存進 ~/.pi/agent/trust.json,之後不會再問。互動模式裡可以用 /trust 手動記錄決定;非互動模式(-p--mode json--mode rpc)不會跳提示,預設直接忽略這些專案資源,需要時用 --approve 單次放行。

為什麼 Pi 刻意不內建 MCP、子代理、Plan mode?

這不是單純的「功能缺失」,而是把取捨交回使用者:

刻意省略為什麼需要時怎麼辦
MCP工具描述可能增加上下文負擔寫成 CLI + README 讓 Skill 呼叫,或安裝 MCP adapter
Sub-agents不預設綁定特定編排方式用 tmux 開多個 pi,或安裝支援子代理的套件
Plan mode不強迫所有人採用同一套規劃儀式把計畫寫成 plan.md,或用 Prompt Template/Extension
內建 To-do 清單狀態放在對話裡容易讓模型混淆TODO.md,跨 session 也還在
權限確認彈窗不假設你要哪一種安全模型用容器隔離,或自己寫確認用的 Extension
背景 bash背景任務不易觀察用 tmux,開著看得見也能直接介入

官方文件的精神很直白:Ask Pi to build it, or install a package.

留意其中的共同模式:被拿掉的東西,多半是把「狀態」藏在工具內部的功能(plan mode、to-do、子代理的內部脈絡)。Pi 的主張是——狀態應該落在你看得到、能版控、換工具也還在的檔案裡。這不只是省 token,而是決定了出事時你能不能自己查。

套件安裝範例:

pi install npm:pi-mcp-adapter    # 社群 MCP adapter
pi install npm:pi-subagents      # 社群子代理套件
pi install npm:pi-web-access     # 社群網頁存取套件

pi install npm:pi-mcp-adapter -l # 加 -l 改裝在專案層(寫進 .pi/settings.json,可隨 repo 共用給團隊)

安裝前請認真看一眼來源。 官方文件把話講得很白:pi package 以完整系統權限執行——Extension 會跑任意程式碼,Skill 也能指示模型執行任何指令。它跟 VS Code 外掛不同,沒有沙箱。上面三個是目前下載量最高的社群套件,但「熱門」不等於「審核過」。

套件選型:不要一開始裝滿排行榜

pi.dev/packages 有社群套件目錄。比較穩的做法是從 Tier 0 起步,痛點出現再加。 套件不是自助餐,不必看到排行榜就每盤夾一點。

Tier組合什麼時候升級上來
Tier 0只有 AGENTS.md,零套件起手式。先把四個工具用熟
Tier 1補一個最痛的缺口(MCP adapter 或子代理)你能講出「我卡在哪」,而不只是「聽說這個好用」
Tier 2再加網頁存取、目標追蹤這類長任務輔助任務跨多個 session,或 context 一直爆

判斷要不要升級的標準只有一個:你能不能講出上一層具體卡住你的地方。 講不出來就代表還沒到。

想試某個套件又不想弄髒設定檔,用 -e 跑一次性試用——它只裝到暫存目錄,這次執行結束就沒了:

pi -e npm:pi-web-access     # 只在這一次 session 生效,不寫進 settings.json
pi list                     # 看目前到底裝了哪些(治療「我什麼時候裝的這個」)
pi remove npm:pi-web-access # 用不到就拿掉

pi-mcp-adapter:MCP 但不炸 context

先講清楚 Pi 為什麼不內建 MCP,你才知道 adapter 在解什麼問題。

一般 MCP 的做法是:連上 server 之後,把它所有工具的名稱、描述、參數 schema 全部寫進 system prompt。這些描述在你打第一個字之前就已經佔住 context,而且每一輪對話都會重付一次。接兩三個 server,工具描述佔掉上萬 token 是很常見的事——不管你這次要不要用到它們。

Pi 作者的立場是:與其如此,不如把能力包成 CLI 工具配一份 README,讓 Skill 按需去讀(--help 就是天然的工具描述)。想看完整論證可以讀他那篇 What if you don't need MCP?

但你如果本來就有一堆 MCP server 要用,adapter 就派上用場。常見策略是只暴露一個代理工具,讓模型需要時才去發現與呼叫實際的 MCP 工具,把「一開始就全塞」換成「用到才載」。至於是否 lazy 啟動、能不能指定某些工具直接暴露,各家版本設定不同——安裝前看該套件自己的文件,別把某一個套件的行為當成所有 MCP 整合的通則。

pi-subagents:子代理怎麼編排

子代理套件常見的做法是提供 scoutplannerworkerreviewer 之類的角色,各自跑在獨立的 context 裡,支援鏈式或並行執行。角色名稱與運作模式由套件決定,安裝前請看它自己的文件——光是 npm 上就有好幾個不同作者的子代理套件,設計差很多。

實戰 prompt 範例:

Use scout to map the auth flow, then planner for an implementation plan.
Run parallel reviewers: correctness, tests, and unnecessary complexity.

注意:並行工作通常會增加模型呼叫與 token 成本;裝了套件也不代表一定會自動跑 reviewer,仍要在 prompt 或 AGENTS.md明確要求

實戰工作流:從設定到收尾

Pi 沒有「唯一官方流程」,但下面這套在實戰中最穩。「純 Pi」欄位是零套件就做得到的做法——請先照這欄跑熟,右欄的套件等真的卡住再說:

階段做什麼純 Pi 怎麼做裝了套件可以再加
0 設定一次性建立規則AGENTS.mdAPPEND_SYSTEM.md
1 釐清講清楚要達成什麼自然語言描述目標,請它先寫成 plan.md目標追蹤類套件(如 pi-codex-goal,提供 /goal 之類的長期目標指令)
2 探索只看不改,弄懂現況開唯讀模式(下面有指令)子代理套件的 scout、網頁存取套件查外部文件
3 實作小步改,隨時可回退主 session 用 edit 逐步改,一段一段 commit子代理套件的 worker
4 驗證讓它自己知道有沒有做完bash 跑 test/lint,失敗就讓它讀輸出重來子代理套件的 reviewer
5 維護別讓 context 爛掉/compact 壓縮、/tree 換分支、/new 重開記憶/context 管理類套件

Phase 2 的唯讀探索值得單獨拿出來講,因為這是 Pi 少見的乾淨做法——用 --tools 限制工具清單,模型就物理上做不到改檔案,不必靠 prompt 拜託它別亂動:

pi --tools read,grep,find,ls -p "說明這個 repo 的驗證流程,以及測試放在哪裡"

沒有 writeeditbash,它就只能讀。第一次接觸陌生 repo 用這招最安心。

三個反模式請避開:

  1. 一開始裝滿熱門榜——context 與認知負擔暴增
  2. 長專案只靠對話記憶——應寫進 AGENTS.mdplan.md 這類檔案,/compact 之後對話裡的細節就不保證還在
  3. 沒給驗證條件就「改到好」——一定要指定 test/lint 成功才算完

探索階段原則:計畫寫進檔案plan.mdcontext.md),先讀本地,不足再 web,大改前先跟人確認。

安裝與第一次實戰(約 10 分鐘)

前置:Node.js。本文撰寫時 @earendil-works/pi-coding-agentengines 要求 Node 22.19 以上,這個門檻偏高,不少人的環境還停在 18 或 20,先確認再裝:

node -v    # 低於 v22.19 的話先用 nvm / fnm / mise 升級

Pi 更新很勤,這個數字可能會往上跑。要看當下的真實要求,可以直接查 npm:npm view @earendil-works/pi-coding-agent engines

版本沒問題就可以裝了,兩種方式擇一:

# 方式 A:官方 npm(方便鎖版本)
npm install -g --ignore-scripts @earendil-works/pi-coding-agent

# 方式 B:macOS / Linux 一鍵腳本(背後一樣是 npm 全域安裝)
curl -fsSL https://pi.dev/install.sh | sh

--ignore-scripts 是官方寫法,用意是安裝時不執行相依套件的生命週期腳本;Pi 本身不需要它們,加上去比較安全。之後要移除就用 npm uninstall -g @earendil-works/pi-coding-agent(設定與 session 會留在 ~/.pi/agent/)。

裝完確認一下:

pi --help

接著登入模型。Pi 支援兩條路:訂閱制登入/login 目前內建 Claude Pro/Max、ChatGPT Plus/Pro、GitHub Copilot 等選項,憑證存到 ~/.pi/agent/auth.json),或是直接吃環境變數的 API key

cd /path/to/your-sandbox-project   # 先用可弄髒的 side project

# 路線 A:訂閱制
pi
/login

# 路線 B:API key
export ANTHROPIC_API_KEY=sk-ant-...
pi

供應商清單會隨版本變動,以 /login 實際顯示的為準。CI 用 API key 時走環境變數或 CI secret,不要把金鑰寫進 repo。

第一次驗證,先讓它讀就好:

Summarize this repository and tell me how to run its checks.

這一句同時測到 readbashAGENTS.md 有沒有被載入——它要能講出你的測試指令,代表整條鏈都通了。

再進階試試三個日常會一直用到的:輸入 @ 模糊搜尋並附上檔案、!npm run lint 直接跑 shell 並把輸出餵給模型(!! 則是跑了但不餵)、pi -p "Summarize" 跑非互動模式。

新手常見踩坑

狀況怎麼修
pi: command not found確認 npm global bin 在 PATH
安裝時噴 engine 版本錯誤Node 升到 22.19 以上
沒 API key在 Pi 內 /login,或 export ANTHROPIC_API_KEY=...
AI 亂改重要檔Pi 沒有內建 undo,改前先 commit,靠 git 回退;探索階段用 pi --tools read,grep,find,ls
改了 AGENTS.md 卻沒生效執行 /reload 或重開 pi
聊越久越糊/compact 壓縮,或 /new 直接重開一局
不小心把對話帶歪,想回到岔路前/tree 挑一個節點跳回去繼續
想要 MCP 但沒有pi install npm:pi-mcp-adapter

其中「沒有內建 undo」是最需要肌肉記憶的一條。Pi 沒有權限確認彈窗,editbash 說改就改——官方文件自己也建議:想要能安心回退,就用 git 或其他 checkpoint 機制。養成「開工前先 commit」的習慣,比任何 AGENTS.md 規則都有效。

想再深入的話

這篇是概覽,本站另外有兩篇往下鑽的:

官方文件則從 Quickstart 開始最省事,接著看 Using Pi 補齊指令與旗標。

結語:回歸極簡,但別回歸低效

Pi Coding Agent 重新定義了「AI 助手該怎麼存在於開發流程裡」——不試圖接管整個 IDE,而是當一個快、可配置、可版本控制的終端夥伴。

三個 takeaway:

  1. 極簡核心readwriteeditbash 四個工具)換來 token 效率與完整上下文控制權
  2. 能力按需加(Packages / Skills / Extensions),不要一開始裝滿
  3. 跟 Cursor 分工:IDE 改 UI、Pi 跑終端批次與實驗——同一 worktree 別兩邊同時寫

不過為了公平,也講一下什麼情況先別碰 Pi:如果你需要有人幫你把護欄架好(權限彈窗、undo、內建 plan 與 to-do),或是你正在動一個不能出錯的正式專案卻還不熟 git 回退,那 Cursor 或 Claude Code 會讓你舒服很多。Pi 把方向盤完整交給你,也就代表撞牆的責任一起交過來了。反過來說,如果你的痛點正好是「工具管太多」,那這份控制權就是它最值錢的地方。

想試的話,先用 sandbox 專案跑一輪:pi.dev 安裝 → /login → 寫一份 AGENTS.mdgit commit 留一個乾淨起點 → 跑一個小任務驗證讀檔、編輯與 shell 執行的閉環。覺得順了,再按需加入社群套件。先把核心用熟,再加配料;不然最後可能只剩一鍋「設定燉湯」。

參考資料