GitHub Copilot CLI 命令、权限与 MCP 实战速查

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 错误无害。 完整安装输出如下:

Ubuntu 26.04 上的 Copilot CLI 版本、MCP 服务器列表与配置
手动加入 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 等变量时自动更新通常已关闭。

Ubuntu 26.04 上 Copilot CLI 安装脚本输出与 /dev/tty PATH 提示错误

如果输出在 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 的流程是:

  1. 选择 GitHub.com 或 GitHub Enterprise Cloud(*.ghe.com)。
  2. 选择“使用设备码登录”或“使用浏览器登录”。
  3. 复制一次性代码并等待批准。
 ◎ 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 按以下顺序检查:

  1. COPILOT_GITHUB_TOKEN
  2. GH_TOKEN
  3. GITHUB_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。

Copilot CLI 未认证错误与经典 ghp_ 令牌被拒绝

键盘快捷键与运行模式

在空提示词处按 ? 可打开快捷帮助,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 切换的是代理模式,不是审批模式,两者很容易混淆。模式依次为:

  1. Interactive: 回答并执行操作前询问。
  2. Plan: 先写计划,等待接受。
  3. Autopilot: 持续执行直到目标完成,不频繁交还控制权。

底栏在三种模式下仍可能显示 Manual Approval,因为审批模式由 /permissions 单独控制。希望新会话默认从 Plan 开始时,可设置 defaultMode。

Copilot CLI 快捷帮助覆盖层

按任务选择斜杠命令

输入 / 打开选择器,或在会话外运行 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 列表。

Copilot CLI 权限模式选择器

输入 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 显示当前会话消耗。三种控制方式:

  1. 使用 --max-ai-credits 200 启动,或执行 /limits set max-ai-credits 200。
  2. 日常编辑降低 --reasoning-effort:none、minimal、low、medium、high、xhigh、max。
  3. 大重构前检查 /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 后才会加载。

Copilot CLI 的 mcp-config.json 示例

配置 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.md
  • CLAUDE.md
  • GEMINI.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:*)' 等窄范围列表。

建议流程:

  1. 从 CI 密钥中导出细粒度 PAT 到 COPILOT_GITHUB_TOKEN。
  2. 添加 -s 只输出答案,或用 --output-format json 每行输出一个 JSON 对象。
  3. 明确 deny 危险命令,因为 deny 的优先级高于 --allow-all-tools。
  4. 使用 --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 匹配本地小模型。

Ollama 在纯 CPU 虚拟机上将 11867 token 的 Copilot CLI 提示词截断到 2050

修复登录与 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。

Avatar photo

关于 木子

Email: muzi@vip.rockylinux.cn 微信:VebinLee QQ: 2306867585
Founder of the Rocky Linux Chinese community, MVP、VMware vExpert、TVP, advocate for cloud native technologies, with over ten years of experience in site reliability engineering (SRE) and the DevOps field. Passionate about Cloud Computing、Microservices、CI&CD、DevOps、Kubernetes, currently dedicated to promoting and implementing Rocky Linux in Chinese-speaking regions.
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