kxen 在用户本机执行模型生成的操作。安全目标不是让模型永不出错,而是让高风险行为在执行层可见、可拒绝和可恢复。
flowchart LR Intent["模型工具请求"] --> Permission["角色权限"] Permission --> Safety["Safety 检查"] Safety -->|"低风险"| Execute["执行"] Safety -->|"需要确认"| Approval["Approval"] Approval -->|"允许"| Execute Approval -->|"拒绝"| Stop["停止"] Execute --> Recovery["Checkpoint 和事件记录"]
信任边界
| 边界 | 规则 |
|---|---|
| Workspace | 统一解析相对、绝对和不存在的目标路径 |
| 项目配置 | 未信任 Workspace 不加载项目 TOML |
| 项目 MCP | 未信任 Workspace 不加载;stdio 还需独立执行审批 |
| 外部文件 | 需要原生文件选择器授权,授权按路径生效 |
| 模型调用 | 统一经过 MRM 和 Auth store |
| 工具调用 | 统一经过角色权限、Safety 和 Approval |
| Bot 执行 | 固定 revision 和 permission snapshot,不继承 peer 权限 |
| 网络请求 | URL 与实际连接地址受检,Browser 全流量经过受控代理 |
凭证
API key 和 OAuth token 保存在本地权限受限文件中。凭证不进入项目 TOML、Session prompt、文档和 Git。
Provider 凭证可以来自官方客户端的本地登录状态或用户显式配置。模型只看到调用结果,不获得原始 secret。
原生文件选择器也不能把 credential 目录或常见 secret 文件授权给 Agent,包括 kxen 数据目录、Keychain、.ssh、.gnupg、.aws、.kube、.docker、各类 Agent 配置目录,以及 .p8、.p12、.pfx 和 keychain 文件。不存在目标通过最近存在父目录完成 canonicalization,符号链接和 .. 不能绕过 Workspace 边界。
最小权限
研究和规划角色默认只读。写文件、执行命令和删除数据需要 execution 权限。MCP 工具还可以逐项配置 allow、ask 或 deny。
Bot capability、Workspace path 和 Connector grant 在 publish 前由 Owner 明确授予。每个 Bot 的 self-builder、Bot Message、CollaborationTask、Memory 和 ArtifactRef 都不能扩大权限。self-builder 只能修改所属 Bot 的 design-time draft,不能执行工具、授权或发布。MCP tool 还需要 exact server grant 和 Connector 的 Workspace binding;Bot 当前不暴露无法按 path grant 完整过滤的 LSP。
Shell 命令在宿主机执行,不宣称提供进程沙盒。kxen 不加载用户 Shell rc 或 alias 快照,并且每条命令和 background task start/restart 都需要显示完整 command 与 cwd 的当次 Approval。拒绝或没有可用 Approval channel 时执行失败关闭。
硬保护
Safety 对系统路径、Credential 目录、Git 元数据、磁盘操作和大范围资源销毁执行硬拒绝。项目 Rules 和用户 Prompt 不能覆盖这些规则。
审批规则(审批卡上的「本会话放行」「总是放行」)只能收窄 Ask 档的逐次询问:Deny 判定先于规则表,含 shell 元字符的复合命令永不自动放行,每次规则放行都先落会话审计再执行。规则可在设置页查看和撤销,全部审批决定在审批审计区块按时间倒序可见。
可恢复性
- 文件和 Session 删除进入系统废纸篓。
- Checkpoint 使用独立 shadow Git repository,默认保留最近 50 个(
checkpoint_keep可配置),超出窗口的旧检查点在提交成功后自动裁剪。 - Rewind 前的现场挂在独立 ref 上作为补偿点,Rewind 后可在 Session 中撤销;撤销只恢复文件,不回写对话记录。
- Worktree 隔离并行修改;删除仍有未提交改动的 Worktree 前会自动把改动导出为 patch 备份(
.agents/kxen/backups/,保留最近 50 个且不超过 30 天),删除后仍可把备份合回主树。 - Session-scoped Approval 结果写入对应 Session;全局审批不伪造 Session 记录。
- 用户停止 Session 会使未完成审批失效;审批等待窗口默认 300 秒,
approval_timeout_seconds可配置。 - BotRun 的 cancellation、tool journal 和
UNKNOWNRecovery 写入独立 durable event stream。
已知边界
Browser 会在初始导航前检查 URL,并把 Chrome 的 HTTP、HTTPS 和 WebSocket 流量固定到进程内代理,不配置 direct fallback。代理对每个导航、redirect、iframe、子资源和脚本请求分别解析域名,拒绝任一受限地址,并只连接本次检查通过的具体地址。HTTPS 保留原始域名的 TLS SNI。请求解析、连接、空闲和流量超过上限时失败关闭。每个非 close 操作后的 top-level URL 复查是额外防线,不承担网络拦截职责。
Remote MCP、Browser automation 和自动知识沉淀仍是实验性能力,个人配置中默认全部关闭,项目配置不能替用户开启。启用后也不能用于无监督处理高敏感数据。