Skip to main content
Skip to content

GitHub Copilot CLI 配置目录

查找有关 ~/.copilot 目录的信息,其中 Copilot CLI 存储配置、会话数据和自定义项。

Copilot CLI 将其配置、会话历史记录、日志和自定义存储在计算机上的单个目录中。 默认情况下,此目录为 ~/.copilot (即 $HOME/.copilot) 。

本文介绍此目录的内容以及如何使用它们。

目录概述

该 ~/.copilot 目录包含以下顶级项。

路径类型说明
agents/目录个人自定义代理定义
config.jsonFile自动管理的应用程序状态(身份验证、已安装的插件和其他内部数据)
copilot-instructions.mdFile个人自定义说明(适用于所有会话)
extensions/目录由 CLI 加载的个人扩展
hooks/目录用户级挂钩脚本
ide/目录IDE 集成状态
installed-plugins/目录已安装的插件文件
instructions/目录其他个人 *.instructions.md 文件
logs/目录会话日志文件
lsp-config.jsonFile用户级 LSP 服务器定义
mcp-config.jsonFile用户级 MCP 服务器定义
mcp-oauth-config/目录MCP OAuth 令牌和注册后备存储
mcp-secrets/目录MCP 密钥占位符的本地后备存储和索引
permissions-config.jsonFile每个项目保存的工具和目录权限
plugin-data/目录已安装插件的持久数据
providers.jsonFile用户级自带密钥(BYOK)提供程序和模型注册表
session-state/目录会话历史记录和工作区数据
command-history-state/目录命令历史记录数据
session-store.dbFile用于跨会话数据的 SQLite 数据库
settings.jsonFile个人配置设置
skills/目录个人自定义技能定义

注意

并非所有项都立即出现。 有些是在首次使用特定功能时按需创建的,例如, installed-plugins/ 仅在安装第一个插件后显示。

用户可编辑的文件

以下文件旨在由你直接编辑,或通过 CLI 命令进行管理。

settings.json

这是用于 Copilot CLI 的主配置文件。 在会话中,可以使用交互式 /settings 命令更改特定值,或运行 /settings KEY VALUE 以设置单个值。 请参阅“使用 /settings 命令更改设置”。 或者,可以直接在文本编辑器中编辑 settings.json 文件。 该文件支持带有注释的 JSON(JSONC)。

默认情况下,此文件位于 ~/.copilot 目录(即用户级配置目录)。 它包含所有存储库的全局用户级默认值。 可以通过将环境变量设置为 COPILOT_HOME 其他路径来更改此目录的位置。

注意

用户可编辑的设置存储在 settings.json. 这些设置最初存储在 config.json 中。 在config.json中的任何用户设置都将被忽略。 该文件用于存储内部状态,例如已安装的插件和受信任的文件夹。

如果 settings.json 无法读取、解析或验证,Copilot CLI 将忽略无效值,并在时间线上显示启动警告,引导你前往 **** 命令的 /settings 选项卡。 打开该选项卡以查看特定错误,然后修复报告的问题以还原受影响的设置。

如果 settings.json 包含某个不是已识别设置的顶级键(例如拼写错误),Copilot CLI 会在 **** 命令的 /settings 选项卡中列出它,而不是在时间线或 stderr 中列出。 当任何配置范围出现问题时,该选项卡的标签会显示一个计数(例如 Problems (2))。 $schema 可被容忍,且从不报告。

如果 ~/.copilot/settings.json 是符号链接(例如,通过 dotfiles 存储库同步设置),则 /settings 命令的写入操作将沿用该符号链接并更新其目标,而非将符号链接替换为普通文件。

有关设置的完整列表及其与存储库级配置交互的方式,请参阅本文后面的 配置文件设置 。

提示

在终端中运行 copilot help config 以获取快速参考。

在会话外部的 shell 中使用 copilot config,以非交互方式读取或更改设置;它是 /settings 斜杠命令对应的脚本方式。 将.github/copilot/settings.local.json或--local添加到目标.github/copilot/settings.json或--repo,而不是用户设置文件;只能在那里写入可由存储库重写的键。 有关完整命令参考,请参阅 GitHub Copilot CLI 命令参考 。

copilot-instructions.md

适用于所有会话的个人自定义说明,无论你正在使用哪个项目。 此文件的工作方式与存储库级别 copilot-instructions.md 相同,但全局应用。

有关详细信息,请参阅“为GitHub Copilot添加存储库自定义说明”。

instructions/

将此处的其他个人说明文件存储为 *.instructions.md 文件。 这些内容将与 copilot-instructions.md 一起加载,并适用于所有会话。 可以按主题组织说明,例如 ~/.copilot/instructions/code-style.instructions.md。

mcp-config.json

定义用户级别可用的 MCP(模型上下文协议)服务器。 无论你处于哪个项目目录,这些服务器都可以在所有会话中使用。 项目级 MCP 配置(在 .mcp.json 或 .github/mcp.json 中)在当服务器名称冲突时,优先于用户级定义。

有关详细信息,请参阅“为 GitHub Copilot CLI 添加 MCP 服务器”。

lsp-config.json

定义在用户级别提供的语言服务器协议标准(LSP)服务器。 这些服务器向代理提供语言智能(诊断、完成等)。 使用 /lsp 斜杠命令管理此文件,或直接对其进行编辑。

有关详细信息,请参阅“为 GitHub Copilot CLI 添加 LSP 服务器”。

providers.json

将自带密钥(BYOK)提供程序和模型的注册表定义为一个包含 models 和 providers 键的 JSON 对象。 当此文件声明任何提供程序或模型时,它优先于旧 COPILOT_PROVIDER_* 环境变量。

默认情况下,此文件位于 ~/.copilot/providers.json. 使用 COPILOT_PROVIDERS_CONFIG 环境变量替代其位置。

此文件中的模型可与您的Copilot订阅提供的模型一起使用。 手动编辑文件后,重启 Copilot CLI 以加载更改。 有关设置的说明,请参阅“将 LLM 模型添加到 GitHub Copilot CLI”。

警告

此文件中的 API 密钥、Bearer 令牌和标头值以纯文本形式存储。 请勿将文件提交到存储库或共享该文件,共享前请先删除凭据。 值(如 $MY_API_KEY)是字面量字符串,而不是对环境变量的引用。

提供程序配置结构

使用 JSON 对象,而不使用注释或尾随逗号。 该文件包含两个数组。 每个提供程序定义一个连接,每个模型按名称引用其中一个提供程序。 在下表中, [] 表示数组中的条目。 例如,models[].capabilities.supports.vision 是模型条目内的 vision 内的 capabilities 中的 supports 设置。

领域类型必需Default说明
providers对象数组否[]提供程序连接。 请参阅 提供程序设置。
models对象数组否[]通过这些连接可用的模型。 请参阅 模型设置。

缺少文件或文件为空,或者文件中没有提供程序或模型条目时,CLI 将回退为使用 COPILOT_PROVIDER_* 环境变量。 任一数组的 null 值都被视为空数组。 包含无效 JSON 或无效提供程序或模型条目的文件,而是会导致配置错误。

若要在启动 CLI 时使用配置的模型,请向 --model 选项传递 PROVIDER-NAME/MODEL-ID。 PROVIDER-NAME 是提供程序的 name 值,而 MODEL-ID 是模型的 id 值。 例如,运行 copilot --model local/qwen3:8b。 或者,在交互式会话期间,可以输入 /model,然后从选取器中选择模型。

此文件配置在 Copilot CLI 中使用的连接、模型功能和模型说明。 此文件中的 JSON 不是提供程序 API 请求正文。 将设置添加到此文件时,设置不会传递给提供程序。

提供程序设置

在 providers 中的每个条目都接受以下字段。 只有 name 和 baseUrl ,总是必须的。 身份验证要求取决于提供程序。

领域类型必需Default说明
providers[].nameString是的None此连接的唯一名称,例如 "local" 或 "my-anthropic"。 不得包含 /。 模型使用其 provider 字段引用此名称。
providers[].typeString否"openai"连接类型:"openai" OpenAI 兼容的 API、"azure" Azure OpenAI、"anthropic" Anthropic 的 Messages API,或 "local_model" 由llama-server提供服务的本地模型。
providers[].baseUrl包含 URL 或文件路径的字符串是的None提供程序的 API 基础 URL。 对于与 OpenAI 兼容的 API,请包括所需的 API 前缀,例如 https://api.openai.com/v1 或用于 Ollama 的 http://127.0.0.1:11434/v1。 若要直接访问 Anthropic,请使用 https://api.anthropic.com。 对于 Azure,请使用你的资源终结点。 使用 "type": "local_model",这也可以改为指向 .gguf 模型文件的路径。
providers[].wireApiString否"completions"OpenAI 和 Azure 连接的 API 格式:聊天完成使用 "completions",Responses API 使用 "responses"。 已忽略 Anthropic。
providers[].transportString否"http"接受 "http" 或 "websockets"。 WebSocket 需要 "type": "openai" 和 "wireApi": "responses",并且提供程序必须支持该传输。
providers[].apiKeyString依赖提供商未设置提供程序的 API 密钥。 对于未经身份验证的本地服务器,可省略此项。
providers[].bearerTokenString依赖提供商未设置不带 Bearer 前缀的 Bearer 令牌。 当两者都设置时,优先于 apiKey。 这是静态令牌,而不是令牌刷新命令。
providers[].headers对象否未设置其他 HTTP 标头,标头名称为键,字符串作为值。
providers[].headers.<header-name>String否未设置标头的值,例如 "X-Project": "my-project"。 使用 apiKey 或 bearerToken 用于标准提供程序身份验证。
providers[].azure对象否未设置Azure特定的选项。 包含 apiVersion 下面所述的字段。
providers[].azure.apiVersionString否未设置要请求的Azure API 版本。 当设置为终结点支持的非空版本字符串时,CLI 使用版本化部署 API。 省略时,CLI 使用无版本号的 /openai/v1 API。
providers[].localModel对象否未设置CLI 托管 .gguf 模型的服务器选项。 请参阅 本地模型服务器设置。
providers[].modelProviderString否从连接推断仅用于遥测的提供程序标签。 已识别的值是"openai"、"anthropic"、"azure_openai"、"lm_studio"、"ollama"、"foundry_local"和"llama_cpp"。 不更改连接协议或模型行为。
providers[].hasBearerTokenProvider布尔否false指示使用 SDK 的应用程序通过回调提供令牌。 手动配置 CLI 时省略此项。 在此文件中将其设置为 true 不会注册令牌提供程序。

