diff --git a/content/code-security/concepts/code-scanning/ai-scan-for-repositories.md b/content/code-security/concepts/code-scanning/ai-scan-for-repositories.md index 29399f254e2f..4f989130f2e7 100644 --- a/content/code-security/concepts/code-scanning/ai-scan-for-repositories.md +++ b/content/code-security/concepts/code-scanning/ai-scan-for-repositories.md @@ -28,7 +28,7 @@ You do not need a {% data variables.product.prodname_copilot %} license. You run AI Scan for repositories on demand, and each scan consumes **{% data variables.product.prodname_code_security %} {% data variables.product.prodname_ai_credits_short %}**. This usage is separate from active-committer licensing. -Usage is billed to the account responsible for the organization's billing. +Usage is billed to the account responsible for the organization's billing. {% data reusables.code-scanning.ai-scan-personal-account-billing %} @@ -57,6 +57,7 @@ The alert will only close automatically if the applied fix changes the exact lin ## Limitations * Scans analyze the default branch only. +* Self-hosted runners are not supported. * Scans are manually triggered. Scheduled scans and automatic scans on push are not supported. * The agent selects which code to examine within a time budget. A scan does not exhaustively analyze every file or guarantee that it finds every vulnerability. * Matching against existing {% data variables.product.prodname_codeql %} alerts is best effort, so duplicate alerts can occur. diff --git a/content/copilot/concepts/customizations/mcp.md b/content/copilot/concepts/customizations/mcp.md index 412e041aab58..6cf15b815fe1 100644 --- a/content/copilot/concepts/customizations/mcp.md +++ b/content/copilot/concepts/customizations/mcp.md @@ -187,7 +187,7 @@ The {% data variables.product.github %} MCP Registry is a curated list of MCP se Agent finder is a discovery service that helps {% data variables.product.prodname_copilot %} find the right capabilities—such as MCP servers, tools, agents, and skills—for a task at runtime, instead of requiring every capability to be configured in advance. Like an MCP registry, it searches a catalog of capabilities and returns ranked matches that {% data variables.product.prodname_copilot %} can use on demand. Agent finder implements the open Agentic Resource Discovery (ARD) specification. -For {% data variables.copilot.copilot_cli_short %} setup, see [Using agent finder](/copilot/how-tos/copilot-cli/customize-copilot/add-mcp-servers#using-agent-finder). The {% data variables.copilot.github_copilot_app %} provides an `af` built-in skill. See [AUTOTITLE](/copilot/reference/github-copilot-app-reference/built-in-skills). To browse the catalog, see [GitHub Agent Finder](https://github.com/agentfinder). +The {% data variables.copilot.github_copilot_app %} provides an `af` built-in skill. See [AUTOTITLE](/copilot/reference/github-copilot-app-reference/built-in-skills). You can search for more AI resources at [github.com/search?type=ai_resources](https://github.com/search?type=ai_resources). ## Next steps diff --git a/content/copilot/copilot-on-ghes/about-copilot-on-ghes.md b/content/copilot/copilot-on-ghes/about-copilot-on-ghes.md index f6137014c1ce..f6923518d459 100644 --- a/content/copilot/copilot-on-ghes/about-copilot-on-ghes.md +++ b/content/copilot/copilot-on-ghes/about-copilot-on-ghes.md @@ -42,11 +42,16 @@ An administrator configures a model provider for the instance, and users connect For more information, see [AUTOTITLE](/copilot/copilot-on-ghes/set-up-copilot-cli). +{% ifversion copilot-cli-ghes-ga %} > [!NOTE] -> This feature is in {% data variables.release-phases.technical_preview %} and subject to change. +> This feature is generally available. +{% else %} +> [!NOTE] +> This feature is generally available starting with {% data variables.product.prodname_ghe_server %} 3.22.3. In earlier 3.22 patch releases, it is in {% data variables.release-phases.technical_preview %}. +{% endif %} {% else %} -To use this feature, upgrade your instance to **version 3.22 or later**, where this feature is available in {% data variables.release-phases.technical_preview %}. +To use this feature as generally available, upgrade your instance to **version 3.22.3 or later**. {% endif %} diff --git a/content/copilot/copilot-on-ghes/set-up-copilot-cli.md b/content/copilot/copilot-on-ghes/set-up-copilot-cli.md index 63bed869f3a9..a7b267975bce 100644 --- a/content/copilot/copilot-on-ghes/set-up-copilot-cli.md +++ b/content/copilot/copilot-on-ghes/set-up-copilot-cli.md @@ -14,8 +14,13 @@ category: - Manage Copilot for a team --- +{% ifversion copilot-cli-ghes-ga %} > [!NOTE] -> This feature is in {% data variables.release-phases.technical_preview %} and subject to change. +> This feature is generally available. +{% else %} +> [!NOTE] +> This feature is generally available starting with {% data variables.product.prodname_ghe_server %} 3.22.3. In earlier 3.22 patch releases, it is in {% data variables.release-phases.technical_preview %}. +{% endif %} You can configure {% data variables.copilot.copilot_cli_short %} to work with {% data variables.product.prodname_ghe_server %} in disconnected or air-gapped environments without connectivity to {% data variables.product.github %} Cloud. An administrator configures a model provider for the instance, and users connect {% data variables.copilot.copilot_cli_short %} with their {% data variables.product.prodname_ghe_server %} credentials. diff --git a/content/copilot/how-tos/copilot-cli/customize-copilot/add-mcp-servers.md b/content/copilot/how-tos/copilot-cli/customize-copilot/add-mcp-servers.md index 649ced04ccb3..11cab32ef0df 100644 --- a/content/copilot/how-tos/copilot-cli/customize-copilot/add-mcp-servers.md +++ b/content/copilot/how-tos/copilot-cli/customize-copilot/add-mcp-servers.md @@ -41,7 +41,7 @@ You can add MCP servers in the following ways: * [Using the `copilot mcp add` subcommand](#using-the-copilot-mcp-add-subcommand) * [Editing the configuration file](#editing-the-configuration-file) * [Adding per-repository MCP servers](#adding-per-repository-mcp-servers) -* [Searching and installing from the registry (experimental)](#searching-and-installing-from-the-registry) +* [Searching and installing from the registry](#searching-and-installing-from-the-registry) For installation instructions, available tools, and URLs for specific MCP servers, see the [{% data variables.product.github %} MCP Registry](https://github.com/mcp). @@ -52,12 +52,12 @@ For installation instructions, available tools, and URLs for specific MCP server 1. Next to **Server Name**, enter a unique name for the MCP server. This is the name you will use to refer to the server. 1. Next to **Server Type**, select a type by pressing the corresponding number. The following types are available: - * **Local** or **STDIO**: starts a local process and communicates over standard input/output (`stdin`/`stdout`). Both options work the same way. **STDIO** is the standard MCP protocol type name, so choose this if you want your configuration to be compatible with {% data variables.product.prodname_vscode_shortname %}, the {% data variables.copilot.copilot_cloud_agent %}, and other MCP clients. + * **STDIO**: starts a local process and communicates over standard input/output (`stdin`/`stdout`). This is the standard MCP protocol type name, so it's compatible with {% data variables.product.prodname_vscode_shortname %}, the {% data variables.copilot.copilot_cloud_agent %}, and other MCP clients. * **HTTP** or **SSE**: connects to a remote MCP server. **HTTP** uses the Streamable HTTP transport. **SSE** uses the legacy HTTP with Server-Sent Events transport, which is deprecated in the MCP specification but still supported for backwards compatibility. 1. The remaining fields depend on the server type you selected: - * If you chose **Local** or **STDIO**: + * If you chose **STDIO**: * Next to **Command**, enter the command to start the server, including any arguments. For example, `npx @playwright/mcp@latest`. This corresponds to both the `command` and `args` properties in the JSON configuration file. * Next to **Environment Variables**, optionally specify environment variables the server needs, such as API keys or tokens, as JSON key-value pairs. For example, `{"API_KEY": "YOUR-API-KEY"}`. The `PATH` variable is automatically inherited from your environment. All other environment variables must be configured here. @@ -201,9 +201,6 @@ The `.vscode/mcp.json` file for {% data variables.product.prodname_vscode_shortn ### Searching and installing from the registry -> [!NOTE] -> The `/mcp search` command is currently an experimental feature. To use it, start {% data variables.copilot.copilot_cli_short %} with the `‑‑experimental` command line option, or enter `/experimental on` during a session. - You can discover and install MCP servers directly from the [{% data variables.product.github %} MCP Registry](https://github.com/mcp) using the `/mcp search` command in interactive mode. This lets you browse available servers, view their details, and install them without manually filling out the configuration form. If your organization has configured a custom MCP registry URL, `/mcp search` connects to that registry instead of the default {% data variables.product.github %} registry. @@ -219,13 +216,6 @@ If your organization has configured a custom MCP registry URL, `/mcp search` con 1. Press Ctrl+S to save. The server is added to your `mcp-config.json` and started immediately. -## Using agent finder - -Agent finder searches a catalog of capabilities, including MCP servers, tools, agents, and skills. To make it available in the CLI: - -1. Download the [agent finder skill](https://github.com/ards-project/connectors/blob/main/skills/github-copilot/SKILL.md). -1. Add the skill to your `~/.copilot/skills` directory. For skill directory structure and installation guidance, see [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/add-skills). - ## Managing MCP servers You can manage your configured MCP servers using the `/mcp` commands in interactive mode or the `copilot mcp` subcommands from the terminal. diff --git a/content/copilot/how-tos/copilot-cli/customize-copilot/use-hooks.md b/content/copilot/how-tos/copilot-cli/customize-copilot/use-hooks.md index ca8240d714f6..1e2932b7d43c 100644 --- a/content/copilot/how-tos/copilot-cli/customize-copilot/use-hooks.md +++ b/content/copilot/how-tos/copilot-cli/customize-copilot/use-hooks.md @@ -102,6 +102,22 @@ The following examples for macOS and Windows show how to configure hooks that wi {% data reusables.copilot.cloud-agent.troubleshoot-hooks %} +## Troubleshooting sandboxed hooks + +If a hook fails or times out only when sandboxing is enabled, a tool it calls may need access to a configuration file or cache. See [AUTOTITLE](/copilot/reference/hooks-reference#sandboxed-sessions). + +Before granting access, remember that user settings apply across CLI sessions and are not limited to this hook. Configuration files such as `.npmrc` can contain credentials. Grant only access you are willing to give to other sandboxed commands. Organization-managed restrictions still apply. + +1. Check the hook's or tool's error output and logs for a denied file or directory. If the script suppresses errors, enable diagnostic output without logging credentials. +1. Run `/sandbox policy` followed by the hook command to preview command-specific developer-tool access in your current directory. + + > [!NOTE] + > If the hook sets `cwd` you must run `/sandbox policy` from the configured `cwd` directory. + + This does not inspect script files or include the hook's additional source and data directory permissions. See [AUTOTITLE](/copilot/concepts/security-governance-and-network-settings/understanding-local-sandboxing#checking-what-the-current-policy-allows). +1. In your user settings, add only the required paths to `sandbox.userPolicy.filesystem.readonlyPaths` or `sandbox.userPolicy.filesystem.readwritePaths`. Use read-only access for configuration files and read/write access only for caches the tool needs to update. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#user-settings-copilotsettingsjson). +1. Start a new CLI session and check whether the hook succeeds when its event next occurs. + ## Further reading * [AUTOTITLE](/copilot/reference/hooks-reference) diff --git a/content/copilot/reference/copilot-cli-reference/cli-command-reference.md b/content/copilot/reference/copilot-cli-reference/cli-command-reference.md index e9369816d44c..1e09d736f450 100644 --- a/content/copilot/reference/copilot-cli-reference/cli-command-reference.md +++ b/content/copilot/reference/copilot-cli-reference/cli-command-reference.md @@ -623,7 +623,7 @@ These are the slash commands you can use from within an interactive CLI session. | `/search [QUERY]`, `/find [QUERY]` | Search the conversation timeline. | | `/security-review [PROMPT]` | Run a focused security review of active local code changes and return prioritized vulnerability findings with remediation suggestions. This command is not a full repository security audit. | | `/session [info\|checkpoints [n]\|files\|plan\|rename [NAME]\|cleanup\|prune\|delete [ID]\|delete-all]`, `/sessions [info\|checkpoints [n]\|files\|plan\|rename [NAME]\|cleanup\|prune\|delete [ID]\|delete-all]` | Show session information and manage sessions. The `info` subcommand shows session details including the session link (when available). Subcommands: `info`, `checkpoints`, `files`, `plan`, `rename`, `cleanup`, `prune`, `delete`, `delete-all`. | -| `/settings [--repo\|--local] [show KEY\|KEY\|KEY VALUE]`,
`/config [--repo\|--local] [show KEY\|KEY\|KEY VALUE]` | Open the settings dialog, open it focused on a specific setting (`KEY`), set a setting inline (`KEY VALUE`), or display a setting's current value (`show KEY`). `show` masks secret-named values (for example, tokens or API keys nested under a setting) instead of printing them in clear text. The dialog shows **User**, **Repo**, **Repo (local)**, and **Problems** tabs—switch with Tab/Shift+Tab; a setting overridden in another scope shows a badge naming which scope wins. The **Problems** tab is a cross-scope view of settings that need attention (for example, unknown or invalid keys); its label shows a count, such as `Problems (2)`, when any scope has an issue, and otherwise just reads `Problems`. Add `--repo` or `--local` to target `.github/copilot/settings.json` or `.github/copilot/settings.local.json` instead of the user settings file—for example, `/settings --repo model gpt-6-astra`. Only [repo-overridable keys](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#repository-settings-githubcopilotsettingsjson) can be set this way. Rows governed by an active organization or MDM managed policy render read-only with a `(managed)` tag. See [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/change-settings). | +| `/settings [--repo\|--local] [show KEY\|KEY\|KEY VALUE]`,
`/config [--repo\|--local] [show KEY\|KEY\|KEY VALUE]` | Open the settings dialog, open it focused on a specific setting (`KEY`), set a setting inline (`KEY VALUE`), or display a setting's current value (`show KEY`). `show` masks secret-named values (for example, tokens or API keys nested under a setting) instead of printing them in clear text. The dialog shows **User**, **Repo**, **Repo (local)**, and **Problems** tabs—switch with Tab/Shift+Tab; a setting overridden in another scope shows a badge naming which scope wins. The **Problems** tab is a cross-scope view of settings that need attention (for example, unknown or invalid keys); its label shows a count, such as `Problems (2)`, when any scope has an issue, and otherwise just reads `Problems`. The dialog also includes a global search that finds visible settings, areas, and local resources. Add `--repo` or `--local` to target `.github/copilot/settings.json` or `.github/copilot/settings.local.json` instead of the user settings file—for example, `/settings --repo model gpt-6-astra`. Only [repo-overridable keys](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#repository-settings-githubcopilotsettingsjson) can be set this way. Rows governed by an active organization or MDM managed policy render read-only with a `(managed)` tag. See [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/change-settings). | | `/share [link\|off\|file\|html\|gist\|research] [...]`, `/export [...]` | Share the current session. With no subcommand, opens a sharing menu without sharing or exporting anything. `link` shares the session and prints a shareable {% data variables.product.github %} link. `off` or `link off` stops link sharing. `file [session\|research] [PATH]` exports to a Markdown file. `html [session\|research] [PATH]` exports to an HTML file. `gist [session\|research]` creates a {% data variables.product.github %} gist. `research [PATH]` exports the research report. | | `/skills` | Open the plugins dashboard on the Skills tab. | | `/skills list` | List all available skills. | @@ -638,7 +638,7 @@ These are the slash commands you can use from within an interactive CLI session. | `/theme [default\|github\|dim\|high-contrast\|colorblind]` | View or set the color mode. | | `/tuikit [colors\|icons\|select\|tabbar]` | Preview TUIkit design-system components and color tokens. | | `/undo`, `/rewind` | Open the rewind picker to roll the session back to an earlier user turn. Choose between: **Conversation only** (roll back the conversation, leaving files as they are) or **Conversation + files** (also restore the files {% data variables.product.prodname_copilot_short %} changed in that turn, and later discarded turns, to their pre-change contents, skipping any you have since edited yourself). File changes are tracked per turn across editing tools, shell commands, and sub-agents, so Git is not required. | -| `/update`, `/upgrade` | Update the CLI to the latest version. | +| `/update`, `/upgrade` | Update the CLI to the latest version. `/update stable` or `/update prerelease` also saves the selected channel for future updates. | | `/usage` | Display session usage metrics and statistics, including per-model token totals. For token-based-billing accounts, each model's row also shows its own {% data variables.product.prodname_ai_credit_singular %} consumption (for example, `1 AIC`). Billed models with no token counts show credits only. | | `/user [show\|list\|switch]` | Manage signed-in accounts. | | `/version` | Display version information and check for updates. | @@ -705,7 +705,7 @@ Use `/collect-debug-logs [file|gist|share] [PATH]` to gather debug logs for trou | `--continue` | Resume the most recent session in the current working directory, falling back to the globally most recent session. Conflicts with `--resume`. | | `--deny-tool=TOOL ...` | Tools the CLI does not have permission to use. Will not prompt for permission. For multiple tools, use a quoted, comma-separated list. | | `--deny-url=URL ...` | Deny access to specific URLs or domains, takes precedence over `--allow-url`. For multiple URLs, use a quoted, comma-separated list. | -| `--disable-builtin-mcps` | Disable all built-in MCP servers (currently: `github-mcp-server`). | +| `--disable-builtin-mcps` | Disable the built-in server set for this run. This does not disable every plugin-provided server. See [Built-in MCP servers](#built-in-mcp-servers) for the affected servers and how to disable computer use. | | `--disable-client-telemetry` | Disable telemetry sent by the CLI. Does not affect server-side telemetry. | | `--disable-mcp-server=SERVER-NAME` | Disable a specific MCP server (can be used multiple times). | | `--disallow-temp-dir` | Prevent automatic access to the system temporary directory. | @@ -725,7 +725,7 @@ Use `/collect-debug-logs [file|gist|share] [PATH]` to gather debug logs for trou | `--max-ai-credits=CREDITS` | Set a soft maximum for AI Credits allowed for each response. The limit resets per user message and can be adjusted mid-session with `/limits`. See [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/set-session-limit). | | `--max-autopilot-continues=COUNT` | Maximum number of automatic continuations outside an active autopilot objective (default: 5). Must be a non-negative integer. Malformed values (`NaN`, negative, fractional, or scientific notation) are rejected. See [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/use-autopilot-mode). | | `--mode=MODE` | Set the initial agent mode (choices: `interactive`, `plan`, `autopilot`). Combine with `--plan` (as `--plan --mode autopilot`) for plan-then-autopilot: the session starts in plan mode and automatically progresses to autopilot mode once the plan is ready, instead of waiting for a human to approve it. Any other `--plan --mode MODE` pairing is rejected. | -| `--model=MODEL` | Set the AI model you want to use. Pass `auto` as the value to let {% data variables.product.prodname_copilot_short %} pick the best available model automatically. See [AUTOTITLE](/copilot/concepts/models/auto-model-selection). | +| `--model=MODEL` | Set the AI model you want to use. Pass `auto` as the value to let {% data variables.product.prodname_copilot_short %} pick the best available model automatically. An explicit `--model` takes precedence over a custom agent's `model` unless the agent sets `model-policy: required`. See [AUTOTITLE](/copilot/concepts/models/auto-model-selection). | | `--mouse[=VALUE]` | Enable or disable mouse support in the interactive interface. VALUE can be `on` (default) or `off`. When enabled, the CLI captures mouse events—scroll wheel, clicks, and so on—to navigate its own interface, such as scrolling the timeline or clicking tabs. When disabled, the terminal's native mouse behavior, such as text selection and scrollback, is preserved. When you set this option explicitly, the value is persisted to your configuration file. | | `-n NAME`, `--name=NAME` | Set a name for the new session. Used by `--resume` and `/resume` to find sessions by name. | | `--no-ask-user` | Disable the `ask_user` tool (the agent works autonomously without asking questions). | @@ -738,7 +738,7 @@ Use `/collect-debug-logs [file|gist|share] [PATH]` to gather debug logs for trou | `--no-remote` | Removed. Use `/remote off` during an interactive session to end its remote connection. | | `--no-remote-export` | Renamed to `--sync-session=off`. | | `--output-format=FORMAT` | FORMAT can be `text` (default) or `json` (outputs JSONL: one JSON object per line). | -| `-p PROMPT`, `--prompt=PROMPT` | Execute a prompt programmatically (exits after completion, or with a nonzero status if the run is interrupted). The exit summary includes a `copilot --resume=SESSION-ID` hint for continuing the session. See [AUTOTITLE](/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically). | +| `-p PROMPT`, `--prompt=PROMPT` | Execute a prompt programmatically (exits after completion, or with a nonzero status if the run is interrupted). The exit summary includes a `copilot --resume=SESSION-ID` hint for continuing the session. Use `@` followed by a file or directory path in the prompt to include it as context, for example `copilot -p "Explain @src/app.js"`. See [AUTOTITLE](/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically). | | `--plan` | Start in plan mode. Shorthand for `--mode plan`. Cannot be combined with `--autopilot`. Can be combined with `--mode autopilot` for plan-then-autopilot; any other `--mode` value is rejected. | | `--plain-diff` | Disable rich diff rendering (syntax highlighting via the diff tool specified by your Git config). | | `--plugin-dir=DIRECTORY` | Load a plugin from a local directory (can be used multiple times). A relative path resolves against the session working directory (the `--resume`, `--worktree`, or `-C` directory), regardless of option order. Agents contributed by a `--plugin-dir` plugin are available in server-mode (`--server`) sessions as well as interactive and `-p` sessions. | @@ -1201,19 +1201,20 @@ Control how MCP tool output is processed using the `filterMapping` field in a se ### Built-in MCP servers -The CLI includes built-in MCP servers that are available without additional setup. +The CLI automatically configures `github-mcp-server` when authentication is available, unless you disable it or supply your own configuration. Other servers depend on your account, platform, CLI version, and enabled plugins. They are not all available or enabled by default. -| Server | Description | -|--------|-------------| -| `github-mcp-server` | {% data variables.product.github %} API integration: issues, pull requests, labels, commits, code search, and {% data variables.product.prodname_actions %}. | -| `playwright` | Browser automation: navigate, click, type, screenshot, and form handling. | -| `fetch` | HTTP requests via the `fetch` tool. | -| `time` | Time utilities: `get_current_time` and `convert_time`. | -| `computer-use` | Screen capture and mouse and keyboard control. Disabled by default. Enable it for a session with `/mcp enable computer-use`. | +| Server | Description | Availability and setup | +|--------|-------------|------------------------| +| `github-mcp-server` | {% data variables.product.github %} integration, including repository access and code search. | Enabled by default when authentication is available. The exposed tools depend on your configuration. | +| `WorkIQ` | Hosted MCP server associated with a Microsoft Entra account. | Discovered after you sign in with a Microsoft Entra account. Disabled by default. See [Account-derived WorkIQ](#account-derived-workiq). | +| `browser-use` | Browser interaction through a bundled plugin. | Available in CLI versions that include the plugin. Disabled by default. Enable it with `/mcp enable browser-use`, install the matching browser extension and {% data variables.copilot.copilot_cli_npm_version %}, then run `/browser-use:activate` or start a new session. The legacy server name is `github-copilot-browser`. | +| `computer-use` | Desktop application interaction through a bundled plugin. | Available for local sessions on macOS and Windows. Disabled by default. Enable it with `/computer on`. On macOS, Accessibility and Screen Recording permissions are required. See [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/computer-use). | + +Managed settings can prevent you from enabling a server or its plugin. -Use `--disable-builtin-mcps` to disable all built-in servers, or `--disable-mcp-server SERVER-NAME` to disable a specific one. +`--disable-builtin-mcps` disables `github-mcp-server`, `WorkIQ`, `browser-use`, and the legacy browser server name `github-copilot-browser` for the current run. It does not disable `computer-use`. Use `--disable-mcp-server computer-use` to disable that server for the current run, or `/computer off` to disable the plugin and save that preference. Use `--disable-mcp-server SERVER-NAME` to disable any other specific server for the current run. -Built-in servers appear in `copilot mcp list`, `copilot mcp get`, and the interactive `/mcp` view alongside user, workspace, and plugin servers. +Use `/mcp list` in an interactive session to check which servers are available and their connection status. Use `copilot mcp list` or `copilot mcp get SERVER-NAME` outside a session to inspect server configuration. A server that is absent or disabled is not necessarily a configuration error. Check its availability and setup requirements above. #### {% data variables.product.github %} MCP server tools diff --git a/content/copilot/reference/copilot-cli-reference/cli-config-dir-reference.md b/content/copilot/reference/copilot-cli-reference/cli-config-dir-reference.md index b3f9143e6d2e..76c6847fd1dd 100644 --- a/content/copilot/reference/copilot-cli-reference/cli-config-dir-reference.md +++ b/content/copilot/reference/copilot-cli-reference/cli-config-dir-reference.md @@ -720,7 +720,7 @@ These settings apply across all your sessions and repositories. You can use the | `askUser` | `boolean` | `true` | Allow the agent to ask clarifying questions. Set to `false` for fully autonomous operation. Can also be set with `--no-ask-user`. | | `autoTier` | `"efficiency"` \| `"balance"` \| `"intelligence"` | unset | Default Auto routing tier for new conversations when the selected model is `auto`. See the `/model` slash command. `"fast"` is no longer selectable and falls back to `"balance"` with a warning if set. | | `autoUpdate` | `boolean` | `true` | Automatically download CLI updates and update first-party plugins at the start of each session. | -| `autoUpdatesChannel` | `"stable"` \| `"prerelease"` | `"stable"` | Update channel. Set to `"prerelease"` to receive pre-release updates. | +| `autoUpdatesChannel` | `"stable"` \| `"prerelease"` | `"stable"` | Update channel. Set to `"prerelease"` to receive pre-release updates. `/update stable` or `/update prerelease` also saves the selected channel for future updates. | | `banner` | `"always"` \| `"once"` \| `"never"` | `"once"` | Animated banner display frequency. | | `bashEnv` | `boolean` | `false` | Enable `BASH_ENV` support for bash shells. Can also be set with `--bash-env` or `--no-bash-env`. | | `beep` | `boolean` | `true` | Play an audible beep when attention is required. | @@ -777,6 +777,8 @@ These settings apply across all your sessions and repositories. You can use the | `sandbox.userPolicy.network.proxy` | `object` | unset | Route sandboxed network traffic through an HTTP(S) proxy. Fields: `url` (required), `username` (optional), `password` (optional). The URL must not contain credentials. Configure credentials in the `/sandbox` dialog's **Network** tab, which masks the password field. Literal passwords use the OS credential store when available, with a local file fallback. `settings.json` holds a secret reference. The password can instead be a whole-field `${VAR}` or `$VAR` environment-variable reference. Proxy enforcement differs by platform, as described below. | | `sandbox.userPolicy.network.allowedHosts` | `string[]` | `[]` | Hosts a sandboxed command is allowed to reach. Entries are exact hostnames, IP addresses, or `*.example.com` for subdomains but not the root domain (`*` matches every host). CIDR blocks are not supported. Do not include URLs or ports. A non-empty list blocks unmatched hosts, except for `localhost`, `127.0.0.1`, and `::1` when outbound and local network access are both enabled. These automatic entries do not change your saved list. Explicit deny rules and enterprise allowlists still apply. Configure from the `/sandbox` dialog's **Network** tab under **Host rules**. | | `sandbox.userPolicy.network.blockedHosts` | `string[]` | `[]` | Hosts a sandboxed command is denied from reaching, matched the same way as `allowedHosts`. `blockedHosts` always takes precedence over a matching `allowedHosts` entry, and denying a domain also denies its subdomains. Configure from the `/sandbox` dialog's **Network** tab under **Host rules**. | +| `sandbox.userPolicy.filesystem.readonlyPaths` | `string[]` | `[]` | Additional file or directory paths that sandboxed commands can read but not modify. | +| `sandbox.userPolicy.filesystem.readwritePaths` | `string[]` | `[]` | Additional file or directory paths that sandboxed commands can read and modify. | | `sandbox.userPolicy.filesystem.deniedPaths` | `string[]` | `[]` | Paths that sandboxed commands are denied access to. Windows requires a version that supports denied paths. If the host cannot enforce them, the command fails rather than running with weaker restrictions. Missing denied paths and their parents are created as directories before launch and are not automatically removed, even for a name such as `.env`. Preparation errors stop launch. The read-only `/sandbox policy` preview creates nothing and omits missing denied paths on Linux. | | `sandbox.userPolicy.seatbelt.keychainAccess` | `boolean` | `false` | macOS only. Grant sandboxed commands access to the system keychain. Configurable only in `settings.json`, not through `/sandbox` or `/settings`. | | `screenReader` | `boolean` | `false` | Enable screen reader optimizations. | diff --git a/content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md b/content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md index d543f34181e8..2bb0c7c57147 100644 --- a/content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md +++ b/content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md @@ -220,8 +220,9 @@ To persist a model selection across shell sessions, you can set the `model` key When determining which model to use for a given prompt, the CLI checks for model specifications in the following order of precedence (from highest to lowest): -* Where a custom agent is used: the model specified in the custom agent definition (if any). +* Where a custom agent is used and sets `model-policy: required`: the model specified in the custom agent definition. * The `--model` command line option. +* Where a custom agent is used: the model specified in the custom agent definition (if any). * The `COPILOT_MODEL` environment variable. * The `model` key in the configuration file (`~/.copilot/settings.json` or `$COPILOT_HOME/settings.json`). * The CLI's default model. diff --git a/content/copilot/reference/hooks-reference.md b/content/copilot/reference/hooks-reference.md index 57ff8a326914..a73e5b0a02f2 100644 --- a/content/copilot/reference/hooks-reference.md +++ b/content/copilot/reference/hooks-reference.md @@ -108,7 +108,7 @@ This section applies to **{% data variables.copilot.copilot_in_the_cloud_short % Hook configuration files use JSON format with version `1`. > [!NOTE] -> If a hook configuration file loaded from a directory (for example, `.github/hooks/`) contains a malformed hook item, only that item is dropped and logged—valid sibling hooks in the same file still load. Structural errors (invalid JSON, a bad `version`, or a non-array event list) still reject the entire file. Hooks defined inline in `settings.json` remain strict: any item-level validation error rejects the whole `hooks` field. Other configuration files always load independently. +> If a hook configuration file loaded from a directory (for example, `.github/hooks/`) contains a malformed hook item, only that item is dropped and logged—valid sibling hooks in the same file still load. Structural errors (invalid JSON, a bad `version`, or a non-array event list) still reject the entire file. Hooks defined inline in `settings.json` remain strict: any item-level validation error rejects the whole `hooks` field. Other configuration files always load independently. The CLI prints `! Invalid hook configuration in FILE: REASON` for each skipped file or entry when repository hooks load at startup or after `/cd` into a repository. ### Command hooks @@ -205,9 +205,11 @@ Progress messages are display-only and do not affect hook output or decision log > [!NOTE] > **{% data variables.copilot.copilot_cli_short %} only.** -When the session sandbox is enabled, command hooks from the repository, your user settings, and plugins run inside it, with the same access as the agent's shell commands. A hook can also read the directory it was loaded from, so a plugin can run the scripts it ships, and a plugin hook can write to its data directory (`$COPILOT_PLUGIN_DATA`). +When the session sandbox is enabled, command hooks from the repository, your user settings, and plugins run inside it, under the same sandbox policy rules as the agent's shell commands. A hook can also read the directory it was loaded from, so a plugin can run the scripts it ships, and a plugin hook can write to its data directory (`$COPILOT_PLUGIN_DATA`). -A hook's `cwd` and `env` fields don't widen that access: a `cwd` outside the session's grants gives the hook no access there, and variables such as `TMPDIR` or `PATH` set in the hook's `env` grant nothing. When a hook fails in the sandbox, {% data variables.product.prodname_copilot_short %} shows a warning once per hook and session. To give a hook more access, add the required paths to `sandbox.userPolicy` in your settings. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#user-settings-copilotsettingsjson). +When **Allow dev tool access** is enabled, additional access depends on tools identified in the hook command and your project files. See [AUTOTITLE](/copilot/concepts/security-governance-and-network-settings/understanding-local-sandboxing). {% data variables.copilot.copilot_cli_short %} does not inspect script files or expand a hook's access after it starts. A tool called from a script or through another command may therefore lack access to its configuration or cache, even if running the tool directly works. + +A hook's `cwd` and `env` fields don't widen that access: a `cwd` outside the session's grants gives the hook no access there, and variables such as `TMPDIR` or `PATH` set in the hook's `env` grant nothing. When a hook fails in the sandbox, {% data variables.product.prodname_copilot_short %} shows a warning once per hook and session. For help identifying and granting missing access, see [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/use-hooks#troubleshooting-sandboxed-hooks). Policy hooks always run on the host, outside the sandbox, even when the session sandbox is enabled. A policy hook should not run scripts from the workspace. @@ -498,6 +500,8 @@ Tools with no Claude equivalent keep their runtime names. > [!IMPORTANT] > **Command vs HTTP fail behavior for `preToolUse`:** Command `preToolUse` hooks are **fail-closed** on errors—a crash or non-zero exit (including exit `2`) denies the tool call, even if the hook's stdout JSON reports `permissionDecision: "allow"`. Command hook **timeouts are always fail-open, even for `preToolUse` and admin-deployed policy hooks**—a timed-out hook surfaces a warning and lets the tool call proceed through the normal permission flow instead of denying it. HTTP `preToolUse` hooks are **fail-open**—a network error, timeout, or non-2xx response falls through to the default permission flow. Choose the variant that matches your security requirements. +> **Parallel tool calls:** When the model sends a batch of parallel tool calls, `preToolUse` hooks for different calls run concurrently. Hooks for a single call still run in order, so avoid hooks that depend on cross-call ordering. + ### `postToolUse` / `PostToolUse` **camelCase input:** @@ -866,7 +870,7 @@ If `additionalContext` is returned, the text is injected into the session as a p ## Matcher filtering -Several events accept an optional `matcher` regex on each hook entry that filters which invocations the hook fires for. It is compiled as `^(?:PATTERN)$` and must match the full value. Invalid regexes cause the hook entry to be skipped. +Several events accept an optional `matcher` regex on each hook entry that filters which invocations the hook fires for. It is compiled as `^(?:PATTERN)$` and must match the full value. Invalid regexes cause the hook entry to be skipped, and the CLI prints `! Invalid hook configuration in FILE: REASON`. | Event | `matcher` is matched against | |-------|------------------------------| diff --git a/data/features/copilot-cli-ghes-ga.yml b/data/features/copilot-cli-ghes-ga.yml new file mode 100644 index 000000000000..db0ed9f10abd --- /dev/null +++ b/data/features/copilot-cli-ghes-ga.yml @@ -0,0 +1,5 @@ +# GitHub Copilot CLI support for GitHub Enterprise Server, GA +# GA from the initial release. GHES 3.22 requires patch 3.22.3. + +versions: + ghes: '>=3.23' diff --git a/data/release-notes/enterprise-server/3-22/0.yml b/data/release-notes/enterprise-server/3-22/0.yml index 0945b940f398..4d43b818670c 100644 --- a/data/release-notes/enterprise-server/3-22/0.yml +++ b/data/release-notes/enterprise-server/3-22/0.yml @@ -273,7 +273,11 @@ sections: # https://github.com/github/releases/issues/6651 - | Starting in 3.22, networking-related syscalls will be disabled by default in the pre-receive hook environment. For enhanced security, hook environments will be placed in dedicated network namespaces. You will be able to override the default setting by setting pre-receive-hook-networking to enabled. In many cases, push rulesets are an alternative for many pre-receive hooks. For more information, see [AUTOTITLE](/enterprise-server@3.22/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets#push-rulesets). + - | + The retirement of {% data variables.product.prodname_enterprise_backup_utilities %} was announced in the {% data variables.product.prodname_enterprise_backup_utilities %} [3.20.0](https://github.com/github/backup-utils/releases/tag/v3.20.0) and [3.21.0](https://github.com/github/backup-utils/releases/tag/v3.21.0) release notes and the [3.20.0 instance administration release notes](/enterprise-server@3.20/admin/release-notes#3.20.0). This note reiterates that announcement. {% data variables.product.prodname_enterprise_backup_utilities %} are retired starting in 3.22. There will not be a {% data variables.product.prodname_enterprise_backup_utilities %} release for 3.22.0. We will continue to support {% data variables.product.prodname_enterprise_backup_utilities %} in 3.21 and earlier versions during their respective support windows. Please migrate to the {% data variables.product.prodname_enterprise_backup_service %} before upgrading to 3.22. For more information, see [AUTOTITLE](/admin/backing-up-and-restoring-your-instance/about-the-backup-service-for-github-enterprise-server). [Updated: 2026-11-04] errata: - | These release notes previously included a note about required reviewers rules for repository rulesets. The feature is not available in this release and will be included in a future release. [Updated: 2026-10-19] + - | + These release notes did not include a note about the Backup Utilities retirement because it had already been communicated multiple times. We are repeating the information here for clarity. [Updated: 2026-11-04] diff --git a/src/content-pipelines/state/copilot-cli.sha b/src/content-pipelines/state/copilot-cli.sha index e35246141153..9ce243d1dd16 100644 --- a/src/content-pipelines/state/copilot-cli.sha +++ b/src/content-pipelines/state/copilot-cli.sha @@ -1 +1 @@ -62c2557a991724de4958ebaec26578f1f7b72bb2 +0b57c4adac1b8ba73966403a2b562b3128b50c98