Appearance
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 清空,然后重新从基础状态开始。