目录

GitHub Copilot CLI 最佳实践

GitHub Copilot 有两个独立产品:IDE 版和 CLI 版。

IDE 版 Copilot 补全代码,Copilot CLI 在终端里帮你执行任务——它可以写文件、跑命令、操作 Git,把一个任务丢给它然后看它做完。

这个区别看起来简单,实际上决定了很多事情。


权限配置:一次配好,少操心

Copilot CLI 安装完之后,默认行为是每一步都要求你确认。这个默认是安全的,但每次都点确认很快会变成走过场。

工具权限可以通过参数预设,官方文档提到的参数包括 --allow-tool--deny-tool。配置方式是在启动时传入,或者在交互会话里单独授权某类操作。

会话中途如果想重置所有已授权的工具,运行 /reset-allowed-tools

禁止 git push 是关键的一条边界:允许 Copilot 帮你写代码、改代码,但不让它直接推到远程仓库。

来源:官方工具权限配置文档


自定义指令文件:这是整个 CLI 最好用的功能

Copilot CLI 启动时自动读取项目根目录的 .github/copilot-instructions.md。这个文件里的内容会成为每次对话的上下文,不需要每次手动输入。

常见的团队规范都可以放进去:

## 构建命令
- `npm run build` - 构建生产版本
- `npm run test` - 运行测试
- `npm run lint:fix` - 修复代码风格

## 代码风格
- 优先使用函数组件而非 class 组件
- 错误处理统一使用 Result 模式,不抛异常
- API 响应格式:{ code, data, message }

## Git 工作流
- 从 main 分支创建功能分支
- commit message 遵循 conventional commits
- 改动后运行 `npm run lint:fix && npm test`

加入这个文件后,Copilot 生成的代码会直接符合团队规范。它知道要用函数组件,知道 commit 格式,知道错误处理方式,不需要每次 prompt 里重复说。

仓库级指令会覆盖全局指令(~/.copilot/copilot-instructions.md)。所以团队规范放仓库里,全局配置放 home 目录。冲突时仓库优先。


Plan 模式:值得作为默认工作流

Copilot CLI 有两种执行模式:直接执行和 Plan 模式。切换方式是交互式会话里按 Shift+Tab,或者直接输入 /plan

普通模式:Copilot 收到 prompt 直接干活。 Plan 模式:Copilot 先出执行计划,等你确认再动手。

Plan 模式的核心价值不是"让你审核",而是"强制你先想清楚"。 很多情况下,prompt 发出去之后才发现方向错了,Copilot 已经写了一堆代码。Plan 模式把纠错环节提前了。

官方推荐的复杂任务工作流:

  1. Explore:让 Copilot 先了解代码库,不写代码
  2. Plan:输入 /plan + 任务描述,Copilot 生成结构化方案
  3. Review:检查计划,提出修改意见
  4. Implement:批准后执行
  5. Verify:运行测试,修复问题
  6. Commit:提交

这个流程适合多文件改动、跨模块重构、新功能实现。不适合的场景:简单脚本、快速探索、Bug 修复——这些直接问就行。

Plan 模式支持在编辑器里修改计划,修改后再批准执行。具体操作方式参考官方文档的交互式编辑说明。


模型选择:Auto 是默认选项

/model 可以在会话里切换模型。官方文档里列出的是:

  • Auto(默认):系统根据实时负载自动选择
  • Claude Opus 4.5:官方定位是复杂架构和高难度任务
  • Claude Sonnet 4.5:官方定位是日常任务
  • GPT-5.2 Codex:官方定位是代码生成

免费版(Copilot Free)只能用 Haiku 4.5 和 GPT-5 mini。

大多数场景用 Auto 就够了。如果任务失败了,切换到 Sonnet 或 Opus 有时会解决问题——不是能力差异,是因为不同模型对同一 prompt 的处理路径不同。

按官方文档,Haiku 4.5 适合简单补全和脚本生成。但这是有限额度内的默认选项,不是按场景推荐。


/delegate:适合异步任务,不是核心开发

/delegate 把任务发送到云端 Copilot 执行,完成后自动创建 Pull Request。它的价值在于:任务在云端跑,你本地继续干活,两件事并行。

适合的场景:

  • 文档更新
  • 独立模块的重构
  • 跨仓库的批量修改
  • 需要等一段时间才能完成的任务

不适合的场景:

  • 需要即时反馈的调试
  • 核心功能开发(需要你盯着判断方向)
  • 探索性任务(你不知道答案,不知道怎么问)

会话管理:CLI 能记住项目上下文

Copilot CLI 有两种记忆机制:上下文压缩(Compaction)自定义指令文件

上下文压缩是自动的。Copilot 检测到上下文快用满时,会把历史对话压缩成摘要,保留关键信息。你不需要手动触发,但如果想主动清理,运行 /new 开启新会话。

/context 可以查看当前上下文消耗了多少 token。这个在长会话里偶尔看一下有帮助,但不需要频繁检查。

自定义指令文件(前文提到的 .github/copilot-instructions.md)是跨会话的记忆。不在文件里的内容,Copilot 下次开新会话就忘了。在文件里的内容,每次会话都自动加载。


哪些场景不适合用 Copilot CLI

需要精确编辑的场景:Copilot CLI 生成代码是块级生成,不擅长精确到行的单点修改。这种场景用 IDE 版 Copilot 或者直接手动改。

生产环境直接操作:不要在生产服务器上使用 --allow-all-tools 或等效的全开权限。Copilot CLI 的工具调用能力很强,应该在本地开发目录里验证后再考虑其他环境。

不确定性的任务:如果任务本身你没想清楚要什么,Copilot 的产出大概率也不是你想要的。Plan 模式可以部分解决这个问题,但根本解法是先把问题想清楚再交给 Copilot。


参考资源