【免费下载链接】PiG
PiG (Pi in Go) is a faithful Go port of upstream Pi, the TypeScript codebase behind the Pi coding agent. It is a parity-bound translation, not a rewrite: upstream behavior is the contract, and Go is the implementation language.
PiG(Pi in Go)是把 Pi 终端编码代理的 TypeScript 代码库忠实移植为 Go 原生二进制的开源项目。它的安全设计围绕三件事展开:项目信任机制、清晰的威胁模型、以及覆盖构建到发布的供应链签名验证。本文带你读懂 PiG 主动划定的五条信任边界,并附一份可直接对照执行的 10 条安全使用清单。
PiG 是什么?为什么需要"安全深潜"
PiG 是一个极简、可扩展的终端编码代理:它以你当前用户的系统权限运行,能读写工作区文件、执行 shell 命令、加载扩展(Extension)与技能(Skill)。这意味着PiG 本身不是安全沙箱——模型输出、工具、扩展都在你的系统账户权限下执行。
因此在上手前,值得先搞清楚:哪些输入源被 PiG 当作可信?哪些它主动设防?哪些必须由你自己拍板。
📖 核心文档:docs/site/docs/security.md、docs/threat-model.md
项目信任机制:先验明正身,再开门
一个仓库里可能包含会改变 PiG 行为的项目级配置和资源。PiG 在加载任何项目可控的可执行或配置输入之前,必须先得到一个信任决定(trust decision)。信任敏感的项目路径包括:
.pig/settings.json .pig/mcp.json .pig/extensions/ .pig/skills/ .pig/prompts/ .pig/themes/ .pig/SYSTEM.md .pig/APPEND_SYSTEM.md .agents/skills/信任判定的优先级
PiG 按以下顺序得出信任决定:
- 命令行
--approve/--no-approve优先生效; - 用户级或命令行扩展可处理
project_trust事件,第一个返回 yes/no 的扩展拥有决定权; - 否则使用当前目录或最近父目录的已保存决定(按规范目录存放在
~/.pig/agent/trust.json); - 否则遵循全局
defaultProjectTrust设置,默认值为"ask"。
⚠️ 注意:
AGENTS.md、CLAUDE.md等上下文文件无论信任决定如何都会加载,所以应把目录中的指令默认视为不可信输入。
用 /trust 管理项目信任
在交互会话中运行/trust可查看和修改当前项目的信任决定;修改后请重启 PiG,让启动发现流程在新的决定下运行。
威胁模型:PiG 划出的五条信任边界
PiG 在 docs/threat-model.md 中正式声明了覆盖范围、受保护资产与威胁-控制配对,核心可归纳为五条信任边界:
| 信任边界 | 关键点 |
|---|---|
| 用户进程边界 | PiG 以你的 OS 权限运行,不隔离模型输出与内置工具 |
| 工作区与配置边界 | 工作区、PIG_HOME、shell 环境、加载的上下文都能影响行为,应视为可信输入 |
| 扩展边界 | 扩展、技能、hook、MCP server 可执行代码;子进程托管提供生命周期隔离,但不是OS 沙箱 |
| 网络边界 | TLS 校验默认开启;远程执行环境使用严格 SSH 主机密钥并以 SHA-256 校验守护进程 |
| 发布边界 | 校验和、签名、出处证明把每个发布文件绑定到已审查的源码提交 |
常见威胁与控制措施对照:
| 威胁 | PiG 的控制手段 |
|---|---|
| 不可信项目指令引发危险操作 | 先出信任提示,再加载项目资源 |
| 恶意扩展以用户权限执行 | 要求显式信任;子进程生命周期控制;建议配合 OS 沙箱 |
| Package 归档逃逸目标目录 | 校验词法与解析后的路径包含关系,拒绝路径穿越和危险链接 |
| 密钥泄露进源码或发布产物 | Gitleaks / TruffleHog 检测;禁止在配置示例中出现凭证 |
| Piglet Binary 被篡改或来自陌生签名者 | Ed25519 签名 + 签名发布索引 + 本地签名信任存储 + 首次拉取时 pin 签名者 |
三条值得记住的安全假设:
- 模型输出默认是不可信输入——即使连接可信,模型也可能提出危险命令;
- 单独的校验和不能替代经过认证的发布身份;
- 用户是信任的最后一道闸门:授予项目或扩展信任前,先审查来源。
供应链与发布安全:从构建到签名
PiG 采用与具体扫描器无关的供应链证据流程(docs/supply-chain.md)。每个发布候选版本都要走完:来源清点、生成 SPDX 与 CycloneDX 双格式 SBOM、核对许可证、审查漏洞可达性,最终把证据绑定到精确的产物文件上。两个细节值得了解:
- 每个产物独立 SBOM:源码目录扫描不能替代二进制或镜像的 SBOM——源码清单可能缺少工具链组件,而二进制里可能含测试阶段不存在的依赖;
- 主动不信任已知有问题的 CA:PiG 自身的 HTTPS/WebSocket 连接会拒绝包含特定 eMudhra 中间证书(其私钥可被恢复)的证书链,该检查无法关闭,运行在系统信任库之上。
Piglet Binary 的签名验证是整套签名体系的亮点:
- 构建时用
--sign-key签名,签名覆盖全部可执行字节与 DSSE manifest; - 执行前,Binary 先验证内嵌 Piglet、组件计划与签名,任何一个字节被改动都会拒绝运行;
pig piglet trust add/list/revoke管理本地签名信任存储;pig piglet trust require on后,只有受信任签名者签名的 Binary 才能运行;pig piglet pull首次拉取即 pin 签名者,后续签名变更会被拒绝,除非你用--accept-signer ed25519:<key-id>明确接受新密钥。
详见 docs/site/docs/piglet-binaries.md。
扩展与 Package 安全使用要点
扩展会执行代码。子进程边界可以隔离崩溃、支持取消,但它不是权限沙箱。加载扩展前建议:
- ✅ 确认来源与出处,审查其依赖;
- ✅ 检查它需要执行的命令和网络访问;
- ✅ 弄清它能读到哪些文件和密钥;
- ✅ 不可信代码优先放入受限的 OS 环境;
- ✅ fused(融合)扩展与 PiG 共享进程,崩溃或死锁会影响整个应用,审查要严格一些。
Package 可以分发可执行扩展和指令类资源,安装前先用命令审查成员:
pig package validate ./package pig install ./extension --validate-only --json参考文档:docs/site/docs/extensions.md、docs/site/docs/packages.md
凭证、会话与隐私
PiG 在本地权限管理上相当细致:
- agent 目录、
sessions目录和每个项目的会话目录创建时使用0700 权限(仅属主可访问); auth.json以仅属主方式创建(POSIX 下 0600,Windows 下仅属主 DACL);- 首次启动向导会明确询问是否共享匿名使用数据,可随时用
/privacy查看和更改。
两点提醒:
- 会话可能包含凭证——会话里会有提示词、工具参数、命令输出、文件内容,甚至对话中出现过的凭据,导出或分享前务必先审查;
- 不要把密钥写进Piglet YAML、扩展源码包、prompt 或 skill——用环境变量或仅属主文件,PiG 会在启动前校验声明,缺失时直接拒绝启动。
强隔离:什么时候该上容器或虚拟机
如果任务涉及不可信代码或敏感数据,PiG 明确建议使用容器、虚拟机等 OS 级边界。docs/site/docs/containerization.md 提供了可直接套用的多阶段 Dockerfile,以及关键实践:
- 只挂载 PiG 需要的项目路径;只读审查时用
:ro只读挂载; - 不需要外网时直接
--network none; - 不要挂载宿主机的
~/.pig——那等于把宿主凭证和会话一起送进容器。
10 条 PiG 安全使用清单
| # | 事项 | 要点 |
|---|---|---|
| 1 | 项目信任 | 陌生仓库先做信任决定,默认ask即可 |
| 2 | 目录指令 | AGENTS.md、CLAUDE.md等默认按不可信输入对待 |
| 3 | 模型输出 | 审查模型建议的每条命令和文件修改 |
| 4 | 扩展加载 | 先审来源、依赖、命令与网络范围 |
| 5 | Package 安装 | 先用pig package validate验证成员 |
| 6 | Binary 验证 | pig verify查签名状态,分发时用签名信任存储 |
| 7 | 凭证存放 | 用 provider 环境变量或登录存储,不写进仓库 |
| 8 | 会话导出 | 分享前检查是否含凭证或敏感内容 |
| 9 | 强隔离 | 敏感任务放容器/虚拟机,最小化挂载与网络 |
| 10 | 漏洞报告 | 不公开披露,走.github/SECURITY.md私有流程 |
如何报告安全漏洞
发现潜在安全问题时,不要直接开公开的 issue。请遵循 .github/SECURITY.md 中的私有报告流程:附上受影响的版本、操作系统、复现步骤与影响范围,但不要附带真实凭证或无关敏感数据。
PiG 的安全哲学可以概括为一句话:它不假装能保护你,而是把能力与边界讲清楚,把信任决定权交还给你。读懂威胁模型、对照清单逐项执行,你就能安全地用好这个 Go 原生终端编码代理。
【免费下载链接】PiG
PiG (Pi in Go) is a faithful Go port of upstream Pi, the TypeScript codebase behind the Pi coding agent. It is a parity-bound translation, not a rewrite: upstream behavior is the contract, and Go is the implementation language.
相关推荐
pxpipe 安全模型深度解析:信任边界、威胁控制与可验证的安全清单
pxpipe 安全模型深度解析:信任边界、威胁控制与可验证的安全清单 导读 SECURITY_MODEL.md https://link.gitcode.com
httptap 安全保障机制深度解读:信任边界、威胁模型与 OpenSSF 银级实践
httptap 安全保障机制深度解读:信任边界、威胁模型与 OpenSSF 银级实践 httptap 是一款基于 Rich 的 HTTP 请求诊断 CLI 工具
ai-employees安全模型深度解读:如何防止AI员工被注入攻击
ai employees安全模型深度解读:如何防止AI员工被注入攻击 ai employees 是一个开源 AI 员工(AI Employees)项目:8 个定
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考