# 允许安全命令在未经手动批准的情况下运行

此选项 assisted permissions 通过使用大型语言模型评估权限请求来减少手动审批提示。

## Introduction

处理任务时 Copilot ，通常需要采取措施来更改系统，例如运行 shell 命令、编辑文件或访问 URL。 可以选择如何处理这些操作的权限请求。

回答审批提示会使你保持控制状态，但它可能会减慢速度，尤其是在会话开始时，Copilot 需要确定其被允许执行哪些操作。 若要减少提示数，可以授予 Copilot 无条件权限，但这样做会消除对单个操作的监督。

Assisted permissions 是手动审批和授予广泛权限与允许所有选项之间的中间点。 它使用大型语言模型来评审权限请求，并自动批准它判断在任务上下文中安全的操作。 在标准交互式会话中，仍需要审批的请求将提交给你。

> [!NOTE]
> Assisted permissions 在 GitHub Copilot CLI、Visual Studio Code 和 GitHub Copilot app中可用。

## 审批选项

可以在三个选项之间进行选择，以确定您想在多大程度上参与批准 Copilot 采取的操作。 现有的拒绝规则和企业限制仍然适用。 权限允许的请求可以在没有提示或模型评审的情况下运行。

* \*\*手动审批：\*\*Copilot 当尚不允许某个操作（例如，运行不是只读的命令、编辑文件或访问 URL）时，请求你的批准。 您可以批准该操作一次，或在本次会话的剩余时间内批准该操作。 这为你提供了最大的控制，但要求你响应最多的提示。

* \*\*Assisted permissions：\*\*Copilot 使用模型评估符合条件的权限请求，并自动批准其判断为安全的权限请求。 当请求仍需要审批时，系统会提示你。 这可以减少提示，而无需授予运行命令的一揽子权限。

* \*\*无条件批准：\*\*Copilot 该用户具有广泛的权限，无需模型安全评审或单个审批提示即可使用工具、路径和 URL。 这是最宽松的选择，并使您无法监督个别操作。 这是在使用 `--yolo`（或 `/permissions allow-all`）命令行选项，或 `/yolo`（或 Copilot CLI）斜杠命令时，在 `--allow-all` 中得到的行为。

