Pi 官方文档
设置
设置
Pi 使用 JSON settings 文件。项目 settings 的优先级高于全局 settings。
| 位置 | 作用域 |
|---|---|
~/.pi/agent/settings.json | 全局(所有项目) |
.pi/settings.json | 项目(当前目录) |
可以直接编辑,也可以使用 /settings 配置常用选项。若要交互式保存启动时的默认模型,请使用 /model,在目标模型上按 Ctrl+S。要保存启动时的默认思考级别,请使用 /thinking,然后按 Ctrl+S。
项目信任
在交互式启动时,如果某个项目文件夹包含项目级设置、资源或项目 .agents/skills,并且在 ~/.pi/agent/trust.json 中,这个文件夹或其父文件夹都没有保存过信任决策,Pi 会先询问是否信任该项目文件夹。信任项目后,Pi 可以加载 .pi/settings.json 和 .pi 资源,安装缺失的项目 Package,并执行项目扩展。
非交互模式(-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 | string | - | 启动时使用的 Provider(模型提供方),例如 "anthropic"、"openai";可在 /model 中按 Ctrl+S 保存,也可手动编辑 |
defaultModel | string | - | 启动时使用的模型 ID;可在 /model 中按 Ctrl+S 保存,也可手动编辑 |
defaultThinkingLevel | string | - | 启动时使用的思考级别;可在 /thinking 中按 Ctrl+S 保存,也可手动编辑:"off"、"minimal"、"low"、"medium"、"high"、"xhigh"、"max" |
modelThinkingLevels | object | - | 按 "provider/modelId" 设置各模型的启动时思考级别;可在 /settings →“每个模型的默认思考级别”中配置,也可手动编辑 |
hideThinkingBlock | boolean | false | 在输出中隐藏思考块 |
showCacheMissNotices | boolean | false | 在转录中显示明显的提示词缓存未命中,以及上下文压缩或分支摘要用量提示 |
thinkingBudgets | object | - | 按思考级别自定义 token 预算。Anthropic、Google 和 Bedrock 原生使用这些预算;兼容 OpenAI 的模型只有在设置了 compat.thinkingTokenBudgetField(或 supportsThinkingTokenBudget)时才会使用它们。 |
thinkingBudgets
{
"thinkingBudgets": {
"minimal": 1024,
"low": 4096,
"medium": 10240,
"high": 32768
}
}
UI 与显示
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
theme | string | "dark" | 主题名称("dark"、"light" 或自定义) |
externalEditor | string | $VISUAL,然后是 $EDITOR,Windows 上再尝试 Notepad,其他平台使用 nano | Ctrl+G 使用的外部编辑器命令;优先级高于环境变量 |
quietStartup | boolean | false | 隐藏启动头部信息 |
defaultProjectTrust | string | "ask" | 兜底的项目信任行为:"ask"、"always" 或 "never"。仅全局设置 |
collapseChangelog | boolean | false | 更新后显示精简版更新日志 |
enableInstallTelemetry | boolean | true | 在首次安装或通过更新日志检测到更新后,发送一次匿名的安装/更新版本 ping。这个设置不控制更新检查 |
enableAnalytics | boolean | false | 选择加入分析数据共享。目前只会在实验性的首次设置(PI_EXPERIMENTAL=1)时询问 |
trackingId | string | - | 分析跟踪标识符,在开启 enableAnalytics 时生成 |
doubleEscapeAction | string | "tree" | 连按两次 Escape 的动作:"tree"、"fork" 或 "none" |
treeFilterMode | string | "default" | /tree 的默认筛选:"default"、"no-tools"、"user-only"、"labeled-only"、"all" |
editorPaddingX | number | 0 | 输入编辑器的水平内边距(0-3) |
outputPad | number | 1 | 用户消息、助手消息和思考内容的水平内边距(0 或 1) |
autocompleteMaxVisible | number | 5 | 自动完成下拉框中可见项的最大数量(3-20) |
showHardwareCursor | boolean | false | 在 TUI 为 IME 支持定位光标时显示终端光标 |
tuiMode | string | "regular" | 交互式 TUI 模式:"regular" 或实验性的 "fullscreen"。从 /settings 修改会立即生效;启动时的 --tui-mode 会覆盖此设置 |
fullscreenExitOutput | string | "transcript" | 全屏退出输出:"transcript" 打印最终转录和恢复提示;"resume-hint" 恢复之前的屏幕,只打印恢复提示。在普通 TUI 模式下无效 |
fullscreenScrollbar | string | "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 可以禁用这里提到的所有启动时网络操作,包括更新检查、Package 更新检查,以及安装/更新遥测。
网络
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
httpProxy | string | - | 应用为 HTTP_PROXY 和 HTTPS_PROXY 的 HTTP 代理 URL。仅全局设置。 |
{
"httpProxy": "http://127.0.0.1:7890"
}
警告
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
warnings.anthropicExtraUsage | boolean | true | 当 Anthropic 订阅认证可能使用额外付费用量时,显示警告 |
{
"warnings": {
"anthropicExtraUsage": false
}
}
上下文压缩
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
compaction.enabled | boolean | true | 启用自动上下文压缩 |
compaction.reserveTokens | number | 16384 | 为 LLM 响应预留的 token |
compaction.keepRecentTokens | number | 20000 | 要保留的最近 token(不参与摘要) |
{
"compaction": {
"enabled": true,
"reserveTokens": 16384,
"keepRecentTokens": 20000
}
}
分支摘要
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
branchSummary.reserveTokens | number | 16384 | 为分支摘要预留的 token |
branchSummary.skipPrompt | boolean | false | 在 /tree 切换时跳过“是否总结分支?”提示(默认不生成摘要) |
重试
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
retry.enabled | boolean | true | 在临时错误时启用 agent 级自动重试 |
retry.maxRetries | number | 3 | agent 级最大重试次数 |
retry.baseDelayMs | number | 2000 | agent 级指数退避的基础延迟(2s、4s、8s) |
retry.provider.timeoutMs | number | SDK default | Provider/SDK 请求超时时间,单位为毫秒 |
retry.provider.maxRetries | number | 0 | Provider/SDK 重试次数 |
retry.provider.maxRetryDelayMs | number | 60000 | 在失败前允许的最大服务端要求延迟(60s) |
当 Provider 要求的重试延迟长于 retry.provider.maxRetryDelayMs 时(例如 Google 的 "quota will reset after 5h"),请求会立即失败,并返回说明性错误,而不是静默等待。设为 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 | string | "one-at-a-time" | 引导消息的发送方式:"all" 或 "one-at-a-time" |
followUpMode | string | "one-at-a-time" | 后续消息的发送方式:"all" 或 "one-at-a-time" |
transport | string | "auto" | 对支持多种传输方式的 Provider,指定首选传输方式:"sse"、"websocket"、"websocket-cached" 或 "auto" |
httpIdleTimeoutMs | number | 300000 | HTTP 头/正文空闲超时,单位为毫秒;也会被具有显式流空闲超时的 Provider 使用。设为 0 可禁用。 |
websocketConnectTimeoutMs | number | 15000 | 支持 WebSocket 传输的 Provider 的 WebSocket 连接/打开握手超时,单位为毫秒。设为 0 可禁用。 |
终端与图片
| 设置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
terminal.showImages | boolean | true | 在终端中显示图片(如果支持) |
terminal.imageWidthCells | number | 60 | 终端单元格中的首选内联图片宽度 |
terminal.clearOnShrink | boolean | false | 当内容变少时清除空行(可能会导致闪烁) |
terminal.hyperlinks | boolean or "auto" | "auto" | 覆盖 OSC 8 超链接支持(高级设置,仅 JSON) |
terminal.images | string or boolean | "auto" | 使用 "kitty"、"iterm2"、false 或 "auto" 覆盖图片协议支持(高级设置,仅 JSON) |
terminal.trueColor | boolean or "auto" | "auto" | 覆盖真彩色支持(高级设置,仅 JSON) |
images.autoResize | boolean | true | 将图片缩放到最大 2000x2000 |
images.blockImages | boolean | false | 阻止所有图片发送给 LLM |
Shell
| 设置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
shellPath | string | - | 自定义 shell 路径(例如 Windows 上的 Cygwin) |
shellCommandPrefix | string | - | 每条 bash 命令的前缀(例如 "shopt -s expand_aliases") |
npmCommand | string[] | - | 用于 npm 包查找/安装操作的命令 argv(例如 ["mise", "exec", "node@20", "--", "npm"]) |
JSON 中的 Windows 路径必须使用正斜杠或转义后的反斜杠:
{
"shellPath": "C:/Program Files/Git/bin/bash.exe"
}
{
"shellPath": "C:\\Program Files\\Git\\bin\\bash.exe"
}
{
"npmCommand": ["mise", "exec", "node@20", "--", "npm"]
}
npmCommand 用于所有 npm 包管理操作,包括安装、卸载,以及在 git 包内部安装依赖。用户级 npm 包安装在 ~/.pi/agent/npm/;项目级 npm 包安装在 .pi/npm/。请使用 argv 风格的条目,并让每一项都与进程实际启动方式一致。当配置了 npmCommand 时,git 包的依赖安装会使用原始的 install,以避免包装器或其他包管理器带来的 npm 特定参数问题。
工具
| 设置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
defaultTools | string[] | - | 初始启用的内置工具。省略时使用 Pi 的标准默认值 |
defaultTools 选择启动时启用的内置工具。扩展和 SDK 自定义工具仍保持启用。可用内置工具包括 read、bash、powershell、edit、write、grep、find 和 ls:
{
"defaultTools": ["bash", "edit", "write"]
}
在 Windows 上应使用 powershell 代替 bash,或同时包含两者:
{
"defaultTools": ["read", "powershell", "edit", "write"]
}
空数组表示启动时不启用任何内置工具,但仍保留扩展和 SDK 自定义工具。--tools 会将此行为替换为针对所有工具的严格允许列表,--no-tools 禁用全部工具,--no-builtin-tools 禁用内置默认工具,--exclude-tools 则从最终列表中过滤工具。项目级 defaultTools 数组会替换全局数组。
会话
| 设置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
sessionDir | string | - | 存放会话文件的目录。支持绝对路径、相对路径,以及 ~。 |
{ "sessionDir": ".pi/sessions" }
当多个来源都指定了会话目录时,优先级依次是 --session-dir、PI_CODING_AGENT_SESSION_DIR,然后是 settings.json 里的 sessionDir。
模型轮换
| 设置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enabledModels | string[] | - | 用于 Ctrl+P 轮换的模型模式(格式与 --models CLI 标志相同) |
{
"enabledModels": ["claude-*", "gpt-4o", "gemini-2*"]
}
Markdown
| 设置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
markdown.codeBlockIndent | string | " " | 代码块缩进 |
资源
这些设置定义了从哪里加载扩展、Skill、提示词模板和主题。
在 ~/.pi/agent/settings.json 中,路径相对于 ~/.pi/agent 解析。在 .pi/settings.json 中,路径相对于 .pi 解析。支持绝对路径和 ~。
| 设置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
packages | array | [] | 用于加载资源的 npm/git 包 |
extensions | string[] | [] | 本地扩展文件路径或目录 |
skills | string[] | [] | 本地 Skill 文件路径或目录 |
prompts | string[] | [] | 本地提示词模板路径或目录 |
themes | string[] | [] | 本地主题文件路径或目录 |
enableSkillCommands | boolean | true | 将 Skill 注册为 /skill:name 命令 |
数组支持 glob 模式和排除项。使用 !pattern 排除。使用 +path 强制包含精确路径,使用 -path 强制排除精确路径。
packages
字符串形式会从一个包加载所有资源:
{
"packages": ["pi-skills", "@org/my-extension"]
}
对象形式用于筛选要加载的资源:
{
"packages": [
{
"source": "pi-skills",
"skills": ["brave-search", "transcribe"],
"extensions": []
}
]
}
有关 Package 管理的详细信息,请参见 Package 文档。
示例
{
"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 }
}
Pi 官方文档中文整理 · 官方原文已更新,译文待同步
本文基于官方 MIT 文档翻译整理,不代表 pi.dev 官方中文站。同步 commit:1defa151,同步时间:2026/8/27。