结论
在 OpenPI 内试点全局 allow / ask / deny,学习 @gotgenes/pi-permission-system 的 most-restrictive-wins、symlink-canonical path、fail-closed bash parse、以及「不受信任项目不能放宽 global」。不把该社区包做成依赖,不 merge 其代码。 先解决 in-process child 的 ask 转发与 authority 顺序。OpenPI 当前只有 workspace-cleanup-guard,没有统一权限门。
不新增第二条配置命令;权限策略走 /openpi-setup。Pi 继续拥有 install / update / uninstall。本轮未安装、未运行该包。
事实
冻结身份(last-seen 2026-09-08):
公开 README 声明的机制(未在本轮执行验证):
- 规则同时匹配引用路径与 symlink-resolved canonical path;
path → external_directory → per-tool → bash 采用 most-restrictive-wins;
- 无法解析的 Bash 与内部 gate error 不静默放行;
- 不受信任项目不能用 project config 放宽 global policy。
官方对照缝(example,不是社区产品):permission-gate、protected-paths、sandbox、gondolin。见 Pi examples README。
OpenPI 对照:extensions/workspace-cleanup-guard/(阻止删除工作区已有路径);child 边界在 CHILD_EXCLUDED_TOOL_NAMES / CHILD_SAFE_PACKAGE_TOOL_NAMES。未分类工具必须 fail-closed。
2026-08-09 审计已把权限系统列为「试点、不依赖」:docs/design/PI_COMMUNITY_PACKAGE_AUDIT_2026-08-09.md。本 Issue 推进该方向,不改写那份结论。
推断
直接 pi install 该包有三类风险:child 的 ask 无 UI / 无正确 parent identity;permission policy 与 OpenPI child allowlist / Trust 的 authority 顺序不清楚;/openpi-setup 之外出现第二套配置与批准语义。因此试点必须在 OpenPI 进程内实现最小门,而不是加载第三方 extension。
不引入 @gotgenes/pi-permission-model-judge。模型裁决不能成为权限根。
建议
- 设计 allow/ask/deny,覆盖 tools / bash / MCP / paths,most-restrictive-wins。
- child session 的
ask 转发到唯一 parent UI;不能在 child 里静默放宽。
- 任何新模型可见工具必须写入
CHILD_EXCLUDED_TOOL_NAMES 或 CHILD_SAFE_PACKAGE_TOOL_NAMES;未分类 = 不可见 / 拒绝。
- 对照官方 example,不对照「再装一个权限产品」。
- OS 级隔离(sandbox / gondolin)是另一件事,见后续 Ideas 讨论,不要和本 Issue 的 policy 门 混成一个 PR。
未知
- 当前
@earendil-works/pi-coding-agent 的 permission-gate 与 OpenPI in-process child 的实际组合行为(本轮未跑)。
- 社区包对 OpenPI child Resource Loader 的真实加载范围(本轮未安装)。
验收
关联
结论
在 OpenPI 内试点全局 allow / ask / deny,学习
@gotgenes/pi-permission-system的 most-restrictive-wins、symlink-canonical path、fail-closed bash parse、以及「不受信任项目不能放宽 global」。不把该社区包做成依赖,不 merge 其代码。 先解决 in-process child 的ask转发与 authority 顺序。OpenPI 当前只有workspace-cleanup-guard,没有统一权限门。不新增第二条配置命令;权限策略走
/openpi-setup。Pi 继续拥有 install / update / uninstall。本轮未安装、未运行该包。事实
冻结身份(last-seen 2026-09-08):
@gotgenes/pi-permission-system公开 README 声明的机制(未在本轮执行验证):
path → external_directory → per-tool → bash采用 most-restrictive-wins;官方对照缝(example,不是社区产品):
permission-gate、protected-paths、sandbox、gondolin。见 Pi examples README。OpenPI 对照:
extensions/workspace-cleanup-guard/(阻止删除工作区已有路径);child 边界在CHILD_EXCLUDED_TOOL_NAMES/CHILD_SAFE_PACKAGE_TOOL_NAMES。未分类工具必须 fail-closed。2026-08-09 审计已把权限系统列为「试点、不依赖」:
docs/design/PI_COMMUNITY_PACKAGE_AUDIT_2026-08-09.md。本 Issue 推进该方向,不改写那份结论。推断
直接
pi install该包有三类风险:child 的ask无 UI / 无正确 parent identity;permission policy 与 OpenPI child allowlist / Trust 的 authority 顺序不清楚;/openpi-setup之外出现第二套配置与批准语义。因此试点必须在 OpenPI 进程内实现最小门,而不是加载第三方 extension。不引入
@gotgenes/pi-permission-model-judge。模型裁决不能成为权限根。建议
ask转发到唯一 parent UI;不能在 child 里静默放宽。CHILD_EXCLUDED_TOOL_NAMES或CHILD_SAFE_PACKAGE_TOOL_NAMES;未分类 = 不可见 / 拒绝。未知
@earendil-works/pi-coding-agent的permission-gate与 OpenPI in-process child 的实际组合行为(本轮未跑)。验收
ask转发到 parent,不能在 child 里静默放宽/openpi-setuppermission-gate/protected-paths/sandbox/gondolinexamples关联
AGENTS.mdruntime invariants(权限、Trust、fail-closed、child 不扩权)docs/research/PI_COMMUNITY_PLUGIN_SURVEY_2026-09-08.md