Skip to main content

允许和拒绝工具使用

控制 Copilot 命令行界面(CLI) 可以使用哪些工具,以避免意外更改。

介绍

Copilot 命令行界面(CLI) 使用各种工具为你完成任务。 它可以执行 shell 命令、读取和写入文件、搜索代码库、提取 Web 内容并将任务委托给专用子代理。

虽然可以自动执行只读操作(如搜索、读取文件和运行只读 shell 命令),但像运行破坏性 shell 命令、编辑文件或访问 URL 等能够修改系统的工具,需要在 Copilot 使用之前得到您的明确批准。 这有助于避免使用 CLI 导致你不打算进行的更改,例如,shell 命令可以执行用户帐户可以执行的任何操作:安装包、删除文件、推送代码或发出网络请求。

可以在启动 CLI 或交互式会话期间允许或拒绝工具的权限。 如果在启动会话之前未授予权限,Copilot 命令行界面(CLI) 每次需要执行可能具有破坏性的操作时,会提示你确认权限。 可以选择允许该工具使用一次或整个会话期间使用。

工具控制的层次

在命令行选项中指定工具权限时,可以使用两层控制。 您可以:

  • 限制可用于 AI 模型的工具选择。
  • 允许或拒绝特定工具的权限。

限制可用于 AI 模型的工具选择

--available-tools``--excluded-tools选项限制 AI 模型知道的工具集,因此可以在确定如何完成任务时从中进行选择。

  •         `--available-tools` 禁用除指定工具以外的所有工具。
    
  •         `--excluded-tools` 仅禁用指定的工具。
    

如果将这两个选项一起使用,CLI 将应用指定的 --available-tools 允许列表并忽略指定的 --excluded-tools拒绝列表。

如果工具不在可用集中,则即使使用选项指定它 --allow-tool ,AI 模型也无法使用它。 在未指定可用工具集的交互式会话中,AI 模型可能会尝试使用工具,但只能拒绝。 --available-tools--excluded-tools选项可以防止你以这种方式浪费与模型的交互。

示例用例

你正在启动一个 CLI 会话来对你的项目进行性能基准测试,并想阻止 AI 模型甚至尝试进行网络搜索。

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

注意

有关本文中提到的这些和其他命令行选项语法的完整详细信息,请参阅 GitHub Copilot CLI 命令参考

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

--allow-tool``--deny-tool选项允许或拒绝特定工具或工具子命令的权限。

每个选项的值都是一个逗号分隔的工具类型列表,可以选择指定确切的工具和子命令模式。

如果使用指定工具 --allow-tool,AI 模型可以选择使用该工具,而无需提示你提供权限。 如果指定了一个工具 --deny-tool,则 AI 模型根本无法使用该工具,即使它是完成任务的最佳选择。

即使设置了拒绝规则, --allow-all 拒绝规则始终优先于允许规则。

示例

选项Effect
--allow-tool=shell允许所有 shell 命令。
--allow-tool='shell(git commit)'允许执行git commit命令。
--allow-tool='shell(git:*)' --deny-tool='shell(git push)'允许所有git命令,除git push以外。
--deny-tool=write拒绝所有文件写入操作。
--allow-tool='read, write(.github/copilot-instructions.md)'允许所有读取操作,并允许对特定文件执行写入操作。
--allow-tool='MyMCP(create_issue), MyMCP(delete_issue)'允许来自MyMCP MCP 服务器的create_issuedelete_issue工具。
--available-tools='bash,edit,view,grep,glob' --allow-tool='shell(git:*)' --deny-tool='shell(git push)'合并受限 CLI 会话的这两个控制层。 Copilot 可以浏览代码、进行编辑和提交更改,但无法访问互联网、运行任意子代理程序或推送到 Git 历史。

有关支持的工具类型的详细信息,请参阅 GitHub Copilot CLI 命令参考

宽松选项

以下命令行选项授予 Copilot 命令行界面(CLI) 使用所有可用工具的权限。

  •         `--allow-all-tools` — 对可用工具的完全访问权限。
    
  •         `--allow-all`或 `--yolo` — 等效于在启动 CLI 时使用所有`--allow-all-tools`和`--allow-all-paths``--allow-all-urls`选项。
    

    在交互式会话中,可以使用 /allow-all 斜杠命令 /yolo 来启用所有工具,而无需重启会话。

    注意

    强烈建议仅在独立环境中使用这些选项。 每次启动 Copilot 命令行界面(CLI) 时,不应该用别名来应用这些选项之一,因为如果这样用,每次使用 CLI 时,Copilot 在未经明确授权下可使用任何工具,这可能造成意想不到的后果。

重置权限

          `/reset-allowed-tools`斜杠命令撤销在当前交互式会话期间授予的所有权限。 这同样适用于通过响应提示信息授予的权限,以及使用 `/allow-all` 或 `/yolo` 斜杠命令。

使用 /reset-allowed-tools 可以将权限重置为默认值,或者根据启动 Copilot 命令行界面(CLI) 时所用命令行选项的定义重置为相应状态。 例如,如果使用选项 --allow-tool='shell(git:*)'启动 Copilot 命令行界面(CLI) 互动式会话,然后在会话期间根据提示响应来允许和拒绝进一步授权,则在使用 /reset-allowed-tools 命令时,CLI 的权限将返回到原始 --allow-tool='shell(git:*)' 状态,不允许或拒绝其他新的授权。 继续在会话中工作时,如果 Copilot 需要其他权限,系统会再次提示你。

延伸阅读

  •         [AUTOTITLE](/copilot/how-tos/copilot-cli/cli-best-practices#configure-allowed-tools)
    
  •         [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference)