Skip to content

runtime: 试点全局 allow/ask/deny,不引入社区权限包依赖 #497

Description

@tt-a1i

结论

在 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 npm 31.1.2(2026-09-07) https://www.npmjs.com/package/@gotgenes/pi-permission-system · https://github.com/gotgenes/pi-packages/tree/main/packages/pi-permission-system

公开 README 声明的机制(未在本轮执行验证):

  • 规则同时匹配引用路径与 symlink-resolved canonical path;
  • path → external_directory → per-tool → bash 采用 most-restrictive-wins;
  • 无法解析的 Bash 与内部 gate error 不静默放行;
  • 不受信任项目不能用 project config 放宽 global policy。

官方对照缝(example,不是社区产品):permission-gateprotected-pathssandboxgondolin。见 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。模型裁决不能成为权限根。

建议

  1. 设计 allow/ask/deny,覆盖 tools / bash / MCP / paths,most-restrictive-wins。
  2. child session 的 ask 转发到唯一 parent UI;不能在 child 里静默放宽。
  3. 任何新模型可见工具必须写入 CHILD_EXCLUDED_TOOL_NAMESCHILD_SAFE_PACKAGE_TOOL_NAMES;未分类 = 不可见 / 拒绝。
  4. 对照官方 example,不对照「再装一个权限产品」。
  5. OS 级隔离(sandbox / gondolin)是另一件事,见后续 Ideas 讨论,不要和本 Issue 的 policy 门 混成一个 PR。

未知

  • 当前 @earendil-works/pi-coding-agentpermission-gate 与 OpenPI in-process child 的实际组合行为(本轮未跑)。
  • 社区包对 OpenPI child Resource Loader 的真实加载范围(本轮未安装)。

验收

  • 设计 allow/ask/deny 覆盖 tools / bash / MCP / paths,most-restrictive-wins
  • child session ask 转发到 parent,不能在 child 里静默放宽
  • 不新增第二条配置命令;走 /openpi-setup
  • 不 merge 社区包;对照官方 permission-gate / protected-paths / sandbox / gondolin examples
  • 未分类工具 fail-closed(含 factory-registered tools)
  • 不引入 model-judge 作为权限根

关联

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions