跳转到内容

权限

Rusty 采用分级权限系统来控制工具能做什么。共有四种模式:

模式说明
default对写入/执行操作进行交互式提示
accept-edits自动允许文件写入,对 bash 执行进行提示
bypass允许所有操作,不做提示
plan只读模式,不进行写入或执行

通过 CLI 设置模式:

Terminal window
rusty --permissions bypass

或在设置中:

{
"permission_mode": "default"
}

每个工具都有一个权限级别,决定它能做什么:

级别说明示例
None无需特殊权限todowriteagentnotememory
ReadOnly可读但不可修改file_readgrepglobweb_fetch
Write可创建或修改文件file_writefile_editapply_patch
Execute可运行系统命令bash(按命令逐一分类)

bash 工具使用 classify_bash_command() 来判定权限级别。命令被分类为只读,或需要写入/执行权限。

这些命令绕过写入权限并被自动允许:

  • lscatheadtailwcfind
  • git statusgit loggit diffgit show
  • cargo checkcargo testcargo clippycargo build
  • npm listnpm testyarn test
  • 任何通过只读命令进行管道处理的命令

这些命令(在 default 模式下)需要显式权限:

  • git commitgit pushgit checkout
  • rmmvcp
  • npm installcargo run
  • dockersshcurl

若要永久允许特定工具而不提示,将它们加入 ~/.rusty/settings.json 中的 allowed_tools 数组:

{
"allowed_tools": [
"bash:git status",
"bash:cargo check",
"bash:npm test"
]
}

格式为 tool_name:exact_invocation_prefix。允许列表匹配工具调用的开头部分。

会话期间,当你在权限提示中选择「本次会话允许」时,该工具会在本次会话的剩余时间内被允许。会话允许列表条目不会跨会话持久化。

工具被调用时,Rusty 按以下顺序检查权限:

  1. Bypass 模式——若权限模式为 bypass,立即允许。
  2. Plan 模式——若权限模式为 plan,拒绝所有写入/执行操作。
  3. 只读或 None 级别——权限级别为 ReadOnlyNone 的工具始终被允许。
  4. AcceptEdits + Write——若模式为 accept-edits 且工具级别为 Write,无需提示直接允许。
  5. 永久允许列表——检查工具调用是否匹配 allowed_tools 中的条目。
  6. 会话允许列表——检查用户此前是否在当前会话中允许过此工具。
  7. 交互式提示——在 TUI 模式下,向用户提示选项:允许一次、允许本次会话、始终允许、拒绝。
  8. 默认拒绝——在无交互回调的无头模式下,拒绝。

出现交互式提示时,用户可以选择:

选项说明
允许一次允许这一次调用
允许本次会话在本次会话剩余时间内允许
始终允许永久加入设置中的 allowed_tools
拒绝阻止此次调用

Plan 模式专为审阅与规划而设计,不做任何更改:

Terminal window
rusty --permissions plan

在 plan 模式下,Rusty 可以读取文件、搜索代码、浏览网页,但不能写入文件或执行命令。这对代码审查与分析任务很有用。