AIDive

影片資料包

pi 代理工具包:五個套件、SDK 食譜、結論表與週一檢查清單

閱讀約 10 分鐘

TL;DR

  • pi 是採用 MIT 授權的 monorepo,把一套程式碼代理(coding agent)harness 拆成五個獨立套件:模型 API 層、代理迴圈、終端機 UI 函式庫、程式碼代理本體,以及遙測套件。你可以只拿一塊,也可以五塊全用。
  • CLI 第一天就是完整的程式碼代理:四個預設工具、可 fork 與 resume 的樹狀工作階段歷史、即時費用計數器,而且會讀取你儲存庫裡現有的 AGENTS.md 或 CLAUDE.md。
  • 真正的價值在 SDK:createAgentSession 加上 model runtime 與 session manager,大約十行 TypeScript 就能得到可運作的代理,defineTool 則能新增有型別的自訂工具,不需要額外的程序或協定。
  • 這種透明的代價是你要自己做的工作:沒有內建權限提示、隔離由你負責、版本仍在 1.0 之前(v0.84),而且大約有一百個未解決的 issue。
  • 日常用的 harness 繼續用,把 pi 當成測試台,看看你的 harness 藏了什麼。只有在你願意自己扛起防護機制時,才在它上面建產品。

來源怎麼說

pi 是一個 monorepo:一個儲存庫裡獨立發佈五個套件,每個負責 harness 的一層 s2。pi-ai 是面向模型供應商(OpenAI、Anthropic、Google 等)的統一 API,用同一個介面處理回應串流、帶有思考等級(thinking level)的推理區塊,以及各供應商提供的模型的動態探索 s2。pi-agent-core 是代理迴圈本身:對話狀態,以及送出訊息、讀取工具呼叫、執行並把結果回傳的循環 s2。pi-tui 是採用差異渲染(differential rendering)的終端機渲染函式庫,只重繪畫面上有變動的部分 s2。pi-coding-agent 把這些元件組裝成你安裝的 CLI,pi-telemetry 則讓你接上自己的使用量指標,不必依賴特定廠商 s3。

採用數據支持這個設計:92 123 顆星、11 400 個 fork、超過 5 700 個 commit,全部採用 MIT 授權,允許使用、修改與再散布,包括放進商業產品 s1。發佈節奏整個夏天都維持著:八月前兩週發了三個版本,v0.84.2 在 14 日發佈 s4。

安裝只要一行指令:npm install -g --ignore-scripts @earendil-works/pi-coding-agent,而 ignore-scripts 旗標很重要:它會阻止相依套件執行安裝腳本,這是 npm 上最常被利用的攻擊面之一 s3。透過 login 指令連上供應商後,底部列會即時顯示目前資料夾、工作階段、已消耗的 token 與費用,所以每個請求在送出時就有價格,而不是等到月底才知道 s3。

工作階段是最有特色的功能。每段對話都以 JSONL 存在你的家目錄,依專案分類,歷史是一棵樹而不是一條線:fork 回到任一點並分出新分支,tree 在分支之間切換,resume 可以重開任何過去的工作階段,幾週後也行,因為一切都存在本機 s3。模型預設只拿到四個工具:read、write、edit 和 bash,和市面上的代理相比非常少,而且是刻意的 s3。設定也遵循同樣的邏輯:家目錄裡一份全域的 settings.json,專案裡一份會覆蓋它的設定,以及一套信任機制,在你第一次開啟某個資料夾時,先詢問才會套用該資料夾的本機設定。CLI 也會把專案的 AGENTS.md 或 CLAUDE.md 載入為上下文,所以現有的指示不用重寫就能使用 s3。

在 SDK 這邊,createAgentSession 接收一個 ModelRuntime 和一個 SessionManager,回傳可運作的代理。SessionManager 決定持久化方式:丟棄式腳本用記憶體,要在多次啟動之間找回對話就用磁碟,而 SDK 建立的工作階段與 CLI 自己的工作階段結構相同 s8。createAgentSession 的選項還能讓你精確選擇要暴露的工具組,想從空白開始時,甚至可以透過 ResourceLoader 換掉整份系統提示 s8。自訂工具透過 defineTool:一個名稱、一段描述、有型別的參數 schema 和一個 execute 函式,再透過 customTools 傳給 createAgentSession。對模型來說,這個工具和 read 或 bash 完全一樣,有型別的 schema 讓你在編輯器裡有自動完成,代理收到的輸入也已經驗證過。這和 MCP 伺服器是同一種機制,只是全部都在你的檔案裡,中間沒有獨立程序或協定 s8。

CLI 本身有四種客製化機制,都放在專案或家目錄的資料夾裡:extensions(TypeScript 模組,用來註冊工具、斜線指令、鍵盤快速鍵或 UI 元素,啟動時從 extensions 資料夾載入)、skills(遵循 Agent Skills 標準的能力套件,由模型呼叫或手動呼叫,所以現有的 skills 可以原樣重用)、prompt templates,以及在 CLI 執行時重新載入的 themes s3。README 用一句話說明了理念:讓 pi 配合你的工作流程,而不是反過來,不必 fork,也不用動內部 s3。大型 harness 把子代理、計畫模式和權限都綁進產品裡,pi 則刻意不內建,讓你寫成 extension 或從社群安裝 s3。

