# 配置 GitHub Copilot CLI

为 Copilot CLI 配置受信任的目录、工具访问以及路径和 URL 权限

## 介绍

Copilot CLI 有多个配置选项，用于控制它可以代表你访问和执行的操作。

本文介绍如何设置受信任的目录、配置工具的访问权限，以及向文件路径和 URL 授予权限。

### 先决条件

* 安装 Copilot CLI。 请参阅“[安装 GitHub Copilot CLI](/zh/copilot/how-tos/copilot-cli/set-up-copilot-cli/install-copilot-cli)”。

## 设置受信任的目录

Copilot CLI 可读取、修改和执行文件的受信任目录控制。 信任目录具有安全隐患，请参阅 [安全注意事项](/zh/copilot/concepts/agents/copilot-cli/about-copilot-cli#security-considerations)。

### 选择信任目录

启动 GitHub Copilot CLI 会话时，系统将要求你确认信任启动 CLI 所在的目录及其下的所有文件。

你可以选择信任当前目录以实现以下目的：

* 仅当前正在运行的会话
* 此会话和未来会话

如果选择信任目录以供将来的会话使用，则将不再显示受信任的目录提示。 只有在确定此位置始终是Copilot的安全操作场所时，您才应选择第二个选项。

### 编辑受信任的目录

可以编辑永久受信任的目录的列表。 受信任的目录存储在自动托管 `config.json` 文件中。

1. 打开 CLI 的`config.json`文件。 默认情况下，它存储在 `.copilot` 主目录下的文件夹中：

   * **macOS/Linux**： `~/.copilot/config.json`
   * **Windows**：`$HOME\.copilot\config.json`

可以通过设置 `COPILOT_HOME` 环境变量来更改配置位置。 这会更改上述路径中的 `~/.copilot/` 和 `$HOME\.copilot\`。

1. 编辑 `trustedFolders` 数组的内容。

## 设置允许的工具

可以通过在尝试使用工具时Copilot CLI响应审批提示或通过命令行标志指定权限来控制哪些工具Copilot可以使用。

请注意，允许工具访问具有安全影响，请参阅 [安全注意事项](/zh/copilot/concepts/agents/copilot-cli/about-copilot-cli#security-considerations)。

本部分您可以了解如何：

* [首次允许使用工具](#allowing-a-tool-for-the-first-time)
* [允许在不手动批准的情况下使用工具](#allowing-tools-to-be-used-without-manual-approval)
* [指定要允许或拒绝的工具](#specifying-which-tool-you-want-to-allow-or-deny)
* [允许某些工具，同时拒绝其他工具](#allowing-some-tools-while-denying-others)
* [限制可用工具](#limiting-available-tools)

### 首次允许工具

第一次 Copilot 需要使用可能需要审批的工具时，例如 `touch`、`chmod`、`node` 或 `sed`它会询问你是否希望允许它运行。 是否提示可能取决于工具及其使用方式，例如所提供的参数或工具是否已获得批准。

1. 提示 Copilot 执行需要工具的任务。 例如：

   ```shell
   copilot -p "Create a new file called README.md with a project description"
   ```

2. 从以下三个选项之一中进行选择：

   * `1. Yes`

     选择此选项可仅允许 Copilot 仅这一次运行此特定命令。 下次需要使用此工具时，它会再次询问你。

   * `2. Yes, and approve TOOL for the rest of the running session`

     选择此选项可允许 Copilot 在当前正在运行的会话期间使用此工具。 在新的会话中，或者如果你在未来重新恢复当前会话时，它会再次请求你的批准。 如果选择此选项，则允许 Copilot 以任何认为合适的方式使用此工具。

     例如，如果 Copilot 要求你允许它运行命令 `rm ./this-file.txt`，并选择选项 2，则可以 Copilot 在此会话的当前运行期间运行任何 `rm` 命令（例如 `rm -rf ./*`），而无需请求批准。

   * `3. No, and tell Copilot what to do differently (Esc)`

     选择此选项可取消建议的命令，并指示 Copilot 尝试其他方法。

### 允许在未经手动批准的情况下使用工具

可以使用命令行标志来指定无需审批即可使用的工具 Copilot 。

#### 允许所有工具

通过`--allow-all-tools`允许Copilot使用任何工具而无需请求批准。

* 例如：

  ```shell
  copilot -p "Revert the last commit" --allow-all-tools
  ```

#### 拒绝工具

使用`--deny-tool`防止Copilot使用特定工具。

* 例如：

  ```shell
  copilot --deny-tool='shell(git push)'
  ```

此选项优先于 `--allow-all-tools` 和 `--allow-tool` 选项。

#### 允许工具

使用 `--allow-tool` 以允许 Copilot 无需您的批准即可使用特定工具。

* 例如：

  ```shell
  copilot --allow-tool='shell'
  ```

### 指定要允许或拒绝的工具

若要使用 `--deny-tool` 和 `--allow-tool` 选项，必须指定要允许或拒绝的工具类型：

* [Shell 命令](#allowing-or-denying-shell-commands)
* [“写入”工具](#allowing-or-denying-write-tools)
* [MCP 服务器工具](#allowing-or-denying-mcp-server-tools)

#### 允许或拒绝 shell 命令

使用 `shell(COMMAND)` 来允许或拒绝特定的 shell 命令。

* 例如，若要防止 Copilot 使用任何 `rm` 命令，请使用：

  ```shell
  copilot --deny-tool='shell(rm)'
  ```

对于 `git` 和 `gh` 命令，请指定允许或拒绝的特定一级子命令。

* 例如，若要防止 Copilot 使用 `git push`，请使用：

  ```shell
  copilot --deny-tool='shell(git push)'
  ```

工具规范是可选的。 例如， `copilot --allow-tool='shell'` 允许 Copilot 在未经个人批准的情况下使用任何 shell 命令。

#### 允许或拒绝 `'write'` 工具

用于 `'write'` 允许或拒绝工具（而不是 shell 命令）修改文件的权限。

* 例如，若要允许 Copilot 在未经个人批准的情况下编辑文件，请使用：

  ```shell
  copilot --allow-tool='write'
  ```

#### 允许或拒绝 MCP 服务器工具

用于 `'MCP_SERVER_NAME'` 允许或拒绝来自指定 MCP 服务器的特定工具。

* 例如，若要防止Copilot使用名为`tool_name`的工具，该工具来自称为`My-MCP-Server`的 MCP 服务器，请使用：

  ```shell
  copilot --deny-tool='My-MCP-Server(tool_name)'
  ```

`MCP_SERVER_NAME` 是已配置的 MCP 服务器的名称。

服务器中的工具在括号中指定，并使用向 MCP 服务器注册的工具名称。

仅使用服务器名称而未指定具体工具，将允许或拒绝该服务器中的所有工具。

可以在`/mcp`的交互模式中输入Copilot CLI，然后从显示的列表中选择服务器以查找 MCP 服务器的名称。

### 允许某些工具的同时拒绝其他工具

若要确切确定哪些工具 Copilot 可以在不要求审批的情况下使用，可以使用审批选项的组合。 例如：

* 若要防止 Copilot 使用 `rm` 和 `git push` 命令，但自动允许所有其他工具，请使用：

  ```shell
  copilot --allow-all-tools --deny-tool='shell(rm)' --deny-tool='shell(git push)'
  ```

* 若要禁止 Copilot 使用来自名为 `tool_name` 的 MCP 服务器的工具 `My-MCP-Server`，但允许该服务器上的所有其他工具无需个人批准即可使用，请使用：

  ```shell
  copilot --allow-tool='My-MCP-Server' --deny-tool='My-MCP-Server(tool_name)'
  ```

### 限制可用工具

若要限制 Copilot 为一组特定的工具，请使用 `--available-tools`。

此列表中未包含的工具将对Copilot不可用。

## 设置路径权限

路径权限控制哪些目录和文件 Copilot 可以访问。

默认情况下， Copilot CLI 可以访问当前工作目录、其子目录和系统临时目录。

路径权限适用于 shell 命令、文件作（创建、编辑、查看）和搜索工具（例如 `grep` 和 glob 模式）。 对于 shell 命令，路径通过对命令文本进行标记化并识别看起来像路径的标记来启发式提取。

> \[!WARNING]
> shell 命令的路径检测有限制：
>
> * 可能无法检测到嵌入在复杂 shell 构造中的路径。
> * 只有一组特定的环境变量被扩展（`HOME`、 `TMPDIR`和 `PWD`类似）。 自定义变量（例如 `$MY_PROJECT_DIR`）不会展开，并且可能无法正确验证。
> * 符号链接会针对现有文件进行解析，但不会针对正在创建的文件进行解析。

### 允许访问所有路径

若要禁用路径验证并允许访问任何路径，请在启动`--allow-all-paths`时使用Copilot CLI标志。

### 禁止访问临时目录

若要禁止访问临时目录，请使用 `--disallow-temp-dir`。

## 设置 URL 权限

URL 权限控制哪些外部 URL Copilot 可以访问。 默认情况下，在授予访问权限之前，所有 URL 都需要审批。

URL 权限适用于 `web_fetch` 工具以及访问网络的特选 shell 命令列表（例如 `curl`，`wget` 和 `fetch`）。 对于 shell 命令，使用正则表达式模式提取 URL。

> \[!WARNING]
> shell 命令的 URL 检测有限制：
>
> * 不会检测到由命令读取的文件内容、配置文件或环境变量中的 URL。
> * 混淆 URL（例如拆分字符串或转义序列）可能无法被检测到。
> * HTTP 和 HTTPS 被视为不同的协议，需要单独审批。

可以为会话保留 URL 权限，也可以永久保留。

### 禁用 URL 验证

若要禁用 URL 验证，请使用 `--allow-all-urls` 标志。

### 预先审批特定域名

若要预先批准特定域，请使用 `--allow-url=DOMAIN`。

* 例如，`--allow-url=github.com`。

### 拒绝特定域

若要拒绝特定域，请使用 `--deny-url=DOMAIN`。

* 例如，`--deny-url=github.com`。

## 允许所有工具、路径和 URL

若要允许所有工具、路径和 URL，请使用 `--allow-all`或其别名 `--yolo`。

该标志包括的内容有：

* `--allow-all-tools` （跳过工具审批）。
* `--allow-all-paths` （禁用路径验证）。
* `--allow-all-urls` （禁用 URL 验证）。

在交互式会话期间，还可以使用 `/allow-all` 或 `/yolo` 斜杠命令启用所有权限。

> \[!NOTE] 如果您拥有 Copilot Business 或 Copilot Enterprise 许可证，这些命令可能会被企业管理员阻止。

## 限制对文件的访问

各种 `--allow-all...` 选项使你无需决定是否允许 Copilot 访问单个工具、文件和 URL。 但是，使用它们可扩大执行可能不希望执行的操作的范围 Copilot ，例如，更改正在使用的存储库外部的文件。

若要缓解此风险，可以指示 CLI 对其命令（本地沙盒）进行沙盒处理，也可以在远程沙盒环境（云沙盒）中运行整个 Copilot CLI 会话。 有关详细信息，请参阅“[关于云和本地沙盒 GitHub Copilot](/zh/copilot/concepts/about-cloud-and-local-sandboxes)”。

## 延伸阅读

* [自定义 GitHub Copilot CLI](/zh/copilot/how-tos/copilot-cli/customize-copilot)
* [GitHub Copilot CLI 配置目录](/zh/copilot/reference/copilot-cli-reference/cli-config-dir-reference)