跳到正文
FunCoding

搜索

搜索文档、智能体、博客、Skill 和 MCP

权限与工具控制

控制 Copilot CLI 能用哪些工具:--available-tools、--excluded-tools、--allow-tool、--deny-tool、宽松选项、权限持久化与重置。

Copilot 用多种工具完成任务:执行 shell 命令、读写文件、搜索代码库、获取网页内容,以及把任务委派给专门的子智能体。读取类的只读操作(搜索、读文件、运行只读 shell 命令)会被自动允许,而可能修改你系统的工具(如运行破坏性 shell 命令、编辑文件或访问 URL)需要你的批准。你可以在启动 CLI 时或交互会话期间允许或拒绝工具权限;如果你在会话开始前没有授予权限,Copilot 会在每次需要执行潜在破坏性操作时提示你。

持久化的权限

有些提示选项会保存你的同意,这样不会再被问。批准存放的位置取决于你批准了什么:为当前位置批准某个工具时,批准保存到配置目录里的 permissions-config.json(默认 ~/.copilot/permissions-config.json);URL 批准不同:永久批准某个 URL 时,它的域名被加进 settings.json(默认 ~/.copilot/settings.json)的 allowedUrls 列表,该批准适用于你所有会话,而不仅是当前位置。--allow-tool 和 --deny-tool 这样的命令行选项只适用于当前会话,不会写入 permissions-config.json;拒绝规则仍然优先于已保存的批准。

两层工具控制

在命令行选项里指定工具权限有两层控制:限制 AI 模型可选的工具集合,以及允许或拒绝特定工具的权限。

限制 AI 模型可选的工具

--available-tools 和 --excluded-tools 选项限制 AI 模型知道的、因此可以选择的工具集合:--available-tools 禁用你指定之外的所有工具;--excluded-tools 只禁用指定的工具。同时使用两者时,CLI 应用 --available-tools 指定的允许列表并忽略 --excluded-tools 的拒绝列表。如果某个工具不在可用集合里,AI 模型根本无法使用它,即使你用 --allow-tool 指定了它。例如在做基准测试时不想让模型尝试网页搜索:

copilot --excluded-tools='web_fetch, web_search'

允许或拒绝特定工具的权限

--allow-tool 和 --deny-tool 允许或拒绝特定工具或工具子命令的权限,值是逗号分隔的工具类别列表,可以可选地指定确切的工具和子命令模式。用 --allow-tool 指定的工具,AI 模型可以不经你许可就使用;用 --deny-tool 指定的工具,AI 模型完全无法使用,即使它对完成任务是最佳选择。拒绝规则始终优先于允许规则,即使设置了 --allow-all 或在 permissions-config.json 里保存了匹配的批准。示例:

选项效果
--allow-tool=shell允许所有 shell 命令
--allow-tool='shell(git commit)'允许 git commit 命令
--allow-tool='shell(git:*)' --deny-tool='shell(git push)'允许除 git push 之外的所有 git 命令
--deny-tool=write拒绝所有文件写入操作
--allow-tool='read, write(.github/copilot-instructions.md)'允许所有读取操作,并允许对一个特定文件的写入
--allow-tool='MyMCP(create_issue), MyMCP(delete_issue)'允许 MyMCP MCP 服务器的 create_issue 和 delete_issue 工具
--available-tools='bash,edit,view,grep,glob' --allow-tool='shell(git:*)' --deny-tool='shell(git push)'结合两层控制做受限会话:可以探索代码、做编辑和提交,但不能推送

宽松选项

这些命令行选项授予 Copilot 使用所有可用工具的权限。在授予宽泛权限之前,考虑用本地沙箱或在云端沙箱里运行会话,来限制 Copilot 能访问什么:

  • --allow-all-tools:完全访问可用工具
  • --allow-all 或 --yolo:相当于启动 CLI 时同时使用 --allow-all-tools、--allow-all-paths 和 --allow-all-urls;在交互会话里可以用 /allow-all 或 /yolo 斜杠命令,无需重启会话就允许所有工具

官方强烈建议只在隔离环境里使用这些选项,且永远不要用别名让每次启动 Copilot 都应用它们,那样会让 Copilot 在没有你明确许可的情况下使用任何工具。

重置权限

/reset-allowed-tools 斜杠命令撤销你在当前交互会话期间授予的所有权限,既包括你通过响应提示给的,也包括使用 /allow-all 或 /yolo 的。它把权限重置到默认值,或你启动时命令行选项定义的状态,同时清除 permissions-config.json 里当前位置已保存的工具批准。要移除其他位置的已保存批准,编辑或删除 permissions-config.json 里相应的位置条目。