Pi Code Agent 教學手冊(Enterprise Edition)
版本:v0.68.0(2026 年 4 月 20 日發佈)
適用對象:資深工程師、架構師、DevOps 工程師
技術棧:Java / Spring Boot / Vue / TypeScript / Redis / Kafka / PostgreSQL
授權:MIT License
開發公司:Earendil Inc.
開源統計:⭐ 38k+ Stars、179+ Contributors、198+ Releases
目錄(Table of Contents)
- 概述(Overview)
- 核心設計哲學(Architecture Philosophy)
- 系統架構設計(System Architecture)
- 安裝與環境建置(Installation & Setup)
- 基本使用教學(Getting Started)
- Context Engineering(上下文工程)
- PLAN.md 開發模式
- Extensions / Skills / Prompt Templates / Themes
- Pi Agent + SSDLC(企業重點)
- 實戰案例(Hands-on)
- 維運與監控(Operations)
- 升級與版本管理(Upgrade Strategy)
- Best Practices(企業建議)
- Anti-Patterns(重要)
- 結論(Conclusion)
- 檢查清單(Checklist)
1. 概述(Overview)
1.1 Pi Code Agent 是什麼
Pi(又名 Pi Coding Agent)是由 Mario Zechner(badlogic) 與 Earendil Inc. 開發的極簡終端 AI 程式碼開發工具,以 MIT License 開源於 GitHub。其核心定位為:
- 極簡終端控制框架(Minimal Terminal Coding Harness)
- 可直接操作檔案、執行指令、生成程式碼
- 透過 TypeScript Extensions、Skills、Prompt Templates、Themes 進行擴充
- 支援 20+ LLM Provider(Anthropic、OpenAI、Google、Azure、Bedrock、Mistral、Groq、Cerebras、xAI、Hugging Face、Kimi For Coding、MiniMax、OpenRouter、Ollama、Vercel AI Gateway、ZAI、OpenCode Zen、OpenCode Go、Google Vertex 等)
- npm 套件名稱:
@mariozechner/pi-coding-agent - Monorepo 包含 7 個核心套件:
pi-ai、pi-agent-core、pi-coding-agent、pi-mom、pi-tui、pi-web-ui、pi-pods - 4 種運行模式:Interactive(互動)、Print(非互動)、RPC(JSON stdin/stdout)、SDK(程式化嵌入)
Pi 的設計理念是「適應你的工作流,而非讓你適應工具」。
1.2 與其他工具比較
| 特性 | Pi Code Agent | Claude Code | GitHub Copilot | Cursor |
|---|---|---|---|---|
| 運行環境 | Terminal(CLI) | Terminal(CLI) | VS Code / IDE | 獨立 IDE |
| 開源 | ✅ MIT | ❌ 閉源 | ❌ 閉源 | ❌ 閉源 |
| 可擴充性 | ✅ Extension/Skill/Prompt/Theme | ❌ 有限 | ✅ MCP/Extension | ❌ 有限 |
| Plan Mode | ✅ PLAN.md + Extension 範例 | ✅ 內建 | ❌ 無 | ✅ 內建 |
| Sub-Agents | ✅ Extension 範例可實作 | ✅ 內建 | ✅ 有限 | ❌ 無 |
| MCP 支援 | ✅ Extension 範例可整合 | ✅ 原生 | ✅ 原生 | ✅ 原生 |
| 多模型切換 | ✅ 20+ Provider | ❌ Anthropic only | ❌ 有限 | ✅ 多模型 |
| Session 管理 | ✅ 樹狀分支/Fork/Clone | ✅ 基本 | ❌ 無 | ❌ 無 |
| 成本控制 | ✅ 即時顯示 Token/Cost | ❌ 有限 | ❌ 訂閱制 | ❌ 訂閱制 |
| 自訂系統提示 | ✅ AGENTS.md / SYSTEM.md | ❌ 有限 | ✅ Instructions | ❌ Rules |
| SDK/嵌入 | ✅ TypeScript SDK + RPC | ❌ 無 | ❌ 無 | ❌ 無 |
| 套件生態 | ✅ Pi Packages (npm/git) | ❌ 無 | ✅ Marketplace | ❌ 無 |
重要澄清:Pi 不「內建」Plan Mode、Sub-Agents、MCP 等功能,但透過其 Extension 系統皆可實現。官方
examples/extensions/提供了 50+ 個範例,涵蓋 plan-mode、subagent、MCP 整合、sandbox 沙箱、SSH 遠端執行、permission-gates 權限閘門等。Pi 的哲學是不在核心中堆疊功能,而是讓使用者按需組裝。
1.3 適用場景
✅ 適合使用 Pi 的情境
- 企業級專案開發:需要完全透明、可審計的 AI 開發流程
- 多模型策略:同一專案中需切換不同 LLM(如 Claude 做設計、GPT 做測試)
- 客製化工作流:團隊有獨特的開發規範或安全要求
- CLI 優先的開發者:習慣終端操作、tmux 工作流
- 成本敏感環境:需要精確控制 Token 使用量
⚠️ 不適合的情境
- 需要圖形化介面的開發者(建議用 Cursor 或 Copilot)
- 不熟悉終端操作的初學者
- 需要即開即用、零配置的場景
實務建議:建議團隊中至少一位成員熟悉 TypeScript,以便開發自訂 Extension。Pi 的價值在於可塑性,投入客製化的時間會在長期開發中獲得回報。
2. 核心設計哲學(Architecture Philosophy)
2.1 極簡主義(Minimalism)
Pi 的核心僅提供七個內建工具:
| 工具 | 用途 |
|---|---|
read | 讀取檔案內容(支援圖片辨識) |
write | 寫入檔案 |
edit | 編輯檔案(差異替換,支援多區域批次編輯) |
bash | 執行 Shell 命令(串流輸出、可攔截) |
grep | 正則搜尋檔案內容 |
find | 搜尋檔案路徑 |
ls | 列出目錄內容 |
# 啟用特定工具(v0.68+ 使用工具名稱白名單)
pi --tools read,bash,edit,write,grep,find,ls
# 唯讀模式(Code Review 用)
pi --tools read,grep,find,ls -p "Review the code"
# 禁用所有工具
pi --no-tools設計理念:不內建功能,讓使用者透過 Extension 自行擴充。這確保核心保持輕量且穩定。
2.2 可觀測性(Observability)
Pi 的每一個操作都是可見且可中斷的:
- 所有工具呼叫的輸入/輸出皆在終端即時顯示
- 按
Ctrl+O展開/收合工具輸出 - 按
Ctrl+T展開/收合 Thinking Block - 按
Escape可隨時中斷操作(連按兩下開啟/tree) - 按
Ctrl+G開啟外部編輯器(如 vim、nano) - Session 以 JSONL 格式儲存,完全可追溯
# Session 儲存位置
~/.pi/agent/sessions/<encoded-cwd>/
# 也可自訂 Session 目錄
pi --session-dir /path/to/sessions2.3 PLAN.md 驅動開發
Pi 刻意不內建 Plan Mode,原因如下:
- 內建 Plan Mode 是「黑盒」——你無法版控、無法跨會話共享
- PLAN.md 是純文字檔,可以 Git 版控
- 團隊成員可以共同編輯 PLAN.md
- AI 和人類都可以讀寫 PLAN.md
如果你真的需要 Plan Mode,Pi 提供了官方 Extension 範例
examples/extensions/plan-mode/來實作,包含步驟追蹤、進度小工具和唯讀 bash 允許清單。
2.4 明確的「不做」原則
Pi 的設計哲學中有數項刻意不做的決定:
| 不做的事 | 替代方案 | 理由 |
|---|---|---|
| No Sub-Agents | tmux 多實例 / Extension 實作 | 子代理使偵錯複雜化,tmux 提供完整可觀測性 |
| No Built-in To-dos | 使用 TODO.md 檔案 | 內建待辦會混淆模型,純文字檔更可靠 |
| No Permission Popups | PLAN.md + Extension 權限閘門 | 彈出視窗中斷工作流,PLAN.md 提供更好的控制 |
| No Background Bash | 使用 tmux | 背景執行缺乏可觀測性,tmux 提供完整控制 |
| No Built-in MCP | Extension 整合 | MCP 可透過 Extension 實現,保持核心簡潔 |
| No GUI | TUI 終端介面 | CLI 天然適合自動化、遠端連線和管道操作 |
2.5 優點與缺點分析
優點
| 項目 | 說明 |
|---|---|
| 完全透明 | 所有操作可見、可追溯、可審計 |
| 高度可擴充 | TypeScript Extension 可做任何事 |
| 多模型支援 | 20+ Provider,隨時切換 |
| 成本可控 | 即時顯示 Token 用量與費用 |
| 無廠商鎖定 | 開源 MIT,可自行 Fork |
| 輕量快速 | 啟動快,資源佔用低 |
| 多運行模式 | Interactive / Print / RPC / SDK |
| 完整 SDK | 可程式化嵌入自有系統 |
缺點
| 項目 | 說明 |
|---|---|
| 學習曲線 | 需熟悉終端操作與 TypeScript |
| 無 GUI | 不適合需要視覺化的工作流 |
| 需自行配置 | 不像 Cursor 般即開即用 |
| 社群較小 | 相比 Copilot/Cursor,生態系較年輕 |
實務案例:某團隊將 Pi 用於後端 API 開發(利用 Claude 模型),同時用 GitHub Copilot 處理前端 Vue 元件。Pi 的多模型支援讓他們可以在同一終端中切換使用最適合各階段的模型。
3. 系統架構設計(System Architecture)
3.1 企業級 Web 系統架構圖
以下展示使用 Pi Agent 開發大型 Web 系統的完整架構:
graph TB
subgraph "AI Agent Layer"
PI[Pi Code Agent]
EXT[Extensions]
SKL[Skills]
PT[Prompt Templates]
PI --> EXT
PI --> SKL
PI --> PT
end
subgraph "Frontend Layer"
VUE[Vue 3 + TypeScript]
TAILWIND[Tailwind CSS]
VUE --> TAILWIND
end
subgraph "API Gateway"
GW[API Gateway / Nginx]
end
subgraph "Backend Layer"
SB[Spring Boot 3.x]
CTRL[Controller Layer]
SVC[Service Layer]
REPO[Repository Layer]
SB --> CTRL --> SVC --> REPO
end
subgraph "Messaging Layer"
KAFKA[Apache Kafka]
RMQ[RabbitMQ]
end
subgraph "Cache Layer"
REDIS[Redis Cluster]
end
subgraph "Data Layer"
PG[(PostgreSQL)]
ORACLE[(Oracle)]
DB2[(DB2)]
end
subgraph "Batch Layer"
BATCH[Spring Batch]
end
subgraph "DevOps Layer"
GIT[Git / GitHub]
CI[GitHub Actions]
DOCKER[Podman / Docker]
end
PI -.->|生成/修改程式碼| VUE
PI -.->|生成/修改程式碼| SB
PI -.->|生成測試| SB
PI -.->|生成配置| CI
VUE --> GW --> CTRL
SVC --> KAFKA
SVC --> RMQ
SVC --> REDIS
REPO --> PG
REPO --> ORACLE
REPO --> DB2
BATCH --> PG
GIT --> CI --> DOCKER3.2 Pi 在架構中的定位
Pi Agent 運作在開發者工作站層,而非系統運行時:
graph LR
subgraph "Developer Workstation"
DEV[開發者]
PI[Pi Agent]
TERM[Terminal / tmux]
DEV --> TERM --> PI
end
subgraph "Source Control"
GIT[Git Repository]
end
subgraph "CI/CD"
GHA[GitHub Actions]
end
subgraph "Runtime"
APP[Application]
end
PI -->|產生程式碼| GIT
GIT -->|觸發| GHA
GHA -->|部署| APP3.3 Agent 參與開發流程
Pi Agent 在 SDLC 各階段的參與方式:
| 階段 | Pi 的角色 | 使用方式 |
|---|---|---|
| 需求分析 | 協助產生 User Story | Prompt Template |
| 系統設計 | 生成架構文件、API Spec | PLAN.md + Skill |
| 開發 | 生成/修改程式碼 | 互動模式 |
| 測試 | 生成測試案例 | Extension + Skill |
| Code Review | AI 審查程式碼 | 唯讀模式 |
| 部署 | 生成 CI/CD 配置 | Prompt Template |
| 維運 | Log 分析、問題診斷 | 互動模式 |
3.4 多模型策略架構
graph TD
PI[Pi Agent] --> |Ctrl+L 切換| MS{Model Selector}
MS --> ANT[Anthropic Claude]
MS --> OAI[OpenAI GPT-4o]
MS --> GEM[Google Gemini]
MS --> AZ[Azure OpenAI]
MS --> BED[Amazon Bedrock]
ANT --> |適合| DESIGN[架構設計 / 複雜邏輯]
OAI --> |適合| CODE[程式碼生成]
GEM --> |適合| DOC[文件撰寫]
AZ --> |適合| ENTERPRISE[企業合規環境]
BED --> |適合| BATCH_AI[批次處理]實務建議:建議在
settings.json中設定scopedModels,讓Ctrl+P可以快速在常用模型間切換,避免每次都要搜尋。
4. 安裝與環境建置(Installation & Setup)
4.1 系統需求
| 項目 | 需求 |
|---|---|
| Node.js | v18.0+(建議 v20 LTS) |
| npm | v9.0+(或 pnpm / yarn) |
| 作業系統 | Windows / macOS / Linux / Android(Termux) |
| 終端 | 建議使用 Windows Terminal / iTerm2 / Alacritty / Kitty |
| Git | v2.30+ |
平台支援說明:
- Windows:需使用 Windows Terminal;不支援原生
Ctrl+Z暫停,但其餘功能完整。詳見 docs/windows.md。- macOS / Linux:完整支援,包含
Ctrl+Z暫停/恢復。Linux ARM64(musl)亦支援。- Android(Termux):
pkg install nodejs termux-api git && npm install -g @mariozechner/pi-coding-agent- tmux:建議搭配使用,需啟用
set -g extended-keys on。詳見 docs/tmux.md。
4.2 安裝步驟
Windows
# 1. 確認 Node.js 版本
node --version # 需 >= 18
# 2. 全域安裝 Pi Coding Agent
npm install -g @mariozechner/pi-coding-agent
# 3. 確認安裝成功
pi --versionmacOS / Linux
# 1. 確認 Node.js 版本
node --version # 需 >= 18
# 2. 全域安裝
npm install -g @mariozechner/pi-coding-agent
# 3. 確認安裝
pi --version4.3 認證設定
Pi 支援兩種認證方式:
方式一:API Key(推薦用於企業環境)
# Anthropic
export ANTHROPIC_API_KEY=sk-ant-xxx
# OpenAI
export OPENAI_API_KEY=sk-xxx
# Google
export GOOGLE_API_KEY=xxx
# Google Vertex AI
export GOOGLE_CLOUD_API_KEY=xxx # 或使用 Application Default Credentials
# Azure OpenAI
export AZURE_OPENAI_API_KEY=xxx
export AZURE_OPENAI_ENDPOINT=https://xxx.openai.azure.com
# Amazon Bedrock
# 使用 AWS CLI 預設認證鏈,或設定:
export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx
export AWS_REGION=us-east-1
# 替代方式:Bearer Token
export AWS_BEARER_TOKEN_BEDROCK=xxx
# Mistral
export MISTRAL_API_KEY=xxx
# Groq
export GROQ_API_KEY=xxx
# Cerebras
export CEREBRAS_API_KEY=xxx
# xAI (Grok)
export XAI_API_KEY=xxx
# Hugging Face
export HF_TOKEN=xxx
# Kimi For Coding (Moonshot AI)
export KIMI_API_KEY=xxx
# MiniMax / MiniMax China
export MINIMAX_API_KEY=xxx
# OpenRouter
export OPENROUTER_API_KEY=xxx
# ZAI (z.ai)
export ZAI_API_KEY=xxx
# OpenCode Zen
export OPENCODE_ZEN_API_KEY=xxx
# OpenCode Go
export OPENCODE_API_KEY=xxx
# Ollama(本地部署,無需 API Key)
export OLLAMA_BASE_URL=http://localhost:11434安全提醒:
- 請勿將 API Key 寫入程式碼或 Git 中。使用環境變數或 Secret Manager。
- 在
auth.json中可使用 Shell 命令解析:"anthropic": "!security find-generic-password -ws 'anthropic'"- API Key 也可存於
~/.pi/agent/auth.json:{ "anthropic": "sk-ant-xxx" }
方式二:OAuth 訂閱登入
pi
/login # 在互動模式中登入支援的訂閱服務:
| 訂閱服務 | 說明 |
|---|---|
| Anthropic Claude Pro/Max | 注意:第三方使用扣除額外用量,依 Token 計費 |
| OpenAI ChatGPT Plus/Pro(Codex) | 支援 gpt-5.1、gpt-5.2、gpt-5.4 等模型 |
| GitHub Copilot | 支援 Copilot Business/Enterprise 帳戶 |
| Google Gemini CLI | Google AI Studio 訂閱 |
| Google Antigravity | Google 訂閱服務,支援 Claude 和 Gemini 模型 |
4.4 專案初始化
# 進入專案目錄
cd /path/to/your-project
# 建立 Pi 專案配置目錄
mkdir -p .pi/extensions .pi/skills .pi/prompts .pi/themes
# 建立 AGENTS.md(專案指引)
cat > AGENTS.md << 'EOF'
# 專案指引
## 技術棧
- 後端:Java 21 + Spring Boot 3.5
- 前端:Vue 3 + TypeScript + Tailwind CSS
- 資料庫:PostgreSQL 16
- 快取:Redis 7
- 訊息佇列:Kafka 3.x
## 程式碼規範
- 使用 Clean Architecture
- Controller → Service → Repository 分層
- 所有 API 必須有 Swagger 文件
- 測試覆蓋率 > 80%
## 命名規範
- 類別:PascalCase
- 方法/變數:camelCase
- 常數:UPPER_SNAKE_CASE
- 資料表:snake_case
EOF4.5 全域設定
# 建立全域配置目錄
mkdir -p ~/.pi/agent/prompts ~/.pi/agent/skills ~/.pi/agent/extensions
# 編輯全域設定
cat > ~/.pi/agent/settings.json << 'EOF'
{
"provider": "anthropic",
"model": "claude-sonnet-4-20250514",
"thinking": "medium",
"enableInstallTelemetry": false,
"compaction": {
"enabled": true,
"mode": "auto"
}
}
EOF4.6 專案層級設定
cat > .pi/settings.json << 'EOF'
{
"provider": "anthropic",
"model": "claude-sonnet-4-20250514",
"thinking": "high",
"tools": ["read", "write", "edit", "bash", "grep", "find", "ls"]
}
EOF4.7 目錄結構一覽
your-project/
├── .pi/ # Pi 專案配置
│ ├── settings.json # 專案設定(覆蓋全域,唯讀版控用)
│ ├── extensions/ # 專案 Extension
│ ├── skills/ # 專案 Skill
│ ├── prompts/ # 專案 Prompt Template
│ └── themes/ # 專案 Theme
├── .agents/ # Agent Skills 標準路徑(替代 .pi/skills/)
│ └── skills/ # 依 Agent Skills 標準組織
├── AGENTS.md # 專案指引(Pi 啟動時自動載入)
├── CLAUDE.md # AGENTS.md 的別名(相容 Claude Code 用戶)
├── SYSTEM.md # 自訂系統提示(取代預設系統提示)
├── APPEND_SYSTEM.md # 附加到系統提示末尾(不取代)
├── PLAN.md # 開發計畫(手動維護)
├── src/ # 原始碼
├── test/ # 測試
└── ...
~/.pi/agent/ # 全域配置
├── auth.json # API Key 與 OAuth Token
├── settings.json # 全域設定
├── models.json # 自訂模型定義
├── keybindings.json # 自訂快捷鍵
├── sessions/ # Session 儲存
│ └── <encoded-cwd>/ # 依專案路徑編碼
├── extensions/ # 全域 Extension
├── skills/ # 全域 Skill(也支援 ~/.agents/skills/)
├── prompts/ # 全域 Prompt Template
├── themes/ # 全域 Theme
└── bin/ # 託管二進位檔(fd, rg)Context Files 載入順序:Pi 會從當前目錄向上遍歷父目錄,依序載入所有找到的
AGENTS.md(或CLAUDE.md)。SYSTEM.md取代預設系統提示;APPEND_SYSTEM.md則附加在末尾。
4.8 常見錯誤與解法
| 錯誤 | 原因 | 解法 |
|---|---|---|
command not found: pi | npm 全域路徑未加入 PATH | 確認 npm prefix -g 路徑在 PATH 中 |
ANTHROPIC_API_KEY not set | 未設定環境變數 | export ANTHROPIC_API_KEY=sk-ant-xxx 或在 auth.json 中設定 |
Context overflow | Session 過長 | 使用 /compact 或 /new 開新 Session |
Model not found | 模型名稱錯誤 | pi --list-models 查看可用模型 |
Windows 下 Alt+Enter 無效 | Windows Terminal 預設全螢幕 | 在 Windows Terminal 設定中重新映射 |
| Node.js 版本太舊 | Pi 需要 Node 18+ | 升級 Node.js 至 v20 LTS |
ERR_MODULE_NOT_FOUND | pnpm 嚴格模式缺少依賴 | 重新安裝 npm install -g @mariozechner/pi-coding-agent |
| tmux 中 Shift+Enter 無效 | tmux 未啟用 extended-keys | 在 tmux.conf 加入 set -g extended-keys on |
| Ctrl+Z 在 Windows 下崩潰 | Windows 不支援 SIGTSTP | v0.67.4+ 已修復,更新到最新版 |
實務建議:企業環境中建議統一使用
nvm(Node Version Manager)管理 Node.js 版本,並在專案中放置.nvmrc檔案指定版本。若使用 pnpm 或其他套件管理器,可在settings.json中設定"npmCommand": "pnpm"以確保相容。
5. 基本使用教學(Getting Started)
5.1 啟動 Pi Agent
# 基本啟動(互動模式)
pi
# 帶初始 Prompt 啟動
pi "列出 src/ 下所有 Java 檔案"
# 繼續上次 Session
pi -c
# 瀏覽並選擇 Session
pi -r
# 無 Session 模式(不儲存歷史)
pi --no-session
# 指定模型啟動
pi --provider anthropic --model claude-sonnet-4-20250514
# 簡寫模型指定
pi --model anthropic/claude-sonnet-4-20250514
# 指定思考等級(含 xhigh 超高思考)
pi --model sonnet:high "解決這個複雜問題"
pi --thinking xhigh "設計整個微服務架構"
# 從先前 Session 分支(fork)
pi --fork <session-id-or-path>
# 恢復指定 Session
pi --session <session-id-or-path>
# 不載入任何 Context Files
pi --no-context-files
pi -nc
# 附加系統提示
pi --append-system-prompt "所有回應使用繁體中文"
# 限制可用工具
pi --tools read,grep,find,ls # 唯讀模式
pi --no-tools # 完全禁用工具5.2 生成程式碼
範例 1:生成 Spring Boot REST Controller
> 請幫我建立一個 UserController,包含 CRUD API,使用 Clean Architecture 分層:
> - Controller:處理 HTTP 請求
> - Service:業務邏輯
> - Repository:資料存取
> - Entity:資料模型
> 使用 JPA + PostgreSQL範例 2:生成 Vue 元件
> 建立一個 UserList.vue 元件:
> - 使用 Composition API + TypeScript
> - 使用 Tailwind CSS 排版
> - 包含搜尋、分頁功能
> - 呼叫 /api/users GET API5.3 修改檔案
> 在 UserService.java 中新增一個 searchUsers 方法:
> - 參數:keyword (String), pageable (Pageable)
> - 回傳:Page<UserDTO>
> - 支援模糊搜尋 name 和 emailPi 會使用 edit 工具進行差異替換,你可以在終端看到具體修改的內容。
5.4 執行指令
> 執行 Maven 測試Pi 會呼叫 bash 工具執行:
mvn test你也可以直接在終端中用 ! 前綴執行命令:
!mvn clean compile # 執行並將輸出傳給 LLM
!!mvn clean compile # 執行但不傳給 LLM5.5 Debug 技巧
> 這個測試失敗了,請分析原因:
> @src/test/java/com/example/UserServiceTest.java
>
> 錯誤訊息:
> java.lang.NullPointerException at UserService.java:42使用 @ 前綴可以引入檔案內容到 Prompt 中。
5.6 常用互動模式操作
快捷鍵一覽
| 操作 | 快捷鍵 | 說明 |
|---|---|---|
| 模型管理 | ||
| 切換模型 | Ctrl+L | 開啟模型選擇器(保留編輯器文字) |
| 快速切換模型 | Ctrl+P | 在 Scoped Models 間向前循環 |
| 反向切換模型 | Shift+Ctrl+P | 在 Scoped Models 間向後循環 |
| 思考控制 | ||
| 切換思考等級 | Shift+Tab | off → minimal → low → medium → high → xhigh |
| 展開/收合思考 | Ctrl+T | 查看 LLM 的思考過程 |
| 工具與輸出 | ||
| 展開/收合工具輸出 | Ctrl+O | 查看或隱藏工具執行細節 |
| Session 管理 | ||
| 開啟 Session Tree | Escape × 2 | 連按兩次 Escape 開啟 /tree |
| 編輯器 | ||
| 送出訊息(Steering) | Enter | 送出轉向訊息(如 Agent 正在運行,會在當前工具批次後插入) |
| 送出訊息(Follow-up) | Alt+Enter | 送出後續訊息(等待 Agent 完成後才送出) |
| 多行輸入 | Shift+Enter | 換行(tmux 需啟用 extended-keys) |
| 外部編輯器 | Ctrl+G | 在 vim/nano 等外部編輯器中編輯輸入 |
| 引用檔案 | @ | 輸入 @ 後模糊搜尋檔案引入 |
| 路徑補全 | Tab | 自動補全路徑和斜線命令 |
| 貼上圖片 | Ctrl+V | 貼上剪貼簿圖片(Windows 用 Alt+V) |
| Kill Line / Yank | Ctrl+K / Ctrl+Y | Emacs 風格 kill ring 操作 |
| Undo | Ctrl+Z | 復原上一步編輯 |
| Word 前進 / 後退 | Alt+F / Alt+B | Shell 風格單詞導航 |
| 中斷與退出 | ||
| 中斷 | Escape | 中斷當前操作 |
| 清除輸入 | Ctrl+C | 清除編輯器內容 |
| 退出 | Ctrl+C × 2 | 連按兩次退出 Pi |
Message Queue(訊息佇列機制)
Pi 具備獨特的訊息佇列機制,讓你在 Agent 運行中仍可送出訊息:
| 訊息類型 | 快捷鍵 | 行為 |
|---|---|---|
| Steering(轉向) | Enter | 在當前工具批次完成後立即插入,用於引導方向 |
| Follow-up(後續) | Alt+Enter | 等待 Agent 完全完成後才送出,用於追加任務 |
# 情境範例:Agent 正在修改 UserService.java
# 你突然想到還需要加入驗證邏輯:
Steering(Enter): "等等,請在 createUser 方法中加入 email 格式驗證"
→ Agent 會在完成當前工具操作後讀取此訊息,改變方向
Follow-up(Alt+Enter): "完成後請一併寫測試"
→ Agent 會先完成所有手頭工作,然後才處理此訊息企業建議:Steering 和 Follow-up 的行為可透過
/settings調整steeringMode和followUpMode。
常用斜線命令
| 命令 | 說明 |
|---|---|
/new | 開啟新 Session |
/tree | 開啟 Session Tree(檢視分支歷史) |
/fork | 從先前的訊息分支出新 Session |
/clone | 複製當前分支到新 Session |
/resume | 瀏覽並恢復先前 Session |
/model | 切換 LLM 模型 |
/scoped-models | 啟用/停用 Ctrl+P 循環中的模型 |
/thinking | 切換思考等級 |
/compact | 手動壓縮 Session 上下文 |
/share | 分享 Session 到 pi.dev |
/export | 匯出 Session 為 HTML 或 JSONL |
/import | 匯入 JSONL Session |
/copy | 複製最後回應到剪貼簿 |
/config | 檢視/切換已載入的資源 |
/settings | 開啟設定選單 |
/reload | 熱重載所有資源(AGENTS.md / Extension / Skill 等) |
/login | OAuth 訂閱登入 |
/name | 為當前 Session 命名 |
/files | 列出本次 Session 所有檔案操作 |
/session | 顯示當前 Session ID 與路徑 |
/hotkeys | 顯示所有快捷鍵 |
/quit | 退出 Pi |
5.7 非互動模式(Print / JSON / RPC)
Pi 提供多種非互動運行模式,適合自動化與整合:
Print 模式(-p)
# 印出回應後退出
pi -p "分析 pom.xml 的依賴是否有安全漏洞"
# 管線輸入
cat README.md | pi -p "幫我翻譯成英文"
# 唯讀模式審查
pi --tools read,grep,find,ls -p "Review src/ 的程式碼品質"
# 指定思考等級
pi -p --thinking high "重構 UserService 為 Clean Architecture"JSON 模式
# 結構化輸出(適合程式處理)
pi --mode json -p "列出所有 TODO" | jq '.result'RPC 模式
# JSON 協議透過 stdin/stdout(適合 IDE 整合)
pi --mode rpc
# 送入 JSON 命令,接收 JSON 事件實務建議:非互動模式非常適合整合到 CI/CD Pipeline 中,例如在 PR 建立時自動進行 Code Review。RPC 模式特別適合建構自有的前端 UI 或 IDE 外掛。
6. Context Engineering(上下文工程)
6.1 Context Files 體系
Pi 使用多層級的 Context Files 來建構 LLM 的系統提示。理解這套體系是有效使用 Pi 的關鍵。
| 檔案 | 作用 | 優先級 |
|---|---|---|
AGENTS.md | 專案指引,描述技術棧、規範、架構 | 自動載入,從 cwd 向上遍歷所有父目錄 |
CLAUDE.md | AGENTS.md 的別名(相容 Claude Code 用戶) | 與 AGENTS.md 等效 |
SYSTEM.md | 完全取代預設系統提示 | 取代,非附加 |
APPEND_SYSTEM.md | 附加到系統提示末尾 | 附加,不取代 |
| Skills | 任務專精指引(如「寫測試」、「做 Code Review」) | 由 Agent 自動選擇或手動 @skill-name 觸發 |
| Prompt Templates | 可重複使用的提示範本 | 透過 /template-name 觸發 |
AGENTS.md 的作用鏈
~/.pi/agent/AGENTS.md ← 全域指引(個人偏好)
↓
~/projects/company/AGENTS.md ← 公司層級指引
↓
~/projects/company/my-app/AGENTS.md ← 專案層級指引(cwd)Pi 會依序載入從 cwd 到根目錄路徑上所有找到的 AGENTS.md,全部注入系統提示。
6.2 AGENTS.md 撰寫最佳實務
# AGENTS.md - Spring Boot 微服務專案
## 技術棧
- Java 21 + Spring Boot 3.5 + Spring Cloud 2024
- PostgreSQL 16 + Redis 7 + Kafka 3.x
- Vue 3 + TypeScript + Tailwind CSS
## 架構原則
- Clean Architecture:Controller → Service → Repository
- 所有 API 必須有 OpenAPI 3.0 文件
- 禁止在 Controller 中寫業務邏輯
## 程式碼規範
- 測試覆蓋率 > 80%
- 所有 public 方法需有 JavaDoc
- 使用 Lombok @Slf4j 記錄日誌
- 例外處理使用 @ControllerAdvice
## 禁止事項
- 不得使用 System.out.println
- 不得在程式碼中硬編碼密碼或金鑰
- 不得跳過測試6.3 SYSTEM.md vs APPEND_SYSTEM.md
| 用途 | 使用的檔案 | 範例場景 |
|---|---|---|
| 完全覆蓋系統提示 | SYSTEM.md | 建構特殊用途 Agent(如 SQL-only Agent) |
| 在預設提示上增補 | APPEND_SYSTEM.md | 加入團隊特有的安全檢查清單 |
| CLI 附加 | --append-system-prompt "..." | 臨時增加指令(支援多次使用) |
| 禁用 Context Files | --no-context-files / -nc | 乾淨執行,不載入任何專案 Context |
# 範例:使用 SYSTEM.md 建構唯讀稽核 Agent
cat > SYSTEM.md << 'EOF'
You are a code auditor. You can only use read, grep, and find tools.
Never modify any files. Report findings in a structured format.
EOF
# 範例:附加安全檢查到現有提示
cat > APPEND_SYSTEM.md << 'EOF'
## Additional Security Requirements
- Always check for SQL injection vulnerabilities
- Flag any hardcoded credentials
- Verify input validation on all API endpoints
EOF7. PLAN.md 開發模式
7.1 為什麼 Pi 不用 Plan Mode
| 議題 | 內建 Plan Mode | PLAN.md |
|---|---|---|
| 可版控 | ❌ | ✅ Git 追蹤 |
| 跨會話共享 | ❌ | ✅ 任何 Session 可讀 |
| 多人協作 | ❌ | ✅ 團隊共同編輯 |
| 透明度 | ❌ 黑盒 | ✅ 純文字 |
| 格式自由 | ❌ 固定格式 | ✅ 自訂格式 |
| AI 可讀寫 | ❌ 僅 AI 內部 | ✅ AI + 人類皆可 |
7.2 PLAN.md 範本
# PLAN.md - 使用者管理模組
## 專案資訊
- **模組名稱**:User Management
- **負責人**:@chihhung
- **Sprint**:Sprint 23(2026/04/21 - 2026/05/02)
- **狀態**:🔄 進行中
## 目標
建立完整的使用者管理功能,包含 CRUD、搜尋、權限控制。
## 任務分解
### Phase 1:後端 API(預估 3 天)
- [x] 建立 User Entity + JPA 設定
- [x] 建立 UserRepository
- [ ] 建立 UserService(含業務邏輯)
- [ ] createUser()
- [ ] updateUser()
- [ ] deleteUser()
- [ ] searchUsers()
- [ ] 建立 UserController
- [ ] POST /api/users
- [ ] PUT /api/users/{id}
- [ ] DELETE /api/users/{id}
- [ ] GET /api/users?keyword=xxx&page=0&size=20
- [ ] 建立 UserDTO + Mapper
- [ ] 撰寫 JUnit 測試(覆蓋率 > 80%)
### Phase 2:前端 UI(預估 2 天)
- [ ] UserList.vue - 使用者列表
- [ ] UserForm.vue - 新增/編輯表單
- [ ] UserDetail.vue - 使用者詳情
- [ ] API 整合(axios)
- [ ] 元件測試
### Phase 3:進階功能(預估 2 天)
- [ ] 角色權限(RBAC)
- [ ] 操作日誌(Audit Log)
- [ ] 匯出 Excel
## 技術決策
- 使用 Spring Data JPA Specification 做動態查詢
- DTO 轉換使用 MapStruct
- 密碼加密使用 BCrypt
- API 文件使用 SpringDoc OpenAPI
## 注意事項
- 所有 API 需加入 @PreAuthorize 權限控制
- 密碼欄位不得出現在 Response 中
- 刪除改用軟刪除(isDeleted flag)7.3 任務拆解原則
graph TD
EPIC[Epic / 使用者故事] --> F1[Feature 1]
EPIC --> F2[Feature 2]
F1 --> T1[Task 1.1 - Entity]
F1 --> T2[Task 1.2 - Repository]
F1 --> T3[Task 1.3 - Service]
F1 --> T4[Task 1.4 - Controller]
F1 --> T5[Task 1.5 - Test]
F2 --> T6[Task 2.1 - Vue 元件]
F2 --> T7[Task 2.2 - API 整合]
F2 --> T8[Task 2.3 - 元件測試]拆解原則:
- 每個 Task 應在 30 分鐘內完成
- 每個 Task 應有明確的完成標準
- Task 之間的依賴關係要清楚標示
- 使用 Checkbox 追蹤進度
7.4 Sprint 規劃範例
# Sprint 23 PLAN.md
## Sprint 目標
完成使用者管理模組的後端 API 與前端 UI。
## 每日任務安排
### Day 1(Mon)
- [ ] 設計 DB Schema(users, roles, user_roles)
- [ ] 建立 Entity + Repository
- [ ] Pi Prompt: "根據 PLAN.md 的 DB Schema 建立 JPA Entity"
### Day 2(Tue)
- [ ] 建立 Service Layer
- [ ] Pi Prompt: "建立 UserService,實作 PLAN.md Phase 1 的所有方法"
### Day 3(Wed)
- [ ] 建立 Controller + DTO
- [ ] 撰寫 Swagger 文件
- [ ] Pi Prompt: "建立 UserController,使用 SpringDoc 註解"
### Day 4(Thu)
- [ ] 撰寫 JUnit 測試
- [ ] Pi Prompt: "為 UserService 撰寫完整的 JUnit 5 測試"
### Day 5(Fri)
- [ ] 前端 UserList.vue
- [ ] Pi Prompt: "建立 UserList.vue,使用 Composition API + Tailwind"
## Retrospective(Sprint 結束後填寫)
- 什麼做得好:
- 什麼需要改進:
- Pi 使用心得:7.5 實戰:開發 Web API 的 PLAN.md
在 Pi 互動模式中使用 PLAN.md:
> 請讀取 PLAN.md,然後開始執行 Phase 1 中尚未完成的第一個任務> @PLAN.md 目前進度到哪了?請繼續下一個待辦事項> 我完成了 UserService,請更新 PLAN.md 將該項標記為完成,
> 並告訴我下一步該做什麼實務建議:每次開始工作前,先讓 Pi 讀取 PLAN.md 了解上下文。這比重新描述需求更有效率,也確保 AI 的輸出與計畫一致。
8. Extensions / Skills / Prompt Templates / Themes
8.1 概覽
Pi 的四大擴充機制:
| 機制 | 用途 | 載入時機 | 開發語言 |
|---|---|---|---|
| Extension | 自訂工具、命令、快捷鍵、UI、Provider | 啟動時 | TypeScript |
| Skill | 按需載入的能力包(指令 + 工具) | 自動匹配或 @skill-name 觸發 | Markdown + YAML Frontmatter |
| Prompt Template | 可重用的 Prompt 範本 | /name 展開 | Markdown + YAML Frontmatter |
| Theme | 自訂終端配色主題 | 啟動時,支援熱重載 | JSON |
8.2 Prompt Templates
放置位置:
- 全域:
~/.pi/agent/prompts/ - 專案:
.pi/prompts/
範例:Code Review 模板
<!-- .pi/prompts/review.md -->
請對以下程式碼進行 Code Review,檢查:
1. **安全性**:SQL Injection、XSS、CSRF、敏感資訊洩漏
2. **效能**:N+1 Query、不必要的迴圈、記憶體洩漏
3. **可維護性**:命名規範、方法長度、單一職責
4. **測試**:是否有對應測試、邊界條件
5. **Clean Architecture**:是否違反分層規則
目標檔案:{{file}}
請用表格格式輸出發現的問題,包含:嚴重度、行號、問題描述、建議修改。使用方式:
/review範例:測試生成模板
<!-- .pi/prompts/gen-test.md -->
請為 {{file}} 生成完整的 JUnit 5 測試:
要求:
1. 使用 @ExtendWith(MockitoExtension.class)
2. 每個 public 方法至少 3 個測試案例(正常、邊界、異常)
3. 使用 @DisplayName 描述測試目的
4. Mock 外部依賴
5. 使用 AssertJ 斷言
6. 測試覆蓋率目標 > 80%範例:帶引數提示的 Prompt Template
---
argument-hint: 要產生 API 的資源名稱(如 User, Order)
---
請為 {{input}} 資源建立完整的 RESTful API:
1. Entity + JPA 註解
2. Repository(Spring Data JPA)
3. Service(含 DTO 轉換)
4. Controller(含 Swagger 註解)
5. JUnit 測試8.3 Skills
Skills 遵循 Agent Skills 標準,是按需載入的能力包。LLM 會根據上下文自動選擇適當的 Skill,或由使用者透過 @skill-name 手動觸發。
放置位置:
- 全域:
~/.pi/agent/skills/ - 專案:
.pi/skills/或.agents/skills/(兩者皆支援)
範例:資料庫遷移 Skill
<!-- .pi/skills/db-migration/SKILL.md -->
# Database Migration Skill
使用此 Skill 管理資料庫 Schema 遷移。
## 工具
### flyway-migrate
執行 Flyway 遷移:
```bash
mvn flyway:migrateflyway-info
查看遷移狀態:
mvn flyway:info步驟
- 在
src/main/resources/db/migration/下建立遷移檔案 - 命名規範:
V{版號}__{描述}.sql(如V1.0__create_users_table.sql) - 執行
flyway-migrate套用變更 - 執行
flyway-info確認狀態
注意事項
- 已套用的遷移檔案不可修改
- 使用
V前綴做版本遷移,R前綴做可重複遷移 - 生產環境遷移前必須先在 SIT/UAT 驗證
使用方式:/skill:db-migration
或 AI 會根據上下文自動載入相關 Skill。
### 8.4 Extensions
Extensions 是 TypeScript 模組,擁有完整的 Pi API 存取權限。
放置位置:
- 全域:`~/.pi/agent/extensions/`
- 專案:`.pi/extensions/`
#### 範例 1:Git Checkpoint Extension
```typescript
// .pi/extensions/git-checkpoint.ts
export default function (pi: ExtensionAPI) {
// 在每次工具呼叫後自動 Git Commit
pi.on("tool_result", async (event, ctx) => {
if (event.toolName === "write" || event.toolName === "edit") {
const filePath = event.args?.filePath || event.args?.file_path;
if (filePath) {
await ctx.bash(`git add ${filePath} && git commit -m "pi: auto-checkpoint ${filePath}" --no-verify`, {
silent: true,
});
}
}
});
// 註冊 rollback 命令
pi.registerCommand("rollback", {
description: "回滾到上一個 Git checkpoint",
handler: async (args, ctx) => {
await ctx.bash("git log --oneline -10");
ctx.notify("使用 git revert <commit> 來回滾特定變更");
},
});
}範例 2:Permission Gate Extension
// .pi/extensions/permission-gate.ts
export default function (pi: ExtensionAPI) {
// 保護重要檔案不被修改
const protectedPaths = [
"src/main/resources/application-prod.yml",
"docker-compose.prod.yml",
".env.production",
"Dockerfile",
];
pi.on("tool_call", async (event, ctx) => {
if (event.toolName === "write" || event.toolName === "edit") {
const filePath = event.args?.filePath || event.args?.file_path || "";
if (protectedPaths.some((p) => filePath.includes(p))) {
const confirmed = await ctx.confirm(
`⚠️ 即將修改受保護檔案:${filePath}\n確定要繼續嗎?`
);
if (!confirmed) {
return { abort: true, message: "操作已取消" };
}
}
}
});
}範例 3:自訂 Deploy 工具
// .pi/extensions/deploy-tool.ts
export default function (pi: ExtensionAPI) {
pi.registerTool({
name: "deploy",
description: "部署應用程式到指定環境",
parameters: {
type: "object",
properties: {
environment: {
type: "string",
enum: ["dev", "sit", "uat"],
description: "目標環境",
},
version: {
type: "string",
description: "版本號(如 1.2.3)",
},
},
required: ["environment", "version"],
},
handler: async (args, ctx) => {
const { environment, version } = args;
// 禁止直接部署到 prod
if (environment === "prod") {
return { error: "生產環境部署必須透過 CI/CD Pipeline" };
}
ctx.notify(`開始部署 v${version} 到 ${environment}...`);
const result = await ctx.bash(
`./scripts/deploy.sh --env ${environment} --version ${version}`
);
return { success: true, output: result };
},
});
}8.5 自動生成 Extension
你可以直接請 Pi 幫你寫 Extension:
> 幫我寫一個 Pi Extension,功能如下:
> 1. 註冊一個 /stats 命令,顯示目前專案的程式碼統計(行數、檔案數)
> 2. 在每次 Session 開始時,自動載入 PLAN.md 的內容
> 3. 把 Extension 放在 .pi/extensions/ 目錄下8.6 Pi Packages(套件分享)
將 Extension、Skill、Prompt Template 打包為 Pi Package:
// package.json
{
"name": "@myteam/pi-enterprise-tools",
"version": "1.0.0",
"keywords": ["pi-package"],
"pi": {
"extensions": ["./extensions"],
"skills": ["./skills"],
"prompts": ["./prompts"],
"themes": ["./themes"]
}
}安裝與管理:
# 從 npm 安裝
pi install npm:@myteam/pi-enterprise-tools
# 從 Git 安裝
pi install git:github.com/myteam/pi-enterprise-tools
# 專案本地安裝(僅當前專案)
pi install npm:@myteam/pi-enterprise-tools -l
# 試用(不安裝,僅本次 Session 載入)
pi install npm:@myteam/pi-enterprise-tools -e
# 安裝指定版本(pinned version)
pi install npm:@myteam/pi-enterprise-tools@1.2.3
# 列出已安裝套件
pi list
# 更新所有套件
pi update
# 設定啟用/停用
pi config安全提醒:Pi Packages 擁有完整的系統存取權限。Extension 可執行任意程式碼,Skill 可指示模型執行任何操作。安裝第三方套件前,請務必審查原始碼。
8.7 Themes(配色主題)
自訂終端 UI 的配色方案:
放置位置:
- 全域:
~/.pi/agent/themes/ - 專案:
.pi/themes/
// .pi/themes/corporate.json
{
"name": "Corporate Blue",
"colors": {
"primary": "#0078D4",
"secondary": "#106EBE",
"accent": "#FFB900",
"background": "#1E1E1E",
"text": "#D4D4D4",
"success": "#4CAF50",
"error": "#F44336",
"warning": "#FF9800"
}
}在 settings.json 中指定主題:
{
"theme": "corporate"
}提示:主題支援
/reload熱重載,修改後不需重啟 Pi。
9. Pi Agent + SSDLC(企業重點)
9.1 SSDLC 流程概覽
graph LR
subgraph "SSDLC with Pi Agent"
REQ[需求分析] --> DES[安全設計]
DES --> DEV[安全開發]
DEV --> TEST[安全測試]
TEST --> REV[Code Review]
REV --> SCAN[安全掃描]
SCAN --> DEPLOY[安全部署]
DEPLOY --> MON[監控維運]
MON --> OPT[持續優化]
OPT --> REQ
end9.2 各階段 Pi 整合方式
(1) 安全設計(Secure Design)
> @PLAN.md 請針對使用者管理模組進行威脅模型分析(Threat Modeling),
> 使用 STRIDE 方法,並產出安全設計文件(2) 安全開發(Secure Coding)
建立 Secure Coding 的 Prompt Template:
<!-- .pi/prompts/secure-code.md -->
請在撰寫程式碼時遵循以下安全規範:
1. **輸入驗證**:所有外部輸入必須驗證(使用 Jakarta Validation)
2. **SQL 防注入**:使用 JPA Parameterized Query,禁止字串拼接
3. **XSS 防護**:輸出編碼,使用 OWASP Java Encoder
4. **CSRF 防護**:啟用 Spring Security CSRF Token
5. **認證授權**:使用 @PreAuthorize 控制 API 存取
6. **敏感資料**:密碼使用 BCrypt,日誌不得記錄敏感欄位
7. **錯誤處理**:不得將堆疊追蹤回傳給客戶端
8. **依賴安全**:不使用已知漏洞的依賴(3) AI Code Review
# 使用唯讀模式進行安全審查
pi --tools read,grep,find,ls -p \
"請對 src/main/java/com/example/controller/ 目錄下的所有 Controller 進行安全審查,
檢查 OWASP Top 10 風險,以表格格式輸出結果"(4) SAST / DAST 整合
<!-- .pi/skills/security-scan/SKILL.md -->
# Security Scan Skill
## SAST(靜態分析)
```bash
# SpotBugs 安全掃描
mvn spotbugs:check
# SonarQube 掃描
mvn sonar:sonar -Dsonar.host.url=http://sonarqube:9000Dependency Scan
# OWASP Dependency Check
mvn org.owasp:dependency-check-maven:check步驟
- 執行 SAST 掃描
- 分析報告
- 修復發現的漏洞
- 重新掃描驗證
#### (5) CI/CD 安全整合
```yaml
# .github/workflows/ssdlc.yml
name: SSDLC Pipeline
on:
pull_request:
branches: [main, develop]
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: SAST - SpotBugs
run: mvn spotbugs:check
- name: Dependency Check
run: mvn org.owasp:dependency-check-maven:check
- name: Unit Tests
run: mvn test
- name: AI Code Review (Pi)
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
npm install -g @mariozechner/pi-coding-agent
pi --tools read,grep,find,ls -p \
"Review all changed files for security issues. Output as JSON." \
--mode json > review-results.json
- name: Upload Results
uses: actions/upload-artifact@v4
with:
name: security-reports
path: |
target/spotbugsXml.xml
target/dependency-check-report.html
review-results.json9.3 DevSecOps 流程圖
graph TB
subgraph "Development(Pi Agent)"
CODE[撰寫程式碼] --> REVIEW[AI Code Review]
REVIEW --> FIX[修復問題]
FIX --> COMMIT[Git Commit]
end
subgraph "CI Pipeline(GitHub Actions)"
COMMIT --> BUILD[Build]
BUILD --> SAST[SAST 掃描]
BUILD --> DEP[依賴掃描]
BUILD --> TEST[自動化測試]
SAST --> GATE{安全門檻}
DEP --> GATE
TEST --> GATE
end
subgraph "CD Pipeline"
GATE -->|通過| DEPLOY_DEV[部署 DEV]
DEPLOY_DEV --> DAST[DAST 掃描]
DAST --> DEPLOY_SIT[部署 SIT]
DEPLOY_SIT --> UAT[UAT 驗證]
UAT --> PROD[部署 PROD]
GATE -->|失敗| NOTIFY[通知開發者]
NOTIFY --> CODE
end
subgraph "Monitoring"
PROD --> LOG[日誌監控]
PROD --> ALERT[告警]
ALERT --> CODE
end實務建議:在 PR 流程中整合 Pi 的非互動模式做自動 Code Review,可以在人工 Review 前先過濾掉明顯的安全問題,大幅提升效率。
10. 實戰案例(Hands-on)
10.1 案例概述
使用 Pi 從零建立一個任務管理系統(Task Manager)。
技術棧:
- 後端:Spring Boot 3.5 + Java 21
- 前端:Vue 3 + TypeScript + Tailwind CSS
- 資料庫:PostgreSQL 16
- API 文件:SpringDoc OpenAPI
10.2 Step 1:初始化專案
> 請幫我用 Spring Initializr 建立一個 Spring Boot 3.5 專案:
> - Group: com.example
> - Artifact: task-manager
> - Dependencies: Spring Web, Spring Data JPA, PostgreSQL Driver,
> Spring Validation, SpringDoc OpenAPI
> - Java 21
> - 使用 Maven10.3 Step 2:設計 DB Schema
> 設計 Task Manager 的資料庫 Schema:
>
> tasks 表:
> - id (BIGSERIAL, PK)
> - title (VARCHAR 200, NOT NULL)
> - description (TEXT)
> - status (VARCHAR 20: TODO/IN_PROGRESS/DONE)
> - priority (VARCHAR 10: LOW/MEDIUM/HIGH)
> - assignee (VARCHAR 100)
> - due_date (TIMESTAMP)
> - created_at (TIMESTAMP, DEFAULT NOW())
> - updated_at (TIMESTAMP)
> - is_deleted (BOOLEAN, DEFAULT FALSE)
>
> 請產生 Flyway 遷移腳本 V1.0__create_tasks_table.sql10.4 Step 3:建立後端 API
> 根據 tasks 表建立完整的後端程式碼:
>
> 1. TaskEntity.java - JPA Entity
> 2. TaskRepository.java - Spring Data JPA Repository
> 3. TaskService.java - 業務邏輯(含 DTO 轉換)
> 4. TaskController.java - REST API Controller
> 5. TaskDTO.java - 資料傳輸物件
> 6. TaskStatus.java / TaskPriority.java - Enum
>
> API 規格:
> - POST /api/tasks 建立任務
> - GET /api/tasks 查詢任務列表(支援分頁、篩選)
> - GET /api/tasks/{id} 查詢單一任務
> - PUT /api/tasks/{id} 更新任務
> - DELETE /api/tasks/{id} 軟刪除任務
>
> 要求:
> - 使用 Clean Architecture 分層
> - 加入 Jakarta Validation
> - 加入 SpringDoc Swagger 註解
> - 使用 Specification 做動態查詢10.5 Step 4:撰寫測試
> 為 TaskService 撰寫完整的 JUnit 5 測試:
> - 使用 MockitoExtension
> - 每個方法至少 3 個測試案例
> - 包含正常流程、邊界條件、異常處理
> - 使用 AssertJ 斷言10.6 Step 5:建立前端
> 使用 Vue 3 + TypeScript + Tailwind CSS 建立前端頁面:
>
> 1. TaskList.vue - 任務列表頁
> - 表格顯示所有任務
> - 支援狀態篩選、搜尋
> - 分頁功能
>
> 2. TaskForm.vue - 新增/編輯任務的表單
> - 表單驗證
> - 日期選擇器
>
> 3. api/taskApi.ts - API 呼叫層
> - 使用 axios
> - 統一錯誤處理10.7 Step 6:部署配置
> 建立部署配置:
>
> 1. Dockerfile(多階段建置)
> 2. docker-compose.yml(含 PostgreSQL)
> 3. application-dev.yml
> 4. application-prod.yml(敏感資訊用環境變數)10.8 完整開發流程圖
sequenceDiagram
participant DEV as 開發者
participant PI as Pi Agent
participant GIT as Git
participant CI as CI/CD
DEV->>PI: 讀取 PLAN.md,開始 Phase 1
PI->>PI: 生成 Entity + Repository
DEV->>PI: 確認,繼續 Service
PI->>PI: 生成 Service + DTO
DEV->>PI: 確認,繼續 Controller
PI->>PI: 生成 Controller + Swagger
DEV->>PI: 生成測試
PI->>PI: 生成 JUnit 測試
DEV->>PI: !mvn test (執行測試)
PI->>DEV: 測試結果:12 passed, 0 failed
DEV->>PI: 更新 PLAN.md,開始 Phase 2
PI->>PI: 生成 Vue 元件
DEV->>GIT: git push
GIT->>CI: 觸發 Pipeline
CI->>CI: Build → Test → Scan → Deploy實務建議:每完成一個 Phase,使用
/compact壓縮上下文,避免 Token 用量過高。同時用/tree標記重要節點方便回溯。
11. 維運與監控(Operations)
11.1 Log 設計
Pi 的所有操作記錄在 Session 檔案中(JSONL 格式):
# Session 儲存位置
ls ~/.pi/agent/sessions/
# 匯出 Session 為 HTML(方便閱讀與分享)
pi --export session-file.jsonl output.html
# 上傳為 GitHub Gist 分享
# 在互動模式中使用 /share 命令建議的 Log 管理策略
# 定期清理過舊的 Session
find ~/.pi/agent/sessions/ -name "*.jsonl" -mtime +30 -delete
# 保留重要 Session(加入 Git 追蹤)
cp ~/.pi/agent/sessions/important-session.jsonl \
./docs/ai-sessions/11.2 Agent 行為監控
# 使用 JSON 模式監控 Agent 行為
pi --mode json -p "執行安全掃描" 2>&1 | tee agent-log.json
# 監控 Token 使用量
# 在互動模式中,Footer 會即時顯示:
# - Total Tokens
# - Cache Usage
# - Cost(美元)使用 /session 命令查看統計
/session
# 輸出:
# Session ID: abc123
# Messages: 45
# Total Tokens: 125,000
# Cache Tokens: 89,000
# Cost: $0.4211.3 Debug 方法
| 狀況 | 解法 |
|---|---|
| Agent 產出的程式碼有 Bug | 貼上錯誤訊息,讓 Pi 分析修復 |
| Agent 不遵循 AGENTS.md | 檢查 AGENTS.md 格式是否正確,重啟 Session |
| Context 過大導致回應品質下降 | 使用 /compact 壓縮上下文 |
| Extension 不運作 | 使用 --verbose 啟動查看載入日誌 |
| 工具呼叫失敗 | 按 Ctrl+O 展開工具輸出查看錯誤 |
# Verbose 模式啟動(顯示詳細載入資訊)
pi --verbose11.4 成本控制
Token 使用量最佳化
| 策略 | 說明 |
|---|---|
| 使用 Compaction | 自動壓縮舊訊息,減少 Token 用量 |
| 選擇適當模型 | 簡單任務用小模型(如 Haiku),複雜任務用大模型 |
| 善用 Prompt Cache | 固定的系統提示會被快取,降低成本 |
| 唯讀模式 | Code Review 使用 --tools read 避免不必要的工具呼叫 |
| 非互動模式 | 明確任務用 -p 模式,避免多輪對話 |
# 延長 Prompt Cache(降低重複成本)
export PI_CACHE_RETENTION=long
# Anthropic: 1 小時快取
# OpenAI: 24 小時快取成本估算參考(以 Claude Sonnet 為例)
| 任務類型 | 預估 Token | 預估成本 |
|---|---|---|
| 生成一個 CRUD API | 5,000-10,000 | $0.03-0.06 |
| Code Review(單檔) | 3,000-5,000 | $0.02-0.03 |
| 完整模組開發(1 天) | 50,000-100,000 | $0.30-0.60 |
| Sprint(5 天) | 250,000-500,000 | $1.50-3.00 |
實務建議:建議團隊設定每月 Token 預算上限,並透過
/session定期檢視成本。使用Ctrl+P切換模型可以有效控制成本——初步探索用低成本模型,精細調整用高品質模型。
12. 升級與版本管理(Upgrade Strategy)
12.1 Pi 升級方式
# 查看當前版本
pi --version
# 升級到最新版
npm update -g @mariozechner/pi-coding-agent
# 安裝特定版本
npm install -g @mariozechner/pi-coding-agent@0.68.0
# 查看更新日誌
# 在互動模式中
/changelog12.2 升級前檢查清單
- ✅ 備份自訂 Extension(
~/.pi/agent/extensions/) - ✅ 備份設定檔(
~/.pi/agent/settings.json) - ✅ 檢查 CHANGELOG 是否有 Breaking Change
- ✅ 在非生產環境先測試
- ✅ 確認 Extension API 相容性
12.3 Prompt / Extension 版本管理
# 建議將 Pi 配置納入 Git 版控
your-project/
├── .pi/
│ ├── settings.json # Git 追蹤
│ ├── extensions/ # Git 追蹤
│ │ ├── git-checkpoint.ts
│ │ └── permission-gate.ts
│ ├── skills/ # Git 追蹤
│ ├── prompts/ # Git 追蹤
│ └── .gitignore # 排除 npm/git 安裝的套件
├── AGENTS.md # Git 追蹤
├── PLAN.md # Git 追蹤
└── ....pi/.gitignore 建議內容:
# 安裝的第三方套件
npm/
git/12.4 與 Git 整合策略
graph LR
subgraph "Git Branch Strategy"
MAIN[main] --> DEV[develop]
DEV --> FEAT[feature/xxx]
FEAT --> DEV
DEV --> MAIN
end
subgraph "Pi 配置隨分支管理"
FEAT --> |.pi/| PI_FEAT[分支專屬 Prompt]
DEV --> |.pi/| PI_DEV[開發環境設定]
MAIN --> |.pi/| PI_MAIN[正式環境設定]
end實務建議:每次 Pi 大版本更新(如 0.67 → 0.68)時,建議先在 Feature Branch 測試,確認所有自訂 Extension 正常運作後再合併到 develop。
13. Best Practices(企業建議)
13.1 團隊使用規範
統一開發環境
# 在專案根目錄放置 .nvmrc
echo "20" > .nvmrc
# 在 AGENTS.md 中明確指定規範
# 所有成員使用相同的 AGENTS.md程式碼品質標準
| 規範 | 標準 |
|---|---|
| 測試覆蓋率 | > 80% |
| Code Review | 人工 + AI 雙重審查 |
| Commit Message | Conventional Commits |
| 分支策略 | Git Flow 或 Trunk-based |
| 文件 | Swagger + JavaDoc |
13.2 Prompt Engineering 原則
原則一:具體明確
❌ 不好的 Prompt:
"幫我寫一個 API"
✅ 好的 Prompt:
"建立 GET /api/tasks API,支援以下查詢參數:
- status (enum: TODO/IN_PROGRESS/DONE)
- priority (enum: LOW/MEDIUM/HIGH)
- keyword (模糊搜尋 title 和 description)
- page (預設 0)
- size (預設 20)
回傳 Page<TaskDTO>,使用 Spring Data JPA Specification"原則二:提供上下文
✅ 好的做法:
> @src/main/java/com/example/entity/Task.java
> @src/main/java/com/example/repository/TaskRepository.java
> 基於這些既有檔案,建立 TaskService原則三:分步執行
✅ 好的做法:
第一步:> 建立 TaskEntity.java
第二步:> 確認後,建立 TaskRepository.java
第三步:> 確認後,建立 TaskService.java
❌ 不好的做法:
> 幫我一次建立完整的後端,包含 Entity、Repository、Service、Controller、Test原則四:善用 Steering Message
在 Pi 工作時,可以用 Enter 送出引導訊息:
(Pi 正在寫 Service...)
> 記得加入交易管理 @Transactional
(Pi 收到後會在當前工具完成後調整)13.3 Session 管理建議
| 原則 | 說明 |
|---|---|
| 一個功能一個 Session | 避免 Context 混亂 |
| 定期 Compact | 長 Session 用 /compact 壓縮 |
| 標記重要節點 | 使用 /tree 和 Shift+L 標記 |
| 匯出重要 Session | /export 或 /share 保存 |
使用 /fork | 從某個節點分支探索不同方案 |
13.4 團隊導入策略
graph LR
P1[Phase 1
個人試用] --> P2[Phase 2
小組導入]
P2 --> P3[Phase 3
團隊推廣]
P3 --> P4[Phase 4
流程整合]
P1 --> |2 週| P2
P2 --> |1 月| P3
P3 --> |1 月| P4| 階段 | 目標 | 行動 |
|---|---|---|
| Phase 1 | 熟悉工具 | 1-2 位成員試用,建立基礎 Prompt Template |
| Phase 2 | 建立規範 | 3-5 人小組使用,共建 AGENTS.md 和 Extension |
| Phase 3 | 全面推廣 | 團隊統一使用,分享最佳實務 |
| Phase 4 | 流程整合 | 整合 CI/CD,建立自動化 Code Review |
14. Anti-Patterns(重要)
14.1 不該這樣用 Pi 的方式
| Anti-Pattern | 問題 | 正確做法 |
|---|---|---|
| 🚫 一次要求過大 | Context 爆掉、品質下降 | 分步執行,每步確認 |
| 🚫 不看 AI 輸出直接套用 | 可能有安全漏洞或邏輯錯誤 | 每次輸出都 Review |
| 🚫 不用 AGENTS.md | AI 不了解專案規範 | 維護完整的 AGENTS.md |
| 🚫 長期不 Compact | Token 浪費、回應變慢 | 定期 /compact |
| 🚫 把 API Key 寫在程式碼中 | 安全風險 | 使用環境變數 |
| 🚫 讓 AI 修改 Production 配置 | 安全風險 | 使用 Permission Gate Extension |
| 🚫 不測試 AI 生成的程式碼 | 品質風險 | 必須跑測試驗證 |
| 🚫 直接用 AI 生成的 SQL 跑 DB | 資料風險 | 先 Review 再執行 |
| 🚫 安裝未審查的第三方 Package | 安全風險 | 審查原始碼後再安裝 |
| 🚫 不同步 PLAN.md | 團隊進度不透明 | 每日更新 PLAN.md |
14.2 常見踩雷
踩雷 1:Context Pollution
問題:在同一個 Session 中做了太多不同的事,AI 開始混淆上下文。
解法:一個功能一個 Session。用 /new 開新 Session。踩雷 2:Model Hallucination
問題:AI 生成了不存在的 API 或方法。
解法:
1. 提供明確的上下文(@file)
2. 使用高思考等級(--thinking high)
3. 要求 AI 先讀取相關檔案再回答踩雷 3:Prompt Template 衝突
問題:全域和專案層級的 Prompt Template 名稱衝突。
解法:專案層級優先。使用有意義的命名前綴,如 proj-review。踩雷 4:Extension 相容性
問題:Pi 升級後自訂 Extension 無法載入。
解法:
1. 查看 CHANGELOG 中的 Breaking Changes
2. 使用 --verbose 查看錯誤訊息
3. 更新 Extension API 呼叫踩雷 5:成本失控
問題:月底發現 API 費用超出預算。
解法:
1. 使用 /session 定期檢視成本
2. 簡單任務用低成本模型(Ctrl+P 切換)
3. 善用 Prompt Cache(PI_CACHE_RETENTION=long)
4. Code Review 用唯讀模式(--tools read)15. 結論(Conclusion)
15.1 Pi Code Agent 的定位
Pi Code Agent 是一個極簡但極度可擴充的 AI 程式碼開發工具。它不試圖成為萬能工具,而是提供一個堅實的基礎框架,讓團隊根據自身需求進行客製化。
15.2 核心價值
| 價值 | 說明 |
|---|---|
| 透明 | 所有操作可見、可追溯、可審計 |
| 可控 | 成本可控、行為可控、風險可控 |
| 可擴充 | Extension 可實現任何工作流 |
| 無鎖定 | 開源 MIT、多模型支援、無廠商綁定 |
15.3 建議的導入路徑
- 先從 Prompt Template 開始 — 最低學習成本,最高 ROI
- 逐步引入 Skills — 按需載入專業能力
- 根據痛點開發 Extension — 解決團隊特定問題
- 整合 CI/CD — 自動化 Code Review 和安全掃描
- 建立 Pi Package — 在團隊間共享最佳實務
15.4 持續學習資源
16. 檢查清單(Checklist)
✅ 新進成員快速上手清單
環境建置
- 安裝 Node.js v20 LTS
- 安裝 Pi:
npm install -g @mariozechner/pi-coding-agent - 確認版本:
pi --version - 設定 API Key(環境變數)
- 測試啟動:
pi "Hello, Pi!"
專案設定
- 閱讀專案
AGENTS.md(或CLAUDE.md) - 閱讀專案
PLAN.md - 確認
.pi/settings.json設定 - 確認
SYSTEM.md/APPEND_SYSTEM.md是否存在 - 了解可用的 Prompt Templates(
/查看) - 了解可用的 Skills(
/skill:查看) - 了解已安裝的 Extensions(啟動時顯示)
- 了解已安裝的 Pi Packages(
pi list)
基本操作
- 學會使用
@引入檔案 - 學會使用
Tab路徑補全 - 學會使用
Ctrl+L切換模型 - 學會使用
Ctrl+P快速切換常用模型 - 學會使用
Shift+Tab調整思考等級(含xhigh) - 學會使用
Ctrl+O展開/收合工具輸出 - 學會使用
Ctrl+G開啟外部編輯器 - 學會使用
!執行 Shell 命令 - 學會使用
/compact壓縮上下文 - 學會使用
/tree導航 Session - 學會使用
/clone複製 Session - 學會使用
/export匯出 Session - 學會使用
/reload熱重載資源 - 了解 Steering(
Enter)與 Follow-up(Alt+Enter)訊息佇列
開發流程
- 開始工作前先讀 PLAN.md
- 一個功能一個 Session
- 每個 AI 輸出都要 Review
- 定期
/compact - 完成任務後更新 PLAN.md
- 重要 Session 用
/export保存
安全規範
- 不在程式碼中寫入 API Key
- 不讓 AI 直接修改 Production 配置
- 安裝第三方 Package 前審查原始碼
- AI 生成的程式碼必須通過測試
- AI 生成的 SQL 必須 Review 後再執行
成本控制
- 了解
/session查看 Token/Cost - 簡單任務用低成本模型
- 善用 Prompt Cache
- Code Review 用唯讀模式
文件維護:本手冊隨 Pi Code Agent 版本更新而修訂。最後更新日期:2026 年 4 月 21 日。