GitHub Copilot CLI 1.0.105 的帮助信息列出 73 个斜杠命令和 31 个模型 ID。一个 --yolo 标志就能让代理访问任意路径、运行任意命令、请求任意 URL,并且不再逐项询问。本文整理实际常用的安装、登录、命令、参数、MCP、权限模式和模型切换方法。
所有截取结果来自 2026 年 10 月在 Ubuntu 26.04 虚拟机上安装并运行的 Copilot CLI 1.0.105,并在 2026 年 11 月与 GitHub 文档核对。实验账号没有 Copilot 席位,因此输出止于登录阶段,没有模型回复。
快速参考
安装和更新
| 命令 | 作用 |
|---|---|
curl -fsSL https://gh.io/copilot-install \| bash |
安装独立二进制到 ~/.local/bin |
npm install -g @github/copilot |
使用 npm 安装,需要 Node.js 22 或更高 |
brew install --cask copilot-cli |
使用 Homebrew 安装 |
copilot --version |
显示版本 |
copilot update |
下载最新版本 |
copilot help <topic> |
查看 config、environment、permissions、providers、billing 等内置文档 |
登录
| 命令 | 作用 |
|---|---|
copilot login |
OAuth 登录,桌面打开浏览器,SSH 自动使用设备码 |
copilot login --device-code |
强制使用设备码 |
copilot login --with-token < token.txt |
从标准输入读取细粒度 PAT |
export COPILOT_GITHUB_TOKEN=github_pat_... |
无头认证,优先级高于 GH_TOKEN 和 GITHUB_TOKEN |
/login |
在交互会话中登录 |
/logout |
删除已保存的 OAuth 登录 |
启动、恢复与脚本化
| 命令 | 作用 |
|---|---|
copilot |
在当前目录启动交互会话 |
copilot -i "fix the failing test" |
启动交互会话并执行第一个提示词 |
copilot -p "summarize this repo" -s |
单次运行并只输出答案 |
copilot --continue |
恢复最近会话 |
copilot --resume |
选择历史会话,也可传 ID 或名称 |
copilot --plan |
以计划模式启动 |
copilot --autopilot |
以自动驾驶模式启动 |
copilot -C ~/src/api |
启动前切换目录 |
权限和审批
| 参数 | 作用 |
|---|---|
--allow-tool='shell(git:*)' |
允许所有 git 子命令 |
--deny-tool='shell(git push)' |
禁止指定命令;deny 总是优先 |
--allow-tool='write' |
允许所有文件编辑 |
--allow-all-tools |
允许全部工具,常用于 -p |
--add-dir ~/workspace |
额外允许一个目录 |
--allow-url=github.com |
允许访问域名,默认仅 HTTPS |
--allow-all |
同时开放工具、路径和 URL,等同于 --yolo |
/allow-all |
在会话中执行同等操作 |
在 Linux 上安装 Copilot CLI
安装脚本最快,它会下载单个自包含二进制,不依赖 Node.js:
curl -fsSL https://gh.io/copilot-install | bash
在全新的 Ubuntu 26.04 云镜像上,安装可以完成,但非交互式 SSH 会话没有终端来询问是否修改 PATH,因此输出中会出现 /dev/tty 错误:
Installing GitHub Copilot CLI...
Downloading from: https://github.com/github/copilot-cli/releases/latest/download/copilot-linux-x64.tar.gz
✓ Checksum validated
✓ GitHub Copilot CLI installed to /home/joshua/.local/bin/copilot
Notice: /home/joshua/.local/bin is not in your PATH
Would you like to add it to /home/joshua/.profile? [y/N] bash: line 178: /dev/tty: No such device or address
Installation complete! To get started, run:
export PATH="/home/joshua/.local/bin:$PATH" && copilot help
此时二进制已经安装完成,PATH 错误无害。 完整安装输出如下:

export PATH="$HOME/.local/bin:$PATH" && copilot help
要让修改持久生效,还需要在重新登录前把它写入 shell 配置。Ubuntu 默认的 ~/.profile 只有在登录时 ~/.local/bin 已存在才会加入 PATH;因此安装前已经打开的会话必须重新加载。
如果团队通过 npm 管理工具,则使用:
sudo apt install -y nodejs npm
sudo npm install -g @github/copilot
Ubuntu 26.04 仓库自带 Node.js 22.22.1,无需额外添加 NodeSource。两种方式安装到相同版本,但更新行为不同:独立二进制的后台自动更新会在下次启动应用,npm 安装只会提示有新版本。需要固定版本时设置 COPILOT_AUTO_UPDATE=false 或传入 --no-auto-update;在 CI 环境中,存在 CI 等变量时自动更新通常已关闭。