命名提供程序文件不支持 apiKeyCommand。 请勿在 metadata 或 localModel.args 中放入凭据或令牌刷新命令。

本地模型服务器设置

这些设置仅在 "local_model" 为 baseUrl 且 .gguf 是指向 providers[].type 文件的路径时适用。 首次使用模型时,CLI 会启动 llama-server。 可执行文件必须已安装,并可在 PATH 上使用。 使用绝对模型路径以避免依赖于启动 CLI 时所在的目录。

如果 baseUrl 为 HTTP 或 HTTPS URL,CLI 将连接到该现有服务器,并且不使用这些启动设置。 它们也未配置 Ollama 或其他与 OpenAI 兼容的服务器。

内部 providers[].localModel 的所有字段都是可选的。

领域类型Default说明
providers[].localModel.ctxSize非负整数
llama-server 默认以令牌数表示的请求上下文大小,传递为 --ctx-size。 实际分配量可以小于所请求的数量。
providers[].localModel.nGpuLayers非负整数
llama-server 默认要卸载到 GPU 的模型层数,作为 --n-gpu-layers 传递的参数。
providers[].localModel.parallel非负整数1作为 --parallel 传递的服务器槽数。 多个槽位可以在各个请求之间分配可用上下文。
providers[].localModel.args字符串数组[]其他 llama-server 参数。 每个参数都是一个单独的字符串,例如 ["--threads", "8"]。 这些参数基于上述字段生成的参数。
providers[].localModel.persist布尔false请求托管服务器在 CLI 正常退出后继续运行,以便以后的 CLI 进程可以重复使用它。 否则,CLI 在退出时清理服务器。
providers[].localModel.logs包含文件路径或 "inherit" 的字符串输出已丢弃将服务器的标准输出和错误输出追加到指定的文件中。 使用绝对路径。
"inherit" 将输出发送到终端,并可能会干扰 CLI 显示。

CLI 管理服务器的模型路径、主机和端口。 不能将--model、-m、--host或--port传递给args,包括--port=8080等形式。

模型设置

在 models 中的每个条目都接受以下字段。 仅 id 必需且 provider 是必需的。

领域类型必需Default说明
models[].idString是的NoneCLI 中使用的模型标识符。 在提供程序中必须是唯一的。 也用作提供程序的模型名称,除非 wireModel 已设置。
models[].providerString是的None必须与 name 中某个条目的 providers 相匹配。
models[].wireModelString否
id 的值发送到提供程序的模型或部署名称。 当提供程序需要与要在 CLI 中选择的 ID 不同的名称时,请使用此选项。
models[].modelIdString否
id 的值用于查找 CLI 特定于模型的行为和默认值的模型标识。 对于别名或部署名称,请将它设置为基础模型的识别 ID。 这不会更改发送到提供程序的模型名称。
models[].nameString否PROVIDER-NAME/MODEL-ID模型的显示名称。 不更改其选择 ID。
models[].maxPromptTokensInteger否依赖于模型,否则 128000输入令牌预算。 使用与模型和部署匹配的正整数。
models[].maxContextWindowTokensInteger否已知模型限制,否则不设置上下文窗口的总限制,包括输入和输出令牌。 为 CLI 不知道其限制的模型设置此项。
models[].maxOutputTokensInteger否因模型和提供程序而异输出令牌预算。 提供程序和模型的推理要求可以进一步限制输出。
models[].capabilities对象否模型默认值介绍支持的功能和限制。 请参阅 模型功能。
models[].systemMessage对象否标准 CLI 说明添加、替换或自定义此模型的系统说明。 请参阅 模型系统消息。
models[].metadata对象否未设置其他描述性数据,包括发现模型时保存的信息。 请参阅 模型元数据。

三个令牌限制字段接受从 0 到 4294967295 的整数。 使用适合您的部署环境的正值,而不是依赖 0 作为禁用限制的方法。 这些设置告知 CLI 要使用的限制,但不会增加模型的实际容量。

模型功能

该 models[].capabilities 对象描述模型。 将某项功能设置为 true 不会将该功能添加到不支持它的模型中。

领域类型说明
models[].capabilities.familyString描述性模型系列标识符。 使用 modelId(而不是此字段)选择 CLI 的特定于模型的行为。
models[].capabilities.supports对象支持的功能。 请参阅 支持的模型功能。
models[].capabilities.limits对象令牌和映像限制。 请参阅 模型功能限制。

所有功能字段都是可选的。 对象与模型的默认值合并,数组替换相应的默认数组。

支持的模型功能

以下字段应位于 models[].capabilities.supports 内部。

领域类型说明
models[].capabilities.supports.vision布尔模型是否接受图像。 当没有其他功能信息可用时,默认为 false。
models[].capabilities.supports.toolCalls布尔模型是否支持工具调用。 如果两者都存在,则也接受拼写 tool_calls,并以拼写 tool_calls 为准。 这描述了支持,而不是运行工具的权限。
models[].capabilities.supports.streaming布尔模型是否支持流式响应。 这是功能信息,不是打开或关闭响应流式处理的设置。
models[].capabilities.supports.adaptive_thinking字符串或布尔值该模型支持Anthropic自适应思维。 首选下面所述的字符串值之一。 为了兼容,true 表示 "optional",false 表示 "unsupported"。
models[].capabilities.supports.reasoning_effort字符串数组模型支持的推理强度级别。 这会公布可用级别,而不是用于请求的级别。 CLI 还实施特定于模型的限制。
models[].capabilities.supports.thinking布尔模型发现可以保存的描述性支持信息。 本身不会配置思考功能或启用推理强度控制。
models[].capabilities.supports.reasoningEffort布尔值或字符串数组兼容性字段。 布尔值无法启用“推理工作量”控制项,并且数组不会在 CLI 功能中被一致地使用。 使用 reasoning_effort 获取受支持的级别列表。

这些 adaptive_thinking 值具有以下含义。

ValueMeaning
"unsupported"模型不支持自适应思维。 这并不排除其他形式的推理。
"optional"该模型支持自适应思维,但并非必须启用。
"required"启用思维后,模型需要自适应思维,而不是手动思维预算。 Thinking 仍可禁用。
"adaptive_only"模型需要自适应思维,不允许禁用思维。

对于reasoning_effort,CLI 识别"none"、"minimal"、"low"、"medium"、"high"、"xhigh"和"max"。 仅列出模型支持的级别,例如 ["low", "medium", "high"]。 省略列表或空列表会让 CLI 使用其特定于模型的默认值。 在可用时,使用 --reasoning-effort 或模型选取器选择级别。

模型功能限制

以下字段应位于 models[].capabilities.limits 内。 所有选项都是可选的。

领域类型说明
models[].capabilities.limits.max_prompt_tokensInteger输入令牌预算。 对应于 。
models[].capabilities.limits.max_context_window_tokensInteger上下文窗口总上限。 对应到 。
models[].capabilities.limits.max_output_tokensInteger输出令牌预算。 对应到 。
models[].capabilities.limits.vision对象图像限制,包含以下字段:
models[].capabilities.limits.vision.supported_media_types字符串数组接受的图像 MIME 类型,例如 "image/jpeg", "image/png"和 "image/webp"。 这三种类型是默认类型。
models[].capabilities.limits.vision.max_prompt_imagesInteger每个提示的最大图像数。 默认值为 1。
models[].capabilities.limits.vision.max_prompt_image_sizeInteger每个图像的最大大小(以字节为单位)。 默认值为 3145728 (3 MiB)。

手动设置令牌预算时,首选使用模型的maxPromptTokens、maxContextWindowTokens和maxOutputTokens字段。 Discovery 可以在这两个位置保存限制设置。 保持重复值一致,因为不同的 CLI 操作读取两种表示形式。 对于 CLI 管理的本地服务器,经评估的上下文限制可以优先于配置的值。

对令牌计数和图像大小使用非负整数,为图像计数使用正整数。 令牌计数和图像计数必须在 0 到 4294967295 的范围内。 图像大小以字节为单位,而不是令牌进行度量。

模型系统消息

models[].systemMessage 控制 CLI 为此模型生成标准提示时所使用的系统指令,也包括供通用子代理使用的系统指令。 它优先于这些路径上的会话范围的系统消息配置。 它不会替换所选自定义代理或专用子代理的说明。

仅当需要其他说明时首选 "mode": "append" 。 替换或删除内置说明可以更改 CLI 的工具使用和其他预期行为。 省略 systemMessage 以保留标准指令,而不是将其设置为 null。

领域类型必需说明
models[].systemMessage.modeString否
"append" (默认值), "replace"或 "customize"。 请参阅下面的模式表。
models[].systemMessage.contentString处于 replace 模式要追加或用作替换说明的文本。 在 customize 模式下,此内容在分段更改之后追加。
models[].systemMessage.sections对象否节更改,仅在 customize 模式下可用。 请参阅 系统消息部分。
models[].systemMessage.contentBlocks对象数组否替换指令拆分为块,仅在 replace 模式下可用。 请参阅 系统消息内容块。

仅接受某一模式下列出的字段。 例如,添加 sections 而不设置 "mode": "customize" 会导致配置错误。

Mode可接受的字段Effect
"append"
mode、content保留标准提示并追加 content。 省略 mode 会选择此模式。
"replace"
mode、content、contentBlocks替换标准指令。
content 必须以字符串的形式存在,即使提供 contentBlocks。 CLI 仍可以添加适用的环境和代理上下文。
"customize"
mode、sections、content更改标准提示中已命名的节,并可选择追加 content。 不更改的分区会保留其默认值。

在替换内容中, {{copilot:memories}} 插入 CLI 的内存指令和上下文(如果可用)。

系统消息部分

在 customize 模式下,models[].systemMessage.sections 将节名称映射到对象。 每个对象指定一个action,并在需要时指定一个content。 例如, models[].systemMessage.sections.tone 更改音调部分。

领域类型必需说明
models[].systemMessage.sections.<section-name>对象否对下面列出的部分或组之一的更改。
models[].systemMessage.sections.<section-name>.actionString是,对于每个条目
"replace"、"remove"、"append"、"prepend"或 "preserve"。
models[].systemMessage.sections.<section-name>.contentString否由 replace、append 或 prepend 使用的文本 省略的内容被视为空。 对于remove或preserve不需要。

可用操作包括:

