咨询 Copilot
ask-copilot
Ask Copilot
概述
此技能允许 Agent 以非交互(无头)模式与 GitHub Copilot CLI (copilot) 交互。当用户明确希望从 GitHub Copilot 模型获取次要建议、代码审查、解释或代码生成时,请使用此技能。
当技能原创于本仓库且不需要 README 外部来源致谢时,请使用 source: self 和 source_type: self。
Copilot 是一项外部服务。请将提示词、文件路径、代码片段、仓库内容、命令输出和生成的建议视为可能会离开本地环境的数据。
何时使用此技能
- 仅限用户请求:仅在用户明确要求“咨询 Copilot”、“询问 Copilot”、“使用 Copilot 审查”或明确要求使用 Copilot 获取第二意见时,才使用此技能。
- 不要自动调用:为了符合隐私政策,在没有用户明确同意的情况下,Agent 不得为了获取自己的第二意见或进行检查而自动调用此技能。
工作原理
第一步:请求用户明确同意
在执行任何引用本地文件、仓库路径、代码片段、命令输出、与密钥相关的配置或私有项目上下文的命令之前,你必须获得用户明确同意,允许将这些材料发送给 GitHub Copilot。
在允许 Copilot 运行工具、执行 shell 命令、编辑文件、安装包或修改工作区之前,请分别请求批准。
第二步:使用最小权限标志执行
为了防止 TUI(文本用户界面)死锁,请使用无头标志执行 copilot 命令。对于常规的问答或审查,不要使用 --yolo、--allow-all-tools 或 --allow-all-paths 等全量绕过标志。
- 针对只读/通用问答:在提示词中仅发送经过用户批准且脱敏的文本。不要授予 Copilot 广泛的本地路径访问权限;当提示词已包含批准的上下文时,无需此权限。
- 针对可信的变更任务:如果 CLI 支持,优先使用范围受限的权限标志。仅在用户明确授权 Copilot 为特定任务执行工具并修改工作区后,才使用全量变更绕过标志。
第三步:使用会话管理(可选)
为了维持对话上下文,请使用 --name 和 --resume 标志,或在后续调用中传递 --session-id。
示例
示例 1:通用问题(只读)
不需要仓库路径访问权限或变更权限。
bash
copilot -p "Explain how to implement a debounce function in TypeScript" -s示例 2:代码审查(经批准的文件摘录)
在执行前务必与用户确认具体的文件和摘录。将路径保存在带引号的变量中;通过静态指令加上批准的摘录来构建提示词。Shell 不会重新评估命令替换的输出,因此被审查文件中的元字符将保持为提示词文本而非 shell 语法:
bash
review_file="path/to/file.ts"
test -f "$review_file" || { echo "File not found: $review_file" >&2; exit 1; }
copilot -p "$(printf '%s\n\n' 'Review this approved excerpt for potential memory leaks:'; sed -n '1,220p' -- "$review_file")" -s
code
切勿通过将用户可控的提示词文本、路径、Issue 内容或文件名插值到 Shell 源码中来构建 Shell 命令。请使用固定的命令结构、带引号的变量以及经过批准的文件内容。
示例 3:命名会话管理
最佳实践
- ✅ 建议: 在将任何项目文件上传到第三方端点前,先征得用户同意。
- ✅ 建议: 仅发送经过批准且脱敏的摘录;避免让 Copilot 接触更广泛的工作区。
- ✅ 建议: 将不可信的值放在带引号的变量或命令输入中,绝不要直接放入 Shell 源码。
- ✅ 建议: 使用
-s (silent) 抑制元数据和统计信息,仅保留纯净的输出。
- ❌ 避免: 在用户没有明确要求的情况下,自动触发此技能以获取后台的“第二意见”。
- ❌ 避免: 在未经明确批准的情况下,将文件、日志、环境详情或私有仓库上下文发送给 Copilot。
- ❌ 避免: 在代码审查时使用
--allow-all-paths,或在 copilot -p "..." 中插值不可信文本。
- ❌ 避免: 在后台任务中运行不带权限绕过标志的
copilot,否则它会因等待交互式输入而挂起。
局限性
- 此技能不能替代特定环境的验证、测试或专家审查。
- 如果缺少必要的输入、权限或安全边界,请停止操作并请求澄清。
- Copilot 的回答可能不完整、过时或错误;在使用任何建议的代码前,请先在本地验证。
安全与防护注意事项
--yolo 标志会绕过所有权限提示,允许 Copilot CLI 运行任意 Shell 命令并修改工作区文件。应将其视为高风险选项,绝不能默认使用。
- 始终检查发送的代码/文件是否包含敏感凭据、API 密钥或私有环境变量。
- 当仅需要少量上下文样本时,优先使用脱敏片段而非整个文件。
--allow-all-paths 授予 Copilot 的本地可见范围超过了窄范围审查的需求;它并非一个只读的最小权限标志。
常见陷阱
- 问题: 终端挂起或命令超时。
解决方案: 确保命令参数中同时包含 -p(或 --prompt)以及所需的最小非交互式权限标志。如果没有必要的权限标志,CLI 可能会请求确认,从而导致无头(headless)进程挂起。
相关技能
@cli-assistant` - 如何通用地与 CLI 工具交互。