如果输出在 Checksum validated 之前结束,且没有缺少 sha256sum 的警告,说明下载失败,没有安装任何内容。/dev/tty 问题只表示脚本无法询问 PATH。
使用设备码或令牌登录
Copilot CLI 支持所有 Copilot 计划,包括免费版,但必须先认证。全新安装直接运行提示词即可看到认证方式:
copilot -p "say hi"
进程以状态码 1 退出,脚本不会在登录提示处挂起:
Error: No authentication information found.
Copilot can be authenticated with GitHub using an OAuth Token or a Fine-Grained Personal Access Token.
To authenticate, you can use any of the following methods:
• Start 'copilot' and run the '/login' command
• Set the COPILOT_GITHUB_TOKEN, GH_TOKEN, or GITHUB_TOKEN environment variable
• Run 'gh auth login' to authenticate with the GitHub CLI
copilot login 在笔记本上打开浏览器;通过 SSH 运行时自动改用设备码。会话内执行 /login 的流程是:
- 选择 GitHub.com 或 GitHub Enterprise Cloud(
*.ghe.com)。 - 选择“使用设备码登录”或“使用浏览器登录”。
- 复制一次性代码并等待批准。
◎ Waiting for authorization...
Enter one-time code: XXXX-XXXX at https://github.com/login/device
Press any key to copy to clipboard and open browser...
在任意设备打开 https://github.com/login/device,输入代码并批准。桌面环境通常把令牌存入系统钥匙串;无头服务器没有钥匙串时,CLI 会询问是否以明文保存到 ~/.copilot/config.json。若允许,能读取该目录的用户就能使用你的 Copilot 席位,因此共享主机上应把目录权限设为 700。
在 CI 和无头环境中使用令牌
自动化场景应跳过登录并导出令牌。Copilot 按以下顺序检查:
COPILOT_GITHUB_TOKENGH_TOKENGITHUB_TOKEN
任一变量都优先于已保存的登录,因此 CI 中常见的错误是机器突然使用了错误账号。PAT 必须是个人账号拥有的细粒度令牌,并具有 Copilot Requests 权限;Copilot CLI 或 gh 应用产生的 OAuth token 也可使用。经典 ghp_ 令牌会在请求发出前被拒绝:
GH_TOKEN=ghp_example_classic_token copilot -p "say hi"
错误会明确指出来源变量:
Error: Classic Personal Access Tokens (ghp_) are not supported by Copilot.
The GH_TOKEN environment variable contains a classic PAT.
Please use a Fine-Grained Personal Access Token or another authentication method.
应把细粒度令牌放入 COPILOT_GITHUB_TOKEN,使其优先于现有的 GH_TOKEN,并从密钥管理系统注入,避免直接写在命令行。如果已经使用 GitHub CLI,Copilot 还可以回退到 gh auth token。

键盘快捷键与运行模式
在空提示词处按 ? 可打开快捷帮助,1.0.105 的完整列表如下:
/help show full help ctrl+a go to line start
? show quick help ctrl+e go to line end
/ commands ctrl+u delete from cursor to beginning of line
@ mention files ctrl+k delete from cursor to end of line
# mention issues and pull requests meta+←/→ move cursor by word
shift+tab switch modes shift+enter insert newline
ctrl+s stash/pop current prompt ctrl+g edit prompt in $EDITOR
ctrl+q enqueue prompt
ctrl+r reverse search history
ctrl+o toggle all timeline
ctrl+c cancel
ctrl+c×2 exit
esc esc clear input, interrupt, stop agents, or rewind
ctrl+t toggle reasoning display
ctrl+x → o open most recent link
shift+tab 切换的是代理模式,不是审批模式,两者很容易混淆。模式依次为:
- Interactive: 回答并执行操作前询问。
- Plan: 先写计划,等待接受。
- Autopilot: 持续执行直到目标完成,不频繁交还控制权。
底栏在三种模式下仍可能显示 Manual Approval,因为审批模式由 /permissions 单独控制。希望新会话默认从 Plan 开始时,可设置 defaultMode。