ActionEffect
"replace"将分区或组替换为 content。
"remove"删除分区或组。 组删除会保留在sections中有各自条目的分区。
"append"在节或组后面添加 content 。 在 content 中包含任何必需的空格或换行符。
"prepend"在节或组之前添加 content 。 在 content 中包含任何必需的空格或换行符。
"preserve"使该部分保持不变,并保护它免受通过组设置进行的删除。 不保护它免受组替换。

在 providers.json 中,不支持执行 transform 操作,因为它需要应用程序回调,而不是保存的 JSON 配置。

在 sections 中使用以下部分或组名称作为键。

Name种类涵盖的内容
preamble部分助手的介绍性身份说明。
tone部分音调和响应样式。
tool_efficiency部分有关高效工具使用的指导。
environment_context部分有关工作环境的信息。
code_change_rules部分进行代码更改的指南
guidelines部分其他代理行为准则。
safety部分安全指南和环境限制。
custom_instructions部分已加载自定义说明。
runtime_instructions部分为该会话整理的附加说明。
last_instructions部分放在提示末尾的说明。
identityGroup身份、交互、语气、委派、工具效率、版本、模型和任务说明。 不包括 environment_context。
tool_instructionsGroup工具简介和工具使用说明。

在组更改之前,将应用单个节更改。 组替换将替换其所有成员部分,包括已单独自定义的分区。

系统消息内容块

在 replace 模式下, models[].systemMessage.contentBlocks 提供替换指令,而不是纯 content 字符串。 保留 content,因为配置格式要求保留它。 所有块都必须有一个 content 字符串。

领域类型必需Default说明
models[].systemMessage.contentBlocks[].contentString是的None此块的文本按数组顺序排列。
models[].systemMessage.contentBlocks[].isStatic布尔否未标记为静态标记可以独立于变化的提示内容进行缓存的内容。
models[].systemMessage.contentBlocks[].cacheBreakpoint布尔否无显式断点在此块之后为支持显式提示缓存的提供程序请求一个缓存边界。 不保证提供程序缓存机制。

模型元数据

models[].metadata 是一个对象,其值可以是任何有效的 JSON 值。 它是描述性数据,而不是提供 API 请求参数或凭据的方法。 无需手动添加元数据。

模型发现可以保存以下字符串字段。 保留现有发现结果不变。

领域类型说明
models[].metadata.adapterIdString识别发现集成,例如 "ollama"。
models[].metadata.providerKindString发现的提供程序的类型,例如 "ollama"。
models[].metadata.providerInstanceIdString标识提供程序实例,例如 "ollama:http://127.0.0.1:11434"。
models[].metadata.providerDigestString提供程序提供的模型摘要(如果可用)。

提供程序配置示例

此示例连接到现有的 Ollama 服务器,并演示如何嵌套模型功能和系统指令。 假定已安装 qwen3:8b。 令牌限制是示例预算,并不表示模型的最大容量。 调整它们以匹配服务器上配置的上下文。

JSON
{
  "providers": [
    {
      "name": "local",
      "type": "openai",
      "baseUrl": "http://127.0.0.1:11434/v1",
      "modelProvider": "ollama"
    }
  ],
  "models": [
    {
      "id": "qwen3:8b",
      "provider": "local",
      "name": "Qwen 3 8B",
      "maxPromptTokens": 6144,
      "maxContextWindowTokens": 8192,
      "maxOutputTokens": 2048,
      "capabilities": {
        "supports": {
          "vision": false,
          "toolCalls": true
        }
      },
      "systemMessage": {
        "mode": "customize",
        "sections": {
          "tone": {
            "action": "append",
            "content": "\nUse concise explanations."
          }
        }
      }
    }
  ]
}

重新启动 CLI 后,使用 copilot --model local/qwen3:8b 或 /model 选择器选择此模型。 将更多对象添加到任一数组,以配置其他提供程序和模型。

agents/

将个人自定义代理定义存储在此处作为 .agent.md 文件。 放置在此目录中的代理在所有会话中都可用。 如果个人代理和项目级代理具有相同的 ID(例如,如果两个顶级文件都命名 reviewer.agent.md),则个人代理优先。 可选的 name frontmatter 字段不控制重复数据删除,因此具有相同 name 但不同的 ID 的代理会同时加载重复数据。

有关详细信息,请参阅“为 GitHub Copilot CLI 创建和使用自定义智能体”。

skills/

在此处存储个人自定义技能定义。 每个技能都位于一个包含 SKILL.md 文件的子目录中,例如 ~/.copilot/skills/my-skill/SKILL.md。 所有会话中均可使用个人技能。 项目级别的技能优先于个人技能(如果两者同名)。

有关详细信息,请参阅“为 GitHub Copilot CLI 添加代理技能”。

hooks/

在此处存储用户级挂钩脚本。 这些挂钩适用于所有会话。 还可以使用 ~/.copilot/settings.json 键在用户配置文件 (hooks) 中以内联方式定义挂钩。 存储库级挂钩(in .github/hooks/)与用户级挂钩一起加载。

有关详细信息,请参阅“与 GitHub Copilot CLI 一起使用挂钩”。

extensions/

在此处存储用户级扩展文件。 此目录中的扩展可在会话之间使用。

可以手动在此目录中创建文件,或搭建扩展基架,然后编辑生成的文件。

自动管理文件

以下项由 CLI 管理。 通常不应手动编辑它们。

config.json

存储 CLI 自动管理的内部应用程序状态,包括身份验证数据、已安装的插件元数据和其他运行时信息。 通常不需要编辑此文件。

注意

早期版本的Copilot CLI将用户设置和应用程序状态存储在config.json中。 用户可编辑的设置现在位于 settings.json。 留在 config.json 中的设置将被忽略。 此文件仅保留内部状态,例如已安装的插件和受信任的文件夹。

permissions-config.json

存储已保存的工具和目录权限决策,按项目位置进行组织。 批准工具或授予对当前位置目录的访问权限时,CLI 会在此处记录决策,这样就不会在同一存储库或目录中再次提示你。

注意

如果要重置项目的权限,可以从此文件中删除相关条目。 但是,在会话运行时编辑文件可能会导致意外行为。 CLI 会自动删除磁盘上不再存在其位置路径的条目。

文件位置

Copilot CLI 从配置目录中定位该文件。

优先级Source使用的文件
1--config-dir=DIRECTORYDIRECTORY/permissions-config.json
2COPILOT_HOME$COPILOT_HOME/permissions-config.json
3Default~/.copilot/permissions-config.json

CLI 仅按此顺序使用第一个适用的配置目录。 它也不会从优先级较低的位置加载 permissions-config.json 。

此选项 --config-dir 是旧选项。 需要更改配置目录时首选 COPILOT_HOME 。

在Windows上,默认文件通常是:

C:\Users\YOUR-USER\.copilot\permissions-config.json

较旧的构建版本使用了一个名为 permissions-config 的无扩展名文件。 如果 permissions-config.json 不存在,但无扩展文件仍然存在,CLI 仍遵循旧文件。 新编辑时请使用 permissions-config.json。

当未设置 ~/.copilot 时,程序会在启动时将先前基于 XDG 的配置位置迁移到 COPILOT_HOME。

位置键

顶层 locations 对象以绝对路径为键。

  • 对于 Git 存储库,请使用用于界定权限范围的 Git 根目录。
  • 链接的工作树解析为主存储库根,因此它们与主工作树共享权限。
  • 子模块使用自己的工作目录。
  • 对于不在 Git 存储库中的目录,请使用规范化当前工作目录。

密钥必须与运行的位置 Copilot CLI 匹配。 如果密钥不匹配,则保存的审批将不适用。

当会话启动和活动工作目录更改时,CLI 会加载匹配位置的批准。

Schema

该文件必须包含 JSON 对象。

领域类型必需Default允许的值说明
locations对象否{}绝对路径键保存批准的位置键映射。
locations.<key>对象否{}任意绝对位置键针对一个存储库或目录的已保存批准。
locations.<key>.tool_approvalsArray否[]审批对象已批准用于此位置的工具。
locations.<key>.allowed_directories字符串数组否[]绝对目录路径路径门可以访问此位置的额外目录。 CLI 应用配置时,必须存在每个目录。
locations.<key>.tool_approvals[].kindString是的None
commands、read、write、mcp、mcp-sampling、memory、custom-tool、extension-management、extension-permission-access选择审批类型。
commandIdentifiers字符串数组是,对于 commandsNone命令标识符待批准的 Shell 命令标识符。
serverNameString是,对于 mcp 和 mcp-samplingNoneMCP 服务器名称待批准的 MCP 服务器。
toolName字符串或 null是,对于 mcpNoneMCP 工具名称,或 null要批准的 MCP 工具。 使用 null 批准服务器上的所有工具。
toolNameString是,对于 custom-toolNone自定义工具名称按确切名称批准的自定义工具。
operationString否,对于 extension-management省略扩展操作名称待批准的扩展管理操作。 省略此字段以批准所有扩展管理操作。
extensionNameString是,对于 extension-permission-accessNone扩展名称已批准访问权限门控功能的扩展。

permissions-config.json 不支持拒绝规则、“ask”规则、默认模式、URL 规则、工具筛选或存储库本地共享策略。 对于这些行为,请使用命令行选项,例如--deny-tool、--available-tools、--excluded-tools和--allow-url``--deny-url。 保存的 URL 规则存储在其中 settings.json,而不是存储在其中 permissions-config.json。

未知字段不是架构的一部分。 CLI 可能会忽略它们,以后的写入可能会删除它们。

审批类型

每个项 tool_approvals 必须是下列对象之一。

kind必填字段可选字段Meaning
commandscommandIdentifiersNone批准匹配的 shell 命令标识符。
readNoneNone批准读取工具请求。 交互式 CLI 会话已自动批准读取,因此这通常是不必要的。
writeNoneNone批准创建和修改文件的工具请求。 路径提示仍可应用于允许的目录之外的路径。
mcp
serverName、toolNameNone批准一个 MCP 工具,或者在 toolName 为 null 时批准服务器上的所有工具。
mcp-samplingserverNameNone批准针对单个服务器的 MCP 采样请求。
memoryNoneNone批准内存写入和投票请求。
custom-tooltoolNameNone按确切名称批准自定义工具。
extension-managementNoneoperation批准扩展管理。 如果 operation 省略,则所有扩展管理操作都匹配。
extension-permission-accessextensionNameNone批准扩展对权限门控功能的访问。

对于 MCP 审批, serverName 必须与配置的 MCP 服务器名称完全匹配。 使用 MCP 配置中的原始服务器名称,而不是经过规范化处理的工具名称前缀。

