18 环境变量
pi 读取的配置变量、进程标记,以及注入 shell 工具的会话环境变量。
Pi 通过三种方式使用环境变量:
PI_OFFLINE等变量用于配置 Pi 进程。- Pi 会设置进程标记,让子进程能够识别出启动它们的智能体是 Pi。
- 由 LLM 可调用的 shell 工具执行的命令会收到描述当前会话的
PI_*变量。
提供商 API 密钥变量在提供商中单独说明。
进程标记
CLI 和 RPC 入口会设置两个进程标记:
AI_AGENT=pi是一个通用标记,让各类工具能够识别 Pi 是启动该进程的智能体。PI_CODING_AGENT=true是 Pi 专用的标记,让子进程检测到自己运行在 Pi 内部。
子进程会继承这两个标记。它们与会话无关,并且在通过 SDK 嵌入 Pi 时不会自动设置。
Shell 工具会话环境
由 bash 和 powershell 工具执行的命令会收到当前 Pi 会话的状态:
| 变量 | 说明 |
|---|---|
PI_SESSION_ID | 当前会话 ID |
PI_SESSION_FILE | 当前会话 JSONL 文件的绝对路径;临时会话未设置 |
PI_PROVIDER | 当前选定的模型提供商 |
PI_MODEL | 当前选定的模型 ID |
PI_REASONING_LEVEL | 当前生效的推理级别:off、minimal、low、medium、high、xhigh 或 max |
这些值在每条命令启动时解析。因此,切换模型或更改推理级别无需重启 Pi 即可影响下一条 shell 命令。PI_PROVIDER 和 PI_MODEL 标识的是所选的 Pi 模型,而不是路由器内部可能选择的其他上游模型。
当被问到当前运行的是哪个模型或提供商时,应检查这些变量,而不是从系统提示词中推断答案:
当会话是持久化会话时,可以直接查看会话文件:
这些变量会注入到 LLM 可调用的 bash 和 powershell 工具中,但不会注入到用户手动输入的 ! 或 !! 命令中。
自定义 Shell 工具
使用 createBashTool() 或 createPowerShellTool() 创建的工具在注册到 Pi 后,默认会暴露会话环境。注入发生在 spawnHook 之前,因此钩子会在 ctx.env 中收到这些变量:
可以独立于 spawn 钩子禁用会话元数据:
禁用后,Pi 会移除这些变量的继承值,避免嵌套的 Pi 进程暴露过时的父会话元数据。
Pi 进程配置
以下变量由 Pi 自身读取:
| 变量 | 说明 |
|---|---|
PI_CODING_AGENT_DIR | 覆盖配置目录;默认为 ~/.pi/agent |
PI_CODING_AGENT_SESSION_DIR | 覆盖会话存储;会被 --session-dir 覆盖 |
PI_PACKAGE_DIR | 覆盖包目录,适用于 Nix/Guix store 路径 |
PI_OFFLINE | 禁用启动时的网络操作,包括更新检查、包更新和安装/更新遥测 |
PI_SKIP_VERSION_CHECK | 禁用 pi.dev 的最新版本请求 |
PI_TELEMETRY | 覆盖安装/更新遥测和提供商归因标头:1/true/yes 或 0/false/no |
PI_CACHE_RETENTION | 在支持的提供商上设为 long 可启用扩展提示词缓存 |
PI_SHARE_VIEWER_URL | 覆盖 /share 使用的基础 URL |
PI_HARDWARE_CURSOR | 设为 1 显示硬件光标;参见终端设置 |
PI_HYPERLINKS | 以 1、0 或 auto 覆盖 OSC 8 超链接检测 |
PI_IMAGE_PROTOCOL | 以 kitty、iterm2、none 或 auto 覆盖内联图片检测 |
PI_TRUE_COLOR | 以 1、0 或 auto 覆盖真彩色检测 |
PI_TUI_ESC_TIMEOUT | 在单独按下 ESC 后等待多久才将其视为 Escape 键,单位为毫秒;SSH 下默认为 100,其他情况为 10。如果 Alt 键输入被误判为 Escape,请增大该值 |
VISUAL、EDITOR | 未设置 externalEditor 时使用的外部编辑器回退 |
HTTP_PROXY、HTTPS_PROXY | 为出站 HTTP 请求设置代理 |
ANTHROPIC_API_KEY、OPENAI_API_KEY 等提供商凭据以及云提供商配置详见提供商。
PI_SERVER_DIR 和 PI_SERVER_ID 仅适用于只随源码提供的实验性远程测试框架,不适用于分发的构建。