按任务选择斜杠命令
输入 / 打开选择器,或在会话外运行 copilot help commands 查看全部 73 个命令。优先学习的命令是:
| 命令 | 作用 |
|---|---|
/rewind |
撤销上一轮文件修改和对话 |
/diagnose |
读取会话日志并解释权限请求原因 |
/ask |
提旁支问题但不写入历史 |
/compact |
压缩历史,释放上下文 |
/context |
查看上下文窗口占用 |
/review |
运行代码审查代理 |
/diff |
查看当前目录修改 |
/delegate |
交办 GitHub 创建 PR |
/rewind 可以在错误编辑后一次性回退,不必手工 git checkout。/ask 不会占用主任务上下文,适合在长重构中询问参数含义;/context 显示窗口快满时再用 /compact。
设置权限与审批模式
默认情况下,Copilot 自动批准读取,在每次写入和 shell 命令前询问,并且只能访问当前目录、子目录和系统临时目录。执行 /permissions 可切换:
Select Permission Mode
❯ 1. Manual Approval ✓ Require approval for each request
2. Assisted Permissions Approve requests an LLM safety check deems safe; handle others according to the execution mode
3. Allow All Auto-approve all tool, path, and URL requests
Assisted Permissions use a probabilistic LLM review to reduce approval prompts. They are not a security boundary and may approve dangerous
or unintended actions. Use managed restrictions, sandboxing, least-privilege credentials, and egress controls for enforceable protection.
Assisted 使用一个模型做概率性安全判断,并不是安全边界。生产凭据环境应保持 Manual,并通过窄范围 allow 规则提升效率。希望每个新会话固定模式时,可设置 defaultPermissionMode 为 manual、assisted 或 allow-all。
规则采用 kind(argument) 形式:
shell(cmd)匹配命令;shell(git:*)匹配所有 git 子命令,但不匹配gitea。write(path)匹配文件编辑;相对路径write(.env)会匹配任意目录下同名文件。ServerName(tool)匹配单个 MCP 工具,不带括号则匹配整个服务器。url(domain)匹配网络访问,裸域名默认只允许 HTTPS。
Deny 始终优先于 allow,即使使用了 --allow-all-tools:
copilot --allow-tool='shell(git:*)' --deny-tool='shell(git push)'
write(.env) 会阻止树中所有 .env,通常正是保护密钥所需;只想限制一个文件时使用绝对路径。
--allow-all 与 --yolo 相同,会同时开放工具、路径和 URL。一次性虚拟机或容器中最多重建环境,但在工作站上会让代理编辑仓库外文件并访问任意主机。更稳妥的做法是维护一份逐步扩充的 allow 列表。

输入 1、2、3 切换,按 esc 保持 Manual。选择只在当前会话有效,除非保存 defaultPermissionMode。
在 Copilot CLI 中切换模型
在会话中运行 /model 可切换模型;选择 auto 会由 Copilot 为每个请求自动路由。实验账号没有席位,无法打开选择器。模型列表来自账号计划和组织策略,而不是二进制本身,所以同事机器上可用的模型在你的账号中可能不可见。未登录时会提示:
✗ You must be signed in to select a model. Run /login to sign in again.
不在选择器内时:
~/.copilot/settings.json的model保存默认值。COPILOT_MODEL为当前 shell 指定默认值。--model或/model覆盖单次会话。
保存默认模型:
copilot config model gpt-6.1-sol
输出:
Set model to "gpt-6.1-sol" in settings.json.
GitHub 文档把 claude-sonnet-5.5 列为默认值;copilot help config 列出 31 个有效模型 ID,但计划决定实际可选内容。Copilot Free 和 Student 可能只能使用 Auto 选择。
当前计费平台按 token 折算 AI credits,因此模型选择也是成本决定。/model 显示输入、缓存输入和输出价格,/usage 显示当前会话消耗。三种控制方式:
- 使用
--max-ai-credits 200启动,或执行/limits set max-ai-credits 200。 - 日常编辑降低
--reasoning-effort:none、minimal、low、medium、high、xhigh、max。 - 大重构前检查
/usage,成本上升时换便宜模型。
额度上限是软限制,最低 30 credits;因为调用返回后才统计,一次昂贵调用可能先超限。应把上限设得略低于实际可承受额度。
为 Copilot CLI 添加 MCP 服务器
GitHub MCP 服务器 github-mcp-server 已内置,无需配置。其他服务器通过 copilot mcp add 添加:本地服务器放在 -- 后,远程服务器使用 --transport http 和 URL。
copilot mcp add context7 -- npx -y @upstash/context7-mcp
copilot mcp add --transport http \
--header "Authorization: Bearer your-token-here" \
notion https://mcp.notion.com/mcp
Notion 一行只演示 header 语法,实际应替换为服务器文档要求的 OAuth 或 Notion MCP token。添加后会显示配置,header 在屏幕输出中会被遮蔽:
Added server "context7"
context7
Type: local
Command: npx -y @upstash/context7-mcp
Tools: * (all)
Source: User
Added server "notion"
notion
Type: http
URL: https://mcp.notion.com/mcp
Headers:
Authorization: ***
Tools: * (all)
Source: User
屏幕遮蔽不等于磁盘加密。配置写入 ~/.copilot/mcp-config.json,bearer token 以明文保存,备份或同步家目录时会一并带走。每次添加后应检查:
cat ~/.copilot/mcp-config.json
文件格式示例:
{
"mcpServers": {
"context7": {
"tools": ["*"],
"type": "local",
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"]
},
"notion": {
"tools": ["*"],
"type": "http",
"url": "https://mcp.notion.com/mcp",
"headers": {
"Authorization": "Bearer your-token-here"
}
}
}
}
把该文件视为凭据文件,设置严格权限,不要提交到 dotfiles 仓库。团队共享时,可把同样的 mcpServers 块提交为 .github/mcp.json;个人服务器放在 ~/.copilot/mcp-config.json,或通过 --additional-mcp-config 临时传入。不要再放一个 .mcp.json:根据文档和 1.0.108 发行说明,它会替换 .github/mcp.json,导致团队服务器全部消失。项目条目仍会覆盖同名用户条目;.vscode/mcp.json 不会被读取。
禁用服务器但保留配置:
copilot mcp disable notion
copilot mcp list
输出:
Disabled MCP server "notion".
User servers:
context7 (local)
notion (http, disabled)
单次会话可使用 --additional-mcp-config @extra.json;--disable-builtin-mcps 会移除 github-mcp-server 和 githubiq。在 -p 模式下,项目 .mcp.json 或 .github/mcp.json 只有在信任目录、传入 --trust-folder,或设置 GITHUB_COPILOT_PROMPT_MODE_WORKSPACE_MCP=true 后才会加载。

