diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml index 094defe6..873e55b3 100644 --- a/.github/workflows/winget.yml +++ b/.github/workflows/winget.yml @@ -41,4 +41,26 @@ jobs: .\wingetcreate.exe update $packageId ` --version $packageVersion ` --urls "$installerUrlx64|x64" "$installerUrlarm64|arm64" ` - --submit + --out manifests + + # Add PowerShell dependency to installer manifest + $installerManifest = Get-ChildItem -Path manifests -Filter "*.installer.yaml" -Recurse | Select-Object -First 1 -ExpandProperty FullName + if (-not $installerManifest) { + Write-Error "No installer manifest (*.installer.yaml) was found in the 'manifests' directory." + exit 1 + } + $content = Get-Content -Path $installerManifest -Raw + $dependency = @" + Dependencies: + PackageDependencies: + - PackageIdentifier: Microsoft.PowerShell + MinimumVersion: "7.0.0" + "@ + # Remove existing top-level Dependencies block (if any), then insert ours + $content = $content -replace '(?m)^Dependencies:\r?\n([ ]+.+\r?\n)*', '' + $content = $content -replace '(?m)^Installers:', "$dependency`nInstallers:" + Set-Content -Path $installerManifest -Value $content + + # Submit the modified manifest + $manifestPath = Split-Path $installerManifest + .\wingetcreate.exe submit $manifestPath diff --git a/README.md b/README.md index d5dae010..347cf2dc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# GitHub Copilot CLI (Public Preview) +# GitHub Copilot CLI The power of GitHub Copilot, now in your terminal. @@ -38,61 +38,64 @@ If you have access to GitHub Copilot via your organization or enterprise, you ca ### Installation -Install with [WinGet](https://github.com/microsoft/winget-cli) (Windows): +Install with the install script (macOS and Linux): ```bash -winget install GitHub.Copilot +curl -fsSL https://gh.io/copilot-install | bash ``` +Or + ```bash -winget install GitHub.Copilot.Prerelease +wget -qO- https://gh.io/copilot-install | bash ``` -Install with [Homebrew](https://formulae.brew.sh/cask/copilot-cli) (macOS and Linux): +Use `| sudo bash` to run as root and install to `/usr/local/bin`. -```bash -brew install copilot-cli -``` +Set `PREFIX` to install to `$PREFIX/bin/` directory. Defaults to `/usr/local` +when run as root or `$HOME/.local` when run as a non-root user. + +Set `VERSION` to install a specific version. Defaults to the latest version. + +For example, to install version `v0.0.369` to a custom directory: ```bash -brew install copilot-cli@prerelease +curl -fsSL https://gh.io/copilot-install | VERSION="v0.0.369" PREFIX="$HOME/custom" bash ``` -Install with [npm](https://www.npmjs.com/package/@github/copilot) (macOS, Linux, and Windows): +Install with [Homebrew](https://formulae.brew.sh/cask/copilot-cli) (macOS and Linux): ```bash -npm install -g @github/copilot +brew install copilot-cli ``` ```bash -npm install -g @github/copilot@prerelease +brew install copilot-cli@prerelease ``` -Install with the install script (macOS and Linux): + +Install with [WinGet](https://github.com/microsoft/winget-cli) (Windows): ```bash -curl -fsSL https://gh.io/copilot-install | bash +winget install GitHub.Copilot ``` -Or - ```bash -wget -qO- https://gh.io/copilot-install | bash +winget install GitHub.Copilot.Prerelease ``` -Use `| sudo bash` to run as root and install to `/usr/local/bin`. -Set `PREFIX` to install to `$PREFIX/bin/` directory. Defaults to `/usr/local` -when run as root or `$HOME/.local` when run as a non-root user. - -Set `VERSION` to install a specific version. Defaults to the latest version. +Install with [npm](https://www.npmjs.com/package/@github/copilot) (macOS, Linux, and Windows): -For example, to install version `v0.0.369` to a custom directory: +```bash +npm install -g @github/copilot +``` ```bash -curl -fsSL https://gh.io/copilot-install | VERSION="v0.0.369" PREFIX="$HOME/custom" bash +npm install -g @github/copilot@prerelease ``` + ### Launching the CLI ```bash @@ -118,14 +121,74 @@ Launch `copilot` in a folder that contains code you want to work with. By default, `copilot` utilizes Claude Sonnet 4.5. Run the `/model` slash command to choose from other available models, including Claude Sonnet 4 and GPT-5. +### Experimental Mode + +Experimental mode enables access to new features that are still in development. You can activate experimental mode by: + +- Launching with the `--experimental` flag: `copilot --experimental` +- Using the `/experimental` slash command from within the CLI + +Once activated, the setting is persisted in your config, so the `--experimental` flag is no longer needed on subsequent launches. + +#### Experimental Features + +- **Autopilot mode:** Autopilot is a new mode (press `Shift+Tab` to cycle through modes), which encourages the agent to continue working until a task is completed. + Each time you submit a prompt to GitHub Copilot CLI, your monthly quota of premium requests is reduced by one. For information about premium requests, see [About premium requests](https://docs.github.com/copilot/managing-copilot/monitoring-usage-and-entitlements/about-premium-requests). For more information about how to use the GitHub Copilot CLI, see [our official documentation](https://docs.github.com/copilot/concepts/agents/about-copilot-cli). +## 🔧 Configuring LSP Servers + +GitHub Copilot CLI supports Language Server Protocol (LSP) for enhanced code intelligence. This feature provides intelligent code features like go-to-definition, hover information, and diagnostics. + +### Installing Language Servers + +Copilot CLI does not bundle LSP servers. You need to install them separately. For example, to set up TypeScript support: + +```bash +npm install -g typescript-language-server +``` + +For other languages, install the corresponding LSP server and configure it following the same pattern shown below. + +### Configuring LSP Servers + +LSP servers are configured through a dedicated LSP configuration file. You can configure LSP servers at the user level or repository level: + +**User-level configuration** (applies to all projects): +Edit `~/.copilot/lsp-config.json` + +**Repository-level configuration** (applies to specific project): +Create `.github/lsp.json` in your repository root + +Example configuration: + +```json +{ + "lspServers": { + "typescript": { + "command": "typescript-language-server", + "args": ["--stdio"], + "fileExtensions": { + ".ts": "typescript", + ".tsx": "typescript" + } + } + } +} +``` + +### Viewing LSP Server Status + +Check configured LSP servers using the `/lsp` command in an interactive session, or view your configuration files directly. + +For more information, see the [changelog](./changelog.md). + ## 📢 Feedback and Participation We're excited to have you join us early in the Copilot CLI journey. -This is an early-stage preview, and we're building quickly. Expect frequent updates--please keep your client up to date for the latest features and fixes! +We're building quickly. Expect frequent updates--please keep your client up to date for the latest features and fixes! -Your insights are invaluable! Open issue in this repo, join Discussions, and run `/feedback` from the CLI to submit a confidential feedback survey! +Your insights are invaluable! Open an issue in this repo, join Discussions, and run `/feedback` from the CLI to submit a confidential feedback survey! diff --git a/changelog.md b/changelog.md index 7792a669..117c9c5d 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,859 @@ +## 1.0.24 - 2026-04-10 + +- preToolUse hooks now respect modifiedArgs/updatedInput, and additionalContext fields +- Custom agent model field now accepts display names and vendor suffixes from VS Code (e.g., "Claude Sonnet 4.5", "GPT-5.4 (copilot)") +- Terminal state (alt screen, cursor, raw mode) is restored correctly after CLI crashes like OOM or segfaults +- The --remote flag is respected when the session sync prompt appears on first run in a GitHub repo +- Redesign exit screen with Copilot mascot and cleaner usage summary layout + +## 1.0.23 - 2026-04-10 + +- Add --mode, --autopilot, and --plan flags to start the CLI directly in a specific agent mode +- Agent no longer hangs on the first turn when the memory backend is unavailable +- Bazel/Buck build target labels (e.g. //package:target) no longer misidentified as file paths +- Ctrl+L clears the terminal screen without clearing the conversation session +- Slash command picker shows full skill descriptions and a refined scrollbar +- /diff, /agent, /feedback, /ide, and /tuikit work while the agent is running +- Display reasoning token usage in the per-model token breakdown when nonzero +- Remote tab correctly shows Copilot coding agent tasks and supports steering via the Tasks API +- Shell output with BEL characters no longer causes repeated terminal beeping +- Migration notice for .vscode/mcp.json now includes a jq command to migrate your config to .mcp.json + +## 1.0.22 - 2026-04-09 + +- MCP tools with non-standard JSON schemas are now sanitized for compatibility with all model providers +- Better handling of large images from MCP and extension tools +- Improved rendering performance with a new simplified inline renderer +- Show a clear message to contact your organization administrator when remote sessions are blocked by policy +- Sub-agent activity no longer shows duplicated tool names (e.g. "view view the file...") +- Permission checks and other hooks now work correctly when using Anthropic models via BYOM/BYOK configuration +- Slash command picker appears above the text input for a more stable layout +- Custom agents can now declare a `skills` field to eagerly load skill content into agent context at startup +- Plugins can now display a post-install message with setup instructions after installation +- Remove .vscode/mcp.json and .devcontainer/devcontainer.json as MCP server config sources; CLI now only reads .mcp.json. A migration hint appears when .vscode/mcp.json is detected without .mcp.json. +- Plugins remain enabled across sessions and auto-install on startup based on user config +- Add sub-agent depth and concurrency limits to prevent runaway agent spawning +- Warn when resuming a session that is already in use by another CLI or application +- CLI no longer crashes on systems affected by a V8 engine bug in grapheme segmentation +- sessionStart and sessionEnd hooks fire once per session in interactive mode instead of once per prompt +- Plugin agents respect the model specified in their frontmatter + +## 1.0.21 - 2026-04-07 + +- Add `copilot mcp` command for managing MCP servers +- Spinner no longer appears stuck when a long-running async shell command is active +- Enterprise GitHub URL input in the login flow now accepts keyboard input and submits on Enter +- Slash command picker no longer flickers or shifts the input while filtering +- Timeline no longer goes blank when content shrinks (e.g., after cancelling or tool completion) +- Plan mode timeline display shows user text without a redundant "Plan" prefix +- Reduce memory usage by automatically shutting down shell sessions that are no longer needed +- Hooks configured with PascalCase event names now receive VS Code-compatible snake_case payloads with hook_event_name, session_id, and ISO 8601 timestamps + +## 1.0.20 - 2026-04-07 + +- Add `copilot help monitoring` topic with OpenTelemetry configuration details and examples +- Spinner stays active until background agents and shell commands finish, and user input remains available throughout +- Azure OpenAI BYOK defaults to the GA versionless v1 route when no API version is configured +- Reduce UI sluggishness during live response streaming +- /yolo and --yolo now behave identically and /yolo state persists across /restart + +## 1.0.19 - 2026-04-06 + +- /mcp enable and /mcp disable now persist across sessions +- OpenTelemetry monitoring: subagent spans now use INTERNAL span kind, and chat spans include a `github.copilot.time_to_first_chunk` attribute (streaming only) +- Plugin hook scripts with missing execute permissions now run correctly on macOS +- Custom agent is properly restored when resuming a session where the agent display name differs from its filename +- Skip IDE auto-connect when session is already in use by another client +- Slash command timeline entries now include the command name (e.g., "Review", "Plan") for better context + +## 1.0.18 - 2026-04-04 + +- New Critic agent automatically reviews plans and complex implementations using a complementary model to catch errors early (available in experimental mode for Claude models) +- Session resume picker correctly groups sessions by branch and repository on first use +- preToolUse hook permissionDecision 'allow' now suppresses the tool approval prompt +- Add notification hook event that fires asynchronously on shell completion, permission prompts, elicitation dialogs, and agent completion + +## 1.0.17 - 2026-04-03 + +- Built-in skills are now included with the CLI, starting with a guide for customizing Copilot cloud agent's environment +- MCP OAuth flows now support HTTPS redirect URIs via a self-signed certificate fallback, improving compatibility with OAuth providers that require HTTPS (e.g., Slack) +- /resume session picker loads significantly faster, especially with large session histories + +## 1.0.16 - 2026-04-02 + +- SQL prompt tags no longer appear when sql tool is excluded via excludedTools or availableTools +- MCP tool calls display tool name and parameter summary in the timeline +- MCP server reconnects correctly with valid authentication when the working directory changes +- Add PermissionRequest hook to allow scripts to programmatically approve or deny tool permission requests +- Remove deprecated `marketplaces` repository setting (use `extraKnownMarketplaces` instead) +- MCP servers load correctly after login, user switch, and /mcp reload +- BYOK Anthropic provider now respects the configured maxOutputTokens limit +- Remove deprecated `marketplaces` repository setting (use `extraKnownMarketplaces` instead) + +## 1.0.15 - 2026-04-01 + +- Remove support for gpt-5.1-codex, gpt-5.1-codex-mini, and gpt-5.1-codex-max models +- Copilot mascot now blinks with subtle eye animations in interactive mode +- User switcher and `/user list` display accounts in alphabetical order +- Add mcp.config.list, mcp.config.add, mcp.config.update, and mcp.config.remove server RPCs for managing persistent MCP server configuration +- Add device code flow (RFC 8628) as a fallback for MCP OAuth in headless and CI environments +- Add `/mcp auth` command and re-authentication UI for MCP OAuth servers with account switching support +- Add postToolUseFailure hooks for tool errors and make postToolUse run only after successful tool calls +- Add /share html command to export sessions and research reports as self-contained interactive HTML files +- Autopilot no longer continues after pressing Escape or Ctrl+C to cancel +- Keystrokes typed while the CLI is loading are no longer lost +- Large tool output preview shows correct character count and up to 500 characters +- Add Home/End and Page Up/Page Down navigation to the diff viewer +- CLI exits immediately after a session ends instead of waiting up to 10 seconds +- Config settings askUser, autoUpdate, storeTokenPlaintext, logLevel, skillDirectories, and disabledSkills now use camelCase names (snake_case still accepted) +- Many settings keys now prefer camelCase names (snake_case names still work) +- Ctrl+D no longer queues a message; use Ctrl+Q or Ctrl+Enter to queue +- MCP servers that are slow to connect no longer block the agent from starting +- Pasting images from the Windows clipboard now works in WSL environments + +## 1.0.14 - 2026-03-31 + +- Images are correctly sent to Anthropic models when using BYOM +- Model picker selection correctly overrides the --model flag for the current session +- Terminal output no longer clears or jumps on error exit +- Shift+Enter inserts a newline in terminals with Kitty keyboard protocol support +- Show underlying error details when a Git marketplace URL fails to clone +- Temp file operations no longer trigger unnecessary permission prompts on macOS +- Allow SDK session participants to respond to elicitation requests via handlePendingElicitation API +- Shell processes are cleaned up properly when a session ends +- SDK exit_plan_mode.requested event is now always emitted, regardless of whether a direct callback is configured +- MCP servers using Microsoft Entra ID authentication no longer show the consent screen on every login +- Grep and glob search results return promptly when a timeout is reached +- Keystrokes are no longer dropped when typing quickly in elicitation dialogs +- Clipboard copy on native Windows no longer includes a stray U+FEFF character at the start of pasted text +- Fixed --config-dir being ignored when resuming a session, causing paths to silently fall back to ~/.copilot +- MCP servers blocked by allowlist policy are now hidden from /mcp show +- Reasoning effort setting now applies correctly when using Bring Your Own Model (BYOM) providers +- Ensure clear error messaging when using classic PATs +- grep tool handles large files and long lines without running out of memory +- MCP server OAuth authentication works when the CLI runs in ACP mode +- Split $BROWSER on spaces +- Pasted text is no longer corrupted when mouse support is active +- Uninstalling a marketplace plugin removes its cached data from disk +- Reduce CPU usage during streaming by optimizing spinner rendering and task polling +- Reduce CLI startup time by running terminal detection, auth, and git operations in parallel +- MCP registry lookups are more reliable with automatic retries and request timeouts +- CLI starts faster due to V8 compile cache reducing parse and compile time on repeated invocations +- Remove support for gemini-3-pro-preview model + +## 1.0.13 - 2026-03-30 + +- Shell processes are cleaned up properly when a session ends +- Reduce CPU usage during streaming by optimizing spinner rendering and task polling +- SDK exit_plan_mode.requested event is now always emitted, regardless of whether a direct callback is configured +- MCP servers using Microsoft Entra ID authentication no longer show the consent screen on every login +- Grep and glob search results return promptly when a timeout is reached +- Keystrokes are no longer dropped when typing quickly in elicitation dialogs +- Clipboard copy on native Windows no longer includes a stray U+FEFF character at the start of pasted text +- Fixed --config-dir being ignored when resuming a session, causing paths to silently fall back to ~/.copilot +- Reduce CLI startup time by running terminal detection, auth, and git operations in parallel +- /rewind and double-Esc now open a timeline picker that can roll back to any point in conversation history, not just the previous snapshot +- MCP registry lookups are more reliable with automatic retries and request timeouts +- CLI starts faster due to V8 compile cache reducing parse and compile time on repeated invocations +- MCP servers can request LLM inference (sampling) with user approval via a new review prompt +- MCP servers blocked by allowlist policy are now hidden from /mcp show +- Reasoning effort setting now applies correctly when using Bring Your Own Model (BYOM) providers +- Ensure clear error messaging when using classic PATs +- grep tool handles large files and long lines without running out of memory +- MCP server OAuth authentication works when the CLI runs in ACP mode +- Split $BROWSER on spaces +- Pasted text is no longer corrupted when mouse support is active +- Uninstalling a marketplace plugin removes its cached data from disk +- Remove support for gemini-3-pro-preview model + +## 1.0.12 - 2026-03-26 + +- MCP servers defined in .mcp.json start correctly when the working directory is the git root +- Clipboard copy works correctly on Windows when non-system clip.exe shadows the system one in PATH +- /diff view correctly renders all lines when intra-line highlighting is present +- Plugin hooks now receive CLAUDE_PROJECT_DIR and CLAUDE_PLUGIN_DATA environment variables, and support {{project_dir}} and {{plugin_data_dir}} template variables in hook configurations +- Workspace MCP servers are now correctly loaded and visible to the agent +- /clear preserves MCP servers in the new session +- Model display header shows the active reasoning effort level (e.g. "(high)") next to the model name +- /session rename auto-generates a session name from conversation history when called without a name argument +- Remove --alt-screen flag and alt_screen setting; alt screen is now always enabled +- OSC 8 hyperlinks are now clickable in VS Code terminals +- PowerShell /flag arguments (e.g., /all, /enum-devices) are no longer mistakenly treated as file paths +- Trusted folder access prompts no longer appear incorrectly on Windows OneDrive paths and case-insensitive filesystems +- Status line payload includes session_name field alongside session_id +- @ file picker no longer shows .git directory contents +- Scroll position stays in place when the terminal is resized +- /yolo path permissions persist after using /clear to start a new session +- Emoji characters are selected and highlighted correctly in terminal text selection +- Sessions with active work are no longer cleaned up by the stale session reaper +- Resume session restores the previously selected custom agent +- CLI no longer crashes with out-of-memory errors when running shell commands that produce high-volume output +- Pressing Escape multiple times during autopilot cancellation no longer leaves the session stuck +- Read .claude/settings.json and .claude/settings.local.json as additional repo config sources +- Model picker opens in full-screen view with inline reasoning effort adjustment using ← / → arrow keys +- OTEL hook executions are now recorded as span events instead of child spans, reducing trace clutter +- User prompt appears in the conversation immediately after pressing Enter +- /allow-all (/yolo) now supports on, off, and show subcommands to enable, disable, or check allow-all mode +- Ctrl+Y in plan mode opens the most recent research report when no plan exists yet + +## 1.0.11 - 2026-03-23 + +- Ensure models appear in picker correctly, display model names where possible +- Show a warning when MCP servers are blocked by policy (e.g. allowlist enforcement) +- Organization policy for third-party MCP servers is now enforced for all users +- Add ~/.agents/skills/ as a personal skill discovery directory, aligning with VS Code's GHCP4A extension default +- Extension hooks from multiple extensions now merge instead of overwriting each other or hooks from hooks.json +- sessionStart hook additionalContext is now injected into the conversation +- /clear now abandons the current session entirely, while /new starts a fresh conversation (keeping the old session backgrounded) +- GitHub MCP server user configuration is respected when connecting to remote hosts +- Terminal screen redraws correctly after process suspend and resume (Ctrl+Z / fg) +- MCP OAuth authentication works with MCP servers like the Atlassian Rovo MCP Server which support Dynamic Client Registration but host authorization metadata at a non-standard URL +- /cd keeps a separate working directory per session, restored when switching sessions +- Custom instructions, MCP servers, skills, and agents are now discovered at every directory level from the working directory up to the git root, enabling full monorepo support +- Startup 'Environment loaded' message now shows the number of loaded hooks +- Background agent progress (current intent and tool calls completed) now surfaces in read_agent and task timeout responses +- statusLine.command path now supports ~ and environment variables (e.g. $HOME, ${VAR:-default}) +- /new and /clear commands accept an optional prompt to start the new session with a first message + +## 1.0.10 - 2026-03-20 + +- Reduced memory usage when viewing large files in their entirety +- /login device flow works correctly in Codespaces and remote terminal environments +- Working directory is correctly detected when using --server mode with remote sessions +- Arrow keys work correctly in terminals using application keypad mode +- Repo hooks (.github/hooks/) now fire correctly when using prompt mode (-p flag) +- /copy writes formatted HTML to clipboard on Windows for pasting into Word, Outlook, and Teams +- SDK clients can register custom slash commands when starting or joining a session +- SDK clients can show elicitation dialogs to the user via session.ui.elicitation +- Add experimental support for multiple concurrent sessions +- Add --effort as a shorthand alias for --reasoning-effort +- Add /undo command to undo the last turn and revert file changes +- Markdown bullet lists render correctly in alt-screen mode when content contains hard line breaks +- Elicitation form shows Shift+Tab hint for navigating between fields in reverse +- Remote session URL displays as a compact clickable 'Open in browser' link instead of a duplicated raw URL +- Session history is no longer lost when exiting via /quit, Ctrl+C, or restart +- Hook matcher filters defined in nested hook structures are now correctly applied to inner hook items +- Plugins using .claude-plugin/ or .plugin/ manifest directories now load their MCP and LSP servers correctly +- /terminal-setup no longer shows a misleading error for WSL users +- Model picker reorganizes models into Available, Blocked/Disabled, and Upgrade tabs based on user plan and policy +- Workspace MCP servers from .mcp.json, .vscode/mcp.json, and devcontainer.json are now loaded only after folder trust is confirmed +- Config settings renamed to camelCase: `includeCoAuthoredBy`, `effortLevel`, `autoUpdatesChannel`, `statusLine` (old names still work) +- When copying assistant responses, the leading 2-space UI indent is stripped from selections where all selected lines share that indent +- Plugins loaded via --plugin-dir now appear in /plugin list under a separate 'External Plugins' section + +## 1.0.9 - 2026-03-19 + +- Spurious I/O error messages (ENOTCONN, EIO) no longer appear in the timeline during SSH disconnects or terminal closes +- Add include_gitignored config option to include gitignored files in @ file search +- Copying text on WSL correctly preserves CJK and other non-ASCII characters +- Marketplace and plugin installs from shortened URLs (e.g., aka.ms links) now work correctly + +## 1.0.8 - 2026-03-18 + +- Agent mode labels and borders display correct colors on non-truecolor terminals (tmux, SSH, screen) +- Alternate screen buffer is now enabled by default for a cleaner terminal experience +- Exit plan mode tool remains available when an extension subprocess joins an active session +- Repo-level hooks are loaded only after folder trust is confirmed, not before the trust dialog is shown +- Idle subagents no longer clutter the /tasks view — they are hidden after 2 minutes of inactivity +- Add extension mode setting to control extensibility +- MCP servers can be validated against configured registries using the experimental MCP_ALLOWLIST feature flag +- Allow --resume to accept a task ID in addition to a session ID +- Support defining hooks in settings.json, settings.local.json, and config.json +- Scroll works correctly in macOS Terminal.app and other terminals that don't support SGR mouse encoding +- Mouse scroll works correctly in tmux after returning from an external editor +- Ctrl-C in prompt mode now exits immediately instead of waiting for the request to complete +- Spinner animation no longer delays visible output from appearing in the timeline +- Dialog titles display consistently inside all dialog boxes + +## 1.0.7 - 2026-03-17 + +- Improve color contrast across CLI themes for better readability and accessibility +- User messages display with a subtle background color for visual differentiation from assistant messages +- Add support for gpt-5.4-mini model +- Tab bar selected tab uses compact [label] style with cleaner spacing +- Add "customize" mode to system message config for section-level system prompt overrides +- Double-Esc clears input when text is present, or triggers undo when the prompt is empty, with a hint shown after the first Esc +- Session resume no longer fails with 'Session file is corrupted' for sessions created before 1.0.6 +- Branch indicator distinguishes unstaged changes (\*), staged changes (+), and untracked files (%) in the header +- Add experimental SDK session APIs to list and manage skills, MCP servers, and plugins, with optional config auto-discovery from the working directory +- Add subagentStart hook that fires when a subagent is spawned, with support for injecting additional context into the subagent's prompt +- Pro and trial users now see all models they are entitled to in the model picker +- CLI restart no longer re-sends the -i/--interactive prompt to the new session +- Resolve an edge case where auto-update could leave an incomplete package on Windows + +## 1.0.6 - 2026-03-16 + +- Autopilot continuation no longer gets permanently blocked after an error in a previous turn +- In autopilot, task_complete summary is now required and renders as markdown +- Input placeholder text is no longer read aloud by screen readers on every prompt submission +- Free tree-sitter WASM objects after shell command parsing to prevent memory leak +- /help dialog starts scrolled to the top in alt-screen mode +- Auto-update correctly recovers from race conditions on Windows +- CLI no longer fails to load on Windows after updating while another instance is running +- Reduce memory usage by eliminating redundant environment variable copies per child process spawn +- Remaining requests widget no longer shows inaccurate quota data for Copilot Free users +- Resolve session crashes caused by HTTP/2 connection pool race conditions when sub-agents are active +- CLI loads the latest version of itself after an auto-update +- Kill command validation no longer incorrectly blocks some legitimate commands. e.g. p.kill() in a python script +- Instruction file frontmatter applyTo field accepts both string and array values +- Improve streaming and tool-output memory usage +- Model can discover and use tools dynamically with tool search for Claude models +- Hooks fire correctly when resuming a previous session +- Prompt input in alt screen mode renders all lines without truncation +- Links and right-click paste no longer trigger twice when running in VS Code's integrated terminal +- Hook configuration files now work across VS Code, Claude Code, and the CLI without modification by accepting PascalCase event names alongside camelCase +- Native module prebuilds (e.g., conpty.node on Windows ARM64) load reliably on first launch +- Subagent elapsed time in /tasks view freezes when idle and resumes when active again +- Flags --enable-all-github-mcp-tools, --add-github-mcp-toolset, and --add-github-mcp-tool now take effect when using the SDK (ACP mode) +- Custom instruction file paths load correctly when using COPILOT_CUSTOM_INSTRUCTIONS_DIRS +- Command output is no longer lost when a command causes the shell to exit +- Plugins using .claude-plugin/plugin.json are discovered when loaded via --plugin-dir +- Fix handling of shift+enter on VS Code with old /terminal-setup config. +- Agent creation wizard shows the correct user agents directory path +- Support Open Plugin spec file locations for loading plugin and marketplace manifests +- Show friendlier error messages and provide keyboard shortcut to open event links in browsers +- Extension tools now work with the permissions system, use `skipPermission` per-tool to bypass permission prompts +- Hook config files now support Claude Code's nested matcher/hooks structure and optional type field +- Sub-agents launched by the task tool are assigned human-readable IDs based on their name (e.g., `math-helper-0`) instead of generic `agent-0` identifiers +- The create_pull_request tool now includes the PR URL in its output so the agent can share the direct link +- read_agent output includes inbound messages that triggered each turn in multi-turn agents +- Improve compatibility with the Open Plugins spec: support `.lsp.json`, PascalCase hook event names, `exclusive` path mode, and `:` namespace separator + +## 1.0.5 - 2026-03-13 + +- Terminal title resets to default after running /clear or /new +- Add /extensions command to view, enable, and disable CLI extensions +- @ file mentions now support paths outside the project: absolute paths (@/usr/...), home directory (@~/...), and relative parent paths (@../...) +- Toggling experimental mode with /experimental on|off automatically restarts the CLI to apply changes immediately +- Right-click paste goes to the active dialog input instead of the main conversation input +- Introducing /pr to help create and view PRs, automatically fix CI failures, address review feedback, and resolve merge conflicts +- Block network (UNC) paths to prevent credential leakage via SMB authentication +- Send follow-up messages to background agents with the write_agent tool for multi-turn conversations +- Memory storage errors now indicate when repository doesn't exist or you lack write access +- Show a clear error when a classic Personal Access Token (ghp\_) is set in environment variables instead of silently exiting +- Diff view displays correctly on Windows instead of showing corrupted/overwritten text +- Fix Kitty keyboard protocol escape sequences appearing at shutdown +- Setting claude-sonnet-4.6 as the default model is now preserved correctly +- Plugin uninstall reliably removes files using the stored install path +- Add /version command to display CLI version and check for updates from within the session +- Add experimental embedding-based dynamic retrieval of MCP and skill instructions per turn +- Syntax highlighting in /diff with support for 17 programming languages +- Add preCompact hook to run commands before context compaction starts +- Request ID from the API now appears in the timeline when errors occur after retries are exhausted +- PR descriptions with backtick-formatted code render correctly on Windows/PowerShell +- Show a helpful error message when a file path is passed as a CLI command +- Session reports an authentication error instead of hanging when the token is invalid or expired +- View tool shows partial content for large single-line files (e.g. minified JS, large JSON blobs) instead of empty output +- /changelog supports `last `, `since `, and `summarize` to browse and summarize multiple release notes at once +- Hooks config files that omit the version field are now accepted by the CLI + +## 1.0.4 - 2026-03-11 + +- Add `session.shell.exec` and `session.shell.kill` RPC methods for executing shell commands with streaming stdout/stderr output +- Custom agents from --plugin-dir plugins now load correctly in ACP mode +- Adaptive color engine with dynamic color modes and interactive theme picker. Gracefully degrades on limited-color terminals and Windows +- MCP OAuth re-authentication works reliably when callback port changes or when using Microsoft Entra ID +- Replace /pr open with /pr view [local|web] to view PR status locally or open in browser +- Enables OpenTelemetry instrumentation for observability into agent sessions, LLM calls, and tool executions +- Extensions can now be written as CommonJS modules (extension.cjs) +- Show loaded extensions count in the Environment loaded startup message +- Support disableAllHooks flag to disable all hooks from a configuration file +- Support Azure DevOps repository identification in session logs +- Session export header renders each field on its own line in shared gists +- Auto-update now retries without authentication token on SAML enforcement errors +- Autopilot mode stops continuing after API errors instead of looping indefinitely +- Status line context window percentage no longer inflates across turns by using the last call's input and output tokens instead of cumulative totals +- Kitty keyboard protocol is properly disabled on suspend when using alternate screen +- Only show reasoning headers when it's the only reasoning text available. +- Terminal properly resets when CLI crashes, preventing shell corruption +- /update command automatically restarts to apply updates instead of requiring manual exit +- OAuth authentication now handles Microsoft Entra ID and other OIDC servers reliably with proper resource indicators and refresh token support +- Show individual instruction file names in /instructions picker with [external] labels for injected files +- Path permission dialog offers a one-time approval option in addition to adding the path to the allowed list +- Add --reasoning-effort CLI flag to set reasoning effort level +- Hooks can now request user confirmation before tool execution with 'ask' permission decision +- Add configure-copilot sub-agent for managing MCP servers, custom agents, and skills via the task tool +- Interactive shell initialization no longer times out on slow machines +- Faster shell commands on Windows by skipping PowerShell profile loading +- Improve CLI help documentation to use standard --option=value format and comma-separated list syntax + +## 1.0.3 - 2026-03-09 + +- Enable alternate screen buffer by default for staff users +- Extensions are now available as an experimental feature — ask Copilot to write custom tools and hooks for itself using @github/copilot-sdk +- Document GH_HOST, HTTP_PROXY, HTTPS_PROXY, NO_COLOR, and NO_PROXY environment variables in help +- Read MCP server configuration from .devcontainer/devcontainer.json +- Add --binary-version flag to query the CLI binary version without launching +- Add /restart command to hot restart the CLI while preserving your session +- Background task notifications display in timeline with expandable detail +- Type 'quit' to exit the CLI, in addition to 'exit' +- Add extraKnownMarketplaces repository setting to replace marketplaces +- Add Windows Terminal support to /terminal-setup command +- /reset-allowed-tools now fully undoes /allow-all and re-triggers the autopilot permission dialog +- Improved handling of batched queries in the SQL tool +- Login flow no longer hangs on Ubuntu when system keyring is unresponsive +- Terminal is properly reset when CLI crashes unexpectedly +- Table disables borders in screen reader mode to prevent announcing decorative characters +- MCP servers with non-conforming outputSchema are now accessible +- /plugin update now works for GitHub-installed plugins +- /add-dir directories persist across session changes like /clear and /resume +- Prevent env command from being treated as safe to allow without approval +- Placeholder text color displays correctly when wrapping in narrow terminals +- /plugin update now works with marketplaces defined in project settings +- Retry status messages now display to show progress during server error recovery +- Show loading spinner in diff mode while fetching changes +- Suppress /init suggestion when .github/instructions/ contains instructions +- Rename merge_strategy config to mergeStrategy for consistency +- Suppress unknown field warnings in skill and command frontmatter +- Trust safe sed commands to run without confirmation + +## 1.0.2 - 2026-03-06 + +To commemorate GitHub Copilot CLI reaching general availability last week, we're incrementing the major version to 1.0! + +- Type 'exit' as a bare command to close the CLI +- Ask_user form now submits with Enter key and allows custom responses in enum fields +- Support 'command' field as cross-platform alias for bash/powershell in hook configs +- Hook configurations now accept timeout as alias for timeoutSec +- Fix handling of meta with control keys (including shift+enter from /terminal-setup) + +## 0.0.423 - 2026-03-06 + +- Users are prompted for shell commands with potentially dangerous expansion or substitution use cases, additional guardrails for malicious exploits +- Block /share gist for EMU and GHE Cloud users with clear error messaging +- Elicitation enum and boolean fields now require Enter to confirm a selection, with a ✓ indicator for confirmed values vs ❯ for the browsing cursor +- MCP servers can now request users to visit a URL for out-of-band interactions such as OAuth flows or API key entry +- Improve explore agent precision and large repository support with better context sharing +- Diff mode displays cleanly on Windows with CRLF line endings + +## 0.0.422 - 2026-03-05 + +- Display request ID in authentication and authorization error messages to aid troubleshooting +- Load personal hooks from ~/.copilot/hooks in addition to repo-level .github/hooks +- Timeline now shows the question in a box and displays 'Making best guess on autopilot' when ask_user is auto-responded +- Add support for GPT-5.4 model +- Plugin cache automatically recovers from a corrupted or incomplete clone without manual intervention +- Show a clear, actionable error message when git is not installed and a remote plugin or marketplace is used +- Text selection persists after copying to clipboard in alt screen +- Scroll view no longer jumps to earlier messages when scrolling during response streaming or with popups open +- Add copy_on_select config option to auto-copy selected text to clipboard in alt screen mode +- IME candidate windows appear at correct cursor position in CJK input +- Add mouse scroll support to /diff in alt-screen mode +- Reduce memory usage in alt-screen mode for long sessions +- Diff mode now works correctly when git color.diff=always is configured +- Opening links on Windows correctly handles URLs with & query parameters +- @-mention file completion always reflects the current state of the working directory +- ESC key to cancel works correctly in tmux and other non-kitty terminals +- Click in the prompt input to reposition the text cursor +- Add /copy command to copy the last response to clipboard +- Links in alt-screen mode are rendered with underline styling for better visibility +- /delegate prompts for a target remote in multi-remote repositories and clarifies confirmation text +- GitHub MCP server stays enabled in repositories that have both Azure DevOps and GitHub remotes +- Colons in inline code render correctly inside markdown tables +- Pressing Ctrl+C on the help dialog now dismisses it cleanly +- Plugin-contributed LSP servers are now loaded, started, and shown in /lsp show +- Pressing Enter in required enum field now selects the highlighted option +- Hide noisy todo bookkeeping queries and show dependency details in timeline +- CLI no longer hangs for minutes when working in a directory with a large number of files +- Add --output-format json flag to emit JSONL in prompt mode for programmatic integrations +- Add exitPlanMode.request protocol method for SDK plan approval support +- Automatic notifications when background shell commands and agents complete +- GitHub MCP server connection status is accurately tracked and counted in the status indicator +- Press Ctrl+R to search command history with reverse incremental search (like Bash) +- Long diff lines no longer overflow and wrap in the diff view +- Add startup prompt hooks to auto-submit prompts or slash commands when a session starts +- Ctrl+K joins lines when cursor is at end of line, matching standard Emacs/terminal behavior +- Escape sequences split across input chunks no longer leak into text input +- Rename `launch_messages` config setting to `companyAnnouncements` +- Show a waiting message when the terminal is handed to an external editor +- Support enabledPlugins in config for automatic plugin installation at startup +- Improve key bindings in reverse history search: Ctrl+J to accept, Ctrl+G to cancel +- Rename repository config from `.github/copilot/config.json` to `settings.json` +- Support installing plugins from ssh:// URLs +- Session usage metrics (requests, tokens, code changes) are now persisted to events.jsonl after each session ends + +## 0.0.421 - 2026-03-03 + +- Autopilot permission dialog appears on first prompt submission instead of on mode switch +- AUTO theme now reads your terminal's ANSI color palette and uses it directly, so colors match your terminal theme +- Add structured form input for the ask_user tool using MCP Elicitations (experimental) +- Plugin commands read extraKnownMarketplaces from project-level .claude/settings.json for Claude compatibility +- Git hooks can detect Copilot CLI subprocesses via the COPILOT_CLI=1 environment variable to skip interactive prompts +- Spurious "write EIO" error entries no longer appear in the timeline during session resume or terminal state transitions +- Python-based MCP servers no longer time out due to buffered stdout +- Error when --model flag specifies an unavailable model +- MCP server availability correctly updates after signing in, switching accounts, or signing out +- Display clickable PR reference next to branch name in the status bar +- Add --plugin-dir flag to load a plugin from a local directory +- Mouse text selection is automatically copied to the Linux primary selection buffer (middle-click to paste) +- Fix VS Code shift+enter and ctrl+enter keybindings for multiline input +- Use consistent ~/.copilot/pkg path for auto-update instead of XDG_STATE_HOME +- ACP clients can configure reasoning effort via session config options +- Click links in the terminal to open them in your default browser +- Support repo-level config via .github/copilot/config.json for shared project settings like marketplaces and launch messages +- Streaming output no longer truncates when running in alt-screen mode +- Right-click paste no longer produces garbled text on Windows +- Shell command output on Windows no longer renders as "No changes detected" in the timeline +- GitHub API errors no longer appear as raw HTTP messages in the terminal when using the # reference picker +- Markdown tables render with proper column widths, word wrap, and Unicode borders that adapt to terminal width +- MCP elicitation form displays taller multi-line text input, hides tab bar for single-field forms, and fixes error flashing on field navigation + +## 0.0.420 - 2026-02-27 + +- Auto-update now also updates the binary executable, not just the JS package +- Plugin and marketplace git repos update correctly after force-pushes and tag-based installs +- 502 bad gateway errors are retried automatically and no longer crash the session with raw HTML output +- Copy hint shows cmd+c in Ghostty on macOS and right-click as an alternative for all terminals +- Type # to reference GitHub issues, pull requests and discussions + +## 0.0.419 - 2026-02-27 + +- Add /chronicle command with standup, tips, and improve subcommands powered by session history (experimental) +- Scrolling left or right no longer triggers unintended mouse button presses +- Add Ctrl+F/Ctrl+B as page down/up shortcuts for scrolling in alt-screen views +- Add --mouse/--no-mouse flag and mouse config to disable mouse mode in alt screen +- Home and End keys jump to the top and bottom of the alt-screen scroll buffer +- Add Ctrl+G keyboard shortcut for editing prompts in external editor and dismissing UI elements +- /mcp enable works for built-in servers that were auto-disabled before configuration +- CLI spinner stops and final agent response is visible after agent finishes work +- AUTO theme now uses the terminal's actual ANSI color palette for more accurate colors on any terminal theme +- MCP server env vars referenced in command, args, or cwd fields are automatically included in the server environment +- /diagnose shows a helpful message when no session has been started yet +- MCP server names now support dots, slashes, and @ characters, enabling npm-style names like @modelcontextprotocol/server and io.github/server + +## 0.0.418 - 2026-02-25 + +🎉 Copilot CLI is now [generally available](https://github.blog/changelog/2026-02-25-github-copilot-cli-is-now-generally-available) 🎉 + +- Agent protected from accidentally killing itself +- Remove --disable-parallel-tools-execution flag and parallel_tool_execution config option +- Plugin agents specified as file paths in plugin.json load correctly + +## 0.0.417 - 2026-02-25 + +- Add /research command for deep research with exportable reports +- MCP servers no longer intermittently fail to load when opening a new session +- Plugin agents and skills are available immediately after install without restarting +- Plugin skills and commands load from custom paths declared in plugin.json +- Alt+backspace correctly registers as backspace instead of delete + +## 0.0.416 - 2026-02-24 + +- Expand `--help` content with descriptions, examples, and sorted flags +- Block third-party MCP servers when the Copilot MCP policy does not allow them +- Streaming response size counter updates continuously during tool calls and reasoning, and resets between requests +- Status line automatically switches to a two-line layout on narrow terminals, keeping CWD, branch, and model info readable at any terminal width +- Undo operations now always require confirmation + +## 0.0.415 - 2026-02-23 + +- Skill files saved with a UTF-8 BOM (common on Windows editors) now load correctly instead of failing with a frontmatter parse error +- Custom agents support the `model` field to specify which model to use, and unknown fields now warn instead of blocking agent load +- Plan approval menu shows model-curated actions with a recommended option highlighted first, including autopilot+fleet for parallelizable work +- Env loading indicator no longer hangs indefinitely on MCP startup error or session resume +- Add show_file tool for presenting code and diffs to the user +- Add env loading indicator showing skills, MCPs, plugins, ... being loaded +- MCP tool results with giant single lines are truncated correctly +- /plugin marketplace add and /plugin install support local paths containing spaces +- `/mcp show` groups servers into User, Workspace, Plugins, and Built-in sections and makes all servers navigable +- Agent now knows which model is powering it when asked +- Ctrl+A/E cycle through visual lines in wrapped input; Home/End navigate within a visual line; Ctrl+Home/End jump to text boundaries + +## 0.0.414 - 2026-02-21 + +- Explore agent can now use GitHub MCP tools when available +- Show permission elevation dialog when accepting a plan with autopilot to prevent auto-denied tool errors + +## 0.0.413 - 2026-02-20 + +- Fix issue where Copilot API URL wasn't respected +- Display heading content from reasoning for gpt models +- Increase LSP request timeout from 30s to 90s to reduce timeout failures +- Fixed alt-screen timeline entries not updating when tool calls complete (particularly sub-agent calls) +- ctrl+insert can now be used to copy selected text in the alt-screen view +- Fix read_bash, write_bash, and stop_bash in-progress icon showing filled dot instead of empty circle +- Enable alt-screen mode by default when running with `--experimental` flag +- Improve code search speed in large repos +- Session info renders in the main view footer in alt-screen mode +- Skill files with YAML array syntax for allowed-tools now load correctly +- Support remote plugin sources (GitHub repos and git URLs) in marketplace.json plugin entries +- Automatically migrate users from claude-sonnet-4.5 to the current default model on startup +- Ctrl+A, Ctrl+E, and Ctrl+U navigate to logical line boundaries (newlines) instead of visual wrap boundaries +- Add configurable status line support to display dynamic session information via custom shell scripts + +## 0.0.412 - 2026-02-19 + +- Improve quick help accessibility: screen reader-friendly tab labels, reordered layout, and grouped `help commands` output +- Hide custom agents with `user-invocable: false` from the `/agents` picker +- Config file syntax errors now show a warning instead of silently crashing +- Sign Windows native prebuilds with Authenticode to prevent antivirus quarantine of native modules +- Allow `/reset-allowed-tools` to run during agent execution +- MCP servers with invalid tool schemas no longer lose all tools +- Alt-screen mode no longer consumes increasing memory over long sessions +- Add `/mcp reload` command to reload MCP configuration +- Skills support `disable-model-invocation` frontmatter field +- /fleet orchestrator validates subagent work +- Deprecate gpt-5 model +- Windows slash flags (e.g., `xcopy /E /I`) are no longer treated as file paths +- Show a warning in the timeline when skills fail to load at startup, with a prompt to run /skills for details +- Eliminate banner character flash on startup when banner is disabled +- Edit plan in terminal editor with ctrl+y +- Terminal editor is now supported on Windows +- Configure LSP server request timeouts in lsp.json +- Add `/update` command to view changelog and update instructions +- Add exit_plan_mode tool with plan approval dialog for reviewing and accepting plans +- Support ~/.copilot/instructions/\*.instructions.md files for user-level instructions across all repositories +- Add double-click word and triple-click line selection in alt-screen text selection +- Edit the prompt in your preferred terminal editor with ctrl+x ctrl+e +- Prevents spurious error messages from appearing in terminal on Windows +- Typing `?` in an AskUser prompt no longer triggers the quick help overlay +- Improve SQL tool timeline entries +- Reduce memory usage in alt-screen mode during long sessions +- /fleet mode dispatches more subagents in parallel for faster execution +- Instructions picker opens as a full-screen alt-screen view when alt-screen mode is enabled +- Skills picker opens as a full-screen alt-screen view when alt-screen mode is enabled +- Command files no longer require YAML frontmatter — plain markdown files work with name and description derived automatically +- Session picker opens instantly without a loading flash when multiple sessions exist +- Mouse event coordinate fragments no longer appear in input field +- Add cross-session memory: ask about past work, files, and PRs across sessions (experimental) +- Add `--bash-env` flag to source BASH_ENV in shell sessions +- Restore `ctrl+x /` as alternate shortcut to run commands while preserving input +- /clear preserves agent mode (autopilot, plan, or interactive) +- MCP error messages include the server name +- Text selection in timeline no longer spills into prompt area when dragging + +## 0.0.411 - 2026-02-17 + +- Improve error messaging and guidance when access denied by policy +- Custom agents use `disable-model-invocation` instead of `infer` (backward compatible) +- Add support for Claude Sonnet 4.6 model +- Memory storage shows subject, fact, and citations in timeline +- Tab completion respects the highlighted slash command selection +- Support MCP servers from Windows On-Device Registry +- Text selection now works in footer area in alt-screen mode +- Support `--alt-screen on` and `--alt-screen off` syntax +- Add `include_coauthor` config option to disable Co-authored-by trailer in git commits +- SDK APIs for plan mode, autopilot, fleet, and workspace files +- Autopilot mode and /fleet command now available to all users +- Alt-screen viewport auto-scrolls when dragging selection to edge +- Interactive shell commands complete on all versions of Windows +- Reduce memory usage in alt-screen mode during long sessions +- Session picker no longer flashes when using --resume in alt-screen mode +- Terminal bell rings once when agent finishes, not on every tool completion +- Custom instruction files are recognized regardless of casing +- PowerShell commands with syntax errors no longer hang +- Improve text selection responsiveness in --alt-screen mode +- Cursor shows when suspending and hides when resuming + +## 0.0.410 - 2026-02-14 + +- Fixed high memory usage caused by rapid logging +- Shell mode pastes raw text instead of paste tokens +- Reduce memory usage from encoding streaming chunks +- Fix alt-screen and timeline URL rendering to preserve long links without truncation +- Reduced memory growth in long sessions by evicting transient events after compaction +- Fixed high memory usage when loading large sessions +- Fixed high memory usage during shell commands with rapid output +- Add `/init suppress` to control init suggestions per repository +- Show IDE file selection indicator in the status bar when connected to an IDE +- Add repo-level settings to disable individual validation tools +- ACP server supports loading existing sessions +- Page Up/Page Down keyboard scrolling in alt-screen mode +- Add Ctrl+Z suspend/resume support on Unix platforms +- Support tilde (~) expansion in MCP server cwd configuration +- Support ctrl+n and ctrl+p as arrow key alternatives +- Exit CLI with ctrl+d on empty prompt +- Fix unknown option '--no-warnings' error +- Shift+Enter inserts newlines in terminals with kitty keyboard protocol +- MCP server list selection adjusts correctly after deletion +- Shell mode removed from Shift+Tab cycle, accessed only via `!` +- Improve /tasks dialog with consistent icons and typography +- Exit from alt-screen no longer replays full session history +- MCP server errors and loading issues surface in timeline +- Reduce input jitter with frame coalescing and smoother alt-screen animations +- Extend skill name validation to support underscores, dots, and spaces; make name and description optional in skill frontmatter with sensible fallbacks +- Add Copilot co-authored by trailer to git commits created + +## 0.0.409 - 2026-02-12 + +- /diff uses full screen in alt-screen mode +- Quick help overlay: press `?` to see grouped shortcuts and commands, navigate with arrow keys +- Theme preview appears above theme list in screen reader mode +- Add `list_copilot_spaces` tool to default GitHub MCP config +- Subagents return complete responses +- CLI now integrates with VS Code, use /ide for more information. +- Permission prompts with long diffs are scrollable in alt-screen mode +- Include default plugin marketplaces (copilot-plugins, awesome-copilot) for easier plugin discovery + +## 0.0.408 - 2026-02-12 + +- Add `/streamer-mode` to hide preview model names and quota details for streaming +- Makes shellId more flexible to not error when a number is passed +- Background tasks hint updates when detached shells are killed or removed +- Add mouse text selection in --alt-screen mode +- ! commands with large output no longer crash the CLI +- Fix duplicate/ghost lines appearing when resizing the terminal in alt-screen mode +- MCP servers respect the `cwd` working directory property +- Add substring matching to slash command autocomplete +- Change run command shortcut from ctrl+p to ctrl+s + +## 0.0.407 - 2026-02-11 + +- Improve authentication error messages in prompt mode +- Quota exceeded error links to Copilot settings with actionable guidance +- Theme picker shows live preview of diffs and markdown, adds colorblind and tritanopia theme variants +- Add `/on-air` mode to hide model names and quota details for streaming +- Show agent type and description in read_agent timeline entries +- `/tasks` shows Recent Activity for background agents +- Add experimental alternate screen buffer mode: --alt-screen +- Interactive programs that query terminal state work in shell +- Subagents fall back to session model when default model blocked by policy +- Expose session context in session.list SDK response +- Keyboard shortcut hints display consistently with bold styling throughout the CLI +- Add `tools.list` RPC to query available built-in tools +- Streaming responses automatically retry when interrupted by server errors +- Add option to approve tool permissions permanently for a location +- Add `/instructions` command to view and toggle custom instruction files +- Ctrl-b and ctrl-f cursor movement now available on all platforms +- Ctrl+d now favors deleting character after cursor, with queueing moved to ctrl+q (or ctrl+enter) +- Editing MCP servers shows existing configuration values +- `--resume` creates new sessions with provided UUID +- Add workspace-local MCP configuration via `.vscode/mcp.json` +- Skill changes from `/skills` commands take effect immediately +- /session usage string only shows available subcommands +- Slash commands which take prompts now work when immediately followed by a new-line +- Remove unintended characters from status bar +- Autopilot mode works with custom agents that specify explicit tools +- Updated node-pty to fix file descriptor leaks +- Windows slash flags (e.g., `dir /B`) are no longer treated as file paths +- Diff mode no longer flickers when navigating files +- /mcp disable and /mcp enable show clear error when server name doesn't exist +- MCP servers using Microsoft OAuth configure automatically without manual client ID setup +- Tab cycles modes forward, Shift+Tab backward; shell is now a mode +- Ctrl+P runs slash commands while preserving input (replaces Ctrl+X → /) +- Terminal title works on all TTY terminals, not just select few +- Help text notes auto-update is disabled in CI environments by default +- Terminal tab shows session title when idle +- ask_user tool asks one question at a time for clearer interaction + +## 0.0.406 - 2026-02-07 + +- Add support for Claude Opus 4.6 Fast (Preview) +- Markdown formatting displays in non-interactive mode output +- Display warning when user has no Copilot subscription +- Commands from plugins are now translated into skills +- Add `/changelog` command to view release notes +- plugin marketplace add accepts URLs as sources +- `--no-experimental` flag disables experimental features +- CLI interface renders without extra blank line +- `/mcp show` displays enabled/disabled status for MCP tools +- MCP tool responses now include structured content (images, resources) for richer UI display in VS Code + +## 0.0.405 - 2026-02-05 + +- Plugin and marketplace names support uppercase letters +- `/experimental` shows help screen listing experimental features +- Fix SQL tool disconnects +- Plugins can bundle LSP server configurations + +## 0.0.404 - 2026-02-05 + +- Add support for claude-opus-4.6 model +- `/allow-all` and `/yolo` execute immediately +- MCP servers shut down concurrently for improved performance +- Cancel --resume session picker to start a new session +- MCP server configurations default to all tools when tools parameter not specified +- Add `/tasks` command to view and manage background tasks +- Enable background agents for all users +- Simplify and clarify `/delegate` command messaging +- GITHUB_TOKEN environment variable now accessible in agent shell sessions + +## 0.0.403 - 2026-02-04 + +- Windows Task Manager displays correct application name +- Introduce security check preventing use of modules outside of application bundle +- ACP model info includes usage multiplier and enablement status +- Fix logic checking user organization membership +- Stop MCP servers before updating plugins +- Detached shell processes work on vanilla macOS installations +- Escape key consistently aborts permission dialogs regardless of selection +- Plugin skills work in prompt mode +- Config files preserve custom fields when CLI updates them +- Reasoning summaries enabled by default for supporting models +- Support comma-separated tools in custom agent frontmatter +- Skills with unknown frontmatter fields now load with warnings instead of being silently skipped + +## 0.0.402 - 2026-02-03 + +- ACP server supports agent and plan session modes +- MCP configuration applies to ACP mode +- Agent creation wizard styling improvements +- Custom agents with unknown fields load with warnings instead of errors +- Custom agents receive environment context when run as subagents +- Plugins can provide hooks for session lifecycle events +- Plugin update command works for direct plugins and handles Windows file locks +- Stop MCP servers when uninstalling plugins + +## 0.0.401 - 2026-02-03 + +- Support `.agents/skills` directory for auto-loading skills +- Improve handling of chat history when switching between model families +- MCP tools returning structuredContent now display correctly in CLI +- Support Claude-style .mcp.json format without mcpServers wrapper +- Inserting new line with shift+enter keybinding in VS Code integrated terminal +- Large multi-line pastes work correctly +- ACP terminal-auth passes correct arguments to login +- Arrow and special keys work reliably when held down +- Slash command ghost text appends correctly +- Add `copilot login` subcommand and support ACP terminal-auth +- Add agentStop and subagentStop hooks to control agent completion +- CLI handles unknown keypresses gracefully +- /diff displays accurate line numbers with dual column layout + +## 0.0.400 - 2026-01-30 + +- Add MCP server instructions support +- Timeline displays user responses to `ask_user` tool prompts with username +- Ordered lists display with numbers instead of dashes +- Add theme picker with `/theme` command and GitHub Dark/Light themes +- Fix support for pasting large content on Windows Terminal +- Better handle large results from grep and glob tools to avoid memory issues +- CLI now sends DELETE requests to remove MCP servers when shutting down +- Fix not being able to arrow key out of text inputs in select lists +- ACP server supports changing models during a session +- ACP server support permission flags: --yolo, --allow-all, etc. and permissions config +- Show progress indicator in terminal tab when thinking +- Remove bundled LSP servers (TypeScript, Python) +- Improve compatibility with remote MCP servers that use OAuth +- Markdown table headers display in bold +- Add autopilot mode for autonomous task completion (experimental) +- Add fuzzy search to model picker +- Freeform text input in list pickers works correctly +- Add `copilot plugin` subcommand for non-interactive plugin management +- CLI is more responsive in sessions with many messages +- Shell path detection more accurately handles spaces, quotes, and Windows switches +- Diff mode file list uses carousel navigation, showing up to 5 files at a time +- Holding backspace continues deleting text +- Better support for UNIX keyboard bindings (Ctrl+A/E/W/U/K, Alt+arrows) and multiline content in various text inputs +- Add `launch_messages` config for startup announcements +- The Code Review tool handles large changesets by ignoring build artifacts and limiting to 100 files + +## 0.0.399 - 2026-01-29 + +- Compaction messages show clearer command hints to view checkpoint summaries +- Press Ctrl+X then / to run slash commands without losing your input +- Improve `/diff` command with better visual indicators and scroll acceleration +- Add `/allow-all` and `/yolo` commands to auto-approve all permissions during a session +- Add Copilot option for agent creation wizard to generate name, description, and instructions based on initial agent description +- Add LSP (Language Server Protocol) tool for code intelligence (requires experimental flag) +- Sessions get AI-generated names from first message +- Skills remain effective after conversation history is compacted +- /usage now includes token consumption from sub-agents (e.g., the general-purpose agent) +- Support `.claude/commands/` single-file commands as simpler alternative to skills +- Skills load correctly on Windows +- Add `/diff` command to review session changes +- Undo/rewind to previous states with double-Esc + ## 0.0.398 - 2026-01-28 - Fix a regression that caused "Invalid session id" errors for agent shell calls diff --git a/install.sh b/install.sh index fb3d3d49..b63486dd 100755 --- a/install.sh +++ b/install.sh @@ -34,6 +34,16 @@ case "$(uname -m)" in *) echo "Error: Unsupported architecture $(uname -m)" >&2 ; exit 1 ;; esac +# Set up authentication for GitHub requests if GITHUB_TOKEN is available +CURL_AUTH=() +WGET_AUTH=() +GIT_REMOTE="https://github.com/github/copilot-cli" +if [ -n "$GITHUB_TOKEN" ]; then + CURL_AUTH=(-H "Authorization: token $GITHUB_TOKEN") + WGET_AUTH=(--header="Authorization: token $GITHUB_TOKEN") + GIT_REMOTE="https://x-access-token:${GITHUB_TOKEN}@github.com/github/copilot-cli" +fi + # Determine download URL based on VERSION if [ "${VERSION}" = "latest" ] || [ -z "$VERSION" ]; then DOWNLOAD_URL="https://github.com/github/copilot-cli/releases/latest/download/copilot-${PLATFORM}-${ARCH}.tar.gz" @@ -44,7 +54,7 @@ elif [ "${VERSION}" = "prerelease" ]; then echo "Error: git is required to install prerelease versions" >&2 exit 1 fi - VERSION="$(git ls-remote --tags https://github.com/github/copilot-cli | tail -1 | awk -F/ '{print $NF}')" + VERSION="$(git ls-remote --tags --sort "version:refname" "$GIT_REMOTE" | tail -1 | awk -F/ '{print $NF}')" if [ -z "$VERSION" ]; then echo "Error: Could not determine prerelease version" >&2 exit 1 @@ -65,14 +75,14 @@ echo "Downloading from: $DOWNLOAD_URL" # Download and extract with error handling TMP_DIR="$(mktemp -d)" +trap 'rm -rf -- "$TMP_DIR"' EXIT TMP_TARBALL="$TMP_DIR/copilot-${PLATFORM}-${ARCH}.tar.gz" if command -v curl >/dev/null 2>&1; then - curl -fsSL "$DOWNLOAD_URL" -o "$TMP_TARBALL" + curl -fsSL "${CURL_AUTH[@]}" "$DOWNLOAD_URL" -o "$TMP_TARBALL" elif command -v wget >/dev/null 2>&1; then - wget -qO "$TMP_TARBALL" "$DOWNLOAD_URL" + wget -qO "$TMP_TARBALL" "${WGET_AUTH[@]}" "$DOWNLOAD_URL" else echo "Error: Neither curl nor wget found. Please install one of them." - rm -rf "$TMP_DIR" exit 1 fi @@ -80,9 +90,9 @@ fi TMP_CHECKSUMS="$TMP_DIR/SHA256SUMS.txt" CHECKSUMS_AVAILABLE=false if command -v curl >/dev/null 2>&1; then - curl -fsSL "$CHECKSUMS_URL" -o "$TMP_CHECKSUMS" 2>/dev/null && CHECKSUMS_AVAILABLE=true + curl -fsSL "${CURL_AUTH[@]}" "$CHECKSUMS_URL" -o "$TMP_CHECKSUMS" 2>/dev/null && CHECKSUMS_AVAILABLE=true elif command -v wget >/dev/null 2>&1; then - wget -qO "$TMP_CHECKSUMS" "$CHECKSUMS_URL" 2>/dev/null && CHECKSUMS_AVAILABLE=true + wget -qO "$TMP_CHECKSUMS" "${WGET_AUTH[@]}" "$CHECKSUMS_URL" 2>/dev/null && CHECKSUMS_AVAILABLE=true fi if [ "$CHECKSUMS_AVAILABLE" = true ]; then @@ -91,7 +101,6 @@ if [ "$CHECKSUMS_AVAILABLE" = true ]; then echo "✓ Checksum validated" else echo "Error: Checksum validation failed." >&2 - rm -rf "$TMP_DIR" exit 1 fi elif command -v shasum >/dev/null 2>&1; then @@ -99,7 +108,6 @@ if [ "$CHECKSUMS_AVAILABLE" = true ]; then echo "✓ Checksum validated" else echo "Error: Checksum validation failed." >&2 - rm -rf "$TMP_DIR" exit 1 fi else @@ -110,7 +118,6 @@ fi # Check that the file is a valid tarball if ! tar -tzf "$TMP_TARBALL" >/dev/null 2>&1; then echo "Error: Downloaded file is not a valid tarball or is corrupted." >&2 - rm -rf "$TMP_DIR" exit 1 fi @@ -134,36 +141,56 @@ fi tar -xz -C "$INSTALL_DIR" -f "$TMP_TARBALL" chmod +x "$INSTALL_DIR/copilot" echo "✓ GitHub Copilot CLI installed to $INSTALL_DIR/copilot" -rm -rf "$TMP_DIR" # Check if installed binary is accessible if ! command -v copilot >/dev/null 2>&1; then echo "" echo "Notice: $INSTALL_DIR is not in your PATH" - # Detect shell rc file - case "$(basename "${SHELL:-/bin/sh}")" in - zsh) RC_FILE="$HOME/.zshrc" ;; - bash) RC_FILE="$HOME/.bashrc" ;; - *) RC_FILE="$HOME/.profile" ;; + # Detect shell profile file for PATH + CURRENT_SHELL="$(basename "${SHELL:-/bin/sh}")" + case "$CURRENT_SHELL" in + zsh) RC_FILE="${ZDOTDIR:-$HOME}/.zprofile" ;; + bash) + if [ -f "$HOME/.bash_profile" ]; then + RC_FILE="$HOME/.bash_profile" + elif [ -f "$HOME/.bash_login" ]; then + RC_FILE="$HOME/.bash_login" + else + RC_FILE="$HOME/.profile" + fi + ;; + fish) RC_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/fish/conf.d/copilot.fish" ;; + *) RC_FILE="$HOME/.profile" ;; esac + PATH_LINE="export PATH=\"$INSTALL_DIR:\$PATH\"" + if [ "$CURRENT_SHELL" = "fish" ]; then + PATH_LINE="fish_add_path \"$INSTALL_DIR\"" + fi + # Prompt user to add to shell rc file (only if interactive) if [ -t 0 ] || [ -e /dev/tty ]; then echo "" printf "Would you like to add it to %s? [y/N] " "$RC_FILE" if read -r REPLY /dev/null; then if [ "$REPLY" = "y" ] || [ "$REPLY" = "Y" ]; then - echo "export PATH=\"$INSTALL_DIR:\$PATH\"" >> "$RC_FILE" - echo "✓ Added PATH export to $RC_FILE" + mkdir -p "$(dirname "$RC_FILE")" + echo "$PATH_LINE" >> "$RC_FILE" + echo "✓ Added PATH configuration to $RC_FILE" + echo " Restart your shell or run: source $RC_FILE" fi fi else echo "" echo "To add $INSTALL_DIR to your PATH permanently, add this to $RC_FILE:" - echo " export PATH=\"$INSTALL_DIR:\$PATH\"" + echo " $PATH_LINE" fi -fi -echo "" -echo "Installation complete! Run 'copilot help' to get started." + echo "" + echo "Installation complete! To get started, run:" + echo " $PATH_LINE && copilot help" +else + echo "" + echo "Installation complete! Run 'copilot help' to get started." +fi