Skip to content

Copilot CLI 默认会在需要执行操作前向你确认权限,你也可以通过 --allow-tool、--deny-tool 等参数预先设定规则。Deny 规则优先级高于 Allow,会话结束后权限自动重置。对于 CI/CD 场景,可以精确指定允许的工具范围以保证安全。

GitHub Copilot CLI 工具权限管理:精细控制 AI 可以做什么

为什么需要工具权限控制

Copilot CLI 在处理任务时会调用各种工具:读取文件、写入文件、执行 Shell 命令、访问 URL。

在不同场景下,你希望不同程度的控制:

  • 交互式开发:每次重要操作前询问确认(默认行为)
  • CI/CD 自动化:预授权特定工具,不被打断
  • 安全审计:只允许读文件,禁止写入和执行命令

两层控制机制

层级一:工具可用性(AI 能不能看到这个工具)

bash
# 只让 AI 知道 read 和 shell 工具的存在
copilot --available-tools=read,shell

# 让 AI 知道所有工具,但排除 write
copilot --excluded-tools=write

工具不在可用集合中时,AI 模型根本不知道这个工具的存在,也不会尝试调用它。

层级二:工具权限(AI 调用时是否需要确认)

bash
# 预授权执行所有 npm 命令,不需要每次确认
copilot --allow-tool='shell(npm:*)'

# 预授权读文件,禁止写文件
copilot --allow-tool=read --deny-tool=write

重要规则Deny 规则优先级高于 Allow 规则。如果同时设置了 allow 和 deny,deny 生效。

常用工具标识

标识含义
read读取文件
write写入/修改文件
shell执行任意 Shell 命令
shell(npm:*)只允许执行 npm 开头的命令
shell(git:*)只允许执行 git 命令
web访问 URL(fetch)

完全授权模式

谨慎使用

bash
copilot --allow-all
# 或
copilot --yolo

这会预授权所有工具,Copilot 不再询问任何确认。只建议在完全隔离的测试环境中使用。

在会话中管理权限

会话中临时授权

当 Copilot 请求权限时,你可以选择"仅此次允许"或"本次会话都允许"。

重置会话中所有已授权的权限

/reset-allowed-tools

这会撤销当前会话中所有你临时授权的权限,回到启动时的默认设置。适合在完成一个高权限任务后,切换到需要低权限的任务时使用。

CI/CD 推荐配置

bash
copilot -p "Run tests and generate coverage report" \
  --allow-tool='shell(npm:*), read' \
  --deny-tool=write \
  --no-ask-user \
  -s

解析:

  • --allow-tool='shell(npm:*), read':允许运行 npm 命令和读文件
  • --deny-tool=write:明确禁止写文件(即使 AI 尝试也会被拒绝)
  • --no-ask-user:不提问,直接执行
  • -s:静默模式,只输出结果

常见问题

Q: Deny 某个工具后,Copilot 会尝试绕过吗?

A: 不会。工具权限在系统层面强制执行,AI 模型无法绕过。被 deny 的工具调用会直接返回权限错误,Copilot 会告知你操作被拒绝。

Q: --allow-all 适合什么场景?

A: 适合完全隔离的 Docker 容器或 VM,里面没有任何敏感数据或外部连接风险。生产环境和有凭证的开发机器不要用 --allow-all。

Q: 如何查看当前会话中已有哪些授权?

A: 目前没有直接查看当前权限状态的命令,但可以用 /reset-allowed-tools 清空,然后重新从基础状态开始。