配置 settings.json 与指令文件
用户设置位于 ~/.copilot/settings.json,一般通过 copilot config 使用点号键名修改,很少需要手动打开。列表型键会在每次调用时追加一个值:
copilot config allowedUrls docs.github.com
copilot config banner never
copilot config --list
输出示例:
Added "docs.github.com" to allowedUrls in settings.json.
Set banner to "never" in settings.json.
disabledMcpServers=notion
model=gpt-6.1-sol
allowedUrls=docs.github.com
banner=never
--repo 会写入团队共享的 .github/copilot/settings.json;--local 写入个人的 .github/copilot/settings.local.json,后者应加入 .gitignore。~/.copilot/config.json 只保存受信目录等内部状态,手写的设置会被忽略。设置 COPILOT_HOME 可以移动整个配置目录,便于按客户端建立独立配置。
Copilot 会合并读取多个指令文件:
AGENTS.mdCLAUDE.mdGEMINI.md.github/copilot-instructions.md.github/instructions/**/*.instructions.md.claude/rules/**/*.md~/.copilot/copilot-instructions.md
这些文件之间没有明确优先级。使用以下命令查看实际加载来源:
copilot instruction list
只有一个 AGENTS.md 的仓库会显示:
Repository instructions:
• AGENTS.md
from AGENTS.md
如果仓库已有给 Claude Code 用的 CLAUDE.md,Copilot 也会读取,两个文件冲突时会混合成同一份提示词。模型似乎忽略规则时,先运行上面的命令;--no-custom-instructions 可在完全不加载指令的情况下测试提示词。
使用 -p 将 Copilot CLI 脚本化
-p 运行一个提示词后退出,适合脚本、cron 和 CI。非交互运行无法停下来请求审批,所以未预先授予的操作会被拒绝。1.0.105 帮助称该模式需要 --allow-all-tools,但 GitHub 的自动化文档也支持 --allow-tool='shell(git:*)' 等窄范围列表。
建议流程:
- 从 CI 密钥中导出细粒度 PAT 到
COPILOT_GITHUB_TOKEN。 - 添加
-s只输出答案,或用--output-format json每行输出一个 JSON 对象。 - 明确 deny 危险命令,因为 deny 的优先级高于
--allow-all-tools。 - 使用
--max-ai-credits限制成本,并用--usage-output-file保存用量。
下面示例假设任务运行测试,但禁止推送,也不允许通过 write 工具编辑文件;实验环境未实际运行:
copilot -p "Run the test suite and summarize any failures" \
--allow-all-tools --deny-tool='shell(git push), write' \
--max-ai-credits 200 --usage-output-file usage.json -s
Deny 规则是黑名单,不是沙箱。write 只覆盖文件编辑工具,shell 重定向或未点名的命令(例如 gh pr merge、rm)仍可执行。因此 CI 任务应放在一次性容器内。省略 -s 时,每次运行都会输出统计和恢复提示:
Changes +0 -0
Duration 1m 9s
Resume copilot --resume=b7e353a6-96a2-4873-bbc1-31d547fb3a83
使用 --share 可在结束时把会话保存为 Markdown,适合作为 CI 中审查代理操作的产物。
让 Copilot CLI 使用本地 Ollama 模型
Copilot CLI 可以完全绕过 GitHub,连接自己的 OpenAI 兼容提供方。设置 COPILOT_PROVIDER_BASE_URL 和模型后,不需要登录:
export COPILOT_PROVIDER_BASE_URL=http://localhost:11434/v1
export COPILOT_MODEL=qwen3:1.7b
copilot -p "Run ls and tell me how many files are in this directory." \
--allow-tool='shell(ls)'
第一次测试在 2 vCPU、4 GB 内存的虚拟机上,Copilot 重试五次后于 69 秒报 500 llama-server process has terminated: signal: killed,很可能是模型服务内存不足。提升到 4 vCPU、8 GB 后仍未得到答案,Ollama 0.40.13 日志解释了原因:Copilot 的系统提示词和工具定义合计 11,867 token,而无 GPU 机器默认的 4096 上下文把输入截断到 2,050,Copilot 端却没有报错:
time=2026-10-30T01:43:20.659Z level=WARN source=llama_server.go:344 msg="truncating input prompt" limit=2050 prompt=11867 keep=4 new=2050
即使截断,CPU 预填充也只有约每秒 2.5 token,前 1,024 token 用了 395 秒,最终在 8 分 16 秒后因 500 秒超时停止。应扩大 Ollama 上下文:
OLLAMA_CONTEXT_LENGTH=16384 ollama serve
如果 Ollama 由 systemd 服务运行,再用一次 ollama serve 会冲突;应通过 sudo systemctl edit ollama 添加环境变量。设为 16384 后日志显示完整提示词通过(n_ctx_slot = 16384、task.n_tokens = 11873),截断警告消失,但 90 秒测试仍未得到回答。无 GPU 时 12K token 的预填充太慢。建议给本地模型配置 GPU,并选择支持工具调用的模型。
Ollama 文档建议编码代理至少使用 64,000 token 上下文,因为每轮对话都会在原有约 11.9K 系统提示词上继续增长。仅 16K 只是容纳首个提示词的底线。providers.json 中的条目优先于 COPILOT_PROVIDER_* 环境变量;未知模型可能默认使用 128,000 token 上限,应设置 COPILOT_PROVIDER_MAX_PROMPT_TOKENS 匹配本地小模型。

