目录

权限与审批

每次工具调用都受多个相互独立的限制约束,以最严格的为准。这些限制都不依赖 AI 自觉守规矩。

各层限制

  1. 你在账户中的角色。所有者和管理员管理一切。成员可以查看机器并连接 AI 客户端。自定义角色授予单项权限,例如审批请求或查看审计日志。组可以认领机器,这样只有组内成员才能访问这些机器。
  2. 连接。批准客户端时,你选择它的权限范围、它能访问的机器,以及它的策略。
  3. 策略的命令规则和审批。它们决定哪些命令可以运行、哪些被拒绝、哪些要等人处理。
  4. 机器自身的上限。机器上的 ceiling.toml 限定任何策略在这台机器上最多能允许什么。agent 在本地执行它,因此即使是网关也无法超出这个上限。
  5. 操作系统账户。命令以 agent 或 SSH 连接所用的账户运行,拥有该账户的权限。

策略

策略属于账户,为每个连接单独选择。它设置:

键控制的内容
shelloff、sandboxed(Linux 上用 Landlock,macOS 上用 Seatbelt)或 full。Windows 有 off 和 full。
files文件工具可以使用的路径,每个路径为只读或读写;* 表示全部。
deny表现得像不存在一样的路径,例如密钥文件。
gui屏幕工具:off、observe 或 act,可以只限列出的应用。
tunnel_targets端口转发和 Web 分享可以访问的地址。
commands命令规则。
approval审批:哪些工具始终需要审批、由谁审批,以及请求等待多久。

每个账户自带两个策略:full(shell 和文件不受限制,屏幕关闭)和 read-only(没有 shell,文件只读,常见的密钥文件被隐藏,屏幕关闭)。屏幕工具默认关闭,除非策略开启它们;在此之前,它们甚至不会列给 AI。

命令规则

  • Shell 模式(默认):规则按模式匹配命令,第一条匹配的规则生效,每条规则的结果为 allow、deny、approve 或 confirm。嵌套在其他命令中的命令($(…)、sudo、bash -c、PowerShell -EncodedCommand)也会被检查,以最严格的结果为准。shell 非常灵活,因此 shell 模式的规则只是一道护栏,不是安全边界。
  • 白名单模式:只有列出的程序可以运行,并且直接启动、不经过 shell,因此这个列表是一条硬性边界。此模式下不能使用 shell 会话和终端。
  • 现成的规则集:linux-readonly、windows-readonly、no-destructive、deploy。
  • 规则由网关检查,再由机器上的 agent 检查一次。

无论策略如何,LetKite 都会拒绝会清除系统的命令(例如 rm -rf /、mkfs 或写入裸磁盘),并要求高风险命令带上 confirm=true,例如重启、停止服务、卸载软件包或递归删除。AI 会被要求在确认之前向你展示完整的命令。

审批

当命令规则为 approve,或策略在 approval.tools 中列出了该工具时,调用需要人工审批。可以要求审批的工具:exec、exec_many、shell_run、job_start、write_file、delete_path、copy_between_hosts、transfer_start、gui_act、tunnel_open、terminal_open、wake_node、wake_device。

  • 由谁审批:连接这个 AI 的人(所有者和管理员也可以)、任意管理员,或发起请求者以外的另一个人(四眼原则)。
  • 如何审批:审批人会通过邮件收到链接;如果安装了 LetKite Web 应用,手机上还会收到推送通知。批准需要通行密钥或验证器代码;拒绝不需要。
  • 只批准所请求的内容:一次审批只针对一个请求,即相同的工具、机器和参数,并且只能使用一次。
  • 过期:默认 10 分钟(可在策略中设为 1 分钟到 24 小时)。每个连接同时最多有 20 个请求在等待。

调用等待期间,AI 客户端会收到一条消息,说明请求发给了谁、有效期到何时,并被要求告诉你。它可以用 approval_wait 工具等待,然后用完全相同的参数再次调用。被拒绝的请求不得重试。

机器的上限

每台机器上都有一个只有其管理员能编辑的本地文件:Linux 和 macOS 上是 /etc/letkite/ceiling.toml,Windows 上是 %ProgramData%\letkite\ceiling.toml。它限定这台机器上的 shell、文件、隐藏路径、屏幕访问、端口转发等。agent 会按它检查每个请求,因此即使网关被攻破,机器的所有者仍然有最终决定权。