| 1 | # 权限模式 |
| 2 | |
| 3 | Reasonix 的桌面端、CLI、Serve、ACP、机器人、自动任务和子代理共用同一套权限模式。协作方式(普通、计划、目标)决定任务如何推进;权限模式决定文件系统和进程的强制边界。 |
| 4 | |
| 5 | | 权限模式 | 文件系统边界 | 审批行为 | |
| 6 | | --- | --- | --- | |
| 7 | | **仅可查看**(`read-only`) | 工作区和会话文件只读。 | 读取直接执行;写入及未知外部副作用需要一次或本会话的精确授权。 | |
| 8 | | **工作区内修改**(`workspace-write`) | 工作区及会话私有临时目录可写。 | 默认模式。命令位于边界内时,管道、命令替换、Python/Node 内联脚本、构建和测试不会仅因语法触发审批。 | |
| 9 | | **完全权限**(`danger-full-access`) | 命令以当前系统账户走宿主正常执行路径,不使用 Reasonix 文件和网络沙箱。 | 跳过普通询问规则;宿主会在启动前执行显式 `deny`,但不再限制已启动进程。 | |
| 10 | |
| 11 | - **协作方式**(普通 / 计划 / 目标)决定 Reasonix 怎么推进任务。没有自动任务模式或可选质量底线;验证义务由真实工具动作、项目规则、任务风险和用户显式要求共同建立。 |
| 12 | - **权限预设**决定强制执行的文件系统与进程边界,以及何时请求精确授权。 |
| 13 | |
| 14 | macOS 使用 Seatbelt,Linux 使用 bubblewrap;这两个平台上受限模式所需的沙箱无法启动时,Reasonix 会失败关闭,不会提示用户关闭沙箱后重试。Windows 没有 OS 级 Shell 沙箱:受限模式仍约束 Reasonix 文件工具并请求精确授权,但 Shell 命令以当前系统账户运行。 |
| 15 | |
| 16 | ## 授权范围 |
| 17 | |
| 18 | 审批卡最多提供三个决定: |
| 19 | |
| 20 | 1. **允许一次**:只授权当前请求 ID。 |
| 21 | 2. **本会话允许**:在会话结束前复用卡片显示的规范目录、命令前缀、服务器能力或操作目标。 |
| 22 | 3. **拒绝**:拒绝调用,并把结果返回给模型。 |
| 23 | |
| 24 | 普通审批不再提供永久授权。会话授权只保存在内存中,不跨重启或会话分支,可以查询和撤销。切换权限或撤销授权都会推进 permission revision。权限切换和审批提交会串行处理:先提交的审批继续有效,旧于已提交 revision 的回复会被拒绝。 |
| 25 | |
| 26 | 普通命令错误、HTTP 错误、超时和应用异常都按工具错误处理,不会转成权限弹窗。只有宿主记录了真实沙箱拒绝后,重试才可以申请 `sandbox_permissions`,并必须携带匹配的 `denial_id` 和理由。 |
| 27 | |
| 28 | ## CLI |
| 29 | |
| 30 | 新会话默认使用工作区内修改: |
| 31 | |
| 32 | ```sh |
| 33 | reasonix --permission-mode read-only |
| 34 | reasonix --permission-mode workspace-write |
| 35 | reasonix --permission-mode danger-full-access |
| 36 | reasonix run --permission-mode workspace-write "运行测试" |
| 37 | ``` |
| 38 | |
| 39 | 交互式 CLI 中,`Shift+Tab` 按“仅可查看 → 工作区内修改 → YOLO → 计划”循环,`Ctrl+Y` 可直接切换 YOLO。两个快捷键进入 YOLO 时都会设置规范权限值 `danger-full-access`。旧配置仍保守迁移:`ask` 映射为仅可查看,`auto` 和 `yolo` 映射为工作区内修改,旧值不会开启完全权限。 |
| 40 | |
| 41 | ## 远程兼容 |
| 42 | |
| 43 | Serve 通过 `permission-presets-v1` 声明真实强制能力。未声明该能力的旧远程仍可查看历史,但执行和权限修改会被禁用,直到远程服务完成升级。 |
| 44 |