设置
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-hint" 恢复前一屏幕并只打印恢复提示。在常规 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 |
终端单元格中的首选内联图像宽度 |
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 }
}