安全
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.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。使用容器、VM、micro-VM、远程沙箱或策略控制的沙箱,并仅提供任务所需的文件和凭据。
常见模式记录在 容器化 中:
- 在容器/沙箱内运行整个
pi进程 - 运行主机 pi,同时将内置工具执行路由到 Gondolin micro-VM
- 仅挂载代理应访问的工作区路径
- 避免挂载主机
~/.pi/agent,除非容器应访问主机会话、设置和凭据 - 传递最低限度所需的 API 密钥,或使用短期凭据
- 当任务不需要网络时限制网络访问
- 在将结果复制回受信任系统之前审查 diff 和输出
如果你以读/写方式 bind-mount 主机工作区,来自容器或 VM 内部的写入仍然可以修改主机文件。当你需要更强的保护以防意外写入时,请使用只读挂载,或将文件复制进出沙箱。
报告安全问题
要报告安全问题,请遵循仓库 安全政策。请勿为安全敏感报告创建公开 issue。
预期的本地代理行为、缺少内置沙箱、来自不受信任内容的提示注入,以及用户安装的扩展或技能的行为,通常不属于安全边界范围,除非报告证明存在真正的权限边界绕过,或展示 pi 如何授予本地用户原本不具备的访问权限。