設定
Pi 使用 JSON 設定檔,其中專案設定覆蓋全域設定。
| 位置 | 範圍 |
|---|---|
~/.pi/agent/settings.json |
全域(所有專案) |
.pi/settings.json |
專案(目前目錄) |
可以直接編輯檔案,也可以使用 /settings 修改常用選項。
專案信任
在互動式啟動時,pi 在信任包含專案本機設定、資源或專案 .agents/skills 的專案資料夾之前會詢問,並且在 ~/.pi/agent/trust.json 中沒有儲存該資料夾或父資料夾的決定。信任專案允許 pi 載入 .pi/settings.json 和 .pi 資源、安裝缺少的專案套件以及執行專案擴充。
非互動模式(-p、--mode json 和 --mode rpc)不會顯示信任提示。如果沒有適用的已儲存信任決策,它們會使用全域設定中的 defaultProjectTrust:ask(預設)和 never 會忽略這些專案資源,always 會信任它們。透過 --approve/-a 或 --no-approve/-na 可以覆寫單次執行的專案信任。
如果沒有適用的擴充或已儲存決策,則由 defaultProjectTrust 控制後備行為。可在 ~/.pi/agent/settings.json 中將其設定為 "ask"、"always" 或 "never",也可以透過 /settings 修改。
pi config 和 package 指令使用相同的專案信任流程,但 pi update 從不提示。傳遞 --approve 以信任某個指令的專案本機設定,或傳遞 --no-approve 以忽略它們。
在互動模式下使用 /trust 可以為後續工作階段儲存專案信任決策,包括對直接父資料夾的信任。該指令只寫入 ~/.pi/agent/trust.json;目前工作階段不會重新載入,因此需要重新啟動 pi 才會生效。
所有設定
模型與思考
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
defaultProvider |
字串 | - | 預設 Provider(例如 "anthropic"、"openai") |
defaultModel |
字串 | - | 預設模型 ID |
defaultThinkingLevel |
字串 | - | "off", "minimal", "low", "medium", "high", "xhigh", "max" |
hideThinkingBlock |
布林值 | false |
在輸出中隱藏 thinking block |
showCacheMissNotices |
布林值 | false |
顯示重要 Prompt cache miss 的記錄通知 |
thinkingBudgets |
物件 | - | 每個 thinking level 的自訂 token 預算 |
思考預算
{
"thinkingBudgets": {
"minimal": 1024,
"low": 4096,
"medium": 10240,
"high": 32768
}
}使用者介面與顯示
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
theme |
字串 | "dark" |
主題名稱("dark"、"light" 或自訂主題) |
externalEditor |
字串 | $VISUAL,然後 $EDITOR,Windows 上為 Notepad,其他平台為 nano |
Ctrl+G 外部編輯器指令;優先於環境變數 |
quietStartup |
布林值 | false |
隱藏啟動標頭 |
defaultProjectTrust |
字串 | "ask" |
後備專案信任行為:"ask"、"always" 或 "never"。僅全域設定 |
collapseChangelog |
布林值 | false |
更新後顯示精簡的變更記錄 |
enableInstallTelemetry |
布林值 | true |
首次安裝或更改記錄檢測到的更新後傳送匿名安裝/更新版本 ping。這不控制更新檢查 |
enableAnalytics |
布林值 | false |
選擇加入分析資料共享。目前僅在實驗性首次設定期間要求 (PI_EXPERIMENTAL=1) |
trackingId |
字串 | - | 分析追蹤識別碼,在 enableAnalytics 開啟時產生 |
doubleEscapeAction |
字串 | "tree" |
雙 Escape 動作:"tree"、"fork" 或 "none" |
treeFilterMode |
字串 | "default" |
/tree 預設過濾器:"default"、"no-tools"、"user-only"、"labeled-only"、"all" |
editorPaddingX |
數字 | 0 |
輸入編輯器的水平填充(0-3) |
outputPad |
數字 | 1 |
使用者訊息、assistant 訊息和 thinking 的水平填充(0 或 1) |
autocompleteMaxVisible |
數字 | 5 |
自動完成下拉清單中的最大可見專案數 (3-20) |
showHardwareCursor |
布林值 | false |
顯示終端機游標,同時 TUI 定位它以支援 IME |
tuiMode |
字串 | "regular" |
互動式 TUI 模式:"regular" 或實驗性 "fullscreen"。/settings 中的更改立即生效;--tui-mode 會在啟動時覆蓋此設定 |
fullscreenExitOutput |
字串 | "transcript" |
全螢幕退出輸出:"transcript" 列印最終 transcript 和resume 提示,"resume-hint" 恢復前一螢幕並只列印resume 提示。在一般 TUI 模式下無效果 |
fullscreenScrollbar |
字串 | "auto" |
全螢幕 transcript 滾動條:"auto" 在滾動時臨時顯示,"always" 保留最右列並保持可見,"hidden" 隱藏。在一般 TUI 模式下無效果 |
對於 VS Code,請包含 --wait,以便 pi 在編輯器退出後恢復:
{
"externalEditor": "code --wait"
}遙測和更新檢查
enableInstallTelemetry 僅控制傳送到 https://pi.dev/api/report-install 的匿名安裝/更新 ping。選擇退出遙測不會停用更新檢查;Pi 仍然可以存取 https://pi.dev/api/latest-version 尋找最新版本。
設定 PI_SKIP_VERSION_CHECK=1 可停用 Pi 版本更新檢查。使用 --offline 或 PI_OFFLINE=1 可停用此處描述的所有啟動網路操作,包括更新檢查、package 更新檢查和安裝/更新遙測。
網路
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
httpProxy |
字串 | - | HTTP 代理 URL 應用為 HTTP_PROXY 和 HTTPS_PROXY。僅全域設定。 |
{
"httpProxy": "http://127.0.0.1:7890"
}警告
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
warnings.anthropicExtraUsage |
布林值 | true |
當 Anthropic 訂閱身分驗證可能使用付費額外使用時顯示警告 |
{
"warnings": {
"anthropicExtraUsage": false
}
}壓縮
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
compaction.enabled |
布林值 | true |
啟用自動壓縮 |
compaction.reserveTokens |
數字 | 16384 |
為 LLM 回應保留的 token |
compaction.keepRecentTokens |
數字 | 20000 |
要保留的最近 token(不摘要) |
{
"compaction": {
"enabled": true,
"reserveTokens": 16384,
"keepRecentTokens": 20000
}
}分支摘要
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
branchSummary.reserveTokens |
數字 | 16384 |
為分支摘要保留的 token |
branchSummary.skipPrompt |
布林值 | false |
跳過“總結分支?” /tree 導航提示(預設不產生摘要) |
重試
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
retry.enabled |
布林值 | true |
對暫時性錯誤啟用自動 Agent 級重試 |
retry.maxRetries |
數字 | 3 |
最大 Agent 級重試次數 |
retry.baseDelayMs |
數字 | 2000 |
Agent 級指數退避的基礎延遲(2s、4s、8s) |
retry.provider.timeoutMs |
數字 | SDK 預設 | Provider/SDK 請求超時(以毫秒為單位) |
retry.provider.maxRetries |
數字 | 0 |
Provider/SDK 重試次數 |
retry.provider.maxRetryDelayMs |
數字 | 60000 |
失敗前伺服器請求的最大延遲(60 秒) |
當 Provider 請求重試延遲超過 retry.provider.maxRetryDelayMs 時,請求會立即失敗並給出說明性錯誤,而不是靜默等待。將其設定為 0 可停用限制。
除非明確需要 Provider 級重試,否則保持 retry.provider.maxRetries 為 0。將其設定為大於 0 後,SDK/Provider 重試可能會在 Pi 看到超出使用限制的錯誤之前自行處理這些錯誤,在某些情況下可能會阻塞 Agent,直到 Provider 配額重置。
{
"retry": {
"enabled": true,
"maxRetries": 3,
"baseDelayMs": 2000,
"provider": {
"timeoutMs": 3600000,
"maxRetries": 0,
"maxRetryDelayMs": 60000
}
}
}訊息傳遞
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
steeringMode |
字串 | "one-at-a-time" |
如何傳送中途引導訊息:"all" 或 "one-at-a-time" |
followUpMode |
字串 | "one-at-a-time" |
後續訊息如何傳送:"all" 或 "one-at-a-time" |
transport |
字串 | "auto" |
支援多種傳輸方式的 Provider 偏好傳輸:"sse"、"websocket"、"websocket-cached" 或 "auto" |
httpIdleTimeoutMs |
數字 | 300000 |
HTTP header/body 空閒超時(以毫秒為單位),也由具有顯式流空閒超時的 Provider使用。設定為 0 停用。 |
websocketConnectTimeoutMs |
數字 | 15000 |
支援 WebSocket 傳輸的 Provider 的 WebSocket 連接/開啟握手超時(以毫秒為單位)。設定為 0 停用。 |
終端機與圖片
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
terminal.showImages |
布林值 | true |
在終端機中顯示圖片(如果支援) |
terminal.imageWidthCells |
數字 | 60 |
終端機單元格中的偏好inline 圖片寬度 |
terminal.clearOnShrink |
布林值 | false |
內容縮小時清除空行(可能導致閃爍) |
images.autoResize |
布林值 | true |
將圖片大小調整為最大 2000x2000。適用於 @file 附件、read 以及工具傳回的圖片 |
images.blockImages |
布林值 | false |
阻止所有圖片傳送至 LLM |
Shell
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
shellPath |
字串 | - | 自訂 shell 路徑(例如,Windows 上的 Cygwin);支援主目錄前導 ~ |
shellCommandPrefix |
字串 | - | 每個 bash 指令的前綴(例如,"shopt -s expand_aliases") |
npmCommand |
字串[] | - | 用於 npm package 尋找/安裝操作的指令 argv(例如,["mise", "exec", "node@20", "--", "npm"]) |
{
"npmCommand": ["mise", "exec", "node@20", "--", "npm"]
}npmCommand 用於所有 npm package 管理操作,包括安裝、解除安裝以及 git package 內的相依套件安裝。使用者範圍的 npm package 安裝在 ~/.pi/agent/npm/ 下;專案範圍的 npm package 安裝在 .pi/npm/ 下。按實際需要啟動的程序填寫 argv 樣式條目。設定 npmCommand 後,git package 相依套件安裝會使用普通 install,以避免包裝器或備用 package manager 中不相容的 npm 專用標誌。
工作階段
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
sessionDir |
字串 | - | 儲存工作階段檔案的目錄。接受絕對路徑或相對路徑,加上 ~。 |
{ "sessionDir": ".pi/sessions" }當多個源指定工作階段目錄時,settings.json 中的優先級為 --session-dir、PI_CODING_AGENT_SESSION_DIR,然後是 sessionDir。
模型切換
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
enabledModels |
字串[] | - | Ctrl+P 循環的模型模式(與 --models CLI 標誌相同的格式) |
{
"enabledModels": ["claude-*", "gpt-4o", "gemini-2*"]
}Markdown
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
markdown.codeBlockIndent |
字串 | " " |
程式碼塊的縮進 |
markdown.mermaid |
字串 | "streaming" |
Mermaid 渲染模式:"off"、"final" 或 "streaming" |
資源
這些設定定義從何處載入擴充、技能、提示和主題。
~/.pi/agent/settings.json 中的路徑相對於 ~/.pi/agent 進行解析。 .pi/settings.json 中的路徑相對於 .pi 進行解析。支援絕對路徑和 ~。
| 設定 | 類型 | 預設 | 描述 |
|---|---|---|---|
packages |
陣列 | [] |
載入資源的 npm/git package |
extensions |
字串[] | [] |
本機擴充檔案路徑或目錄 |
skills |
字串[] | [] |
本機技能檔案路徑或目錄 |
prompts |
字串[] | [] |
本機提示模板路徑或目錄 |
themes |
字串[] | [] |
本機主題檔案路徑或目錄 |
enableSkillCommands |
布林值 | true |
將 Skills 註冊為 /skill:name 指令 |
陣列支援 glob 模式和排除。使用 !pattern 排除。使用 +path 強制包含精確路徑,使用 -path 強制排除精確路徑。
包
字串形式載入包中的所有資源:
{
"packages": ["pi-skills", "@org/my-extension"]
}物件形式過濾要載入的資源:
{
"packages": [
{
"source": "pi-skills",
"skills": ["brave-search", "transcribe"],
"extensions": []
}
]
}有關包管理的詳細資訊,請參閱packages.md。
範例
{
"defaultProvider": "anthropic",
"defaultModel": "claude-sonnet-4-20250514",
"defaultThinkingLevel": "medium",
"theme": "dark",
"compaction": {
"enabled": true,
"reserveTokens": 16384,
"keepRecentTokens": 20000
},
"retry": {
"enabled": true,
"maxRetries": 3
},
"enabledModels": ["claude-*", "gpt-4o"],
"warnings": {
"anthropicExtraUsage": true
},
"packages": ["pi-skills"]
}專案覆寫
專案設定 (.pi/settings.json) 覆蓋全域設定。巢狀物件被合併:
// ~/.pi/agent/settings.json (global)
{
"theme": "dark",
"compaction": { "enabled": true, "reserveTokens": 16384 }
}
// .pi/settings.json (project)
{
"compaction": { "reserveTokens": 8192 }
}
// Result
{
"theme": "dark",
"compaction": { "enabled": true, "reserveTokens": 8192 }
}