Shell命令匹配

permissions-config.json 不支持正则表达式或常规 glob 模式。 字符串值按字面意义进行匹配,但在 shell 的 :* 值中,末尾的 commandIdentifiers 会匹配 :* 前的文本,既可以仅匹配该文本本身,也可以后跟一个空格及更多内容。 一个普通 * 没有特殊的含义,所以 git* 不匹配 git status。

图案Matches不匹配
git statusgit statusgit status --short
git:*
git、git status、git pushgitea
gh pr:*
gh pr、gh pr view、gh pr creategh repo view

目录匹配

allowed_directories 条目允许 Copilot CLI 在没有单独的路径提示的情况下访问这些目录中的路径。 他们并不批准该工具本身的操作。 例如,在允许的目录中编辑文件仍需要 write 审批。

每个 allowed_directories 条目必须是绝对的、非空的可访问目录。 CLI 在比较路径之前解析符号链接,阻止 UNC 网络路径,除非它们是扩展长度的本地路径,在 Windows 上不区分大小写地比较路径,在其他平台上区分大小写。 如果无法应用条目,CLI 会记录警告并跳过该条目。

Examples

允许所有 Git 子命令并访问额外的本地目录:

JSON
{
  "locations": {
    "C:\\src\\my-repo": {
      "tool_approvals": [
        {
          "kind": "commands",
          "commandIdentifiers": ["git:*"]
        }
      ],
      "allowed_directories": ["C:\\src\\shared-docs"]
    }
  }
}

允许在文件写入前仍询问所选命令:

JSON
{
  "locations": {
    "/Users/YOUR-USER/src/my-repo": {
      "tool_approvals": [
        {
          "kind": "commands",
          "commandIdentifiers": [
            "git status",
            "git diff",
            "git log",
            "npm test",
            "npm run build"
          ]
        }
      ]
    }
  }
}

批准文件写入和存储库的一个 MCP 服务器:

JSON
{
  "locations": {
    "/home/YOUR-USER/src/my-repo": {
      "tool_approvals": [
        {
          "kind": "write"
        },
        {
          "kind": "mcp",
          "serverName": "github-mcp-server",
          "toolName": null
        }
      ]
    }
  }
}

批准一个 MCP 工具、内存写入和扩展权限访问:

JSON
{
  "locations": {
    "C:\\src\\my-repo": {
      "tool_approvals": [
        {
          "kind": "mcp",
          "serverName": "github-mcp-server",
          "toolName": "search_code"
        },
        {
          "kind": "memory"
        },
        {
          "kind": "extension-permission-access",
          "extensionName": "my-extension"
        }
      ]
    }
  }
}

session-state/

包含按子目录中的会话 ID 组织的会话历史记录数据。 每个会话目录存储事件日志(events.jsonl)和工作区项目(计划、检查点、跟踪的文件)。 此数据启用会话恢复(--resume 或 --continue)。

从此目录中删除文件只会删除本地副本。 如果已将会话同步到 GitHub 账户,则同步的数据将单独存储,不受删除本地文件的影响。 您可以从 GitHub.com 删除或隐藏已同步的会话。 有关详细信息,请参阅“关于 GitHub Copilot 会话数据”。

command-history-state/

包含用于反向搜索(Ctrl+R)和交互式界面中的历史记录导航的命令历史记录数据。 此目录是自动管理的,不应对其进行编辑。

session-store.db

CLI 使用的 SQLite 数据库,用于存储跨会话数据,例如检查点索引和搜索。 此文件是自动管理的,不应对其进行编辑。

如果删除此文件,可以使用命令重新生成该文件 /chronicle reindex 。 重新编入索引还会将您的会话数据同步到您的账户。

logs/

包含 CLI 会话的日志文件。 每个会话创建一个名为process-{timestamp}-{pid}.log的文件。 这些文件可用于调试问题。

CLI 还可能在 logs/extensions/ 下创建扩展专用日志。

这与 ~/.copilot/extensions/存储用户创作的扩展代码不同。

提示

若要查找当前会话的日志文件,请在交互式会话中输入 /session 。 输出包括日志文件的完整路径,以及其他会话详细信息,例如会话 ID、持续时间和工作目录。

installed-plugins/

包含已安装的插件的文件。 从市场安装的插件存储在 installed-plugins/{marketplace-name}/{plugin-name}/以下位置。 直接安装的插件存储在 installed-plugins/_direct/. 使用 copilot plugin 命令管理插件,而不是直接编辑此目录。

有关详细信息,请参阅“GitHub Copilot CLI 插件参考”。

plugin-data/

包含已安装插件的持久性数据,按市场和插件名称进行组织。 此数据由插件本身管理,不应手动编辑。

ide/

包含 IDE 集成相关的锁定文件和状态(例如,当Copilot CLI与Visual Studio Code连接时)。 此目录会自动管理。

mcp-oauth-config/

包含 MCP OAuth 令牌、注册信息以及在密钥链存储不可用时的 PKCE 备用文件。 此目录会自动管理。

mcp-secrets/

包含备用文件存储以及在密钥链存储不可用时 MCP 密钥占位符的索引。 此目录会自动管理。

更改配置目录的位置

若要替代默认 ~/.copilot 位置,请将 COPILOT_HOME 环境变量设置为要使用的目录的路径。

Bash
export COPILOT_HOME=/path/to/my/copilot-config

要注意的事项

  • COPILOT_HOME 替换整个 ~/.copilot 路径。 设置的值应该是要用于配置文件和子目录的目录的完整路径。

  • 更改目录意味着不会在新位置找到现有的配置、会话历史记录、已安装的插件和已保存的权限。 如果您想要保留~/.copilot的内容,请将其复制或移动到新位置。

  • 缓存目录(用于市场缓存、自动更新包和其他临时数据)遵循平台约定,不受影响COPILOT_HOME。 它位于:

    • macOS:****
    • Linux: $XDG_CACHE_HOME/copilot 或 ~/.cache/copilot
    • Windows:%LOCALAPPDATA%/copilot

    若要单独替代缓存目录,请设置 COPILOT_CACHE_HOME。

可以安全地删除的内容

物品删除是否安全?Effect
agents/、skills/、hooks/不推荐你将丢失个人自定义项。 首先备份。
config.json谨慎重置应用程序状态,包括身份验证。 需要重新进行身份验证,CLI 将在下次启动时重新检测内部状态。
copilot-instructions.md、instructions/不推荐你将丢失个人自定义说明。 首先备份。
extensions/不推荐您将丢失个人扩展。 首先备份。
installed-plugins/不推荐请改用 copilot plugin uninstall ,确保插件元数据 config.json 保持准确。
logs/是的日志文件在每次会话中会被重新创建。 删除它们不会影响功能。
lsp-config.json不推荐你将失去用户级 LSP 服务器定义。 首先备份。
mcp-config.json不推荐你将失去用户级 MCP 服务器定义。 首先备份。
mcp-oauth-config/谨慎清除本地 MCP OAuth 回退状态。 可能需要重新对 MCP 服务器进行身份验证。
mcp-secrets/谨慎清除本地 MCP 机密的后备状态和映射。 机密支持的 MCP 服务器可能需要重新配置。
permissions-config.json谨慎重置所有已保存的权限。 CLI 将再次提示你进行工具和目录审批。
plugin-data/是的插件持久数据会根据需要重新创建。
providers.json不推荐你将丢失 BYOK 提供程序和模型配置。 首先备份。
session-state/谨慎删除会话将清除历史记录。 你将无法再恢复过去的会话。
command-history-state/谨慎删除会清除命令历史记录。 你将无法再使用 Ctrl+R 搜索以前的命令。
session-store.db谨慎删除操作会移除跨会话数据。 该文件会自动重新创建。
settings.json谨慎将所有用户首选项重置为默认值。 需要重新配置设置。

配置文件设置

设置按此顺序应用(稍后将替代前面):

  1. 内置默认值
  2. 移动设备管理(MDM)托管设置
  3. 用户设置 (~/.copilot/settings.json)
  4. 存储库设置 (.github/copilot/settings.json)
  5. 本地设置 (.github/copilot/settings.local.json)
  6. 环境变量
  7. 命令行标志

MDM 托管设置会在启动时加载,并作为策略基线与用户设置合并。 对于大多数密钥,用户设置可以替代该基线。 对于 permissions.disableBypassPermissionsMode,MDM 值 "disable" 始终获胜。 受管理的 sandbox 设置是另一个例外。 每个托管的 sandbox 值都不可覆盖,而是设置一个无法放宽的下限。 如果自己的设置更宽松,则托管值将获胜。 该 sandbox.failIfUnavailable 设置只能由管理员设置。 有关详细信息,请参阅 MDM 托管设置。

ScopeLocationPurpose
用户~/.copilot/settings.json所有存储库的全局默认值。 使用 COPILOT_HOME 环境变量指定备用路径。
资料库.github/copilot/settings.json共享存储库配置(提交到存储库)。
Local.github/copilot/settings.local.json个人覆盖(将此添加到 .gitignore)。

CLI 还会读取 .claude/settings.json 和 .claude/settings.local.json,以获取存储库设置中供各工具共享的那部分子集(例如 companyAnnouncements、disableAllHooks、enabledPlugins、extraKnownMarketplaces 和 hooks)。

存储库默认值是可选的:在存储库本地设置中将 false 条目设为 enabledPlugins,以覆盖存储库默认值。 托管的必需或阻止的插件条目始终优先。 请参阅“查找并安装插件适用于GitHub Copilot CLI”。

用户设置 (~/.copilot/settings.json)

这些设置适用于所有会话和存储库。 可以使用 /settings 斜杠命令运行交互式对话,或使用特定的斜杠命令来更新单个值,或直接编辑此文件。

