安全
Pi 是一个本地编码智能体。它以启动它的用户账户的权限运行,并将该用户可写的文件视为处于同一本地信任边界内。
项目信任
项目信任控制 pi 是否加载项目本地设置、资源、包和扩展。它不是一个沙箱,也不限制模型在您开始在一个目录中工作后要求工具执行的操作。
当 pi 从当前工作目录中发现以下任何一项时,它会认为项目具有需要信任的资源:
.pi/settings.json.pi/extensions,.pi/skills,.pi/prompts,或.pi/themes.pi/SYSTEM.md或.pi/APPEND_SYSTEM.md- 项目
.agents/skills在当前目录或祖先目录中
一个裸的 .pi 目录不算作需要信任的项目资源。
当交互式会话在具有需要信任的资源且没有为当前目录或父目录保存决策的项目中启动时,pi 遵循 defaultProjectTrust 来自全局设置。默认值为 "ask",当 UI 可用时,它会询问是否信任该项目。保存的决策按规范目录存储在 ~/.pi/agent/trust.json中,当前路径或父路径上最近的保存决策在全局默认值之前应用。
信任项目允许 pi 加载需要信任的项目资源,包括:
.pi/settings.json.pi资源,如扩展、技能、提示词模板、主题和系统提示文件- 通过项目设置配置的缺失项目包
- 项目本地扩展和项目包管理的扩展
拒绝信任会跳过受保护的资源。上下文文件如 AGENTS.override.md, AGENTS.md,和 CLAUDE.md 无论项目信任如何都会被加载,除非上下文加载被禁用。在信任解决之前,pi 只加载上下文文件、用户/全局扩展和 CLI -e 扩展。用户/全局和 CLI 扩展可以处理 project_trust 事件;第一个返回是/否决策的扩展拥有该决策。
非交互模式(-p, --mode json,和 --mode rpc)不显示信任提示。如果没有适用的已保存信任决策, defaultProjectTrust: "ask" 和 "never" 会忽略此类资源,而 "always" 会信任它们。使用 --approve/-a 或 --no-approve/-na 来覆盖单次运行的项目信任。
无内置沙箱
Pi 不包含内置沙箱。内置工具可以读取文件、写入文件、编辑文件,并以 pi 进程的权限运行 shell 命令。扩展是 TypeScript 模块,以相同的权限运行。包安装、shell 命令、语言服务器、测试命令和其他开发者工具的行为与普通本地进程相同。
这是有意为之。Pi 旨在操作本地源代码树,调用项目工具链,并与用户现有的开发环境集成。一个部分进程内沙箱很容易被误解为安全边界,同时仍然依赖于主机 shell、文件系统、包管理器、凭据和扩展代码。真正的隔离需要来自操作系统或虚拟化/容器边界。
项目信任仅是一种输入加载防护。它可防止仓库在您批准之前静默更改 pi 的设置或扩展。它不会使不受信任的代码、不受信任的提示词或不受信任的模型输出变得安全。来自仓库文件、注释、文档、上下文文件或构建输出的提示词注入是预期的本地智能体风险,pi 无法可靠地防止。
运行不受信任或不受监控的工作
对于不受信任的仓库、您不打算密切监控的生成代码或无人值守的自动化,请在受控环境中运行 pi。使用容器、虚拟机、微型虚拟机、远程沙箱或策略控制的沙箱,仅包含任务所需的文件和凭据。
常见模式记录在 容器化:
- 在容器/沙箱内运行整个
pi进程 - 运行主机 pi,同时将内置工具执行路由到 Gondolin 微型虚拟机中
- 仅挂载智能体应访问的工作区路径
- 避免挂载主机
~/.pi/agent,除非容器需要访问主机会话、设置和凭据 - 传递所需的最少 API 密钥或使用短期凭据
- 当任务不需要时限制网络访问
- 在将结果复制回受信任系统之前审查差异和输出
如果您以读写方式绑定挂载主机工作区,容器或虚拟机内部的写入仍可能修改主机文件。当需要更强的保护以防止意外写入时,请使用只读挂载或将文件复制到沙箱中或从沙箱中复制出来。
报告安全问题
要报告安全问题,请遵循仓库的 安全策略。不要为安全敏感的报告打开公开问题。
预期的本地智能体行为、缺乏内置沙箱、来自不受信任内容的提示词注入以及用户安装的扩展或技能的行为通常不在安全边界之内,除非报告证明了真正的权限边界绕过或展示了 pi 如何授予本地用户原本没有的访问权限。