设置
Pi 使用 JSON 设置文件,项目设置会覆盖全局设置。
| 位置 | 作用域 |
|---|---|
~/.pi/agent/settings.json | 全局(所有项目) |
.pi/settings.json | 项目(当前目录) |
直接编辑或使用 /settings 进行常用选项设置。
项目信任
在交互式启动时,如果项目文件夹包含项目本地设置、资源或项目 .agents/skills 且没有为该文件夹或 ~/.pi/agent/trust.json中的父文件夹保存过决策,pi 会询问是否信任该项目文件夹。信任项目后,pi 可以加载 .pi/settings.json 和 .pi 资源,安装缺失的项目包,并执行项目扩展。
非交互模式(-p, --mode json和 --mode rpc)不会显示信任提示。如果没有适用的已保存信任决策,它们会使用全局设置中的 defaultProjectTrust 来自全局设置: ask (默认)和 never 会忽略这些项目资源,而 always 会信任它们。传递 --approve/-a 或 --no-approve/-na 可以覆盖单次运行的项目信任设置。
如果没有适用的扩展或已保存决策, defaultProjectTrust 控制回退行为。可以在 "ask", "always"中将其设置为 "never" 或 ~/.pi/agent/settings.json,或者通过 /settings.
pi config 更改它,包命令也使用相同的项目信任流程,但 pi update 从不提示。传递 --approve 可以信任单次命令的项目本地设置,或传递 --no-approve 忽略它们。
在交互模式下使用 /trust 可以为将来的会话保存项目信任决策,包括对直接父文件夹的信任。它只写入 ~/.pi/agent/trust.json ;当前会话不会重新加载,因此需要重启 pi 才能使更改生效。
所有设置
模型与思考
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
defaultProvider | 字符串 | - | 默认提供商(例如 "anthropic", "openai") |
defaultModel | 字符串 | - | 默认模型 ID |
defaultThinkingLevel | 字符串 | - | "off", "minimal", "low", "medium", "high", "xhigh", "max" |
hideThinkingBlock | 布尔值 | false | 在输出中隐藏思考块 |
showCacheMissNotices | 布尔值 | false | 显示重要提示缓存未命中的转录通知 |
thinkingBudgets | 对象 | - | 每个思考级别的自定义令牌预算 |
thinkingBudgets
{
"thinkingBudgets": {
"minimal": 1024,
"low": 4096,
"medium": 10240,
"high": 32768
}
}界面与显示
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
theme | 字符串 | "dark" | 主题名称("dark", "light"或自定义) |
externalEditor | 字符串 | $VISUAL,然后 $EDITOR,然后是 Windows 上的记事本或 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 | 用户消息、助手消息和思考的水平内边距(0 或 1) |
autocompleteMaxVisible | 数字 | 5 | 自动补全下拉菜单中最大可见项数(3-20) |
showHardwareCursor | 布尔值 | false | 在 TUI 为输入法支持定位光标时显示终端光标 |
tuiMode | 字符串 | "regular" | 交互式 TUI 模式: "regular" 或实验性的 "fullscreen"。从 /settings 的更改立即生效; --tui-mode 在启动时覆盖此设置 |
fullscreenExitOutput | 字符串 | "transcript" | 全屏退出输出: "transcript" 打印最终记录和恢复提示,而 "resume-hint" 恢复之前的屏幕并仅打印恢复提示。在常规 TUI 模式下无效 |
fullscreenScrollbar | 字符串 | "auto" | 全屏记录滚动条: "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 以禁用此处描述的所有启动网络操作,包括更新检查、包更新检查和安装/更新遥测。
网络
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
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 响应保留的令牌数 |
compaction.keepRecentTokens | 数字 | 20000 | 保留的最近令牌数(不进行摘要) |
{
"compaction": {
"enabled": true,
"reserveTokens": 16384,
"keepRecentTokens": 20000
}
}分支摘要
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
branchSummary.reserveTokens | 数字 | 16384 | 为分支摘要保留的令牌数 |
branchSummary.skipPrompt | 布尔值 | false | 在 /tree 导航时跳过“摘要分支?”提示(默认为不摘要) |
重试
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
retry.enabled | 布尔值 | true | 在瞬时错误时启用自动智能体级重试 |
retry.maxRetries | 数字 | 3 | 最大智能体级重试次数 |
retry.baseDelayMs | 数字 | 2000 | 智能体级指数退避的基础延迟(2秒、4秒、8秒) |
retry.provider.timeoutMs | 数字 | SDK 默认值 | 提供商/SDK 请求超时时间(毫秒) |
retry.provider.maxRetries | 数字 | 0 | 提供商/SDK 重试次数 |
retry.provider.maxRetryDelayMs | 数字 | 60000 | 失败前服务器请求的最大延迟(60秒) |
当提供商请求的重试延迟超过 retry.provider.maxRetryDelayMs时,请求会立即失败并显示信息性错误,而不是静默等待。将其设置为 0 以禁用此限制。
保持 retry.provider.maxRetries 为 0 ,除非明确需要提供商级重试。将其设置为高于 0 的值可能会使 SDK/提供商重试在 Pi 看到之前处理超出使用限制的错误,这在某些情况下可能会阻止智能体,直到提供商配额重置。
{
"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" | 支持多种传输方式的提供商的首选传输方式: "sse", "websocket", "websocket-cached",或 "auto" |
httpIdleTimeoutMs | 数字 | 300000 | HTTP 标头/正文空闲超时时间(毫秒),也用于具有显式流空闲超时的提供商。设置为 0 以禁用。 |
websocketConnectTimeoutMs | 数字 | 15000 | 支持 WebSocket 传输的提供商的 WebSocket 连接/打开握手超时时间(毫秒)。设置为 0 以禁用。 |
终端与图像
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
terminal.showImages | 布尔值 | true | 在终端中显示图片(如果支持) |
terminal.imageWidthCells | 数字 | 60 | 终端单元格中首选的内联图片宽度 |
terminal.clearOnShrink | 布尔值 | false | 当内容缩小时清除空行(可能导致闪烁) |
images.autoResize | 布尔值 | true | 将图片大小调整为最大 2000x2000。适用于 @file 附件、 read以及工具返回的图片 |
images.blockImages | 布尔值 | false | 阻止所有图片发送给 LLM |
外壳
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
shellPath | 字符串 | - | 自定义 shell 路径(例如,Windows 上的 Cygwin);支持以 ~ 表示主目录 |
shellCommandPrefix | 字符串 | - | 每个 bash 命令的前缀(例如, "shopt -s expand_aliases") |
npmCommand | string[] | - | 用于 npm 包查找/安装操作的命令 argv(例如, ["mise", "exec", "node@20", "--", "npm"]) |
{
"npmCommand": ["mise", "exec", "node@20", "--", "npm"]
}npmCommand 用于所有 npm 包管理器操作,包括安装、卸载以及 git 包内的依赖安装。用户范围的 npm 包安装在 ~/.pi/agent/npm/下;项目范围的 npm 包安装在 .pi/npm/下。使用 argv 风格的条目,与进程启动时的参数完全一致。当配置了 npmCommand 时,git 包依赖安装使用普通的 install 以避免在包装器或替代包管理器中使用 npm 特定的标志。
会话
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
sessionDir | 字符串 | - | 存储会话文件的目录。接受绝对或相对路径,以及 ~. |
{ "sessionDir": ".pi/sessions" }当多个来源指定会话目录时,优先级为 --session-dir, PI_CODING_AGENT_SESSION_DIR,然后是 sessionDir 在 settings.json 中。
模型循环
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
enabledModels | string[] | - | 用于 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 包 |
extensions | string[] | [] | 本地扩展文件路径或目录 |
skills | string[] | [] | 本地技能文件路径或目录 |
prompts | string[] | [] | 本地提示词模板路径或目录 |
themes | string[] | [] | 本地主题文件路径或目录 |
enableSkillCommands | 布尔值 | true | 将技能注册为 /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 }
}