命令行命令
| 命令 | 用途 |
|---|---|
copilot | 启动交互式用户界面。 |
copilot help [topic] | 显示帮助信息。帮助主题包括:config、commands、environment、logging、permissions 和 providers。 |
copilot init | 为此仓库初始化 Copilot 自定义说明。 |
copilot update | 下载并安装最新版本。 |
copilot version | 显示版本信息并检查更新。 |
copilot login | 通过 OAuth 设备流向 Copilot 进行身份验证。接受 --host HOST 以指定 GitHub 主机 URL(默认值:https://github.com)。 |
copilot logout | 注销 GitHub 并删除存储的凭据。 |
copilot plugin | 管理插件和插件市场。 |
copilot mcp | 从命令行管理 MCP 服务器配置。 |
交互式界面中的全局快捷键
| 快捷键 | 用途 |
|---|---|
@ 文件名 | 在上下文中包含文件内容。 |
Ctrl+X 然后输入 / | 开始键入提示词后,此快捷键允许你运行斜杠命令——例如,如果你想在不重新键入提示词的情况下更换模型。 |
| Esc | 取消当前操作。 |
! 命令 | 在本地 shell 中执行命令,绕过 Copilot。 |
| Ctrl+C | 取消操作 / 清除输入。按两次退出。 |
| Ctrl+D | 关闭。 |
| Ctrl+L | 清屏。 |
| Shift+Tab | 在标准 (standard)、规划 (plan) 和自动驾驶 (autopilot) 模式之间切换。 |
交互式界面中的时间轴快捷键
| 快捷键 | 用途 |
|---|---|
| Ctrl+O | 当提示词输入框为空时,此快捷键会展开 Copilot 响应时间轴中的近期项以显示更多详细信息。 |
| Ctrl+E | 当提示词输入框为空时,此快捷键会展开 Copilot 响应时间轴中的所有项。 |
| Ctrl+T | 展开/折叠响应中推理过程的显示。 |
交互式界面中的导航快捷键
| 快捷键 | 用途 |
|---|---|
| Ctrl+A | 移动到行首(键入时)。 |
| Ctrl+B | 移动到前一个字符。 |
| Ctrl+E | 移动到行尾(键入时)。 |
| Ctrl+F | 移动到后一个字符。 |
| Ctrl+G | 在外部编辑器中编辑提示词。 |
| Ctrl+H | 删除前一个字符。 |
| Ctrl+K | 从光标处删除到行尾。如果光标在行尾,则删除换行符。 |
| Ctrl+U | 从光标处删除到行首。 |
| Ctrl+W | 删除前一个单词。 |
| 首页 | 移动到当前行的开头。 |
| End | 移动到当前行的末尾。 |
| Ctrl+Home | 移动到文本开头。 |
| Ctrl+End | 移动到文本末尾。 |
| Meta+←/→ | 按单词移动光标。 |
| ↑/↓ | 浏览命令历史记录。 |
交互式界面中的斜杠命令
| 命令 | 用途 |
|---|---|
/add-dir 路径 | 将目录添加到文件访问允许列表中。 |
/agent | 浏览并从可用智能体中选择(如果有)。 |
/allow-all, /yolo | 启用所有权限(工具、路径和 URL)。 |
/changelog [SUMMARIZE] [VERSION] | 显示 CLI 更新日志,可选 AI 生成的摘要。 |
/clear [提示词], /new [提示词] | 开始新对话。 |
/compact | 总结对话历史记录以减少上下文窗口占用。 |
/context | 显示上下文窗口 Token 使用情况和可视化。 |
/copy | 将上一个响应复制到剪贴板。 |
/cwd, /cd [路径] | 更改工作目录或显示当前目录。 |
/delegate [提示词] | 通过 AI 生成的拉取请求将更改委托给远程仓库。 |
/diff | 查看当前目录中所做的更改。 |
/exit, /quit | 退出 CLI。 |
/experimental [on|off|show] | 切换、设置或显示实验性功能。 |
/feedback | 提供有关 CLI 的反馈。 |
/fleet [提示词] | 启用任务部分的并行子智能体执行。请参阅使用 /fleet 命令并行运行任务。 |
/help | 显示交互式命令的帮助。 |
/ide | 连接到 IDE 工作区。 |
/init | 为此仓库初始化 Copilot 自定义说明和智能体功能。 |
/instructions | 查看并切换自定义说明文件。 |
/keep-alive [on|busy|数字m|数字h] | 防止机器进入睡眠状态:当 CLI 会话处于活动状态时、当智能体忙碌时或在定义的时间长度内。 |
/list-dirs | 显示所有已允许文件访问的目录。 |
/login | 登录 Copilot。 |
/logout | 注销 Copilot。 |
/lsp [show|test|reload|help] [服务器名称] | 管理语言服务器配置。 |
/mcp [show|add|edit|delete|disable|enable|auth|reload] [服务器名称] | 管理 MCP 服务器配置。 |
/model, /models [模型名称] | 选择要使用的 AI 模型。 |
/on-air, /streamer-mode | 切换直播模式(隐藏预览版模型名称)。 |
/plan [提示词] | 在编码前创建实现方案。 |
/plugin [marketplace|install|uninstall|update|list] [参数...] | 管理插件和插件市场。 |
/pr [view|create|fix|auto] | 对当前分支的拉取请求进行操作。 |
/remote | 启用从 GitHub.com 和 GitHub Mobile 对此会话的远程访问。 |
/rename [名称] | 重命名当前会话(如果省略则自动生成名称;/session rename 的别名)。 |
/reset-allowed-tools | 重置允许的工具列表。 |
/restart | 重启 CLI,保留当前会话。 |
/resume [会话 ID] | 通过从列表中选择切换到不同的会话(可选指定会话 ID)。 |
/review [提示词] | 运行代码审查智能体来分析更改。 |
/session [checkpoints [n]|files|plan|rename 名称] | 显示会话信息和工作区摘要。使用子命令查看详情。 |
/share [file|gist] [session|research] [路径] | 将会话共享到 Markdown 文件或 GitHub gist。 |
/skills [list|info|add|remove|reload] [参数...] | 管理技能以增强功能。 |
/terminal-setup | 配置终端以支持多行输入(Shift+Enter 和 Ctrl+Enter)。 |
/theme [show|set|list] [auto|主题 ID] | 查看或配置终端主题。 |
/usage | 显示会话使用情况指标和统计数据。 |
/undo, /rewind | 撤销上一步操作并还原文件更改。 |
/user [show|list|switch] | 管理当前 GitHub 用户。 |
如需查看可用斜杠命令的完整列表,请在 CLI 的交互界面中输入 /help。
命令行选项
| 选项 | 用途 |
|---|---|
--acp | 启动智能体客户端协议 (Agent Client Protocol) 服务器。 |
--add-dir=路径 | 将目录添加到文件访问允许列表中(可多次使用)。 |
--add-github-mcp-tool=工具 | 添加要为 GitHub MCP 服务器启用的工具,而不是默认的 CLI 子集(可多次使用)。使用 * 代表所有工具。 |
--add-github-mcp-toolset=工具集 | 添加要为 GitHub MCP 服务器启用的工具集,而不是默认的 CLI 子集(可多次使用)。使用 all 代表所有工具集。 |
--additional-mcp-config=JSON | 仅为此会话添加 MCP 服务器。服务器配置可以作为 JSON 字符串或文件路径(前缀为 @)提供。扩充来自 ~/.copilot/mcp-config.json 的配置。覆盖任何同名的已安装 MCP 服务器配置。 |
--agent=智能体名称 | 指定要使用的自定义智能体。 |
--allow-all | 启用所有权限(相当于 --allow-all-tools --allow-all-paths --allow-all-urls)。 |
--allow-all-paths | 禁用文件路径验证并允许访问任何路径。 |
--allow-all-tools | 允许所有工具自动运行而无需确认。以编程方式使用 CLI 时需要此选项(环境变量:COPILOT_ALLOW_ALL)。 |
--allow-all-urls | 允许访问所有 URL 而无需确认。 |
--allow-tool=工具 ... | CLI 有权使用的工具。将不会提示获取权限。对于多个工具,请使用带引号的逗号分隔列表。 |
--allow-url=URL ... | 允许访问特定的 URL 或域名。对于多个 URL,请使用带引号的逗号分隔列表。 |
--autopilot | 在提示模式下启用自动驾驶续传。请参阅允许 GitHub Copilot CLI 自主工作。 |
--available-tools=工具 ... | 模型仅可使用这些工具。对于多个工具,请使用带引号的逗号分隔列表。 |
--banner | 显示启动横幅。 |
--bash-env | 为 bash shell 启用 BASH_ENV 支持。 |
--config-dir=路径 | 设置配置目录(默认值:~/.copilot)。 |
--continue | 恢复最近的会话。 |
--deny-tool=工具 ... | CLI 无权使用的工具。将不会提示获取权限。对于多个工具,请使用带引号的逗号分隔列表。 |
--deny-url=URL ... | 拒绝访问特定的 URL 或域名,优先级高于 --allow-url。对于多个 URL,请使用带引号的逗号分隔列表。 |
--disable-builtin-mcps | 禁用所有内置 MCP 服务器(目前:github-mcp-server)。 |
--disable-mcp-server=服务器名称 | 禁用特定的 MCP 服务器(可多次使用)。 |
--disable-parallel-tools-execution | 禁用工具的并行执行(LLM 仍然可以发出并行工具调用,但它们将按顺序执行)。 |
--disallow-temp-dir | 防止自动访问系统临时目录。 |
--effort=等级, --reasoning-effort=等级 | 设置推理努力等级(low, medium, high)。 |
--enable-all-github-mcp-tools | 启用所有 GitHub MCP 服务器工具,而不是默认的 CLI 子集。覆盖 --add-github-mcp-toolset 和 --add-github-mcp-tool 选项。 |
--enable-reasoning-summaries | 为支持它的 OpenAI 模型请求推理摘要。 |
--excluded-tools=工具 ... | 模型将无法使用这些工具。对于多个工具,请使用带引号的逗号分隔列表。 |
--experimental | 启用实验性功能(使用 --no-experimental 禁用)。 |
-h, --help | 显示帮助。 |
-i 提示词, --interactive=提示词 | 启动交互式会话并自动执行此提示词。 |
--log-dir=目录 | 设置日志文件目录(默认值:~/.copilot/logs/)。 |
--log-level=等级 | 设置日志等级(可选项:none, error, warning, info, debug, all, default)。 |
--max-autopilot-continues=次数 | 自动驾驶模式下的最大连续消息数(默认:无限制)。请参阅允许 GitHub Copilot CLI 自主工作。 |
--model=模型名称 | 设置要使用的 AI 模型。 |
--mouse[=值] | 在备用屏幕 (alt screen) 模式下启用鼠标支持。值可以是 on(默认)或 off。启用后,CLI 会在备用屏幕模式下捕获鼠标事件——滚轮、点击等。禁用后,将保留终端的原生鼠标行为。设置后,该设置将通过写入配置文件而持久化。 |
--no-ask-user | 禁用 ask_user 工具(智能体将在不提问的情况下自主工作)。 |
--no-auto-update | 禁用自动下载 CLI 更新。 |
--no-bash-env | 禁用对 bash shell 的 BASH_ENV 支持。 |
--no-color | 禁用所有彩色输出。 |
--no-custom-instructions | 禁用从 AGENTS.md 及相关文件加载自定义说明。 |
--no-experimental | 禁用实验性功能。 |
--no-mouse | 禁用鼠标支持。 |
--no-remote | 禁用此会话的远程访问。 |
--output-format=格式 | 格式可以是 text(默认)或 json(输出 JSONL:每行一个 JSON 对象)。 |
-p 提示词, --prompt=提示词 | 以编程方式执行提示词(完成后退出)。 |
--plain-diff | 禁用富差异渲染(通过你的 git 配置指定的差异工具进行语法高亮)。 |
--plugin-dir=目录 | 从本地目录加载插件(可多次使用)。 |
--remote | 启用从 GitHub.com 和 GitHub Mobile 对此会话的远程访问。 |
--resume=会话 ID | 通过从列表中选择来恢复之前的交互式会话(可选指定会话 ID)。 |
-s, --silent | 仅输出智能体响应(不含使用统计数据),适用于配合 -p 进行脚本编写。 |
--screen-reader | 启用屏幕阅读器优化。 |
--secret-env-vars=变量 ... | 从 shell 和 MCP 服务器环境中遮蔽环境变量(可多次使用)。对于多个变量,请使用带引号的逗号分隔列表。默认情况下,GITHUB_TOKEN 和 COPILOT_GITHUB_TOKEN 环境变量的值会从输出中遮蔽。 |
--share=路径 | 在编程会话完成后将会话共享到 Markdown 文件(默认路径:./copilot-session-<ID>.md)。 |
--share-gist | 在编程会话完成后将会话共享到加密的 GitHub gist。 |
--stream=模式 | 启用或禁用流模式(模式选择:on 或 off)。 |
-v, --version | 显示版本信息。 |
--yolo | 启用所有权限(相当于 --allow-all)。 |
如需查看命令和选项的完整列表,请运行 copilot help。
工具可用性值
--available-tools 和 --excluded-tools 选项支持使用以下值来指定工具
Shell 工具
| 工具名称 | 描述 |
|---|---|
bash / powershell | 执行命令 |
read_bash / read_powershell | 从 shell 会话读取输出 |
write_bash / write_powershell | 向 shell 会话发送输入 |
stop_bash / stop_powershell | 终止 shell 会话 |
list_bash / list_powershell | 列出活动的 shell 会话 |
文件操作工具
| 工具名称 | 描述 |
|---|---|
view | 读取文件或目录 |
create | 创建新文件 |
edit | 通过字符串替换编辑文件 |
apply_patch | 应用补丁(某些模型使用此工具而非 edit/create) |
智能体和任务委托工具
| 工具名称 | 描述 |
|---|---|
task | 运行子智能体 |
read_agent | 检查后台智能体状态 |
list_agents | 列出可用智能体 |
其他工具
| 工具名称 | 描述 |
|---|---|
grep (或 rg) | 在文件中搜索文本 |
glob | 查找符合模式的文件 |
web_fetch | 获取并解析网页内容 |
skill | 调用自定义技能 |
ask_user | 向用户提问 |
report_intent | 报告智能体计划执行的操作 |
show_file | 显著地显示一个文件 |
fetch_copilot_cli_documentation | 查阅 CLI 文档 |
update_todo | 更新任务清单 |
store_memory | 跨会话持久化事实 |
task_complete | 发出任务完成信号(仅限自动驾驶模式) |
exit_plan_mode | 退出规划模式 |
sql | 查询会话数据(实验性) |
lsp | 语言服务器重构(实验性) |
工具权限模式
--allow-tool 和 --deny-tool 选项接受 Kind(argument) 格式的权限模式。参数是可选的——省略它将匹配该种类的所有工具。
| 种类 | 描述 | 示例模式 |
|---|---|---|
shell | Shell 命令执行 | shell(git push), shell(git:*), shell |
写入 | 文件创建或修改 | write, write(src/*.ts) |
读取 | 文件或目录读取 | read, read(.env) |
| 服务器名称 | MCP 服务器工具调用 | MyMCP(create_issue), MyMCP |
url | 通过 web-fetch 或 shell 进行 URL 访问 | url(github.com), url(https://*.api.com) |
memory | 向智能体记忆存储事实 | memory |
对于 shell 规则,:* 后缀匹配命令词干后跟一个空格,防止部分匹配。例如,shell(git:*) 匹配 git push 和 git pull,但不匹配 gitea。
拒绝规则始终优先于允许规则,即使设置了 --allow-all。
# Allow all git commands except git push
copilot --allow-tool='shell(git:*)' --deny-tool='shell(git push)'
# Allow a specific MCP server tool
copilot --allow-tool='MyMCP(create_issue)'
# Allow all tools from a server
copilot --allow-tool='MyMCP'
环境变量
| 变量 | 描述 |
|---|---|
COPILOT_MODEL | 设置 AI 模型。 |
COPILOT_ALLOW_ALL | 设置为 true 以自动允许所有权限(相当于 --allow-all)。 |
COPILOT_AUTO_UPDATE | 设置为 false 以禁用自动更新。 |
COPILOT_CUSTOM_INSTRUCTIONS_DIRS | 自定义说明的其他目录的逗号分隔列表。 |
COPILOT_SKILLS_DIRS | 技能的其他目录的逗号分隔列表。 |
COPILOT_EDITOR | 用于交互式编辑的编辑器命令(在检查 $VISUAL 和 $EDITOR 之后检查)。如果均未设置,则默认为 vi。 |
COPILOT_GITHUB_TOKEN | 身份验证令牌。优先级高于 GH_TOKEN 和 GITHUB_TOKEN。 |
COPILOT_HOME | 覆盖配置和状态目录。默认值:$HOME/.copilot。 |
COPILOT_CACHE_HOME | 覆盖缓存目录(用于市场缓存、自动更新包和其他临时数据)。有关平台默认值,请参阅 GitHub Copilot CLI 配置目录。 |
COPILOT_SUBAGENT_MAX_DEPTH | 最大子智能体嵌套深度。默认值:6。范围:1–256。 |
COPILOT_SUBAGENT_MAX_CONCURRENT | 整个会话树中的最大并发子智能体数。默认值:32。范围:1–256。 |
GH_TOKEN | 身份验证令牌。优先级高于 GITHUB_TOKEN。 |
GITHUB_TOKEN | 身份验证令牌。 |
USE_BUILTIN_RIPGREP | 设置为 false 以使用系统 ripgrep 而不是随附版本。 |
PLAIN_DIFF | 设置为 true 以禁用富差异渲染。 |
COLORFGBG | 用于检测终端深色/浅色背景的备选方案。 |
COPILOT_CLI_ENABLED_FEATURE_FLAGS | 要启用的功能标志的逗号分隔列表(例如 "SOME_FEATURE,SOME_OTHER_FEATURE")。 |
配置文件设置
设置按用户、仓库到本地层层递进,越具体的范围会覆盖越通用的范围。命令行标志和环境变量始终具有最高优先级。
| 范围 | 位置 | 用途 |
|---|---|---|
| 用户 | ~/.copilot/config.json | 所有仓库的全局默认值。使用 COPILOT_HOME 环境变量指定备用路径。 |
| 仓库 | .github/copilot/settings.json | 共享的仓库配置(提交到仓库)。 |
| 本地 | .github/copilot/settings.local.json | 个人覆盖设置(将此项添加到 .gitignore)。 |
用户设置 (~/.copilot/config.json)
| 键 | 类型 | 默认值 | 描述 |
|---|---|---|---|
allowed_urls | string[] | [] | 无需提示即可允许的 URL 或域名。 |
autoUpdate | boolean | true | 自动下载 CLI 更新。 |
banner | "always" | "once" | "never" | "once" | 动画横幅显示频率。 |
bashEnv | boolean | false | 为 bash shell 启用 BASH_ENV 支持。 |
beep | boolean | true | 需要注意时播放提示音。 |
compactPaste | boolean | true | 将大型粘贴折叠为紧凑的 Token。 |
custom_agents.default_local_only | boolean | false | 仅使用本地自定义智能体。 |
denied_urls | string[] | [] | 被阻止的 URL 或域名(优先级高于 allowed_urls)。 |
experimental | boolean | false | 启用实验性功能。 |
includeCoAuthoredBy | boolean | true | 在智能体生成的 git 提交中添加 Co-authored-by 尾注。 |
companyAnnouncements | string[] | [] | 启动时随机显示的自定义消息。 |
logLevel | "none" | "error" | "warning" | "info" | "debug" | "all" | "default" | "default" | 日志详细程度。 |
model | string | 因情况而异 | 要使用的 AI 模型(请参阅 /model 命令)。 |
powershellFlags | string[] | ["-NoProfile", "-NoLogo"] | 启动时传递给 PowerShell (pwsh) 的标志。仅限 Windows。 |
effortLevel | string | "medium" | 深度思考时的推理努力等级(例如 "low", "medium", "high", "xhigh")。等级越高,计算量越大。 |
renderMarkdown | boolean | true | 在终端输出中渲染 Markdown。 |
screenReader | boolean | false | 启用屏幕阅读器优化。 |
stream | boolean | true | 启用流式响应。 |
storeTokenPlaintext | boolean | false | 当没有可用的系统钥匙串时,在配置文件中以纯文本形式存储身份验证令牌。 |
streamerMode | boolean | false | 隐藏预览版模型名称和配额详情(在演示 Copilot CLI 时很有用)。 |
theme | "auto" | "dark" | "light" | "auto" | 终端颜色主题。 |
trusted_folders | string[] | [] | 预先授权文件访问的文件夹。 |
mouse | boolean | true | 在备用屏幕模式下启用鼠标支持。 |
respectGitignore | boolean | true | 从 @ 文件选择器中排除 gitignore 忽略的文件。 |
disableAllHooks | boolean | false | 禁用所有钩子。 |
hooks | object | — | 内联的用户级钩子定义。 |
updateTerminalTitle | boolean | true | 在终端标题中显示当前的意图。 |
仓库设置 (.github/copilot/settings.json)
仓库设置适用于在此仓库中工作的所有人。仓库级别仅支持部分设置。不支持的键将被忽略。
| 键 | 类型 | 合并行为 | 描述 |
|---|---|---|---|
companyAnnouncements | string[] | 已替换——仓库优先级最高 | 启动时随机显示的消息。 |
enabledPlugins | Record<string, boolean> | 已合并——相同键下仓库覆盖用户设置 | 声明式插件自动安装。 |
extraKnownMarketplaces | Record<string, {...}> | 已合并——相同键下仓库覆盖用户设置 | 此仓库中可用的插件市场。 |
本地设置 (.github/copilot/settings.local.json)
在仓库中创建 .github/copilot/settings.local.json,用于不应提交的个人覆盖设置。将此文件添加到 .gitignore。
本地配置文件使用与仓库配置文件 (.github/copilot/settings.json) 相同的架构,且优先级高于后者。
Copilot 项目初始化
当你使用 copilot init 命令,或在交互式会话中使用斜杠命令 /init 时,Copilot 会分析你的代码库并编写或更新仓库中的 .github/copilot-instructions.md 文件。此自定义说明文件包含项目特定的指导,有助于改进未来的 CLI 会话。
你通常会在开始新项目或在现有仓库中开始使用 Copilot CLI 时使用 copilot init 或 /init。
创建或更新的 copilot-instructions.md 文件通常记录:
- 构建、测试和 lint 命令。
- 高层架构。
- 代码库特定的约定。
如果文件已存在,Copilot 会建议改进,你可以选择应用或拒绝。
CLI 在启动时会查找 copilot-instructions.md 文件,如果缺失,它会显示消息:
💡 未发现 copilot 说明。请运行 /init 为此项目生成 copilot-instructions.md 文件。
如果你不想创建此文件,可以使用 /init suppress 斜杠命令永久隐藏此启动消息,这会向你的 Copilot 配置文件添加一个针对此仓库的 suppress_init_folders 设置。
如需了解更多信息,请参阅为 GitHub Copilot 添加仓库自定义说明。
钩子 (Hooks) 参考
钩子是在会话期间特定生命周期点执行的外部命令,支持自定义自动化、安全控制和集成。钩子配置文件会从仓库中的 .github/hooks/*.json 自动加载。
钩子配置格式
钩子配置文件使用 JSON 格式,版本为 1。
命令钩子 (Command hooks)
命令钩子运行 shell 脚本,支持所有钩子类型。
{
"version": 1,
"hooks": {
"preToolUse": [
{
"type": "command",
"bash": "your-bash-command",
"powershell": "your-powershell-command",
"cwd": "optional/working/directory",
"env": { "VAR": "value" },
"timeoutSec": 30
}
]
}
}
| 字段 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
type | "command" | 是 | 必须为 "command"。 |
bash | string | bash/powershell 之一 | Unix 下的 shell 命令。 |
powershell | string | bash/powershell 之一 | Windows 下的 shell 命令。 |
cwd | string | 否 | 命令的工作目录(相对于仓库根目录或绝对路径)。 |
env | object | 否 | 要设置的环境变量(支持变量展开)。 |
timeoutSec | number | 否 | 超时时间(秒)。默认值:30。 |
提示词钩子 (Prompt hooks)
提示词钩子会自动提交文本,效果如同用户键入。它们仅在 sessionStart 时受支持,并在通过 --prompt 传递的任何初始提示词之前运行。文本可以是自然语言提示词或斜杠命令。
{
"version": 1,
"hooks": {
"sessionStart": [
{
"type": "prompt",
"prompt": "Your prompt text or /slash-command"
}
]
}
}
| 字段 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
type | "prompt" | 是 | 必须为 "prompt"。 |
prompt | string | 是 | 要提交的文本——可以是自然语言消息或斜杠命令。 |
钩子事件
| 事件 | 触发时机 | 输出处理 |
|---|---|---|
sessionStart | 新会话开始或恢复会话时。 | 否 |
sessionEnd | 会话终止时。 | 否 |
userPromptSubmitted | 用户提交提示词时。 | 否 |
preToolUse | 每个工具执行之前。 | 是——可以允许、拒绝或修改。 |
postToolUse | 每个工具成功完成后。 | 是——可以替换成功的结果(仅限 SDK 编程钩子)。 |
postToolUseFailure | 工具执行失败后。 | 是——可以通过 additionalContext 提供恢复指导(命令钩子的退出代码 2)。 |
agentStop | 主智能体完成一次轮次。 | 是——可以阻止并强制继续。 |
subagentStop | 子智能体完成时。 | 是——可以阻止并强制继续。 |
subagentStart | 子智能体生成时(在运行前)。返回 prepended 到子智能体提示词的 additionalContext。支持通过 matcher 按智能体名称过滤。 | 否——不能阻止创建。 |
preCompact | 上下文压缩即将开始(手动或自动)。支持通过 matcher 按触发器("manual" 或 "auto")过滤。 | 否——仅限通知。 |
permissionRequest | 在向用户显示权限对话框之前,且基于规则的检查未找到匹配的允许或拒绝规则时。支持针对 toolName 的 matcher 正则表达式。 | 是——可以以编程方式允许或拒绝。 |
errorOccurred | 执行期间发生错误时。 | 否 |
notification | 当 CLI 发出系统通知(shell 完成、智能体完成或空闲、权限提示、启发对话框)时异步触发。触发后即忘:从不阻塞会话。支持针对 notification_type 的 matcher 正则表达式。 | 可选——可以向会话注入 additionalContext。 |
钩子事件输入载荷
每个钩子事件都会向钩子处理程序传递一个 JSON 载荷。支持两种载荷格式,由钩子配置中使用的事件名称选择:
- camelCase 格式 —— 将事件名称配置为驼峰式(例如
sessionStart)。字段使用 camelCase。 - VS Code 兼容格式 —— 将事件名称配置为首字母大写式(例如
SessionStart)。字段使用蛇形命名法 (snake_case),以匹配 VS Code Copilot 扩展格式。
sessionStart / SessionStart
camelCase 输入
{
sessionId: string;
timestamp: number; // Unix timestamp in milliseconds
cwd: string;
source: "startup" | "resume" | "new";
initialPrompt?: string;
}
VS Code 兼容输入
{
hook_event_name: "SessionStart";
session_id: string;
timestamp: string; // ISO 8601 timestamp
cwd: string;
source: "startup" | "resume" | "new";
initial_prompt?: string;
}
sessionEnd / SessionEnd
camelCase 输入
{
sessionId: string;
timestamp: number;
cwd: string;
reason: "complete" | "error" | "abort" | "timeout" | "user_exit";
}
VS Code 兼容输入
{
hook_event_name: "SessionEnd";
session_id: string;
timestamp: string; // ISO 8601 timestamp
cwd: string;
reason: "complete" | "error" | "abort" | "timeout" | "user_exit";
}
userPromptSubmitted / UserPromptSubmit
camelCase 输入
{
sessionId: string;
timestamp: number;
cwd: string;
prompt: string;
}
VS Code 兼容输入
{
hook_event_name: "UserPromptSubmit";
session_id: string;
timestamp: string; // ISO 8601 timestamp
cwd: string;
prompt: string;
}
preToolUse / PreToolUse
camelCase 输入
{
sessionId: string;
timestamp: number;
cwd: string;
toolName: string;
toolArgs: unknown;
}
VS Code 兼容输入
当使用首字母大写式事件名称 PreToolUse 配置时,载荷使用蛇形命名法字段名称,以匹配 VS Code Copilot 扩展格式
{
hook_event_name: "PreToolUse";
session_id: string;
timestamp: string; // ISO 8601 timestamp
cwd: string;
tool_name: string;
tool_input: unknown; // Tool arguments (parsed from JSON string when possible)
}
postToolUse / PostToolUse
camelCase 输入
{
sessionId: string;
timestamp: number;
cwd: string;
toolName: string;
toolArgs: unknown;
toolResult: {
resultType: "success";
textResultForLlm: string;
}
}
VS Code 兼容输入
{
hook_event_name: "PostToolUse";
session_id: string;
timestamp: string; // ISO 8601 timestamp
cwd: string;
tool_name: string;
tool_input: unknown;
tool_result: {
result_type: "success" | "failure" | "denied" | "error";
text_result_for_llm: string;
}
}
postToolUseFailure / PostToolUseFailure
camelCase 输入
{
sessionId: string;
timestamp: number;
cwd: string;
toolName: string;
toolArgs: unknown;
error: string;
}
VS Code 兼容输入
{
hook_event_name: "PostToolUseFailure";
session_id: string;
timestamp: string; // ISO 8601 timestamp
cwd: string;
tool_name: string;
tool_input: unknown;
error: string;
}
agentStop / Stop
camelCase 输入
{
sessionId: string;
timestamp: number;
cwd: string;
transcriptPath: string;
stopReason: "end_turn";
}
VS Code 兼容输入
{
hook_event_name: "Stop";
session_id: string;
timestamp: string; // ISO 8601 timestamp
cwd: string;
transcript_path: string;
stop_reason: "end_turn";
}
subagentStart
输入
{
sessionId: string;
timestamp: number;
cwd: string;
transcriptPath: string;
agentName: string;
agentDisplayName?: string;
agentDescription?: string;
}
subagentStop / SubagentStop
camelCase 输入
{
sessionId: string;
timestamp: number;
cwd: string;
transcriptPath: string;
agentName: string;
agentDisplayName?: string;
stopReason: "end_turn";
}
VS Code 兼容输入
{
hook_event_name: "SubagentStop";
session_id: string;
timestamp: string; // ISO 8601 timestamp
cwd: string;
transcript_path: string;
agent_name: string;
agent_display_name?: string;
stop_reason: "end_turn";
}
errorOccurred / ErrorOccurred
camelCase 输入
{
sessionId: string;
timestamp: number;
cwd: string;
error: {
message: string;
name: string;
stack?: string;
};
errorContext: "model_call" | "tool_execution" | "system" | "user_input";
recoverable: boolean;
}
VS Code 兼容输入
{
hook_event_name: "ErrorOccurred";
session_id: string;
timestamp: string; // ISO 8601 timestamp
cwd: string;
error: {
message: string;
name: string;
stack?: string;
};
error_context: "model_call" | "tool_execution" | "system" | "user_input";
recoverable: boolean;
}
preCompact / PreCompact
camelCase 输入
{
sessionId: string;
timestamp: number;
cwd: string;
transcriptPath: string;
trigger: "manual" | "auto";
customInstructions: string;
}
VS Code 兼容输入
{
hook_event_name: "PreCompact";
session_id: string;
timestamp: string; // ISO 8601 timestamp
cwd: string;
transcript_path: string;
trigger: "manual" | "auto";
custom_instructions: string;
}
preToolUse 决策控制
preToolUse 钩子可以通过向 stdout 写入 JSON 对象来控制工具执行。
| 字段 | 值 | 描述 |
|---|---|---|
permissionDecision | "allow", "deny", "ask" | 工具是否执行。空输出使用默认行为。 |
permissionDecisionReason | string | 显示给智能体的原因。当决策为 "deny" 时必填。 |
modifiedArgs | object | 替换原始参数的替代工具参数。 |
agentStop / subagentStop 决策控制
| 字段 | 值 | 描述 |
|---|---|---|
decision | "block", "allow" | "block" 使用 reason 作为提示词强制智能体再进行一个轮次。 |
reason | string | 当 decision 为 "block" 时下一轮次的提示词。 |
permissionRequest 决策控制
当工具级权限对话框即将显示时,permissionRequest 钩子会触发。它在基于规则的权限检查未发现匹配规则后触发。使用它可以以编程方式批准或拒绝工具调用——这在管道模式 (-p) 和没有交互式提示的 CI 环境中特别有用。
匹配器 (Matcher): 对 toolName 进行测试的可选正则表达式。设置后,钩子仅对匹配的工具名称触发。
向 stdout 输出 JSON 以控制权限决策:
| 字段 | 值 | 描述 |
|---|---|---|
behavior | "allow", "deny" | 是否批准或拒绝工具调用。 |
message | string | 拒绝时反馈给 LLM 的原因。 |
interrupt | boolean | 当设置为 true 并配合 "deny" 时,完全停止智能体。 |
返回空输出或 {} 以回退到默认行为(显示用户对话框,或在管道模式下拒绝)。退出代码 2 被视为拒绝;如果钩子同时在 stdout 输出 JSON,这些字段将与拒绝决策合并。
notification 钩子
当 CLI 发出系统通知时,notification 钩子会异步触发。这些钩子是触发即忘的:它们从不阻塞会话,任何错误都会被记录并跳过。
输入
{
sessionId: string;
timestamp: number;
cwd: string;
hook_event_name: "Notification";
message: string; // Human-readable notification text
title?: string; // Short title (e.g., "Permission needed", "Shell completed")
notification_type: string; // One of the types listed below
}
通知类型
| 类型 | 触发时机 |
|---|---|
shell_completed | 后台(异步)shell 命令完成 |
shell_detached_completed | 分离式 shell 会话完成 |
agent_completed | 后台子智能体完成(完成或失败) |
agent_idle | 后台智能体完成一轮并进入空闲状态(等待 write_agent) |
permission_prompt | 智能体请求执行工具的权限 |
elicitation_dialog | 智能体请求用户提供额外信息 |
输出
{
additionalContext?: string; // Injected into the session as a user message
}
如果返回 additionalContext,该文本将作为前置的用户消息注入会话。如果会话处于空闲状态,这可以触发智能体的进一步处理。返回 {} 或空输出则不执行任何操作。
匹配器 (Matcher): 针对 notification_type 的可选正则表达式。模式锚定为 ^(?:pattern)$。省略 matcher 则接收所有类型的通知。
用于钩子匹配的工具名称
| 工具名称 | 描述 |
|---|---|
bash | 执行 shell 命令 (Unix)。 |
powershell | 执行 shell 命令 (Windows)。 |
view | 读取文件内容。 |
edit | 修改文件内容。 |
create | 创建新文件。 |
glob | 按模式查找文件。 |
grep | 搜索文件内容。 |
web_fetch | 获取网页。 |
task | 运行子智能体任务。 |
如果配置了多个相同类型的钩子,它们将按顺序执行。对于 preToolUse,如果任一钩子返回 "deny",则工具被阻止。对于 postToolUseFailure 命令钩子,以退出代码 2 退出将导致 stderr 作为恢复指导返回给助手。钩子失败(非零退出代码或超时)会被记录并跳过——它们绝不会阻塞智能体执行。
MCP 服务器配置
MCP 服务器为 CLI 智能体提供额外的工具。在 ~/.copilot/mcp-config.json 中配置持久服务器。使用 --additional-mcp-config 为单次会话添加服务器。
copilot mcp 子命令
使用 copilot mcp 从命令行管理 MCP 服务器配置,而无需启动交互式会话。
| 子命令 | 描述 |
|---|---|
list [--json] | 列出按来源分组的所有已配置 MCP 服务器。 |
get <名称> [--json] | 显示特定服务器的配置和工具。 |
add <名称> | 向用户配置添加服务器。写入 ~/.copilot/mcp-config.json。 |
remove <名称> | 删除用户级服务器。工作区服务器必须直接在它们的配置文件中编辑。 |
copilot mcp add 选项
| 选项 | 描述 |
|---|---|
-- <命令> [参数...] | 本地 (stdio) 服务器的命令和参数。 |
--url <url> | 远程服务器的 URL。 |
--type <类型> | 传输类型:local, stdio, http, 或 sse。 |
--env KEY=VALUE | 环境变量(可重复)。 |
--header KEY=VALUE | 远程服务器的 HTTP 标头(可重复)。 |
--tools <工具> | 工具过滤器:"*" 代表全部,逗号分隔列表,或 "" 代表无。 |
--timeout <毫秒> | 超时时间(毫秒)。 |
--json | 以 JSON 格式输出添加的配置。 |
--show-secrets | 显示完整的环境变量和标头值。 |
--config-dir <路径> | 配置目录的路径。 |
注意
--show-secrets 可能会在你的终端或日志中打印敏感的环境变量和标头值。仅在受信任的环境中使用此选项,并避免在共享日志或历史记录中复制、粘贴或以其他方式捕获输出。
传输类型
| 类型 | 描述 | 必填字段 |
|---|---|---|
local / stdio | 通过 stdin/stdout 通信的本地进程。 | command, args |
http | 使用可流式传输 HTTP 传输协议的远程服务器。 | url |
sse | 使用服务器发送事件 (Server-Sent Events) 传输协议的远程服务器。 | url |
本地服务器配置字段
| 字段 | 是否必填 | 描述 |
|---|---|---|
command | 是 | 启动服务器的命令。 |
args | 是 | 命令参数(数组)。 |
tools | 是 | 要启用的工具:["*"] 代表全部,或特定工具名称列表。 |
env | 否 | 环境变量。支持 $VAR, ${VAR}, 和 ${VAR:-default} 展开。 |
cwd | 否 | 服务器的工作目录。 |
timeout | 否 | 工具调用超时时间(毫秒)。 |
type | 否 | "local" 或 "stdio"。默认值:"local"。 |
远程服务器配置字段
| 字段 | 是否必填 | 描述 |
|---|---|---|
type | 是 | "http" 或 "sse"。 |
url | 是 | 服务器 URL。 |
tools | 是 | 要启用的工具。 |
headers | 否 | HTTP 标头。支持变量展开。 |
oauthClientId | 否 | 静态 OAuth 客户端 ID(跳过动态注册)。 |
oauthPublicClient | 否 | OAuth 客户端是否为公开。默认值:true。 |
oidc | 否 | 启用 OIDC 令牌注入。当设置为 true 时,会注入 GITHUB_COPILOT_OIDC_MCP_TOKEN 环境变量(本地服务器)或 Bearer Authorization 标头(远程服务器)。 |
timeout | 否 | 工具调用超时时间(毫秒)。 |
OAuth 重新认证
使用 OAuth 的远程 MCP 服务器在令牌过期或需要不同账号时可能会显示 needs-auth 状态。使用 /mcp auth <服务器名称> 触发新的 OAuth 流程。这将打开浏览器身份验证提示,允许你登录或切换账号。完成流程后,服务器将自动重新连接。
过滤器映射 (Filter mapping)
使用服务器配置中的 filterMapping 字段控制 MCP 工具输出的处理方式。
| 模式 | 描述 |
|---|---|
none | 无过滤。 |
markdown | 将输出格式化为 Markdown。 |
hidden_characters | 移除隐藏字符或控制字符。此为默认设置。 |
内置 MCP 服务器
CLI 包含无需额外设置即可使用的内置 MCP 服务器。
| 服务器 | 描述 |
|---|---|
github-mcp-server | GitHub API 集成:议题、拉取请求、提交、代码搜索和 GitHub Actions。 |
playwright | 浏览器自动化:导航、点击、键入、屏幕截图和表单处理。 |
fetch | 通过 fetch 工具发送 HTTP 请求。 |
time | 时间工具:get_current_time 和 convert_time。 |
使用 --disable-builtin-mcps 禁用所有内置服务器,或使用 --disable-mcp-server 服务器名称 禁用特定服务器。
MCP 服务器信任等级
MCP 服务器从多个来源加载,每个来源具有不同的信任等级。
| 来源 | 信任等级 | 是否需要审查 |
|---|---|---|
| 内置 (Built-in) | 高 | 否 |
仓库 (.github/mcp.json) | 中 | 建议审查 |
工作区 (.mcp.json) | 中 | 建议审查 |
用户配置 (~/.copilot/mcp-config.json) | 用户定义 | 用户负责 |
| 远程服务器 | 低 | 始终需要 |
所有 MCP 工具调用都需要明确许可。即使是对外部服务的只读操作也是如此。
技能 (Skills) 参考
技能是扩展 CLI 功能的 Markdown 文件。每个技能存在于包含 SKILL.md 文件的独立目录中。当被调用(通过 /技能名称 或由智能体自动调用)时,技能的内容会注入到对话中。
技能前置元数据 (Frontmatter) 字段
| 字段 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
name | string | 是 | 技能的唯一标识符。仅限字母、数字和连字符。最长 64 个字符。 |
description | string | 是 | 技能的作用及使用时机。最长 1024 个字符。 |
allowed-tools | string 或 string[] | 否 | 技能激活时自动允许使用的工具的逗号分隔列表或 YAML 数组。使用 "*" 代表所有工具。 |
user-invocable | boolean | 否 | 用户是否可以使用 /技能名称 调用该技能。默认值:true。 |
disable-model-invocation | boolean | 否 | 防止智能体自动调用此技能。默认值:false。 |
技能位置
技能从这些位置按优先级顺序加载(重名时第一个找到的获胜)。
| 位置 | 范围 | 描述 |
|---|---|---|
.github/skills/ | 项目 | 项目特定技能。 |
.agents/skills/ | 项目 | 备选项目位置。 |
.claude/skills/ | 项目 | Claude 兼容位置。 |
父级 .github/skills/ | 已继承 | Monorepo 父目录支持。 |
~/.copilot/skills/ | 个人 | 适用于所有项目的个人技能。 |
~/.agents/skills/ | 个人 | 跨所有项目共享的智能体技能。 |
~/.claude/skills/ | 个人 | Claude 兼容个人位置。 |
| 插件目录 | 插件 | 来自已安装插件的技能。 |
COPILOT_SKILLS_DIRS | 自定义 | 额外目录(逗号分隔)。 |
| (随 CLI 附带) | 内置 (Built-in) | 随 CLI 一起发布的技能。优先级最低——可被任何其他来源覆盖。 |
命令(另一种技能格式)
命令是存储在 .claude/commands/ 中作为单个 .md 文件的另一种技能形式。命令名称派生自文件名。命令文件使用简化格式(不需要 name 字段),并支持 description, allowed-tools, 和 disable-model-invocation。命令的优先级低于同名的技能。
自定义智能体 (Custom agents) 参考
自定义智能体是 Markdown 文件中定义的专门 AI 智能体。文件名(不含扩展名)即为智能体 ID。使用 .agent.md 或 .md 作为文件扩展名。
内置智能体
| 智能体 | 默认模型 | 描述 |
|---|---|---|
code-review | claude-sonnet-4.5 | 高信噪比代码审查。分析差异中的错误、安全问题和逻辑错误。 |
rubber-duck (小黄鸭) | 互补模型 | 使用互补模型对提案、设计、实现或测试提供建设性批评。识别薄弱环节并建议改进。仅在实验模式下可用。 |
explore | claude-haiku-4.5 | 快速代码库探索。搜索文件、读取代码并回答问题。返回 300 字以内的集中回答。可安全并行运行。 |
general-purpose | claude-sonnet-4.5 | 用于复杂多步任务的全能智能体。在独立的上下文窗口中运行。 |
research | claude-sonnet-4.6 | 深度研究智能体。根据你的代码库、相关仓库及网络上的信息生成报告。 |
task | claude-haiku-4.5 | 命令执行(测试、构建、lint)。成功时返回简短摘要,失败时返回完整输出。 |
自定义智能体前置元数据字段
| 字段 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
description | string | 是 | 显示在智能体列表和 task 工具中的描述。 |
infer | boolean | 否 | 允许主智能体自动委托任务。默认值:true。 |
mcp-servers | object | 否 | 要连接的 MCP 服务器。使用与 ~/.copilot/mcp-config.json 相同的架构。 |
model | string | 否 | 此智能体的 AI 模型。未设置时,继承外部智能体的模型。 |
name | string | 否 | 显示名称。默认使用文件名。 |
tools | string[] | 否 | 智能体可用的工具。默认:["*"](所有工具)。 |
自定义智能体位置
| 范围 | 位置 |
|---|---|
| 项目 | .github/agents/ 或 .claude/agents/ |
| 用户 | ~/.copilot/agents/ 或 ~/.claude/agents/ |
| 插件 | <插件>/agents/ |
项目级智能体优先级高于用户级智能体。插件智能体优先级最低。
子智能体限制
CLI 强制执行深度和并发限制,以防止失控的智能体生成。
| 限制项 | 默认值 | 环境变量 |
|---|---|---|
| 最大深度 | 6 | COPILOT_SUBAGENT_MAX_DEPTH |
| 最大并发数 | 32 | COPILOT_SUBAGENT_MAX_CONCURRENT |
深度计算有多少智能体相互嵌套。达到深度限制时,最内层的智能体无法再生成子智能体。并发数计算整个会话树中同时运行的子智能体数量。达到限制时,新的子智能体请求将被拒绝,直到有活动智能体完成。数值限制在 1 到 256 之间。
权限审批响应
当 CLI 提示获取执行操作的权限时,你可以使用以下按键进行响应。
| 键 | 效果 |
|---|---|
y | 仅允许此次特定请求。 |
n | 仅拒绝此次特定请求。 |
! | 在会话剩余时间内允许所有类似请求。 |
# | 在会话剩余时间内拒绝所有类似请求。 |
? | 显示有关请求的详细信息。 |
当你运行 /clear 或开始新会话时,会话审批将重置。
OpenTelemetry 监控
Copilot CLI 可以通过 OpenTelemetry (OTel) 导出跟踪 (Traces) 和指标 (Metrics),让你深入了解智能体交互、LLM 调用、工具执行和 Token 使用情况。所有信号名称和属性都遵循 OTel GenAI 语义规范。
OTel 默认关闭,开销为零。当满足以下任一条件时它会激活:
COPILOT_OTEL_ENABLED=true- 设置了
OTEL_EXPORTER_OTLP_ENDPOINT - 设置了
COPILOT_OTEL_FILE_EXPORTER_PATH
OTel 环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
COPILOT_OTEL_ENABLED | false | 显式启用 OTel。如果已设置 OTEL_EXPORTER_OTLP_ENDPOINT 则不需要。 |
OTEL_EXPORTER_OTLP_ENDPOINT | — | OTLP 端点 URL。设置此项会自动启用 OTel。 |
COPILOT_OTEL_EXPORTER_TYPE | otlp-http | 导出器类型:otlp-http 或 file。设置 COPILOT_OTEL_FILE_EXPORTER_PATH 时自动选择 file。 |
OTEL_SERVICE_NAME | github-copilot | 资源属性中的服务名称。 |
OTEL_RESOURCE_ATTRIBUTES | — | 以逗号分隔的 key=value 对形式表示的额外资源属性。特殊字符请使用百分比编码。 |
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT | false | 捕获完整的提示词和响应内容。请参阅内容捕获。 |
OTEL_LOG_LEVEL | — | OTel 诊断日志等级:NONE, ERROR, WARN, INFO, DEBUG, VERBOSE, ALL。 |
COPILOT_OTEL_FILE_EXPORTER_PATH | — | 以 JSON-lines 格式将所有信号写入此文件。设置此项会自动启用 OTel。 |
COPILOT_OTEL_SOURCE_NAME | github.copilot | Tracer 和 Meter 的检测范围名称。 |
OTEL_EXPORTER_OTLP_HEADERS | — | OTLP 导出器的认证标头(例如 Authorization=Bearer token)。 |
跟踪 (Traces)
运行时为每次智能体交互发出分层 Span 树。每棵树包含一个 invoke_agent 根 Span,以及 chat 和 execute_tool 子 Span。
invoke_agent Span 属性
封装整个智能体调用:一条用户消息的所有 LLM 调用和工具执行。
- 顶级会话使用 Span 种类
CLIENT(远程服务调用),包含server.address和server.port。 - 子智能体调用(例如 explore, task)使用 Span 种类
INTERNAL(进程内),不带服务器属性。
| 属性 | 描述 | Span 种类 |
|---|---|---|
gen_ai.operation.name | invoke_agent | 两者皆有 |
gen_ai.provider.name | 提供商(例如 github, anthropic) | 两者皆有 |
gen_ai.agent.id | 会话标识符 | 两者皆有 |
gen_ai.agent.name | 智能体名称(可用时) | 两者皆有 |
gen_ai.agent.description | 智能体描述(可用时) | 两者皆有 |
gen_ai.agent.version | 运行时版本 | 两者皆有 |
gen_ai.conversation.id | 会话标识符 | 两者皆有 |
gen_ai.request.model | 请求的模型 | 两者皆有 |
gen_ai.response.finish_reasons | ["stop"] 或 ["error"] | 两者皆有 |
gen_ai.usage.input_tokens | 总输入 Token 数(所有轮次) | 两者皆有 |
gen_ai.usage.output_tokens | 总输出 Token 数(所有轮次) | 两者皆有 |
gen_ai.usage.cache_read.input_tokens | 读取的缓存输入 Token 数 | 两者皆有 |
gen_ai.usage.cache_creation.input_tokens | 创建的缓存输入 Token 数 | 两者皆有 |
github.copilot.turn_count | LLM 往返次数 | 两者皆有 |
github.copilot.cost | 货币成本 | 两者皆有 |
github.copilot.aiu | 消耗的 AI 单元 (AI units) | 两者皆有 |
server.address | 服务器主机名 | 仅限 CLIENT |
server.port | 服务器端口 | 仅限 CLIENT |
error.type | 错误类名(报错时) | 两者皆有 |
gen_ai.input.messages | JSON 格式的完整输入消息(仅限内容捕获开启时) | 两者皆有 |
gen_ai.output.messages | JSON 格式的完整输出消息(仅限内容捕获开启时) | 两者皆有 |
gen_ai.system_instructions | JSON 格式的系统提示词内容(仅限内容捕获开启时) | 两者皆有 |
gen_ai.tool.definitions | JSON 格式的工具架构(仅限内容捕获开启时) | 两者皆有 |
chat Span 属性
每次 LLM 请求对应一个 Span。Span 种类:CLIENT。
| 属性 | 描述 |
|---|---|
gen_ai.operation.name | chat |
gen_ai.provider.name | 提供商名称 |
gen_ai.request.model | 请求的模型 |
gen_ai.conversation.id | 会话标识符 |
gen_ai.response.id | 响应 ID |
gen_ai.response.model | 解析后的模型 |
gen_ai.response.finish_reasons | 停止原因 |
gen_ai.usage.input_tokens | 本轮输入 Token 数 |
gen_ai.usage.output_tokens | 本轮输出 Token 数 |
gen_ai.usage.cache_read.input_tokens | 读取的缓存 Token 数 |
gen_ai.usage.cache_creation.input_tokens | 创建的缓存 Token 数 |
github.copilot.cost | 本轮成本 |
github.copilot.aiu | 本轮消耗的 AI 单元 |
github.copilot.server_duration | 服务器端时长 |
github.copilot.initiator | 请求发起者 |
github.copilot.turn_id | 轮次标识符 |
github.copilot.interaction_id | 交互标识符 |
github.copilot.time_to_first_chunk | 距离首个流式分块的时间,以秒计(仅限流式传输) |
server.address | 服务器主机名 |
server.port | 服务器端口 |
error.type | 错误类名(报错时) |
gen_ai.input.messages | JSON 格式的完整提示词消息(仅限内容捕获开启时) |
gen_ai.output.messages | JSON 格式的完整响应消息(仅限内容捕获开启时) |
gen_ai.system_instructions | JSON 格式的系统提示词内容(仅限内容捕获开启时) |
execute_tool Span 属性
每次工具调用对应一个 Span。Span 种类:INTERNAL。
| 属性 | 描述 |
|---|---|
gen_ai.operation.name | execute_tool |
gen_ai.provider.name | 提供商名称(可用时) |
gen_ai.tool.name | 工具名称(例如 readFile) |
gen_ai.tool.type | function |
gen_ai.tool.call.id | 工具调用标识符 |
gen_ai.tool.description | 工具描述 |
error.type | 错误类名(报错时) |
gen_ai.tool.call.arguments | JSON 格式的工具输入参数(仅限内容捕获开启时) |
gen_ai.tool.call.result | JSON 格式的工具输出(仅限内容捕获开启时) |
指标 (Metrics)
GenAI 规范指标
| 指标 | 类型 | 单位 | 描述 |
|---|---|---|---|
gen_ai.client.operation.duration | 直方图 (Histogram) | 秒 (s) | LLM API 调用和智能体调用时长 |
gen_ai.client.token.usage | 直方图 (Histogram) | Token 数 | 按类型 (input/output) 统计的 Token 计数 |
gen_ai.client.operation.time_to_first_chunk | 直方图 (Histogram) | 秒 (s) | 接收到首个流式分块的时间 |
gen_ai.client.operation.time_per_output_chunk | 直方图 (Histogram) | 秒 (s) | 首个分块后的分块间延迟 |
厂商特定指标
| 指标 | 类型 | 单位 | 描述 |
|---|---|---|---|
github.copilot.tool.call.count | 计数器 (Counter) | 次 (calls) | 按 gen_ai.tool.name 和 success 统计的工具调用次数 |
github.copilot.tool.call.duration | 直方图 (Histogram) | 秒 (s) | 按 gen_ai.tool.name 统计的工具执行延迟 |
github.copilot.agent.turn.count | 直方图 (Histogram) | 轮次 (turns) | 每次智能体调用的 LLM 往返次数 |
Span 事件
记录在活动 chat 或 invoke_agent Span 上的生命周期事件。
| 事件 | 描述 | 关键属性 |
|---|---|---|
github.copilot.hook.start | 钩子开始执行 | github.copilot.hook.type, github.copilot.hook.invocation_id |
github.copilot.hook.end | 钩子成功完成 | github.copilot.hook.type, github.copilot.hook.invocation_id |
github.copilot.hook.error | 钩子执行失败 | github.copilot.hook.type, github.copilot.hook.invocation_id, github.copilot.hook.error_message |
github.copilot.session.truncation | 对话历史被截断 | github.copilot.token_limit, github.copilot.pre_tokens, github.copilot.post_tokens, github.copilot.pre_messages, github.copilot.post_messages, github.copilot.tokens_removed, github.copilot.messages_removed, github.copilot.performed_by |
github.copilot.session.compaction_start | 历史压缩开始 | 无 |
github.copilot.session.compaction_complete | 历史压缩完成 | github.copilot.success, github.copilot.pre_tokens, github.copilot.post_tokens, github.copilot.tokens_removed, github.copilot.messages_removed, github.copilot.message (仅限内容捕获) |
github.copilot.skill.invoked | 技能被调用 | github.copilot.skill.name, github.copilot.skill.path, github.copilot.skill.plugin_name, github.copilot.skill.plugin_version |
github.copilot.session.shutdown | 会话正在关闭 | github.copilot.shutdown_type, github.copilot.total_premium_requests, github.copilot.lines_added, github.copilot.lines_removed, github.copilot.files_modified_count |
github.copilot.session.abort | 用户取消了当前操作 | github.copilot.abort_reason |
exception | 会话错误 | github.copilot.error_type, github.copilot.error_status_code, github.copilot.error_provider_call_id |
资源属性
所有信号都携带这些资源属性。
| 属性 | 值 |
|---|---|
service.name | github-copilot (可通过 OTEL_SERVICE_NAME 配置) |
service.version | 运行时版本 |
内容捕获
默认情况下,不捕获任何提示词内容、响应或工具参数——仅捕获模型名称、Token 计数和时长等元数据。要捕获完整内容,请设置 OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true。
警告
内容捕获可能包含敏感信息,如代码、文件内容和用户提示词。仅在受信任的环境中启用此功能。
启用内容捕获后,将填充以下属性:
| 属性 | 内容 |
|---|---|
gen_ai.input.messages | 完整提示词消息 (JSON) |
gen_ai.output.messages | 完整响应消息 (JSON) |
gen_ai.system_instructions | 系统提示词内容 (JSON) |
gen_ai.tool.definitions | 工具架构 (JSON) |
gen_ai.tool.call.arguments | 工具输入参数 |
gen_ai.tool.call.result | 工具输出 |
功能标志参考
功能标志可启用尚未正式发布的特性。通过 COPILOT_CLI_ENABLED_FEATURE_FLAGS 环境变量(逗号分隔列表)或使用 /experimental 斜杠命令来启用标志。
| 标志 | 层级 | 描述 |
|---|---|---|
RUBBER_DUCK_AGENT | experimental | 用于对代码和设计提供对抗性反馈的小黄鸭子代理 |
BACKGROUND_SESSIONS | experimental | 支持后台管理的多并发会话 |
MULTI_TURN_AGENTS | experimental | 通过 write_agent 实现多轮子代理消息传递 |
EXTENSIONS | experimental | 带有自定义工具和钩子的编程扩展 |
QUEUED_COMMANDS | staff-or-experimental (员工或实验性) | 在代理运行时使用 Ctrl+Enter 将命令加入队列 |
PERSISTED_PERMISSIONS | staff-or-experimental (员工或实验性) | 按位置跨会话持久化工具权限 |
SESSION_STORE | staff-or-experimental (员工或实验性) | 基于 SQLite 的会话存储,用于跨会话历史记录 |
COMPUTER_USE | staff (员工) | 内置计算机使用 MCP 服务器(屏幕截图以及鼠标/键盘控制) |
copilot-feature-agentic-memory | 开启 | 跨会话的持久化记忆工具 |
COPILOT_SWE_AGENT_BACKGROUND_AGENTS | 开启 | 后台代理任务执行 |