密钥类型Default说明
allowedUrlsstring[][]无需提示即允许的 URL 或域。 支持确切的 URL、域模式和通配符子域(例如)。 "*.github.com"
askUserbooleantrue允许代理提出澄清问题。 设置为 false 可实现完全自主运作。 还可以使用 --no-ask-user.
autoTier
"efficiency"
|
"balance"
|
"intelligence"
取消设置当所选模型为 auto 时,新对话的默认自动路由层级。 请参阅/model斜杠命令。
"fast" 不再可选;如果已设置,则会回退到 "balance",并发出警告。
autoUpdatebooleantrue在每个会话开始时自动下载 CLI 更新和更新第一方插件。
autoUpdatesChannel
"stable"
|
"prerelease"
"stable"更新通道。 将"prerelease"设置为接收预发布更新。
banner
"always"
|
"once"
|
"never"
"once"动画横幅显示频率。
bashEnvbooleanfalse启用 BASH_ENV 对 bash shell 的支持。 可以用 --bash-env 或 --no-bash-env 设置。
beepbooleantrue需要注意时播放一声哔哔音。
beepOnSchedulebooleantrue在预定的 /every 或 /after 运行完成后发出蜂鸣提示音。
colorMode
"default"
|
"github"
|
"dim"
|
"high-contrast"
|
"colorblind"
"github"
theme 的已弃用别名。 首选 theme。
commandHistoryMaxSizenumber50为输入历史记录和反向搜索保留的最新命令的最大数目。 必须是介于 1 和 1000 之间的整数。
compactPastebooleantrue将大块粘贴内容(超过 10 行)折叠成紧凑的标记。
companyAnnouncementsstring[][]启动时随机显示的自定义消息。 每次启动 CLI 时,都会随机选择一条消息。 适用于团队公告或提醒。
connectorsbooleantrue在可用时启用 Copilot 连接器。 设置为 false,禁用。
continueOnAutoModebooleanfalse在速率受限时自动切换到自动模式。 如果为 true,那么符合条件的速率限制错误会触发系统自动切换到自动模式并进行重试。 不适用于全局速率限制或 BYOK 提供程序。
copyOnSelectboolean
true (macOS)、 false (其他)自动将鼠标选择的文本复制到系统剪贴板。
customAgents.defaultLocalOnlybooleanfalse仅使用本地自定义代理(无远程组织或企业代理)。
defaultMode
"interactive"
|
"plan"
|
"autopilot"
"interactive"新交互式会话开始时使用的代理模式。
--mode、--autopilot 和 --plan 选项优先。 恢复的会话保持其自己的模式,并且该设置对-p``--server/、--prompt和--acp运行无效。
defaultPermissionMode
"manual"
|
"assisted"
|
"allow-all"
多种多样新交互式会话的首选权限模式。 受管理的 permissions.defaultMode 设置优先于此首选项。 如果两个默认设置都未设置,则会话可以在手动或辅助模式下启动。 设置为 "manual" 以提示处理尚未允许的请求,设置为 "assisted" 以对符合条件的请求使用模型评审,或设置为 "allow-all" 以授予等效于 --allow-all 的广泛权限。 拒绝规则和企业限制仍适用。 请参阅“允许安全命令在未经手动批准的情况下运行”。 恢复的会话保持其自己的模式。 此设置不适用于非交互式运行,--allow-all 或 --yolo 优先。 辅助启动的默认设置不适用于远程会话。 如果已配置的模式不可用或被企业策略阻止,CLI 将从手动批准开始,并告知你原因。 将 "assisted" 或 "allow-all" 与 defaultMode: "autopilot" 配合使用,以便在可应用已配置的权限模式时跳过 autopilot 权限确认。
deniedUrlsstring[][]始终被拒绝的 URL 或域。 拒绝规则优先于允许规则。
disableAllHooksbooleanfalse禁用所有钩子(包括存储库级别和用户级别)。
disabledMcpServersstring[][]要禁用的 MCP 服务器名称。 列出的服务器已配置,但未启动。
disabledSkillsstring[][]要禁用的技能名称。 列出的技能已被发现,但未能加载。
dynamicRetrieval{ skills?: boolean }取消设置按类别控制基于嵌入的动态指令检索。 将 skills 设置为 false 以禁用技能的检索。
editorMode
"normal"
|
"vim"
"normal"输入作曲家编辑模式。 通过切换 /vim 斜杠命令进行设置。 请参阅“GitHub Copilot CLI 命令参考”。
effortLevelstring"medium"扩展思维的推理工作水平: "low"、 "medium"、 "high"或 "xhigh"。 更高的级别使用更多的计算。
enabledMcpServersstring[][]启用默认禁用的内置 MCP 服务器。
enabledPluginsRecord<string, boolean>{}声明性插件自动安装。 密钥是插件规格; true 值为 (enabled) 或 false (disabled)。
experimentalbooleanfalse启用实验性功能。 还可以使用 --experimental 命令行选项或 /experimental 斜杠命令启用。
extraKnownMarketplacesRecord<string, {...}>{}其他插件市场。 每个键都是一个市场名称;其值指定了必需的 source("directory"、"git" 或 "github")。 在条目上设置 autoUpdate: true,可将该应用市场中已安装的插件设为在会话启动时自动更新,与第一方插件相同。 此选项仅适用于交互式和 -p 会话 — SDK 和服务器会话不会自动更新。 当在您的用户设置或受管(MDM/服务器)设置中设置此选项时,该选项将被生效。 若出现同名冲突,优先级顺序为:内置的第一方市场项、受管条目(该条目将替换整个同名用户条目,因此未包含 "autoUpdate": true 的受管条目会移除用户的选项)、最后是用户自己的条目。
footerobject—控制状态行中显示的项。 子键包括showModelEffort、showDirectory、showBranch、showContextWindow、showQuota、showAgent、showAiUsed、showCodeChanges、showUsername、showSandbox、showYolo和showCustom(均为boolean)。 由 /statusline 斜杠命令管理。
hooksobject—内联用户级挂钩定义,按事件名称进行键控。 使用与 .github/hooks/*.json 文件相同的架构。 请参阅“与 GitHub Copilot CLI 一起使用挂钩”。
ide.autoConnectbooleantrue启动时自动连接到 IDE 工作区。 当 false 时,你仍然可以使用 /ide 命令手动连接。
ide.openDiffOnEditbooleantrue在连接的 IDE 中打开文件编辑差异以供批准。 如果为 false,文件编辑审批仅显示于终端中。
ignoredSkillsLocationsstring[][]技能目录(及其所有子目录)将被排除在发现过程之外,无论它们原本会在何处被发现。 支持相对于 ~ 的路径。 请参阅“GitHub Copilot CLI 命令参考”。
includeCoAuthoredBybooleantrue将 Co-authored-by 尾部添加到代理进行的 git 提交。
inlineImagesbooleantrue使用 Kitty 图形协议内联呈现图像。 需要受支持的终端(Ghostty、kitty 或 WezTerm)。 禁用后,图像附件将显示文本占位符。
keepAlive
"on"
|
"off"
|
"busy"
"off"启动 CLI 时应用保持活动模式。
"on" 始终防止系统进入休眠状态,"busy" 仅在智能体运行时防止休眠,而 "off" 禁用保持活动状态。 也可以使用 /keep-alive 斜杠命令进行配置。
logLevel
"none"
|
"error"
|
"warning"
|
"info"
|
"debug"
|
"all"
|
"default"
"default"日志记录详细程度。
mergeStrategy
"rebase"
|
"merge"
—
/pr fix conflicts 的冲突解决策略。 设置为 "rebase" 时,通过变基到基分支来解决冲突。 当设置为 "merge"时,将基分支合并到功能分支中。 如果未配置,将显示选取器对话框。
modelstring变化要使用的 AI 模型。 设置为 "auto" 允许 Copilot 自动选取最佳可用模型。 由 /model 斜杠命令管理。
mousebooleantrue启用鼠标支持。 可以用 --mouse 或 --no-mouse 设置。
permissions.disableBypassPermissionsModestring—设置为 "disable" 以阻止所有允许所有的选项(--allow-all-tools、--allow-all-paths、--allow-all-urls、--allow-all、--yolo)。 此设置不会阻止 assisted permissions,它们是单独控制的。 其他值被视为 "disable" 的别名,警告将写入日志。 请参阅“GitHub Copilot CLI 命令参考”。
pinnedPromptsbooleantrue滚动时间线时,将当前区段的用户请求固定在顶部栏下方,以便始终清楚当前可见的输出对应的是哪个请求。 仅限 CLI 界面 — 对发送到模型的提示词无效。
powershellFlagsstring[]["-NoProfile", "-NoLogo"]启动时传递给 PowerShell 的标志。 在Windows上,CLI 首选 PowerShell 7+ (pwsh),并在 powershell.exe 不可用时回退到 Windows PowerShell(pwsh)。 仅适用于Windows。
proxyKerberosServicePrincipalstring取消设置用于 Kerberos/Negotiate 代理身份验证的服务主体名称 (SPN),会覆盖派生的 HTTP/<proxy-host>。
proxyUrlstring取消设置HTTP(S) 请求的代理 URL(例如 http://proxy.corp.example:3128)。 可由 HTTP_PROXY 或 HTTPS_PROXY 环境变量覆盖(不区分大小写)。
remoteSessionsbooleanfalse当远程控制可用时,默认为交互式会话启用远程控制。 使用 /remote on 或 /remote off 更改当前会话的远程控制。 这与 remoteExport 会话同步的设置不同。
renderHexColorsbooleantrue将以内联代码形式编写的六位十六进制颜色代码(例如 `#FF0000`)显示为颜色色块。
renderMarkdownbooleantrue在终端输出中呈现 Markdown。
remoteExportbooleantrue会话同步可用时,将会话历史记录同步到帐户。 将其设置为 false,以默认选择退出。 通过 remoteSessions: true 启用远程控制还可以启用导出,而不考虑此设置。 同步历史记录本身不会启用远程控制。 使用 --sync-session=on 或 --sync-session=off 覆盖某次运行的历史记录同步设置。
respectGitignorebooleantrue从 @ 文件提及选取器中排除 gitignored 文件。 当 false,选取器包含通常被 .gitignore排除的文件。
sandbox.allowBypassbooleantrue允许沙盒中的命令为特定操作请求绕过限制(会显示权限提示),以便 grep 和 glob 之类的工具在原本会被沙盒阻止时仍能继续工作。 如果生效的策略允许绕过,该提示还允许你在当前会话的剩余时间内禁用沙盒机制。 将其设置为 false 以选择退出。
sandbox.enabledbooleanfalse将 shell 命令、MCP/LSP 服务器和内置文件/Web 工具限制为具有有限文件系统和网络访问权限的沙盒环境。 可在 /sandbox 对话框中启用它,或使用 /sandbox enable。
sandbox.auth.gitbooleantrue将 Git 凭据注入沙盒,以便其内部运行的命令可以使用 Git 进行身份验证。
false设置为选择退出。已从sandbox.gitAuth中重命名;旧密钥没有迁移,无论在何处显示,都将被忽略。
sandbox.auth.ghbooleantrue将 GitHub CLI(gh)凭据注入沙盒中,以便在其中运行的命令能够与 GitHub CLI 进行身份验证。
false设置为选择退出。已从sandbox.ghAuth中重命名;旧密钥没有迁移,无论在何处显示,都将被忽略。
sandbox.credentialsobject取消设置屏蔽沙盒进程中选定的环境变量。 包含一个以 envVars 变量名为键的对象,其中每个条目都有一个非空的 injectHosts 数组。 进程接收占位符,本地代理仅在 HTTPS 请求标头中向这些主机提供实际值。 存储变量名称和主机规则,而不是机密值。 需要启用沙盒。 从 /sandbox 对话框的 “凭据” 选项卡下的 “屏蔽环境变量”进行配置。 请参阅“配置本地沙盒设置”。
sandbox.userPolicy.network.allowLocalNetworkbooleanfalse控制本地网络访问,例如连接到本地开发服务器。 对沙盒化命令的影响取决于操作系统。 在受支持的Windows主机上,启用此设置还允许连接到主机的 localhost。 旧版 Windows 即使启用此设置,也会使 localhost 仍处于被阻止状态。 Windows 代理和主机规则要求其为 true。
sandbox.userPolicy.network.proxyobject取消设置通过 HTTP(S) 代理路由沙盒网络流量。 字段: url (必需)、 username (可选)、 password (可选)。 URL 不得包含凭据。 在 /sandbox 对话框的 “网络” 选项卡中配置凭据,该选项卡会隐藏密码字段。 字面密码在可用时使用 OS 凭据存储,不可用时回退到本地文件。
settings.json 包含机密引用信息。 密码可以是整个字段 ${VAR} 或 $VAR 环境变量引用。 代理强制执行因平台而异,如下所述。
sandbox.userPolicy.network.allowedHostsstring[][]允许沙盒命令访问的主机。 条目是确切的主机名、IP 地址或用于子域的 *.example.com,但不是根域(* 与每个主机匹配)。 不支持 CIDR 块。 请勿包含 URL 或端口。 非空列表会阻止不匹配的主机,但在出站和本地网络访问均已启用时,不会阻止 localhost、127.0.0.1 和 ::1。 这些自动条目不会更改您保存的列表。 显式拒绝规则和企业允许列表仍适用。 在/sandbox“主机规则”下的对话框的 “网络”选项卡中进行配置。
sandbox.userPolicy.network.blockedHostsstring[][]禁止沙盒命令访问的主机,匹配方式与 allowedHosts 相同。
blockedHosts 始终优先于匹配的 allowedHosts 条目,而拒绝某个域名也会同时拒绝其子域名。 在/sandbox“主机规则”下的对话框的 “网络”选项卡中进行配置。
sandbox.userPolicy.filesystem.deniedPathsstring[][]沙盒化命令无法访问的路径。 Windows 需要支持拒绝访问路径的版本。 如果主机无法强制实施它们,命令将失败,而不是以较弱的限制运行。 不存在但被拒绝的路径及其父项会在启动前创建为目录,并且不会自动删除,即使对于诸如 .env 这样的名称也是如此。 准备错误会阻止启动。 只读 /sandbox policy 预览不会创建任何内容,并在 Linux 上省略缺失或拒绝访问的路径。
sandbox.userPolicy.seatbelt.keychainAccessbooleanfalse仅限 macOS。 授予沙盒命令对系统密钥链的访问权限。 只能在中配置,不能通过或。
screenReaderbooleanfalse启用屏幕阅读器优化。
scrollbarbooleantrue在可滚动视图中显示滚动条。 将其设置为 false 以将其隐藏,并使用终端的全部宽度。
shellShortcutbooleantrue允许在提示符处单独输入 $,然后按下 Enter,即可打开一个以该会话工作目录为根目录的交互式 shell(仅当会话是在真实 TTY 上的本地、受信任且当前空闲的会话时才会启用)。 仅限用户或受管范围 — 无法被仓库覆盖。
showReasoningbooleanNone在时间线中显示模型推理。 可以使用 或 + 进行设置,或使用 /settings/config 进行切换。 您的首选项会在不同会话之间保留。
showTimestampsbooleantrue在时间线中于用户消息旁显示浅色 HH:mm 时间戳。
showTipsOnStartupbooleantrue在 CLI 启动时显示随机命令提示。
sidebarbooleantrue启用当前会话边栏。 将其设为 false 可将其完全禁用,隐藏编辑器提示和 ← 打开手势。 请参阅“GitHub Copilot CLI 命令参考”。
skillDirectoriesstring[][]用于搜索自定义技能定义的其他目录(除了 ~/.copilot/skills/)。
statusLineobject—自定义状态行显示。
type:必须是 "command"。
command:用于接收 stdin 上的会话 JSON 的可执行脚本的路径,并将状态内容输出到 stdout。
padding:可选数量的左填充空格。
refreshInterval:可选的整数秒数(1–2147483)以在计时器上重新运行命令,而不是仅在事件上运行;仅当会话状态发生更改时,省略它以刷新。 如果命令无法启动、退出时返回非零状态,或无法通过标准输入接收状态 JSON,CLI 会在每次连续失败期间记录一次警告,并将状态行留空,而不是静默失败。 使用 --log-level all 运行以查看底层错误详情。
stayInAutopilotbooleantrue在每个任务完成之后,保持 Autopilot 模式。 启用后,在任务完成之后输入的下一个提示也会在 autopilot 模式下进行处理。 有关详细信息,请参阅“在 GitHub Copilot CLI 中使用 Autopilot 模式”。
storeTokenPlaintextbooleanfalse允许在系统密钥链不可用时以纯文本 config.json 形式存储身份验证令牌。
streambooleantrue启用流响应。
streamerModebooleanfalse隐藏预览模型名称、配额详细信息、提示词时间戳以及“有更新可用”的通知。 演示 Copilot CLI 或屏幕共享时非常有用。
subagents.agentsobject{}各代理的模型配置,以代理名称为键。 每个值都是具有可选model(字符串)、 modelPolicy (或"required")、 effortLevel ("preferred"字符串)和contextTier("default"、或"long_context"``"inherit")字段的对象。 将model、effortLevel或contextTier设置为"inherit",以便在调度时使用父会话的值。 当代理定义本身设置了 modelPolicy: "required" 时,modelPolicy 不起作用——这里无法覆盖这一锁定设置。
/subagents使用斜杠命令以交互方式配置这些设置。
subagents.agents["rubber-duck"].autoInvokebooleanfalse允许Copilot主动咨询橡皮鸭代理,而无需被要求。 若要更改此项,请运行 /subagents,选择 rubber-duck,按 Enter,然后切换 主动触发。
subagents.disabledSubagentsstring[][]已关闭的子代理的名称。 使用交互式会话中的 **** 选取器中每个代理的 /subagents 控件管理此列表。
subagents.maxConcurrencynumber基于计划的此会话的最大并发子代理数。 仅对按使用量计费用户生效;对所有其他套餐均不生效。 上限为 32。 请参阅“GitHub Copilot CLI 命令参考”。
subagents.maxDepthnumber6最大子代理嵌套深度。 仅对按使用量计费用户生效;对所有其他套餐均不生效。 上限为 256。 请参阅“GitHub Copilot CLI 命令参考”。
tabs.enabledbooleantrue显示主选项卡栏。 将其设为 false 以将其完全隐藏。
tabs.hidestring[][]要隐藏的选项卡标识符。 接受的值:"copilot"、"agents"、"issues"、"pull-requests"、"gists"(匹配时不区分大小写)。
tabs.sortstring[][]选项卡的显示顺序。 未列出的选项卡排在已列出的选项卡之后,并保持其默认的相对顺序。 忽略未知标识符。
taskbarPresencebooleantrue在Windows任务栏上显示实时Copilot会话(代理图标和悬停卡)。 将其设置为 false 以选择退出。仅在启动时生效;在下次启动时生效。 仅适用于Windows。
terminalNotificationsbooleanfalse启用桌面通知时,优先在受支持的终端(Ghostty、WezTerm)中使用由终端处理的 OSC 777 通知;如果不受支持或发送失败,则回退到操作系统原生通知。
terminalProgressbooleantrue在代理工作时发送 OSC 9;4 终端进度指示器。 支持的终端包括 Windows 终端、iTerm2、Ghostty 和 ConEmu。
theme
"default"
|
"github"
|
"dim"
|
"high-contrast"
|
"colorblind"
"github"终端输出的调色板。 由/settings``/theme斜杠命令管理。
colorMode 是此设置已弃用的别名。
toolSearchboolean取决于模型和功能控制工具搜索(延迟的工具加载)。 将 toolSearch: false 设为不参与工具搜索。
transcriptView
"default"
|
"concise"
"default"将其设置为 "concise",以便将工具活动归入时间线中可展开的工作摘要。 将其设置为 "default" 以显示完整的原语言转录文本。
updateTerminalTitlebooleantrue在终端选项卡或窗口标题中显示当前意向。
worktreeBaseRef
"head"
|
"defaultBranch"
"head"由 /worktree、/worktree new、/new worktree、/move 和 --worktree 创建的新工作树的起始点。
"defaultBranch" 从远程默认分支开始,而不是当前检出的分支。
/fork worktree 始终会从 HEAD 创建分支,无论此设置如何。
worktreePathTemplatestring取消设置其中/worktree,/move以及/new``--worktree创建工作树,例如~/src/worktrees/{repo}/{branch}。 支持 {repoPath}、{repo}、{branch} 和 {branchSlug} 占位符。 未设置时,将使用默认布局 <repo>.worktrees/,并将分支名称中的斜杠转换为短横线。

提示

运行 copilot help sandbox 以查看完整的沙盒参考文档,其中包括受支持的主机和所有 sandbox 设置键。

对话框将 /sandbox Git 身份验证、 gh 身份验证和掩码环境变量分组到专用 凭据 选项卡下,并显示 settings.json 存储当前沙盒配置的路径。 在 “文件系统” 选项卡上,配置的路径列表在 2 read/write, 1 read-only 行后面按权限汇总显示(例如,****)。 在该行按下 Enter 键可打开完整列表,该列表会占用光标和标签栏,直到你按下 Esc 键。配置的路径显示为绝对路径,而不是 ./ 相对形式或 ~ 缩略形式。 添加路径时输入 ~/path,仍会将其扩展为你的主目录路径。 在/sandbox对话框中按Ctrl+E,可保存所有待处理的更改,并在编辑器(VISUAL、EDITOR或settings.json)中打开COPILOT_EDITOR,与/settings中的相同快捷键保持一致。 编辑并保存文件后,对话框会从磁盘重新加载其状态。

使用主机规则和 sandbox.userPolicy.network.proxy 内置的本地代理。 配置两者后,本地代理会在将流量转发到上游代理之前应用主机规则。 上游凭据位于沙盒化子进程之外。 当出站访问关闭时,主机规则和代理设置处于非活动状态。

当沙盒设置中未设置代理时,本地代理会按以下顺序从主机上的第一个非空环境变量中选择其上游代理:HTTPS_PROXY、HTTP_PROXY、ALL_PROXY。 仅支持 http:// 和 https:// 代理,不支持 socks5。

与主机 NO_PROXY 匹配的目标仅绕过此继承的上游代理。 沙盒的本地代理仍处理这些连接并应用其主机规则。 沙盒设置中配置的代理会忽略 NO_PROXY。

在 macOS 和 Linux 上,沙盒会限制直接连接,以便程序无法避免代理。 在 Windows 上,沙盒依赖于会遵循代理设置的程序。 因此,忽略 Windows 上的代理设置的程序可以直接连接并绕过针对主机的规则。 Windows代理和主机规则还需要受支持的主机以及允许专用网络访问的 allowLocalNetwork: true。 在 Linux 上,代理设置拒绝除 [::] 双堆栈通配符以外的 IPv6 地址字面量。 使用 IPv4 终结点或支持 IPv4 的主机名。

沙盒设置是用户级或企业管理的。 它们不能被存储库级别覆盖。 有关配置步骤和网络限制,请参阅 配置本地沙盒设置。

沙盒由Microsoft eXecution 容器(MXC)提供支持,该容器提供特定于平台的包含后端。 Copilot CLI 在 macOS 上使用 Seatbelt,在 Linux 上使用 Bubblewrap,在 Windows 上使用 ProcessContainer。

存储库设置 (.github/copilot/settings.json)

存储库设置适用于在存储库中工作的每个人。 它们将提交到存储库并与协作者共享。

注意

存储库配置文件(enabledPlugins 和 extraKnownMarketplaces)中与插件相关的键也会被 Copilot in the cloud 读取,而不只是被 Copilot CLI 读取。 这样,便可以从单个文件中为两个客户端启用相同的插件。 有关插件的详细信息,请参阅 用于 GitHub Copilot 的插件。

存储库级别仅支持下表中列出的密钥。 将无提示地忽略任何其他密钥(包括用户配置文件中有效的密钥)。 每个受支持的键都有一个方向性合并策略,可确保覆盖操作保持“失败时关闭”且安全。

密钥类型合并行为说明
companyAnnouncementsstring[]已替换 — 存储库优先启动时随机显示的消息。
contextTier
"default"
|
"long_context"
已替换 — 存储库优先固定默认上下文层级。
deniedUrlsstring[]并集 — 仓库可以添加条目,但绝不删除URL 或域名已被阻止。
disableAllHooksboolean存储库优先禁用所有挂钩。
disabledMcpServersstring[]并集 — 仓库可以添加条目,但绝不删除MCP 服务器已配置但未启动。
disabledSkillsstring[]并集 — 仓库可以添加条目,但绝不删除已发现但未加载的技能
effortLevelstring已替换 — 存储库优先固定默认推理工作量。
enabledPluginsRecord<string, boolean>已合并 — 存储库覆盖用户的相同密钥声明性插件自动安装。
extraKnownMarketplacesRecord<string, {...}>已合并 — 存储库覆盖用户的相同密钥此存储库中提供的插件市场。 每个条目的 source 均为必填项。 在条目上设置 autoUpdate: true 在仓库级别会被接受,但目前会被忽略 — 自动更新选项仅在用户自己的设置或托管(MDM/服务器)设置中设置时才会生效。
hooksobject已合并 — 存储库覆盖用户的相同密钥范围限定到此存储库的挂钩定义。 请参阅“与 GitHub Copilot CLI 一起使用挂钩”。
includeCoAuthoredByboolean已替换 — 存储库优先在提交中添加 Co-authored-by 尾注。
mergeStrategy
"rebase"
|
"merge"
已替换 — 存储库优先
/pr fix conflicts 的冲突解决策略。
modelstring已替换 — 存储库优先将此仓库的默认模型置顶。
respectGitignoreboolean仅收紧 — 仓库可以启用,但无法禁用从 @ 文件提及选取器中排除 gitignored 文件。

model、effortLevel 和 contextTier 覆盖仅在工作目录为受信任时生效。

仅通过存储库启用的 enabledPlugins 插件的范围限定为该存储库:它在声明存储库中自动安装和激活,但全局保持禁用状态,因此它永远不会在无关项目中激活。 离开存储库,或者存储库禁用该插件时,会关闭其 MCP 服务器,并停用该会话中的代理和技能。

仓库级模型允许列表 (.github/allowed_models.txt)

通过位于 .github/allowed_models.txt 的纯文本允许列表(从当前工作目录的仓库根目录(或位于仓库之外的工作目录本身)解析而来)来限制仓库可使用的内置模型。

每一行都是与模型 ID 匹配的 glob 模式,或者是一条 fallback: 指令,用于指定当已配置或请求的模型不被允许时应使用的模型:

# .github/allowed_models.txt
fallback: gpt-6-astra
gpt-6-astra
gpt-6-sol
claude-sonnet-*
规则说明
*允许所有模型(不存在文件时的默认设置)。
MODEL-ID允许指定精确的模型 ID。
GLOB-PATTERN允许与 glob 模式匹配的模型 ID(例如,claude-sonnet-*)。
fallback: MODEL-ID必须且仅需指定一次。 当活动模型不被允许时,Copilot 将使用此模型。
#注释行。

不支持否定模式 (!pattern),备用模型必须是精确的 ID(而非通配符),且备用模型本身必须匹配已配置的通配符之一。 Copilot CLI 会重新评估 /cd 上的策略,并在运行前以错误信息拒绝无效文件。

允许列表仅适用于 Copilot 的内置模型。 它无法筛选出使用自带 API 密钥 (BYOK) 方法添加的自定义模型。 无论配置的模式如何,BYOK 模型都会保持列出和可选择状态,并且 fallback: 指令永远不会应用于它们。 有关详细信息,请参阅 在企业中为 GitHub Copilot 启用自定义模型 和 在你的组织中为 GitHub Copilot 启用自定义模型。

本地设置 (.github/copilot/settings.local.json)

在存储库中创建 .github/copilot/settings.local.json,用于存放那些不应被提交的个人覆盖。 将此文件添加到 .gitignore.

本地配置文件使用与存储库配置文件 (.github/copilot/settings.json) 相同的架构,并优先于它。

MDM 托管设置

IT 管理员可以通过移动设备管理(MDM)托管设置下发基线策略,而不是要求按用户逐一配置。 这些设置对受支持的密钥应用设备级默认值,并在用户设置之前加载。

托管设置在每个会话托管模式(交互式、-p、--acp、以及--ahp-host``--server)中统一应用,因此,通过不同的入口点启动会话,无法绕过企业 MCP、权限和插件策略。

Copilot CLI 在启动时除了加载 MDM 外,还会加载由服务器管理的设置。 设备管理(MDM)和服务器管理的设置按 ** 每个键 ** 进行解析:对于 MDM 设置的任何键,其值优先;对于 MDM 未设置的键,由服务器的值填充。 这样,组织可以通过 MDM(例如,permissions)设置某些策略,同时仍从服务器接收其他托管默认值(例如,model)。

长时间运行的会话每小时都会重新获取并重新应用托管设置,因此策略更改(例如某个组织启用 permissions.disableBypassPermissionsMode)无需重启会话即可生效。

MDM 托管设置源

Copilot CLI 从平台特定的 MDM 或基于文件的位置中读取托管设置。

Platform源类型Location
macOSMDM 属性列表com.github.copilot
macOSFile/Library/Application Support/GitHubCopilot/managed-settings.json
Windows操作系统MDM 注册表HKLM\SOFTWARE\Policies\GitHubCopilot
Windows操作系统File%ProgramFiles%\GitHubCopilot\managed-settings.json
LinuxFile/etc/github-copilot/managed-settings.json

注意

在 POSIX 系统上, Copilot CLI 拒绝基于文件的托管设置,这些设置是符号链接,不是根拥有的,也不是世界可写的。

文件格式

将基于文件的托管设置编写为 JSON。

{
    "model": "auto",
    "permissions": {
        "disableBypassPermissionsMode": "disable"
    }
}

注意

model 是顶级密钥。 将其嵌套为 permissions.model 的旧配置仍然有效——当缺少顶层 model 键时,运行时会回退到该位置——但新配置应将 model 写在顶层。

支持的密钥

MDM 托管设置中仅支持以下密钥。

密钥说明
allowedMcpServers用户可加载的 MCP 服务器允许列表,通过 serverUrl、serverCommand 或 serverName 进行匹配。 受信任的第一方服务器(例如内置 GitHub MCP 服务器)始终是豁免的。 将此键留空会允许所有非默认服务器;空数组会拒绝所有这些服务器。 请参阅 托管 MCP 服务器允许/拒绝列表。
autoTier为将"intelligence"设置为model的会话设置默认自动路由层级(auto、"efficiency" 或 "balance")。 裸字符串会将该层级严格锁定,覆盖用户和存储库设置,并将其对 /settings 隐藏。 请改用 {"overridable": "TIER"} 来设置组织默认值,用户和存储库仍可覆盖该默认值。
"fast" 不再可选,并会发出警告并回退到 "balance"。
deniedMcpServers绝不能加载的 MCP 服务器阻止列表,其匹配方式与 allowedMcpServers 相同。 无论允许列表如何,匹配的非默认服务器均会被阻止 — 拒绝规则始终优先。 请参阅 托管 MCP 服务器允许/拒绝列表。
enabledPlugins启用或禁用特定插件
extraKnownMarketplaces添加可信的插件市场
forceLoginOrgs将登录限制为经批准的 GitHub组织集合(组织登录名数组,匹配时不区分大小写)。
Copilot 仅适用于属于至少一个所列组织的账户;个人账户、仅属于其他企业的账户,或使用 BYOK/API 密钥进行身份验证的情况都会被拒绝,并返回可操作的错误提示。 设置一个空数组以关闭引脚而不删除密钥。 通过设备通道(MDM plist/registry 或 managed-settings.json)部署此密钥,因为它必须能够重定向开发人员的第一个登录 - 服务器管理的通道仅到达已向组织进行身份验证的帐户。 此密钥关闭失败:不可用的值或无法在已知托管设备上读取的托管策略,阻止所有登录,直到修复。
forceRemoteSettingsRefresh即使存在最新的缓存策略,也要求在启动时重新获取由服务器管理的设置。 已缓存的策略无法满足新鲜度要求。 如果提取失败,则在确认当前策略之前,受影响的操作将保持受限。 设备 (MDM) 值优先于缓存的服务器值。
model为所有用户设置默认模型(可由 --model 标志或恢复的会话所使用的模型覆盖)。
effortLevel 和 contextTier 与 model 一同设置时,会应用与相应的 存储库设置 键相同的托管推理强度和上下文层级,但前提是托管模型支持显式的推理强度/上下文选项。
permissions设置托管权限,包括disableBypassPermissionsMode``deny / allow / ask规则数组和limitTo域边界数组。 请参阅托管权限规则和域边界(limitTo)。
policyHelper注册提供最低优先级托管设置层的可执行文件。 字段: path (必需),外加可选 args、 timeoutMs和 refreshIntervalMs。 如果设备(MDM)和服务器策略都注册了 policyHelper,则以设备注册为准。
remoteControl控制此设备上的会话是否可以从其他设备进行控制。
mode 是 "enabled", "disabled"或 "requireSSO" (在设置时需要 githubDotComOrganizations )。
requireBase64ImageAttachments当 true 时,需要 base64 编码的图像附件,而不是附件 URL。
false 或未设置保留现有行为。
sandbox设置一个用户无法放宽的沙盒策略下限。 支持的设置包括 allowBypass、sandboxLspServers、auth.gh、addCurrentWorkingDirectory、learningMode、sandboxMcpServers、allowDevToolAccess、auth.git、userPolicy.*、failIfUnavailable,以及 enabled 文件系统和网络规则。 在更安全的方向上,托管值始终优先于用户自己的值。 启用沙盒、要求其必须成功,以及将 MCP 和 LSP 服务器置于沙盒中运行,这些设置都无法关闭。 禁用绕过功能或凭据注入后,将无法重新启用。 文件系统允许列表只能缩小,拒绝的路径只能添加到其中。
failIfUnavailable 只能在无法建立沙盒时由管理员设置并阻止会话。 对于用户可以自行设置的设置,请参阅 “用户设置 ”或“运行 copilot help sandbox”。
shellShortcut为所有用户强制启用或强制禁用 $ 交互式 shell 的快捷方式。 托管值始终替代用户自己的 shellShortcut 设置。
strictKnownMarketplaces将插件限制为已知市场的允许列表(市场规格的 JSON 数组)。 允许列表一旦设置,也会适用于内置市场——空数组([])会隐藏并阻止所有市场,包括内置市场,而不仅仅是用户或代码仓库添加的市场。
telemetry推送基线 OpenTelemetry 导出配置:enabled、endpoint、protocol、headers、resourceAttributes、captureContent、lockCaptureContent、headersProvider 和 serviceName。 请参阅“GitHub Copilot CLI 命令参考”。

注意

* policyHelper.path 接受绝对路径、相对于主目录的路径 (~/...) 或从 PATH 解析出的纯程序名。 其他相对形式均不被接受。 注册请求已被接受并验证,但运行时尚未调用辅助程序 — 辅助程序的执行功能将在未来版本中提供。

  • 当 remoteControl.mode 为 "requireSSO" 时,在 remoteControl.githubDotComOrganizations 中列出允许的组织。 客户端必须对至少一个列出的 GitHub.com 组织进行 SSO 授权,因此不再需要对所有组织进行授权。
  • 在 MDM 托管设置中将 permissions.disableBypassPermissionsMode 设置为 "disable",以阻止设备级别的允许所有选项。 帐户切换无法替代此策略。 如果设置了无法识别的值,CLI 会记录该问题,并将 "disable" 强制设为故障关闭(fail-closed)的默认值。 请参阅“GitHub Copilot CLI 命令参考”。
  • 大多数受管理的键会锁定整行:本地编辑会在下次加载时被受管理的值悄然覆盖。 enabledPlugins 和 extraKnownMarketplaces 是例外 — 托管层会逐字段将这些映射与您的条目合并,而不是直接替换它们。 这意味着该锁是应用于 每个条目 的,而不是应用于整个键:由托管策略固定的插件或市场项无法在本地重新启用、禁用或重新指定指向,但同一映射中的其他条目仍完全由用户控制。

sandbox.learningMode 仅适用于 Windows,只能通过原生 MDM(例如,通过 Intune 或注册表)设置——managed-settings.json 文件值将被忽略。 在具有拒绝捕获的主机上,将其设置为 "allow",以在记录和允许模式下启动沙盒 shell 命令,而不是默认的记录和拒绝模式,记录每个文件系统或进程访问并允许它,而不是拒绝它(仍强制执行网络策略)。 这允许管理员在锁定群组之前观察群组的命令需要哪些权限;它不是隔离模式。 状态行显示 sandbox relaxed ,shell 调用在应用时显示 (sandbox relaxed) 。 deny 值(默认值),或删除该键,会使该群组返回到普通的强制沙盒;并且,来自任何托管通道的 deny 始终优先于 allow。 用户设置和 SDK 主机无法设置此密钥。

受管理的权限规则

在托管permissions密钥下添加deny和ask``allow规则列表,以强制每个人实施权限策略。 无论是否设置了 permissions.disableBypassPermissionsMode,这都能正常工作。

{
    "permissions": {
        "deny": ["Shell(rm -rf *)", "Domain(*.evil.example)"],
        "ask": ["Shell(git push *)"],
        "allow": ["Read(**)"]
    }
}
规则族Matches
Bash(...)、Shell(...)Shell 命令。 使用 <command> *(例如 git push *)来匹配命令前缀;否则,该规则匹配精确文本。
PowerShell(...)PowerShell 命令,匹配方式与 Shell(...) 相同。
Read(...)文件读取/查看路径。 支持 glob 模式:/ 表示工作区根目录,~/ 表示用户主目录,./ 表示当前工作目录。
Edit(...)、Write(...)文件写入/编辑路径,匹配方式与 Read(...) 相同。
Domain(...)URL 主机名,与 URL 规则一样匹配。

来自受管源的规则会按固定优先级合并:拒绝始终优先,然后是询问,最后是允许——如果匹配到 deny 规则,请求就会被阻止,即使同时也匹配了 allow 规则。 deny 和 ask 会在所有托管来源(服务器、MDM)中合并。 allow 要求每个声明 allow 列表的源都必须允许该操作 — 这是交集,而非并集。 如果设置了 deny、ask 或 allow 中的任意一个,则与它们均不匹配的操作将默认使用 ask,而不是静默穿透。

Edit(...) 和 Write(...) 规则适用于多个内置文件工具。 它们还涵盖由 shell 命令直接编写的文件。 Copilot CLI 可识别一组固定的这类写入操作。 它涵盖 Bash 输出重定向(>、>>、>|、&>>、&>)、PowerShell 输出重定向(>、>>、*>、*>>),以及少量原地 sed 编辑(sed -i 或 --in-place,以及 BSD 形式 -i '' 和 -I '')。 当 Copilot CLI 可以从命令中识别出目标文件时,匹配的 deny 规则会阻止写入,而匹配的 ask 规则会先提示你。 即使像 Shell(*) 这样的宽泛规则原本会允许该命令,这一点也同样适用。 有时无法预先确定目标文件,例如,当路径来自某个变量时。 在这种情况下,这些路径规则不适用,并且命令由普通 shell 命令规则检查。

域边界 (limitTo)

在托管的permissions键下,与deny、ask和allow一起添加一个limitTo数组,以强制实施封闭式域允许列表:

{
    "permissions": {
        "limitTo": ["github.com", "*.github.com"]
    }
}

limitTo 中仅支持 Domain(...) 条目。 在未提示的情况下,任何对列表外域名的代理网络请求都会被拒绝,并且用户规则、保存的审批和允许所有模式都无法放宽这一范围。 在 shell 请求中检测到的 URL 被视为 Domain 请求,并且还必须满足边界条件。 limitTo不会自行限制shell、read或write操作。

空 limitTo 列表拒绝每个域请求。 无效列表或无效条目会被视为空列表(并报告为配置错误),而不是丢弃该托管策略的其余部分。

deny 仍然优先于 limitTo。 ask 并 allow 仅细化已位于边界内的请求。 同样 allow, limitTo 是跨托管源的交集,每个声明 limitTo 列表的托管源都必须允许该请求。

托管 MCP 服务器允许/拒绝列表

管理员可以直接通过 MDM 托管设置(独立于 企业 MCP 允许列表)来管理 MCP 服务器。

在托管设置源中设置 allowedMcpServers 和/或 deniedMcpServers :

{
    "allowedMcpServers": [
        { "serverUrl": "https://mcp.example.com/*" },
        { "serverCommand": ["npx", "-y", "@example/mcp-server"] }
    ],
    "deniedMcpServers": [
        { "serverName": "untrusted-server" }
    ]
}

每个条目通过以下匹配器中的恰好一种来标识服务器。

匹配器Matches备注
serverUrl按 URL 指定的远程(HTTP/SSE)服务器支持 * 通配符;方案和主机匹配不区分大小写,路径匹配区分大小写。
${VAR} 引用在匹配前展开。
serverCommand按精确命令和参数顺序排列的 stdio 服务器
${VAR} 引用在匹配前展开。
serverName按分配的标签排序的服务器允许列表条目仅限于 [A-Za-z0-9_./-]+(区分大小写,不支持通配符;例如 microsoft/playwright-mcp 这样的注册表名称也可接受);拒绝列表条目接受任何非空字符串。

规则:

  • 受信任的第一方服务器 (例如,内置 GitHub MCP 服务器)始终免除这两个列表。
  • 未设置 allowedMcpServers 时允许所有非默认服务器;空数组 会阻止所有非默认服务器(全部拒绝)。
  • 未设置或为空的 deniedMcpServers 不会阻止任何内容。
  • “拒绝”规则始终优先 — 只要也匹配 allowedMcpServers,服务器匹配 deniedMcpServers 就会被阻止。
  • 对于远程服务器,匹配结果必须来自 serverUrl 条目;仅在不存在 serverName 条目的情况下,serverUrl 才算有效。 对于 stdio 服务器,匹配必须来自条目 serverCommand ; serverName 仅当不存在 serverCommand 条目时才会进行计数。

延伸阅读