修复登录与 MCP 错误
“Authentication token found but could not be validated”
细粒度令牌被 GitHub 拒绝时会出现:
Error: Authentication token found but could not be validated.
Failed to fetch PAT user login (401): GitHub returned: Bad credentials
Your token may still be valid. Check your network connection and try again.
虽然提示网络问题,但 401 通常表示 token 过期、撤销或输入错误。检查环境变量:
env | grep -E '^(COPILOT_GITHUB|GH|GITHUB)_TOKEN'
前面列出的变量优先。确认后重新生成拥有 Copilot Requests 权限的细粒度 PAT。
“Failed to connect to MCP server … failed to spawn MCP server process”
实验镜像没有 Node.js,因此也没有 npx,首次启动 context7 时失败:
! Failed to connect to MCP server "context7": failed to spawn MCP server process: No such file or directory (os error 2)
● MCP Servers reloaded: 0 servers connected, 1 failed (context7)
copilot mcp add 不会检查命令是否存在,因此只有在会话启动时才报错。安装 Node.js,或在 mcp-config.json 中使用启动器的完整路径。缺少的工具通常可以追溯到这行早期错误。
“You must be signed in to select a model”
/model 会从账号获取模型列表,因此未登录会话无法使用,即使 settings.json 已有模型名、底栏也显示了它。底栏只代表保存值,不证明当前账号可用。先运行 /login。使用 BYOK 和 COPILOT_PROVIDER_BASE_URL 时,通过 COPILOT_MODEL 或 --model 设置模型。GitHub 文档还说明 /model 可以发现本地 Ollama 模型并写入 providers.json。