管理员可以在不禁用`permissions.disableBypassPermissionsMode: "disable"`的情况下使用assisted permissions禁用无条件审批。 单独的 `permissions.disableAssistedPermissionsMode: true` 设置将 assisted permissions禁用 。 有关详细信息，请参阅“[企业管理设置](/zh/copilot/reference/enterprise-administrators/enterprise-managed-settings#permissions)”。

## assisted permissions的工作原理

启用 assisted permissions后，将在模型评审之前评估现有规则和人工审批。 对于尚未解决的合格请求——无论是运行命令、访问路径还是获取 URL——模型将评估该操作是否安全，并且是在你为任务授予的授权范围内。

在 Copilot CLI中，当请求符合评审条件时，模型审批可以满足 shell 命令、文件读取、文件写入和 URL 的企业 `ask` 规则。 这意味着这些规则并不总是导致提示您进行确认。 企业拒绝规则仍适用。

Assisted permissions 不会审核企业规则要求你批准的其他工具调用，也不会审核绕过本地沙盒的请求。 这些请求仍受会话正常权限处理的约束。

对于它可以审核的请求，模型会提出建议：

* 如果模型确信该请求是安全的，Copilot 会自动批准并继续，而无需提示你。
* 如果模型不确定该请求是否安全，Copilot 会请求你批准，就像进行手动批准时一样。

如果安全评审不可用或无法评估请求，则请求遵循会话的正常权限处理。

> [!NOTE]
> 在 Autopilot 模式和非交互式运行中，仍需要你的批准的请求将被拒绝。 当安全审查需要批准时，相关说明将传回 Copilot，以便它可以尝试不同的方法。 请参阅“[允许GitHub Copilot自主工作](/zh/copilot/concepts/agent-capabilities/agent-powered-workflows-and-operations/autopilot)”。

Copilot 用于选择安全审查所用的模型，该模型可能与你为对话选择的模型不同。 如果所选审阅模型不可用，则评审可以改用会话的活动模型。 如果使用自己的模型提供程序，评审将使用会话的活动模型。

> [!IMPORTANT]
> Assisted permissions 减少提示的频率，但不会消除你对 Copilot 所执行操作的责任。 模型可能会犯错误并批准危险或意外的操作。 此功能不能替代沙箱隔离或访问限制。 与任何自动审批选项一样，应查看 Copilot 执行的操作，并考虑在沙盒或其他隔离环境中运行它。 有关详细信息，请参阅“[GitHub Copilot 命令行界面 (CLI)](/zh/copilot/concepts/copilot-surfaces/copilot-cli#risk-mitigation)”。

## 在GitHub Copilot app中使用assisted permissions

若要启用 assisted permissions 本地会话，请执行：

1. 在提示框中，打开显示当前模式的模式菜单，例如 **交互式**、**计划**或 **Autopilot**。
2. 单击“**工具权限**”，然后选择“**辅助**”。

你的选择适用于当前会话，并且也保存为新本地会话的默认值。 它不会更改其他现有会话。 若要在不更改当前会话的情况下更改默认值，请打开 **“设置”**，选择 **“会话”**，然后在 **“工具权限”** 下选择 **“辅助”**。

若要仅为当前活动会话启用 assisted permissions，而不更改默认值，请在提示框中输入 `/permissions assisted`。 单击 `/permissions manual` 将该会话恢复为手动审批，或单击 `/permissions show` 检查其权限模式。

工具权限控制在云会话中不可用。 对于远程主机上的会话，可用的权限模式取决于该主机支持的内容。 即使选择 **“辅助”** 作为默认值，管理员限制仍适用。

## 在assisted permissions中使用GitHub Copilot CLI

有三种方法可以启用 assisted permissions，具体取决于是要针对你处于的会话，是针对每个新会话，还是针对单个自动运行。

### 在交互式会话期间将其打开

输入以下斜杠命令：

```copilot copy
/permissions assisted
```

若要返回手动审批，请输入 `/permissions manual`。 若要检查当前处于的权限模式，请输入 `/permissions show`。 还可以输入不带参数的 `/permissions`，然后从列表中选择一种模式。

### 将其设为新会话的默认值

若要将 assisted permissions 设为新交互式会话的首选模式，请在用户配置文件中将 `defaultPermissionMode` 设置为 `"assisted"`（`~/.copilot/settings.json`）。 可以直接编辑文件，也可以在会话期间使用 `/settings` 斜杠命令。 有关详细信息，请参阅“[GitHub Copilot CLI 配置目录](/zh/copilot/reference/copilot-cli-reference/cli-config-dir-reference#user-settings-copilotsettingsjson)”。

此设置仅适用于新的交互式会话。 如果管理员设置 `permissions.defaultMode`，则托管默认值优先于偏好。 如果策略允许，你仍然可以为会话选择其他模式，例如使用 `/permissions manual`。

恢复的会话保留其保存的权限模式，并受当前策略限制。 如果策略允许，则 `--allow-all` 或 `--yolo` 选项优先于任一默认值。 如果所选默认值不可用或被策略阻止，CLI 将以手动批准方式启动。

若要将手动批准设为首选默认选项，请将 `defaultPermissionMode` 设置为 `"manual"`。 如果你和管理员都未配置默认设置，新会话可以以手动或辅助模式启动。 使用 `/permissions show` 来检查。

### 将其用于非交互式运行

当以非交互方式运行 Copilot CLI 时——使用 `-p` 或 `--prompt` 选项，或者在未附加终端的环境中（例如 CI/CD 工作流）——请使用 `--assisted-approval` 命令行选项：

```shell copy
copilot -p "Fix the failing tests" --assisted-approval
```

还可以将 `COPILOT_ASSISTED_APPROVAL` 环境变量设置为 `true`，这在你无法轻松更改所运行命令的自动化环境中特别有用。

此选项仅适用于非交互式运行。 如果在启动交互式会话时使用它，CLI 将因错误而退出。 若要在交互式会话中使用assisted permissions，请改用`/permissions assisted`或`defaultPermissionMode`设置。

#### 何时使用命令行选项

在非交互式运行中，没有人可以回答审批提示，因此你必须在两个都不理想的选项之间进行选择。 如果没有任何权限选项，Copilot 会被拒绝进行任何需要批准的操作，并且往往无法完成任务。 使用 `--allow-all-tools`时，无需模型安全评审即可授予全面工具权限。

`--assisted-approval` 是折中方案。 要求安全评审员确认安全的请求将自动获得批准。 如果该审查需要你的批准，请求就会被拒绝，其解释将传回给 Copilot，以便它可以尝试不同的方法。 仍需要审批的其他请求也被拒绝。

如果想要在 CI/CD 工作流、计划作业或批处理脚本中进行无人值守运行，并在不赋予 Copilot 无条件运行任何命令的权限的情况下完成实际工作，可以考虑使用它。

有关以编程方式运行 Copilot CLI 程序的详细信息，请参阅 [以编程方式运行GitHub Copilot CLI](/zh/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically)。

> [!WARNING]
> 成功启用后，`--assisted-approval` 优先于 `--allow-all-tools`，但不会更改 `--allow-all-paths` 或 `--allow-all-urls`。 如果将它与 `--allow-all`（或 assisted permissions）结合使用，即使已为工具请求启用 `--yolo`，路径和 URL 访问仍然可以不受限制。
>
> 如果 assisted permissions 无法启用（例如，因为企业设置阻止了它），CLI 会将警告写入标准错误。 它不会取消你提供的单独 `--allow-all-tools` 选项，因此工具请求仍可能获得批准，而无需进行安全审查。 在自动运行输出中检查是否有此警告。

### assisted permissions 在 Copilot CLI 中的行为方式

* **在会话中打开它仅影响该会话。** 输入 `/permissions assisted` 后，assisted permissions 将在该会话的剩余时间内保持开启，除非将其关闭。 它不会影响当前已打开的任何其他会话。 若要将其应用于将来的会话，请使用上文所述的`defaultPermissionMode`设置。

* **您可以随时切换到 assisted permissions。** 如果已启动具有最宽松设置（`--allow-all` 或其别名 `--yolo`）的会话，则输入 `/permissions assisted` 将你从无条件批准切换到 assisted permissions。

* **您可以在Copilot运行时打开assisted permissions。** 无需等待任务完成。 后续符合条件的权限请求使用 assisted permissions。 根据以前的设置，这可能会增加或减少在任务期间看到的审批请求数。

## 延伸阅读

* [允许和拒绝工具使用](/zh/copilot/how-tos/copilot-cli/use-copilot-cli/allowing-tools)
* [以编程方式运行GitHub Copilot CLI](/zh/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically)
* [GitHub Copilot 命令行界面 (CLI)](/zh/copilot/concepts/copilot-surfaces/copilot-cli#security-implications-of-automatic-tool-approval)
* [允许GitHub Copilot自主工作](/zh/copilot/concepts/agent-capabilities/agent-powered-workflows-and-operations/autopilot)