限制由專案自己寫明。沒有內建權限提示:預設情況下,代理可以不經詢問就執行 bash 指令。官方的容器化指南承認這點,並提出三種隔離模式(Docker 是其中之一),但在讓代理在重要的機器上放手執行之前先建好隔離,是你的工作 s5。成熟度是另一項成本:v0.84 而不是 1.0、大約一百個未解決的 issue,以及仍標示為實驗性的 API,例如前幾週新增的遠端工作階段用戶端 s7。同一批元件已經用在另一個產品上:pi-chat 把它們用於對話自動化 s6。

結論:保留、試用或跳過

pi 的部分 判定 原因
CLI 作為日常 harness 旁的學習測試台 保留 本機樹狀工作階段、即時費用、四個工具:你能看到整合式 harness 藏起來的每一層
用來做代理產品的 SDK(createAgentSession + defineTool) 現在就試 十行就有可運作的代理、不需要 MCP 配線的有型別自訂工具、可更換的供應商
CLI 作為唯一的日常助手 暫時跳過 沒有權限提示、隔離由你負責、1.0 之前的 API 變動
用 extension 做防護(bash 確認、政策) 試用 這是放權限層的預期位置,並隨你的專案版本控制
Skills 資料夾 保留 採用 Agent Skills 標準,你現有的 skills 可原樣載入
實驗性 API(遠端工作階段用戶端) 跳過 標示為實驗性,1.0 之前可能會變

週一要做的事

  • 用 npm install -g --ignore-scripts @earendil-works/pi-coding-agent 安裝 CLI,執行 pi,用 login 指令連上供應商,並在一項真實任務中觀察費用列。
  • 開啟一個已經有 AGENTS.md 或 CLAUDE.md 的儲存庫,確認 pi 有讀取;用同一個提示,把代理最初的回答和你平常的 harness 比較。
  • 跑一段對話,然後從較早的節點 fork,往不同方向前進;列出 ~/.pi/agent/sessions/ 看看 JSONL 檔案和它們的專案資料夾。
  • 寫一個二十行的 our-agent.ts:import createAgentSession,傳入 ModelRuntime 和記憶體內的 SessionManager,問它目前資料夾裡有什麼,並用 npx tsx 執行。
  • 新增一個 defineTool,從你自己的系統(內部 API、資料庫 view、CSV)讀取某些資料,並透過 customTools 傳入;確認代理在相關問題上不用提示就會呼叫它。
  • 在你在意的機器上做任何啟用 bash 的執行之前,從容器化指南的三種隔離模式中挑一種並設定好。
  • 起草第一個 extension,攔截 bash 呼叫,並在破壞性指令前要求確認;把它放在專案的 extensions 資料夾並納入版本控制。
  • 瀏覽一次未解決的 issue 清單,這樣在你開始建構之前,就知道哪些部分會變動。

延伸閱讀

  • 閱讀 SDK 文件,了解 createAgentSession 完整的選項清單:工具組、透過 ResourceLoader 設定系統提示、session manager s8。
  • 在發佈任何會在使用者機器上執行 bash 的東西之前,先研究容器化指南中的三種隔離模式 s5。
  • 看看 pi-chat,了解同樣五個套件如何重新組合,用於對話自動化而不是寫程式碼 s6。
  • 瀏覽 packages 資料夾,單獨讀一讀 pi-agent-core:它是每個整合式 harness 所執行迴圈中最小、最好讀的版本 s2。
  • 追蹤 releases 頁面:v0.84.0 到 v0.84.2 在八月的兩週內陸續發佈,所以預期會有影響 extension 的變更說明 s4。
  • 把未解決的 issue 當成仍屬實驗性部分的地圖,從遠端工作階段用戶端開始 s7。
  • 重用你為其他工具寫好的 skills:pi 的 skills 資料夾遵循 Agent Skills 標準 s3。

來源

FAQ

pi 現在能取代我每天用的程式碼代理嗎?

不能直接替換。它沒有權限提示,隔離由你負責,版本在 1.0 之前,還有大約一百個未解決的 issue。工作上繼續用你現在的 harness,把 pi 放在旁邊跑。

要給 pi 自訂工具,需要 MCP 嗎?

不需要。defineTool 接收名稱、描述、有型別的參數 schema 和 execute 函式,再透過 customTools 傳給 createAgentSession。它的行為就像內建工具,沒有獨立程序或協定。

我現有的 AGENTS.md、CLAUDE.md 和 skills 能用嗎?

可以。CLI 會自動載入專案裡的 AGENTS.md 或 CLAUDE.md,它的 skills 資料夾遵循 Agent Skills 標準,所以現有的 skills 可原樣載入。

為什麼預設只有四個工具?

read、write、edit 和 bash 就是整個預設組合,遠少於市面上的代理,專案把這當成一個選擇。其他任何東西,都透過 customTools 或 extension 有意識地加入。