Skip to content

安全 ​

Agent 发起的每一次工具调用,DotCraft 都会先检查一遍,结果只有三种:直接运行、先问你、或者被拒绝。哪些工具存在、哪些路径文件工具碰不得、哪些命令要你点头、Agent 能自己做多少,都由你来定。

DotCraft 安全模型:Agent 的每次工具调用都要经过工具开关、文件工具的路径黑名单、Shell 命令检查和工作区边界,然后直接运行、先问你,或者被拒绝

默认行为 ​

新建的工作区里:

  • 文件工具和 Shell 命令在工作区内直接运行。
  • 离开工作区会先问你。文件工具访问工作区外的路径、命令从工作区外的目录启动,都算离开。指向工作区外的符号链接也一样。
  • 强制删除文件或打开网址的命令会先问你。
  • MCP 工具运行前会先问你,除非它的 server 声明这个工具既不做破坏性修改,也不访问外部系统。
  • 黑名单是空的,内置工具也没有被收窄。

决定 Agent 能自己做多少 ​

在 Desktop 里打开设置 → 常规 → 权限,默认权限决定这个工作区里新对话的审批方式:

  • 请求批准:上面那些需要审批的操作都会先问你。
  • 完全访问权限:自动批准所有需要审批的操作,不再询问。

要为某一个对话单独设置,在输入框的审批策略里选择。

完全访问权限并不会放行一切。黑名单里的路径、你的规则禁止的命令照样被拒绝。危险命令也会被拒绝,除非有一条放行规则覆盖它。只在你信任的工作区里使用完全访问权限。

如果希望离开工作区直接被拒绝、而不是询问,把 Tools.File.RequireApprovalOutsideWorkspace 设为 false。字段说明见 权限。

处理审批请求 ​

Shell 命令的审批面板会显示将要使用的 shell、DotCraft 解读出的命令,以及询问的原因。脚本里有 DotCraft 无法提前读懂的语法时,面板会说明这一点,并把脚本整体展示出来。

每个选项记住的范围不一样:

  • 允许一次只运行这一次。
  • 本会话允许在这次对话剩余的时间里,对同一目录下的同一条命令不再询问。
  • 始终允许会写入一条规则,放行以相同开头词起始的命令。危险命令和读不懂的脚本例外,它们只按原样记住,不会变成规则。

Agent 往正在运行的终端里输入的内容,也要经过同样的检查。

把敏感路径加入黑名单 ​

把凭据和密钥所在的目录加入 Security.BlacklistedPaths,比如 ~/.ssh、云服务凭据和密码管理器的目录。文件工具读取、写入、编辑、搜索这些路径时会被直接拒绝,不会走审批,完全访问权限下也一样。子路径一并覆盖,每个入口都按同一份黑名单执行。

黑名单只约束文件工具,不检查 Shell 命令。从工作区内启动的命令仍然可以读到黑名单里的路径,所以要为可能碰到这些密钥的命令加上规则。示例配置见权限配置。

编写命令规则 ​

命令规则写在 Tools.Shell.Policy.Rules。每条规则给出命令的开头词,并指定放行、询问还是拒绝,比如让 git push 总是询问、让 rm 一律拒绝。规则先于其他检查生效,同时命中多条规则时,以最严格的那条为准。点始终允许学到的规则保存在工作区里,立即生效。

收窄工具范围 ​

EnabledTools 列出 Agent 能看到的内置工具,没列出的工具对 Agent 不存在。LSP 这类可选工具默认关闭,需要时再打开。要限制某个 subagent 角色能用的工具,见 Subagents。

来自插件和 MCP server 的工具,安装前先看清它们的来源和信任边界,见安装前先看清信任边界。

用 Hooks 加入自己的检查 ​

Hooks 可以在工具运行前检查一次调用,或者在审批请求到你面前之前先把它拒掉。用法见生命周期 Hooks。

共享或对外部署时 ​

场景建议
个人本地项目保持请求批准,把 SSH、云凭据、密码管理器目录加入黑名单
团队共享工作区把黑名单和命令规则写进工作区 .craft/config.json,所有入口统一执行
群聊里的 Bot保持请求批准,收紧工具,只对可信的用户和群开放,见开放到群聊之前
自动化任务没有人在旁边回答审批,用放行规则列出任务确实需要的命令
远程访问 AppServerAppServer 监听非本机地址时必须设置 WebSocket token,使用强随机值
Subagents除非明确需要,否则保持默认的嵌套深度

在服务器上运行时,服务器部署里的 Stack 只在本机监听,Desktop 通过 SSH 隧道连接。

相关文档 ​

  • 可观测性 — 在 Dashboard 回看每一次审批和拦截记录
  • 服务器部署 — 在服务器上运行 DotCraft,不让端口直接暴露到公网