diff --git a/.github/workflows/close-invalid-pr-writer.yml b/.github/workflows/close-invalid-pr-writer.yml new file mode 100644 index 00000000..a8f3f98f --- /dev/null +++ b/.github/workflows/close-invalid-pr-writer.yml @@ -0,0 +1,148 @@ +name: Close invalid PR writer + +on: + workflow_run: + workflows: [Close issue/PR on adding invalid label] + types: [completed] + # pull_request does not run for conflicted PRs, so reconcile from the trusted default branch. + schedule: + - cron: '*/5 * * * *' + workflow_dispatch: + +permissions: {} + +jobs: + close-invalid-pr-from-workflow-run: + if: > + github.repository == 'github/copilot-cli' && + github.event_name == 'workflow_run' && + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.repository.full_name == github.repository + runs-on: ubuntu-latest + permissions: + actions: read + pull-requests: write + concurrency: + group: close-invalid-pr-${{ github.event.workflow_run.pull_requests[0].number || github.run_id }} + cancel-in-progress: false + steps: + - name: Close invalid PR + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + WORKFLOW_RUN_ID: ${{ github.event.workflow_run.id }} + run: | + set -euo pipefail + + trusted_workflow_id="$(gh api "repos/$GH_REPO/actions/workflows/close-invalid.yml" --jq .id)" + workflow_run="$(gh api "repos/$GH_REPO/actions/runs/$WORKFLOW_RUN_ID")" + + if [ "$(jq -r .workflow_id <<<"$workflow_run")" != "$trusted_workflow_id" ] || + [ "$(jq -r .event <<<"$workflow_run")" != "pull_request" ] || + [ "$(jq -r .repository.full_name <<<"$workflow_run")" != "$GH_REPO" ]; then + echo "Workflow run is not a trusted pull_request run from $GH_REPO; skipping." + exit 0 + fi + + run_head_sha="$(jq -r .head_sha <<<"$workflow_run")" + run_head_repo="$(jq -r '.head_repository.full_name // empty' <<<"$workflow_run")" + run_head_branch="$(jq -r '.head_branch // empty' <<<"$workflow_run")" + + if [ -z "$run_head_repo" ] || + [ -z "$run_head_branch" ] || + [[ ! "$run_head_sha" =~ ^[0-9a-f]{40}$ ]] || + [ "${run_head_repo#*/}" = "$run_head_repo" ] || + [ -z "${run_head_repo%%/*}" ] || + [ -z "${run_head_repo#*/}" ]; then + echo "Workflow run is missing valid head repository, branch, or SHA metadata; skipping." + exit 0 + fi + + pull_request_count="$(jq '.pull_requests | length' <<<"$workflow_run")" + if [ "$pull_request_count" -eq 1 ]; then + pr_number="$(jq -r .pull_requests[0].number <<<"$workflow_run")" + elif [ "$pull_request_count" -eq 0 ]; then + run_head_owner="${run_head_repo%%/*}" + matching_prs="$( + gh api --method GET --paginate "repos/$GH_REPO/pulls" \ + -f state=open \ + -f head="$run_head_owner:$run_head_branch" \ + -f per_page=100 | + jq -cs \ + --arg repo "$GH_REPO" \ + --arg head_repo "$run_head_repo" \ + --arg head_branch "$run_head_branch" \ + --arg head_sha "$run_head_sha" \ + 'add | [ + .[] | + select( + .state == "open" and + .base.repo.full_name == $repo and + .head.repo.full_name == $head_repo and + .head.ref == $head_branch and + .head.sha == $head_sha + ) + ]' + )" + + if [ "$(jq 'length' <<<"$matching_prs")" -ne 1 ]; then + echo "Workflow run could not be uniquely associated with an open PR; skipping." + exit 0 + fi + pr_number="$(jq -r '.[0].number' <<<"$matching_prs")" + else + echo "Workflow run is associated with multiple PRs; skipping." + exit 0 + fi + + if [[ ! "$pr_number" =~ ^[1-9][0-9]*$ ]]; then + echo "Workflow run produced an invalid PR number; skipping." + exit 0 + fi + + pr="$(gh api "repos/$GH_REPO/pulls/$pr_number")" + + if [ "$(jq -r .base.repo.full_name <<<"$pr")" != "$GH_REPO" ] || + [ "$(jq -r '.head.repo.full_name // empty' <<<"$pr")" != "$run_head_repo" ] || + [ "$(jq -r .head.ref <<<"$pr")" != "$run_head_branch" ] || + [ "$(jq -r .head.sha <<<"$pr")" != "$run_head_sha" ]; then + echo "PR #$pr_number no longer matches the workflow run head; skipping." + exit 0 + fi + + if [ "$(jq -r .state <<<"$pr")" != "open" ] || + ! jq -e 'any(.labels[]?; .name == "invalid")' >/dev/null <<<"$pr"; then + echo "PR #$pr_number is not open with the invalid label; skipping." + exit 0 + fi + + gh api -X PATCH "repos/$GH_REPO/pulls/$pr_number" -f state=closed + + reconcile-invalid-prs: + if: > + github.repository == 'github/copilot-cli' && + (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') + runs-on: ubuntu-latest + permissions: + pull-requests: write + concurrency: + group: close-invalid-pr-reconciliation + cancel-in-progress: false + steps: + - name: Close open PRs with the invalid label + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + run: | + set -euo pipefail + + gh api --paginate "repos/$GH_REPO/pulls?state=open&per_page=100" \ + --jq '.[] | select(any(.labels[]?; .name == "invalid")) | .number' | + while read -r pr_number; do + pr="$(gh api "repos/$GH_REPO/pulls/$pr_number")" + + if [ "$(jq -r .state <<<"$pr")" = "open" ] && + jq -e 'any(.labels[]?; .name == "invalid")' >/dev/null <<<"$pr"; then + gh api -X PATCH "repos/$GH_REPO/pulls/$pr_number" -f state=closed + fi + done diff --git a/.github/workflows/close-invalid.yml b/.github/workflows/close-invalid.yml index 4078bd87..18288ff0 100644 --- a/.github/workflows/close-invalid.yml +++ b/.github/workflows/close-invalid.yml @@ -1,36 +1,42 @@ name: Close issue/PR on adding invalid label -# **What it does**: This action closes issues that are labeled as invalid in the repo. +# **What it does**: This action closes invalid issues and signals invalid PRs to a trusted writer. on: issues: types: [labeled] - pull_request_target: + pull_request: types: [labeled] -permissions: - contents: read - issues: write - pull-requests: write +permissions: {} jobs: - close-on-adding-invalid-label: - if: - github.repository == 'github/copilot-cli' && github.event.label.name == - 'invalid' + close-issue-on-adding-invalid-label: + if: > + github.repository == 'github/copilot-cli' && + github.event_name == 'issues' && + github.event.label.name == 'invalid' runs-on: ubuntu-latest - + permissions: + issues: write steps: - name: Close issue - if: ${{ github.event_name == 'issues' }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - URL: ${{ github.event.issue.html_url }} - run: gh issue close $URL + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPOSITORY: ${{ github.repository }} + ISSUE_NUMBER: ${{ github.event.issue.number }} + run: gh api -X PATCH "repos/$GH_REPOSITORY/issues/$ISSUE_NUMBER" -f state=closed - - name: Close PR - if: ${{ github.event_name == 'pull_request_target' }} + signal-invalid-pr-label: + if: > + github.repository == 'github/copilot-cli' && + github.event_name == 'pull_request' && + github.event.label.name == 'invalid' + runs-on: ubuntu-latest + permissions: {} + steps: + - name: Record invalid PR label signal env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - URL: ${{ github.event.pull_request.html_url }} - run: gh pr close $URL + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + echo "Invalid label signal for PR #$PR_NUMBER" diff --git a/changelog.md b/changelog.md index 8a26d733..cb1d40ed 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,836 @@ +## 1.0.83 - 2026-09-04 + +- Show running Copilot sessions in the Windows 11 taskbar with live hover status cards +- Add Client ID Metadata Document (CIMD) support for MCP OAuth sign-in +- Custom agents can list several models in `model`, tried in order until one is available to you, and `model-policy: required` keeps model changes on that list +- Adding support for claude-fable-5.1 +- Add Recent, Created, Name, and classic None sorting to the split Sessions sidebar, with the selected order saved across restarts +- Enterprise admins can pin sign-in to approved GitHub organizations with the forceLoginOrgs managed setting +- Add automatic HTTPS proxy mTLS client certificate support for model and web requests +- Detect the herdr terminal multiplexer instead of mistaking it for tmux, so the Kitty keyboard protocol, color scheme following, terminal progress, `/copy` and notifications work in herdr panes +- A session lock that is re-entered on the same thread now fails with a reported error instead of freezing the CLI. +- Kerberos proxy authentication reconnects when the initial challenge answers with `Connection: close` +- Sandboxed `gh` commands now authenticate as the account configured for the repository instead of the Copilot CLI login +- MCP tools remain callable after MCP server restarts +- Sandboxed file tools now read the same developer-tool paths as sandboxed shell commands, including token-bearing registry config such as ~/.npmrc; set sandbox.allowDevToolAccess to false to turn these grants off +- Stopping a timed-out shell command now lets queued messages run and sessions return to idle +- A follow-up prompt typed while autopilot is running no longer disappears from the timeline +- Restart provides clearer update guidance when automatic restart cannot be completed +- MCP servers configured by your agent stay available after built-in sub-agent turns. +- Anthropic sessions continue after temporary fallback instead of failing on invalid thinking signatures +- Long-running sessions on Linux return freed memory to the system instead of holding gigabytes of it +- Enterprise-denied MCP servers can no longer start before the managed allow/deny policy resolves; server startup now waits for the managed-settings fetch instead of racing it +- Host-provided plugin customizations can be read without redundant path permission prompts +- A relative `--add-dir` or `--plugin-dir` path now resolves against the session's working directory under `--resume=` and `--worktree`, instead of the directory the CLI was launched from. Relative values are also resolved after `-C` is applied, so `-C` no longer has to precede either option on the command line +- MCP servers contributed by a plugin are no longer labelled "User" in the MCP dashboard, and a server from a bundled plugin is now shown as built-in and names the plugin it came from. +- The newest line of output stays visible above the input box instead of hiding behind it, except while a prompt is pinned to the top of the transcript +- Exporting a resumed session with --share or --share-gist writes the whole transcript instead of only the latest run +- On macOS and Linux, sandboxed commands can no longer reach services running on your machine. On macOS this also blocks a server the command itself starts on 127.0.0.1, so test suites that bind a local port will fail; turn on Allow local network in /sandbox to reach localhost again. +- Linux sandboxing now needs slirp4netns, nsenter, iptables, ip6tables, iptables-restore and ip6tables-restore on PATH. Install them if sandboxed commands start failing to launch. +- CLI starts without the interrupted-session restore prompt by default. +- Resuming large sessions keeps the input prompt responsive sooner. +- Linux sandboxes now restrict network egress to the configured proxy; proxy mode requires slirp4netns, util-linux 2.35+, iptables, and /dev/net/tun access +- `/mcp config` and the MCP add/edit/authenticate forms now open in the plugins dashboard instead of a separate MCP manager, so closing a form returns to the server list. +- File path autocomplete stays fast in large repositories +- Plugin list commands and /plugin now show bundled built-in plugins. +- Improve sandboxed Bazel and Bazelisk runs by granting required cache and output paths; macOS requires a future Bazel release or additional sandbox capabilities +- The collapsed autopilot goal panel now reads as a single-line pinned prompt, keeping the frame it shares with a pinned prompt instead of compressing into a bare band wedged against the chrome above it +- Improve /sandbox policy by grouping path grants by source and showing detected developer tools +- Remove retired Claude and Gemini models from /model picker results + +## 1.0.82 - 2026-08-29 + +- A message typed while /worktree or /move is preparing the worktree no longer breaks the switch into it +- Ctrl+E expands the plan approval card to show the full plan again +- Show the specific authentication failure (such as 401 Bad credentials) instead of only the /login prompt + +## 1.0.81 - 2026-08-27 + +- The plugins dashboard is available to everyone: run `/plugin`, `/mcp`, or `/skills`. Set `PLUGINS_DASHBOARD=false` to opt out of it and the `copilot plugins` command. +- Ship MCP 2026-07-28 support to CLI, SDK, IDE, and in-memory clients +- Hooks can now receive the current OpenTelemetry trace context and emit correlated spans: inputs gain `traceparent` (plus `tracestate` when the span has vendor state); command hooks also get env vars. +- Windows: remote MCP servers protected by Microsoft Entra ID can now sign in through the OS authentication broker (WAM), usually with no prompt at all. Other platforms, `--device-code`, and machines without the broker library keep the existing browser flow. +- Add xhigh reasoning effort support for Grok 4.6 +- Startup now offers to restore sessions that were still open when their CLI went away, so a crash or a machine restart no longer means reopening each terminal by hand +- models.list now includes service-published infoMessages and warningMessages per model +- Add `copilot app` to open the GitHub Copilot app in the current directory +- Add defaultMode and defaultPermissionMode settings to choose startup mode and approval behavior for new interactive sessions +- Add --with-token to copilot login to read an auth token from stdin +- Add support for Gemini 3.7 Flash +- Add Ctrl+E in /sandbox to open settings.json in your editor +- Add per-agent usage metrics to --usage-output-file JSON output +- Repeated read_agent calls now consistently return the full turn history unless since_turn is provided +- Hook lifecycle events (`hook.start`/`hook.end`) from hooks inside a subagent are now recorded on that subagent's session and re-emitted on its parent, instead of being dropped on an internal session. +- Repeatedly resuming the same session no longer crashes while telemetry is being replaced +- An MCP server blocked by an enterprise policy now shows as blocked in /mcp instead of spinning as pending forever +- Fixed an indefinite "Loading…/Resuming…" hang at startup when a repository plugin activates a contributed extension (or another extension reload races the initial load), which previously left the environment stuck on "still waiting on extensions" +- Vim mode badge stays visible beside the activity indicator during turns +- The startup status finishes after extension configuration during plugin reconciliation +- Signing out of an account now clears its cached enterprise managed settings, so signing back in generally re-fetches the policy rather than re-applying the one cached before sign-out +- An enterprise managed-settings policy is no longer rejected when `permissions.disableBypassPermissionsMode` carries an unrecognized value; it is now logged and enforced as `disable`. +- Sandboxed builds on Windows create their scratch caches on first run, so cargo, go, Gradle, and ccache work without a warm cache +- On macOS and Linux, shell commands resolve the same tools a bash login shell does, including project environments activated from a profile +- Canvas windows open and refresh in the background instead of stealing focus from your terminal +- A prompt sent while the agent is working no longer leaves a second copy of itself stuck as `(pending)` at the bottom of the transcript after it has been answered +- Turning allow-all off from an ACP client now reaches the permission engine whenever there is a runtime override or auto-approval to revoke, so the setting can no longer report success while permissions stay enabled (a baseline granted by --allow-all-\* launch flags is still deliberately left intact) +- A failed tool call no longer stacks its `(MCP: server)` label one character per line down the timeline — the label and the error now share the row, with the longer side truncating +- Agents, skills and MCP servers contributed by installed plugins are no longer dropped in non-interactive (-p) runs, so --agent : works headlessly without --plugin-dir +- Typing `$` and pressing Enter opens the interactive shell again, instead of clearing the prompt and doing nothing +- The prompt frame now renders in terminals it previously skipped, such as foot and alacritty, instead of a fixed list +- A prompt queued while the agent is working stays visible instead of vanishing when you send another one +- The sessions sidebar's keyboard cursor is visible again, and selected rows in the Select family, the diff viewer and custom picker rows now pair the selection fill with the text color derived for it. +- Keys sent to an unfocused terminal pane are no longer dropped: Enter and other keystrokes are handled even after a terminal focus-out report, so tmux and agent multiplexers can drive a background pane +- Compact the autopilot goal panel to its identity row on a short terminal (a paused goal keeps its resume note), with ctrl+x → g to expand or collapse it by hand +- Render the autopilot goal panel as a pinned prompt frame, drop its progress bar for the exact todo count, fold the subagent hint into the row it toggles, and keep its metrics on a narrow pane +- Resume large sessions faster by showing recent history first while older messages load. +- `x` is now the delete key everywhere: /sandbox config, /settings, /mcp, the sessions dialog and the diff comments summary move off `d` +- Auto mode now adapts model selection as your task evolves during a conversation +- /plugin now flags installed plugins and marketplaces that have a newer version upstream, and offers an Update action to pull it +- Show your last prompt as the inferred objective in the Autopilot status panel +- When --no-sandbox is ignored because enterprise policy could not be determined, the notice now says so, and no longer points at an administrator, instead of claiming a policy requires the sandbox. The unsupported-host warning says the same rather than contradicting it. +- Show model data retention warnings with links in the /model picker +- Path-sourced plugins in a local (directory-source) marketplace now load live from their real directory, so editing one takes effect on `/restart` or a new session — no `/plugin update` +- Skills and custom agents are discovered from directories added with --add-dir +- Use Ctrl+Space to toggle voice dictation. +- A session sandboxed by an enterprise managed policy now says so on the timeline, including when the policy arrives mid-session, instead of leaving the footer's sandbox chip as the only hint that commands are being restricted +- forceRemoteSettingsRefresh now fails closed: when set, the cached managed-settings policy is never served or used as a fetch-failure fallback (skipping both the 1h fast path and the 24h stale fallback), so a failed startup fetch blocks on the unconfirmed policy instead of reverting to a possibly-stale cached one. Concretely, until a fresh policy is fetched the session applies the restrictive undetermined-policy posture: non-default MCP servers are blocked, bypass-permissions mode cannot be enabled, and policy-gated plugin install/update mutations are blocked +- ACP clients receive subagent IDs, raw event subscriptions, and live title, mode, command, and plan updates +- Show each user instruction file separately in /instructions +- Managed settings now win per entry for enabledPlugins and extraKnownMarketplaces, so a plugin or marketplace your organization pins can't be overridden locally +- Use x to remove scheduled /every and /after prompts in Schedule Manager +- Update model configurations +- Removed the `PLUGINS_DASHBOARD` opt-out and the legacy skills picker it kept alive. `/skills`, bare `/mcp`, and `/mcp show` (with no server name) always open the dashboard; `/mcp config` still opens the dedicated MCP wizard. +- Removed `/plugins`; its resources moved to `/plugin`, `/mcp` and `/skills`, with `/subagents` and `/instructions` for agents and instructions. +- Enabling and disabling hooks and LSP servers is temporarily unavailable: those toggles existed only in the `/plugins` dashboard that this release removes. + +## 1.0.80 - 2026-08-14 + +- Update model configurations + +## 1.0.79 - 2026-08-10 + +- Add support for enterprise allow-auto-only policy so /allow-all auto works while full allow-all remains blocked. +- Allow enterprise-managed sandbox policy to enforce a proxy URL while credentials remain user-controlled +- Agent Plugins spec plugins can now ship extensions under a com.github.copilot/extensions/ directory +- Add support for the kimi-k3 model +- Combine `--plan` with `--mode autopilot` to plan first and then implement without waiting for approval +- Manage multiple concurrent sessions from the Sessions tab and sidebar +- Add /sandbox policy to show effective sandbox paths, denials, and network access +- Queue prompts, shell commands, and supported slash commands in local sessions to run in order after the current task finishes +- Set "autoUpdate": true on an extraKnownMarketplaces entry in your user settings to auto-update its plugins at session start +- A tool directory inside your workspace that is on PATH (.venv/bin, node_modules/.bin, an in-repo GOPATH) no longer turns that part of the workspace read-only in the sandbox +- The `/app` command now opens the current session in the GitHub Copilot desktop app instead of landing on Home with the wrong folder (requires GitHub Copilot app 1.1.3 or later) +- On macOS, a sandbox read-only path nested inside a writable one now stays read-only instead of inheriting the write permission from the wider path +- On macOS, sandboxed commands can use UNIX-domain sockets again, so tools that talk over a local IPC pipe (tsx, vite, esbuild, jest workers) no longer fail with `listen EPERM` +- Sandboxed commands work when the working directory lives on a Windows Dev Drive +- `/theme` now only shows its deprecation notice for a valid color mode, so a mistyped mode no longer suggests an invalid command or hides the notice from your next valid `/theme`. +- Sandboxed git now authenticates to Azure DevOps, GitHub Enterprise Server, GitLab, and other non-GitHub remotes you have stored HTTPS credentials for +- A rare internal delay no longer prints a diagnostic warning on top of the interactive UI +- A failed session-history load no longer leaves the timeline permanently empty: the failure was silently discarded, so the transcript stayed blank for the rest of the session with nothing logged. It is now retried, and reported in the transcript and the log if it still fails +- Resuming a long session no longer collapses the timeline's scroll range while history renders in the background: entries that had not finished rendering were published as if they did not exist, so the scrollbar and scroll position jumped until the background render caught up +- Sandboxed wrapper builds (make and friends) get the dev tool caches their recipes need, based on the build manifests in the working directory +- Sandboxed commands can reach the network again on recent Windows builds, where every outbound connection was blocked even with outbound access enabled and no proxy configured +- Plugin custom agents honor deferred-tool-loading frontmatter +- A sandbox that cannot start an MCP server now fails in seconds instead of stalling the session, and sandbox startup failures for both MCP and language servers now say the sandbox was at fault and how to fix or opt out of it +- Login links are clickable during web and device-code sign-in +- Compute /context attribution against the Auto-resolved model so token totals are accurate for Free/Student users +- Disabling an extension no longer breaks elicitation, canvases, or tool permission prompts for other extensions +- A prompt stashed with ctrl+s now stays with the session it was typed for, so switching away and back and pressing ctrl+s restores it instead of finding it gone +- On Linux, searches and most shell commands blocked by the sandbox now offer to re-run outside it +- The /sandbox configuration dialog shows where sandbox settings are stored in settings.json +- The /sandbox configuration dialog groups the git, gh, and (on macOS) keychain settings under a new Auth tab, and the settings keys moved from `sandbox.gitAuth`/`sandbox.ghAuth` to `sandbox.auth.git`/`sandbox.auth.gh`. There is no migration: the old keys are ignored in settings files, and SDK requests that still send them are rejected as invalid rather than ignored +- Added a `worktreeBaseRef` setting that controls whether `/worktree`, `/worktree new`, and `--worktree` start from HEAD or the remote default branch. All three now default to HEAD; previously `--worktree` started from the remote default branch. +- Model picker groups models into Recent, Recommended, New, and other sections, and Shift+Tab switches grouping views. +- Large monorepos now use tgrep ([trigram-indexed grep for fast regex search in large codebases](https://github.com/microsoft/tgrep)) instead of ripgrep +- Ask user multi-select prompts include an Other option for free-text answers +- Improve teleported subagent /tasks navigation with nested tree browsing, current/all and finished-task filters, and a live timeline you can steer +- Prompt pinning is off by default; set pinnedPrompts to true to enable it. +- Use `/worktree new` to start a new session in a new worktree +- Pin the current prompt one row higher, in the row the tab bar already reserves, so it keeps the shape of the prompt it copies while costing the timeline one row less +- BREAKING: the sandbox setting `allowDevToolCaches` is renamed `allowDevToolAccess`, since it grants dev-tool config and registries too, not just caches. The old key is no longer read and is ignored silently, so an existing `false` opt-out reverts to the default (on). Rename it in settings.json and in any managed/MDM policy. +- /sandbox tags inactive settings as (disabled) and explains why they are locked, and documents dev tool caches in copilot help sandbox +- Show "pending · ctrl+c to cancel" for in-flight steering prompts +- Make /model session-scoped by default, and use /config model to set defaults for future sessions. +- Pin the current prompt as a single line instead of a three-row framed block, so it reads as chrome and returns rows to the timeline; with the tab bar on it sits directly below the tabs and costs the timeline nothing + +## 1.0.78 - 2026-08-03 + +- Timeline headers show how long each tool call took, right-aligned and ticking live while it runs (for calls of at least 5 seconds). On by default — disable with `/settings showToolDurations`. +- First-party plugins automatically update to the latest version at session start +- Add the experimental /new-worktree command to create a new worktree and start a new conversation in it +- Copilot login now defaults to the browser flow for local desktop subprocesses without a TTY, including IDE integrations, while remote and headless environments continue using device code +- Interactive shell shortcut now launches on Enter and shows an inline hint when "$" is armed +- Extension slash commands run their handler exactly once per invocation when several extensions are loaded +- Inline images no longer render with their first row repeated down the whole picture after the timeline scrolls +- A run whose prompt is piped over stdin now treats its `sessionEnd` hook the same way `-p` does: the hook fires once per completed agent turn with `reason` `complete` (or `error` if the turn failed), instead of once at shutdown with `user_exit`. As with `-p`, a piped run that exits before completing a turn fires no `sessionEnd` hook +- Split-view sidebar: the red close confirmation now reads `x again to close` (or `x again to exit CLI` on the last session) instead of `x close`, so a second press is clearly what closes +- Expose token usage in ACP prompt results and live usage_update notifications +- Added a forceRemoteSettingsRefresh managed setting that requires a fresh managed-settings fetch on startup; when the setting is in effect and that refresh cannot be confirmed, plugin mutations and read-only marketplace operations alike (including `plugins marketplace` list, browse, and refresh) fail closed rather than proceeding without the server-managed policy +- Disabling the sandbox from a bypass prompt applies only to that session; new sessions start sandboxed again +- Managed settings now fall back to the persistent cache whenever a server-managed settings fetch fails for any reason (network error, a non-success HTTP status, or a malformed/unparseable response), and fail open — starting without the unconfirmed server restriction rather than the prior fail-closed behavior — when no usable cached policy is available +- When the sandbox blocks a shell command and bypass is allowed, CLI offers to re-run it outside the sandbox without asking the model +- /rewind no longer requires git and restores only the files Copilot changed, skipping any file whose contents no longer match what Copilot last wrote, with a conversation-only or conversation + files choice +- Add /permissions to switch between approval modes. +- ACP mode supports closing sessions with the closeSession request. +- Ctrl+Q now enqueues the highlighted mid-text skill completion instead of the partial token +- Switching sessions no longer restarts MCP servers or rebuilds hook state, so a turn running in another session is never halted with a stale-hook error +- Refresh deferred MCP tools after OAuth authentication +- New sandbox setting `allowDevToolCaches` (on by default): grants sandboxed builds access to toolchain caches, registries, and installs so builds work without extra setup. Set false to opt out. +- Honor explicit GitHub MCP toolset/tool config: keep gh-overlap tools and stop steering to the gh CLI when you opt in +- Warn on startup about unknown top-level keys in user settings.json (e.g. a misspelled setting) instead of silently ignoring them +- Shell completion for --model now suggests auto and supported model names +- Render long session transcripts progressively to keep scrolling responsive +- Resuming a long session is dramatically faster and far lighter on memory, because its history is now read once at startup (in parallel, across CPU cores) instead of being re-read in full for every check the CLI runs before it can paint. In our benchmark a 230MB, 74k-event transcript came back in well under a second instead of about ten, at roughly a quarter of the peak memory; the exact gain depends on your machine's core count and disk +- The /allow-all auto safety-judge model is no longer user-configurable; the judge model is now selected automatically. + +## 1.0.77 - 2026-07-30 + +- Unconditional autopilot approval now disables sandbox for the current session when bypass is allowed +- Ctrl+G opens your editor to edit ask_user freeform answers without closing the prompt +- Add a browser-based (web) OAuth login flow, now the default for `copilot login` on local interactive terminals (device code remains the default on remote/headless terminals). Use `--web-flow`/`--device-code` to force a mode, or pick one in the interactive `/login` command +- Support enforcing managed sandbox policy via macOS and Windows native MDM settings +- Allow reasoning effort to be omitted so the server can select the default + +## 1.0.76 - 2026-07-29 + +- Add enable/disable controls in /plugins for plugins, instructions, agents, LSP servers, and hooks +- Add support for the grok-4.5 model +- Sandbox denied paths are enforced for relative and symlinked entries on macOS and Linux (Windows cannot deny per path) +- Unsent prompt text now stays with the session it was typed for (for the rest of the CLI session) instead of following you to the session you switch to +- Resuming a session now restores its autopilot or plan mode instead of reverting to interactive, so the autopilot-only `task_complete` tool stays available and the mode matches the session you left +- URL permission prompts now keep their sandbox-bypass warning and the model's reason when a host integration rebuilds the prompt, so an elevated fetch is no longer shown as an ordinary one +- When an update is auto-downloaded, the notification suggests /restart and drops the warning color +- /diff scrolls and syntax-highlights large multi-file diffs faster +- Split-view sidebar: hover-to-focus is now off by default (opt in with `sidebar.hoverFocus`), the active session card is accented by default (opt out with `sidebar.accentActiveSession`), and the closed-state `open sidebar` hint always renders in the neutral hint color +- `web_fetch` now follows HTTP redirects instead of failing, asking permission for the redirect target when it is on a different origin and showing where the redirect came from +- Add a directable queue manager (staff) to reorder, edit, remove, repeat, and immediately send queued messages +- New Sessions sidebar for managing multiple concurrent sessions: switch between them, spawn new ones, and see their status at a glance. Turn it on with experimental mode (`/experimental on`). +- Enterprise administrators can enforce a restrictive sandbox floor: managed settings tighten (but never loosen) the user's sandbox policy, and the `/sandbox` dialog surfaces the org-configured managed values with locked fields and managed filesystem paths so admins can confirm what is enforced. +- Sessions no longer fail every turn with "Holder terminated during creation" after a subagent finishes +- Startup tips only suggest /init in repositories that don't already have Copilot instructions +- A `userPromptSubmitted` hook returning a non-string value for `modifiedPrompt`, `modifiedTransformedPrompt`, or a handled `responseContent` no longer corrupts the session; the value is ignored, a type-only warning naming the field is logged, an empty-string replacement is rejected instead of blanking the model-facing content, a hook that sets `handled` without a usable `responseContent` is now diagnosed instead of silently falling through to the model, and a `null` `additionalContext` is treated as absent instead of being injected as the literal text `null`; hook output is also bounded at 10 MiB per invocation, so an HTTP or command hook returning an unbounded response can no longer exhaust memory or leave an oversized session behind +- Show recent shell output for large commands that write to a file +- The /instructions picker now respects --no-custom-instructions. +- Render inline images in Rio terminals that support Kitty graphics +- Sandboxed searches now offer an immediate bypass prompt and avoid duplicate bypass prompts. +- Voice mode pauses playing media before recording and resumes it afterward, where supported (macOS and Windows) +- Show the number of active scheduled prompts in the footer +- Add /limits predict to suggest a session AI-credit limit from similar sessions. +- Add configurable timed refreshes for custom status-line commands +- Queued messages list no longer shows a blank row or inflated count, and Ctrl+C removes your own newest queued message +- Changing the `mouse` setting mid-session now takes effect immediately, from both `/settings mouse on|off` and the `/settings` dialog, instead of being saved but ignored until the CLI restarted +- web_fetch routes through the configured sandbox proxy when outbound is allowed, and denies egress when network.allowOutbound is false (a proxy no longer overrides the user's outbound policy); when a proxied fetch fails it warns that curl/wget share the same proxy, and suggests requestSandboxBypass only when the sandbox proxy itself is unreachable +- Improve subagent delegation for small tasks and parallel work +- Queue mid-turn /model changes and apply them after the current response finishes +- Restore the early warning when unreclaimable system and tool context nears the limit, before automatic compaction is blocked +- Session working directory no longer reverts to the original checkout shortly after `/worktree` switches into a new worktree +- MCP tools load faster from definition-scoped snapshots, with process-wide and per-server cache opt-outs. +- Autopilot stays selected after task_complete by default; set stayInAutopilot to false to return to interactive mode after each task + +## 1.0.75 - 2026-07-24 + +- Add support for Claude Opus 5 + +## 1.0.74 - 2026-07-23 + +- Typing `?` while the /search bar is open enters it as text instead of opening quick help +- Add support for Open Plugin Spec v1 plugin manifests and mcp.json configuration +- IDE integration reconnects reliably when the CLI reloads MCP servers or changes directory +- Multi-turn subagent timelines show every prompt and response in the correct order after reopening /tasks +- Subagent timelines identify whether prompts came from the main agent or another subagent +- Show a first-run splash to opt into the default sandbox +- Adding support for gemini-3.6-flash +- The `/mcp add` and `/mcp edit` wizard now preserves `=` characters in environment variable values (such as base64 padding), so secrets and tokens are stored correctly. +- Remote session uploads stop retrying permanent Mission Control 400/404 responses +- Show Tab in /settings footer to switch scope tabs +- Downscale oversized tool-result images so CAPI Responses requests continue +- When multiplexing sessions, a session's open dialog no longer leaks into another session; eligible pickers reopen when you switch back +- The `$` interactive shell shortcut now opens a shell even while the agent is working +- Fully honor the skill disable-model-invocation flag +- Warn when a participating language server reports a different symbol than the one requested +- Steering interrupts shell output waits without stopping the running command +- Increase the Responses request size limit +- Plan mode now allows session-folder planning artifacts while still blocking clear file mutations outside the session folder. +- Add `/model plan` (or `/model --plan`) to pick a model used while in plan mode; pass a model id, `off` to clear, or no id to open the picker. Reverts to the session model when you leave plan mode. +- Resume search matches session titles even when whitespace differs + +## 1.0.73 - 2026-07-20 + +- Anthropic subagents continue working when additional directories are configured +- Resolve relative links in custom agent instructions from the agent file location + +## 1.0.72 - 2026-07-20 + +- An `agentStop` hook that always blocks no longer loops indefinitely: the CLI now ends the turn after 8 consecutive blocks, and `agentStop` hooks receive a `stop_hook_active` flag so they can detect a forced continuation and self-limit +- Add opt-in git and gh authentication inside the OS sandbox +- Sandbox macOS keychain access now defaults off for tighter isolation; re-enable it in /sandbox if a command needs it +- Lifecycle and subagent hook commands run in the current session directory after /cd +- Deleting an MCP server with /mcp delete stops its running background process +- Toggling /sandbox restarts only local MCP servers and leaves remote servers connected +- Command approvals no longer carry over to another repository after you switch with /cd +- The GitHub tab's Open in web action now reliably launches your browser on Windows +- Preserve pasted prompt content when changing models through Ctrl+X /model +- Corrected the added-line count shown when creating a file so files ending in a trailing newline no longer report one extra line +- /worktree and /move no longer fail to create a worktree for an auto-generated branch name when many similarly-named branches or a leftover worktree directory already exist: the numeric-suffix search is no longer capped at 5 and now skips stale unregistered worktree directories (an explicitly supplied branch name still errors on a collision) +- /worktree no longer intermittently runs the kickoff task in the main repo instead of the new worktree +- /worktree and /move now propagate folder trust to the new worktree before switching when the source is already trusted (avoiding a spurious folder-trust prompt in that case), /move addresses its git stash precisely so a concurrent stash can't misplace changes, and worktree creation skips a leftover directory instead of failing +- Show the exit resume hint for a renamed session with no messages when its workspace is only available as a cached snapshot +- Show a connected message after a slow MCP server eventually connects +- Add `update`/`uninstall` verbs to `/plugins`, let `enable`/`disable`/`remove` target plugins, MCP servers, or skills via `--plugin`/`--mcp`/`--skill` flags or a positional kind, and support installing skills with `/plugins install --skill` +- Add a /plugins help command plus skill, MCP, and marketplace management for full /plugin parity +- Session exports keep angle brackets intact in inline code and top-level fenced code blocks +- Show MCP server status correctly for names like constructor and **proto** +- Keep the session highlight on the nearest live row when closing a session, in both the Sessions split view and the standalone Sessions tab +- Pad inline hex color swatches once inside Markdown lists +- Type $ at the prompt to open an interactive shell in the current session directory (enable it with `/settings shellShortcut on`; off by default) +- Nested markdown lists render correctly in buffered output (`-p --stream off` and detail screens): sub-bullets are no longer glued onto the parent item's line or flattened, and are indented under their parent +- `copilot skill list` now strips terminal control characters from skill names and descriptions, so a crafted skill can no longer inject ANSI escape sequences into the listing output. +- Install skills from the CLI with `copilot plugins install --skill ` (add `--scope project` to a file or URL install to install into the repository) +- Show default values in /settings and let booleans cycle back to default +- Require SSO for remote control when managed settings demand it +- Mask secret values in /settings show output +- Show hex color codes written as inline code (e.g. `#FF0000`) as color swatches, and add a renderHexColors setting (on by default) to toggle hex-color swatches +- Add /model --session (-s) to change the model, reasoning effort, or context window for just the current session, leaving global settings unchanged. +- Detect VS Code, Cursor, and Windsurf through parent processes in /terminal-setup +- The Sessions sidebar is now navigable with the keyboard and mouse (arrows open and focus it and move the selection, and Enter or a click switches to a session; press n to spawn a session or x twice to close one from the keyboard); /settings can disable it or stop restoring remembered sessions +- Add --plugin, --mcp, and --skill flags for plugin mutations +- Add skill removal support to `copilot plugins remove --skill` +- Wrap ask-user and elicitation inputs in the split-pane chat view +- Modified vim keys (Ctrl+K, uppercase J/K) no longer move the selection in tool-permission prompts and other text-input select menus; only unmodified j/k, the arrow keys, and Ctrl+P/Ctrl+N navigate. +- `/terminal-setup` now refuses to modify a VS Code keybindings.json that contains a JSON syntax error (instead of rewriting it and reporting success), matching its documented invalid-JSON handling. +- Reveal full file paths when expanding compact editing rows +- Make the plan-approval menu deterministic across models +- Keep /add-dir directories visible in the agent context across turns +- Multi-turn subagents are always enabled, so you can send follow-up messages to running agents +- Enable tool search for Claude Haiku 4.5+ +- Emoji shortcodes like :tada: no longer render with a spurious trailing space in printed and PR/issue/gist output +- Deliver scheduled prompts as steering messages when the agent is busy + +## 1.0.71 - 2026-07-16 + +- `copilot -p --autopilot` no longer hangs when a background shell or agent outlives the turn; it now honors the COPILOT_TASK_WAIT_TIMEOUT_SECONDS timeout the same way plain `-p` does. +- Reopening the /subagents model picker keeps each agent's reasoning effort and context tier +- Refresh memory context after 30 minutes in long-lived sessions +- Keep MCP tool lists up to date when servers change +- Avoid leaving long-running background git processes after exit +- Add a configurable maximum for Ctrl+R command history +- On startup, an invalid settings.json now shows a warning identifying the offending value instead of silently ignoring your settings +- /terminal-setup no longer skips setup on terminals without real kitty keyboard support +- Add /voice devices to choose and persist the microphone for voice mode +- Limit which built-in agents are available to tasks and subagents +- Add canvas support in the CLI for extension-driven interactions +- Enforce the sandbox filesystem policy on LSP file reads and rename edits +- Allow empty owner and author emails in marketplace metadata +- Keep all MCP Server Type options visible on short terminals +- Mark disabled skills in `copilot skill list` and its JSON output +- Plan mode now hard-blocks built-in tool calls that would modify the workspace, so the agent can no longer edit files or run mutating shell commands while planning (built-in mutators like opening a pull request are blocked; MCP and external tools are still allowed) +- Improve /chronicle cost-tips recommendations with richer cost profiles +- Highlight standalone hex colors inline in Markdown +- Persist GitHub MCP toolset/tool config via settings.json (githubMcpToolsets, githubMcpTools, etc.) +- Add `plugins marketplace` subcommands to list, add, and remove plugin marketplaces +- Persist sidebar sessions across restarts +- Add plugins marketplace browse and update commands +- Split /worktree and /move: /worktree now creates a new worktree and leaves your uncommitted changes behind, while the new /move carries them into the new worktree +- Add local and cloud cost profiles to /chronicle cost-tips +- Switching to autopilot mid-turn now auto-answers questions asked during that same turn +- Custom agents that request a shell tool by alias now also receive the matching read, list, and stop shell tools +- Slash commands and their autocomplete now match regardless of case (e.g. /SESSION works like /session) +- Show repo-enabled plugins in /plugin list and skill pickers +- Press ? twice to dismiss quick help and start a prompt with a literal ? +- Shell completions suggest positional-argument choices +- Show the /app launch message and download link immediately on Linux +- Validate --max-autopilot-continues rejects NaN, negative, and fractional values +- Honor NO_COLOR in the CLI even when chalk cached a color level +- Apply updated session options (shell flags, streaming, custom agent defaults) immediately after /settings changes +- Announce the focused /model row for screen readers +- Announce the focused picker row to screen readers +- Show selected custom agents once in /agent and keep their source label when the file name differs from the display name +- Clear the /model pricing banner when no models match +- Keep /share file session and /share html session from using the full-session selector as an output path +- Honor --context in fresh interactive sessions +- Fixed the model picker changing a hidden model's reasoning effort or context window when the search matched no results, and hid the inert key hints shown in that empty state +- Display plugin root skills as /plugin instead of /plugin:plugin +- Keep valid hooks in a config file when one hook entry is malformed +- Denying write(path) now blocks only the specified path +- Using --add-github-mcp-tool "\*" now enables all GitHub MCP tools +- Render empty untracked files without a phantom added line +- Show clean failure messages when copilot skill add fails +- Press Enter on a blank settings array item to show an error instead of saving an empty value +- Press Enter once to toggle booleans with a registered default in /settings +- Declining folder trust in /cwd keeps your live session open and returns to the previous folder +- Show a warning when a workspace MCP config is malformed or cannot be loaded +- Make bare `copilot mcp` and `copilot skill` print help and exit 0, matching `copilot plugin`. Consistent with `plugin`, the implicit `help ` form is not supported for these groups; use `copilot mcp --help` (or `copilot skill --help`) instead. +- Show malformed allowed_models.txt policy errors cleanly in -p mode +- Resume synced sessions by name without a false multiple matches error +- Show an error when --name is used with --session-id for an existing session +- Show --plugin-dir plugins in copilot plugin list +- Keep backgrounded sessions alive when you switch away from them +- Link bare #number GitHub refs in -p --stream off output +- Show the startup banner only on the first launch when set to once +- Allow `copilot update` and `/update` to accept `stable` as a channel +- Surface --plugin-dir warnings in the terminal +- Surface the real load error for malformed custom agents +- Reject --continue when used with --resume +- Prompt mode now exits non-zero when a `--share` or `--share-gist` export fails +- Server mode reconnects OAuth MCP servers from cached tokens +- Keep stored Git credential helpers available for marketplace plugin installs +- The /model picker shows the Auto model description as markdown with a clickable Learn More link +- Keep sessions tied to their working directory across prompts, restarts, and workspace tools +- Always offer a custom answer in ask_user choice prompts +- Lower the default maximum sub-agent nesting depth from 6 to 4 to curb runaway recursive sub-agent delegation. Usage-based billing users can still adjust `subagents.maxDepth` (up to 128). +- Add a pinned prompts setting in /settings to control prompt pinning +- Add Repo and Repo (local) scope tabs to the /settings dashboard +- Interactive shell commands now fail with a retryable "reconfiguring" message instead of an "unknown shellManager handle" error after the shell manager is disposed, and a detached command's completion notification is no longer lost when the shell context is reconfigured while a read is in progress +- Reject custom-agent names that would create hidden files +- Reject malformed --allow-tool and --deny-tool patterns with an error message +- Show retained shell output in /tasks Shell Details for finished tasks +- Remove duplicate Error: prefixes from plugin command failures +- Shell completions stop suggesting subcommands as flag values +- Show singular message counts in /usage activity graph +- Keep /cd from switching to files or inaccessible directories +- Dismissing the quick-help overlay with ? no longer leaves a stray ? in the prompt +- --sandbox and --no-sandbox now show their "ignored" warning during interactive startup when the sandbox feature is unavailable (previously it was only visible in non-interactive mode) +- Show the full command with its arguments (not just the wrapper) in the /mcp server detail view +- Hide the inert navigate and view-log hints in the empty /lsp logs (LSP Services) panel +- Exit non-interactive prompt runs with a failure code when a prompt is blocked before responding +- Show the Auto discount in the redesigned inline model picker +- New sessions start in the default directory instead of the active session's cwd +- Fish completion only offers enum values for closed-choice flags +- Use targeted validation commands and lighter install guidance by default +- Use ctrl+x → x to close a session and ctrl+x → h to hide the split sidebar + +## 1.0.70 - 2026-07-09 + +- Add GPT-5.6 model support +- Show a single Error prefix for mcp and skill command failures +- Show the real parse error when --agent selects a malformed custom agent +- web_fetch works through mandatory HTTPS proxies +- Hide / search on the Gists tab +- Treat superseded subagent runs as cancellations instead of failures +- Add paginated session.mcp.resources read/list/listTemplates RPCs for MCP server resources +- preToolUse hooks that exit with code 2 deny tool calls +- Create draft skills when Forge finds a clear workflow pattern +- Hide the GitHub App install nudge in remote terminals +- Pin plugins to an exact commit SHA using the `sha` field in plugin source configuration +- Add --sandbox and --no-sandbox flags to turn the OS-level shell sandbox on or off for the current session only, without changing your saved sandbox setting (useful with -p) +- Add /refine to rewrite a rough, stream-of-consciousness prompt into a clear one +- Add --repo and --local flags to /settings and /model +- Add a setting to show or hide timeline timestamps +- Let a trusted repository pin the model, effort level, and context tier and extend the URL/MCP/skill deny lists via .github/copilot/settings.json +- Expose SDK APIs to manage live MCP servers in running sessions +- Show the active user's models after /user switch +- Declining an extension's permission prompt no longer disables tool approvals for the rest of the session +- Avoid redundant background agent notifications after a blocking read_agent returns its result +- Startup auth errors recommend the real `copilot login` command +- Keep merge-semantics settings editable in /settings +- Re-sync managed plugins when their cache is missing or empty +- Copy the last assistant response even after command echoes +- Persist the last-logged-in user on every login so a restarted runtime client stays authenticated +- Hide /agent picker navigation hints when there is nothing to select +- Open the plan file or research report with Ctrl+Y in any mode +- Keep terminal color scheme changes in sync over SSH and remote shells +- Prefill /chronicle search so it can accept a query +- Show a distinct scrollbar thumb glyph in the /model picker on the no-color path (--no-color, non-color terminals) so the scroll position stays visible +- Skip launching a browser in remote terminals +- Arrow keys in /search and reverse search stay in search instead of switching tabs +- Restore tool event ordering so permission prompts appear after tool start +- Show only one cancellation message when streaming is aborted +- Keep /pr tables aligned in compact timeline view +- Show clear validation errors for empty or non-ASCII skill and command names +- Keep footer selection highlights aligned when the session bar is open +- Fail fast when marketplace plugin git auth needs a terminal prompt +- Dismiss other pending read and fetch sandbox-bypass prompts after you disable the sandbox +- Fix a crash on Windows triggered by desktop toast notifications +- Improve GPT-5.6 commentary guidance for tool-driven progress updates +- Highlight the sidebar toggle hint in the input footer +- Make markdown links and bare URLs in the timeline and tool output clickable +- Reclaim the blank line under the home tab bar: the timeline (and Sessions+Current split) sits flush under the tabs when a prompt is pinned, keeping one breathing line only while nothing is pinned +- Press Tab to switch the context window in /model +- Long-running sessions refresh enterprise managed settings hourly +- Mark locally-spawned MCP servers that run inside the sandbox in `/mcp list` (e.g. `connected (sandboxed)`) + +## 1.0.69 - 2026-07-07 + +- Label built-in file edits with a (sandbox policy) badge instead of (sandboxed), since they follow the sandbox policy on a best-effort basis rather than running in the OS-level sandbox +- Reload installed plugin extensions without restarting a session +- Add a /plugins dashboard to manage installed plugins +- Open quick help from an empty prompt without leaving a stray ? +- Add minimal reasoning effort for gemini-3.5-flash +- Show a scrollbar in the /model picker list +- Show disabled servers as disabled in /lsp test +- Let built-in file edits bypass the sandbox when you approve it +- web_fetch now follows the active sandbox network policy (denying outbound or local targets the policy blocks) and, when the host opts in via sandbox.allowBypass, lets you approve a one-time bypass from the fetch prompt +- Show exact local assistant usage in Chronicle and session SQL +- Confirm before resuming a remote session from a different repository +- Delay read-only remote session creation until you send the first message +- Display reasoning-effort labels in the CLI footer +- Show descriptions for sandbox userPolicy settings in /settings +- Reject explicitly empty --name= values when starting a session +- Create delegate PRs against the current branch by default, with /delegate --base to choose another PR target branch +- Make /copy fall back to wl-copy on Wayland +- Improve /sandbox add-path suggestions so they open only when you ask for them +- Improve /chronicle cost-tips with more precise evidence-backed recommendations +- Hold Alt (Option on macOS) while scrolling to move one line at a time +- Resume and switch large sessions faster +- Speed up /diff rendering and scrolling on large diffs +- Keep the full /model picker on screen when the timeline is full, re-snapping as its details banner grows so the search box and hint bar are no longer clipped below the terminal +- Hide transient console windows when the CLI starts helper processes on Windows +- Auto-approval timeline entries now include the request subject, such as the command, path, URL, or tool name +- /allow-all auto now requires experimental mode (/experimental on or --experimental) instead of the AUTO_APPROVAL env var or feature flag +- Show /rubber-duck in pre-auth help and self-documentation +- Include files inside new untracked directories in /diff local edits +- A prompt taller than the screen stays scrollable when its top scrolls off, instead of collapsing to a pinned header +- Require Copilot login before ACP authenticate returns success +- Show the full assistant response in prompt mode when --stream is off +- Disconnect a repo-scoped plugin's MCP server when the repo disables it or the session leaves the declaring repository +- Prevent `copilot init` from hanging in non-interactive mode +- Reject empty --session-id= values instead of ignoring them +- Reject empty --resume= values instead of starting a new session +- Preserve emoji in truncated timeline tool arguments +- Show plain Shift+Enter in /terminal-setup output +- Keep session resume working when token timing includes fractional milliseconds +- Complete @-mentions for files whose names start with [DIR] +- Sign in to MCP servers through the CLI OAuth callback flow +- Reveal the full /user switch picker when the timeline is full so its hint bar is no longer clipped below the terminal +- Add /mcp list to show attached MCP servers and their status, and allow /mcp list and /plugin list to run while the agent is working +- Allow opening the /mcp manager while the agent is working to enable or disable servers mid-turn; add, edit, delete, and re-auth stay paused until the turn finishes +- Add auto allow-all mode that auto-approves requests an LLM judge evaluates as acceptable +- Add a `stayInAutopilot` setting (default false) that keeps the CLI in autopilot mode after an autopilot task completes +- Pinned prompts keep their full frame aligned while scrolling +- Suppress macOS pasteboard stderr during clipboard reads and writes +- Keep colons intact in rendered markdown output +- Warn when multiple plugins define the same MCP server +- Collect debug logs without truncating large files or dropping multiline secrets +- Find PRs from worktree branches when the local branch name differs from the PR head ref +- Skip the autopilot permission prompt when bypass mode is disabled by policy +- Allow WSL UNC paths for local files in the CLI +- Apply --reasoning-effort reliably when the CLI starts +- Keep slash-command picker rows intact in tab-expanding terminals +- Keep model switches working when tool call IDs include punctuation +- Double-press Esc now interrupts the running main turn (flushing queued messages), or stops background agents when the main agent is idle +- Prevent benign Windows crash reports when the CLI exits +- Wrap clipboard writes in tmux passthrough so copy reaches the outer terminal +- OAuth-gated MCP servers now register their tools after reconnect +- Keep CLI authentication working in one-shot sessions +- Ctrl+C dismisses ask_user and elicitation prompts like Escape +- Show Authenticate for cancelled MCP OAuth requests +- Keep /help from listing rewind/undo twice +- Keep MCP servers in needs-auth after OAuth cancellation +- Hide staff-only commands from pre-auth help and self-documentation +- Surface skill loading errors and warnings in `skill list` +- Browse and filter models more easily in the CLI model picker +- Resume sessions faster by removing quadratic work when rebuilding the timeline +- Warn when static context uses most of the prompt budget and block requests when little conversation room remains +- Improve CLI responsiveness when reading and writing session databases +- Improve slash-command and theme picker option descriptions +- Remove inert sandbox host lists and the Clear policy on exit toggle +- Add file and folder completion to /sandbox path entries +- Update a backgrounded session's branch label in the Sessions split view when its working directory changes +- Skip unnecessary MCP reloads when returning to an already-loaded session +- Prevent the tgrep indexer from running out of memory on large monorepos, and fall back to ripgrep if the indexer is killed instead of repeatedly restarting it + +## 1.0.68 - 2026-07-01 + +- Add support for the kimi-k2.7-code model +- The focused field in the /mcp config form is marked with a "❯ " chevron, not color alone +- Keep IDE tools available during transient IDE disconnects, returning a clear error while disconnected and recovering automatically when the IDE reconnects +- Tab completion shows slash command aliases inline (e.g. /pr automerge|agentmerge) +- Stop hooks from erroring and denying every tool when a session's working directory or git worktree has been deleted +- Keep the footer model status in sync when reasoning effort or context tier changes +- Avoid duplicate skill and command parse errors from symlinked scan roots +- Update the Sessions sidebar branch after /cd and /worktree +- Find agents and instructions under Win32 extended-length paths on Windows +- Show descriptions for slash-command input choices +- Prevent terminal corruption when copying selected timeline text on macOS +- Fold symlinked sandbox paths into a single row +- Browse, resume, and switch between sessions from the agents screen +- Code review retries transient git failures when gathering changes +- Skip malformed plugin manifests and keep loading valid plugins +- Show plan budget details in the statusline and /usage for supported plans +- Render Thai and Devanagari text correctly in clipped output +- Keep file edits and patches within the sandbox filesystem policy +- Preserve wrapped OSC 8 hyperlink IDs in terminal output +- Let device-managed settings override server-managed settings +- Keep embedded /skill tokens in skill prompt context +- Let git commands work from repo subdirectories in the sandbox +- PowerShell variable references no longer trigger content-policy refusals +- Tell the agent when the working directory changes between turns so it uses the new directory for commands and relative paths +- Default to a steady vertical-bar cursor in interactive sessions +- Disable cursor blinking at startup without changing cursor shape +- Reject sandbox path edits that conflict with symlinks in other lists +- Keep the status line visible when the slash-command picker opens +- Custom agents keep their tool filters in nested subagents +- Preserve multibyte characters (emoji, accents, non-Latin text) in the /diagnose session log excerpt + +## 1.0.67 - 2026-06-30 + +- Disabling the sandbox for the rest of the session now takes effect immediately, so shell and search commands stop re-prompting to bypass it mid-turn +- Subagent sessions keep parent tool restrictions +- Show warnings and errors when host custom agents fail to load +- Require session limits to be at least 30 AI credits +- Add Claude Sonnet 5 as a supported model +- Allow tool calls to continue when hooks time out +- Ctrl+Q now enqueues the highlighted slash-command argument completion +- MCP OAuth against Microsoft Entra servers behind a tenant vanity domain (e.g. Copilot Studio) no longer fails to refresh or re-authenticate (AADSTS9010010 / AADSTS90023) +- Prompt mode exit summary shows a resume hint to continue the session + +## 1.0.66 - 2026-06-30 + +- Use a non-blinking block cursor during interactive sessions, restoring your terminal's default cursor on exit +- Add support for Claude Opus 4.8 Fast and deprecate Claude Opus 4.6 Fast +- MCP add/edit form accepts HTTP-style `Key: value` headers +- Keep LSP servers from starting twice during startup +- Avoid blocking commands that contain Windows-style path fragments +- Let Copilot read output from and stop detached background shell commands +- Large output handling now respects custom output directories and a disable setting +- Prevent PR description generation from crashing on empty assistant responses +- Render the timeline as a compact "highlight reel" with single-line tool and reasoning rows for all users +- Add @ file and # GitHub ref completions in relay sessions +- Show the correct session age when filesystem birthtime is missing +- Prevent duplicate final assistant messages for GPT models +- Terminal title updates work in more terminals +- Show a (sandboxed) badge on compact Search timeline entries +- Git commands work in sandboxed linked worktrees +- Show the current pull request link as a status-line item +- Show quota snapshots for WebSocket Responses requests +- Show accurate Anthropic reasoning token counts +- Let grep and glob retry blocked searches after sandbox approval +- Format terminal titles with the session title and GitHub Copilot suffix +- Skip synchronized output under tmux to avoid mouse pointer flicker +- Session limits now apply across the current conversation, reset on /clear, and use the sessionLimits option key. +- Hide excluded built-in agents from agent selection +- BYOK sessions using Anthropic models no longer hit HTTP 400 errors from adaptive-thinking mismatches — neither from injecting adaptive thinking on models that don't support it, nor from sending standard thinking to models that require adaptive. Thinking-mode selection for dual-mode models is unchanged. +- Allow skills with the same name from different plugins to coexist +- Let integrations read and write CLI user settings +- View LSP server logs in /lsp logs and read_agent +- Prompt to install gh CLI when it is missing in GitHub repositories +- Add GitHub attachment variants to prompt rendering +- Extension toggles preserve the selected mode +- Return to the prompt after cancelling attached shell commands +- Keep background git status checks from disrupting concurrent git commands +- Recover corrupted session history on load +- Preserve newlines in /after and /every scheduled prompts +- Keep multi-line /worktree tasks intact when starting them +- Make /cd path completion keep Enter, Escape, and Tab behavior in sync +- Keep session-store searches and context lookups responsive +- Show desktop notifications on macOS from the CLI +- Paste WSL images when Windows env vars are unavailable +- Keep selection on the adjacent task after removing one +- read_agent since_turn: 0 now correctly returns all turns including turn 0 +- Filter non-JSON stdout lines from MCP servers during startup +- Perform tokenizer warmup in parallel on a background thread for better startup performance +- Show submit times next to user prompts in the timeline +- Improve /share to manage synced session visibility +- Expand @-style imports in AGENTS.md, CLAUDE.md, and Copilot instruction files +- Make /pr auto keep working through CI, review, and merge queue +- Clicking to expand a compact timeline entry holds it in place and reveals its content downward +- Configure subagent concurrency and depth limits in /settings (usage-based billing users) +- Add `/chronicle skills review` for reviewing proposed draft skill changes, with options to accept, reject, or defer each draft +- Add desktop notifications for attention prompts and idle sessions +- Make /share use Mission Control links for session sharing +- Snapshot creation retries transient HEAD lookup failures instead of crashing +- Keep `/chronicle reindex` responsive and show progress in the timeline +- Return to the last open GitHub issue, pull request, or gist view when switching tabs +- Resolve package argument placeholders when installing MCP registry entries +- Keep queued messages from getting stuck behind background work +- Retry managed settings fetch after transient connection-pool errors +- Stop showing broken-pipe errors when a sandboxed MCP server exits mid-request +- Properly recover MCP host-delegated connections when OAuth tokens expire or need broader scopes +- CLI git checks skip optional locks so status and branch lookups keep working in busy repositories +- Collapse multi-line sub-items into one inline line in compact timeline rows +- Inline hook settings now handle nested Claude-style hook groups correctly +- Keep the CLI responsive during secret filtering +- Search inputs match queries that have leading or trailing whitespace +- Keep idle agents available after you cancel a turn +- Show sandbox-bypass warnings and label bypassed commands +- /pr auto now starts a self-paced loop that fixes one thing per run and paces itself around CI to drive the PR to green; /pr automerge keeps going until the PR is merged. Manage or stop it from /loop or /every. +- Enable /rename in remote-hosted (cloud and relay) sessions +- Add toggle to enable or disable MCP servers in the CLI from MCP list view +- Add experimental response limits controls to CLI settings +- Let managed settings configure OpenTelemetry export +- MCP tools on OAuth-authenticated remote servers now recover automatically after a mid-session token expiry, matching the existing OIDC retry behaviour. A 401 during a tool call triggers a non-interactive reconnect, and servers needing interactive re-auth are retried at the start of the next turn. +- Add persisted dynamicRetrieval setting (and --dynamic-retrieval skills= flag) to enable or disable embeddings-based retrieval of skills +- Let custom agents set reasoning effort in their definitions +- Pass a task to /worktree (e.g. 'fix the login redirect') to name the branch for that task and run the sentence as the first prompt in the new worktree +- Added runtime telemetry for the MCP host token-injection OAuth flow, recording when an OAuth broadcast is emitted to the host and how the host responds (token or cancelled) with response latency +- Show merge status for each pull request in the Pull requests tab, and refresh the cached statuses on demand by pressing r +- Fix a soft hang where the CLI stopped responding to input if a startup prompt (folder trust, screen reader, or Copilot free signup) opened while a non-Main home tab was focused +- Guide the agent to format cross-repository issue/PR references as owner/repo#number (reserving bare #number for the current repo) so they don't mislink to the current repository +- Keep /restart working when shutdown teardown takes too long +- Copy text to the clipboard on WSL when cmd.exe is not on PATH +- COPILOT_HOME and --config-dir stop loading skills from ~/.agents/skills +- Keep per-extension disabled selections when switching extension mode in /extensions +- Copying wrapped text from the scroll view keeps spacing correct +- Voice mode turns itself off when the engine fails to start at boot +- Quit cleanly with Ctrl+D during startup before authentication completes +- Keep framed user messages from clipping trailing characters at the right edge +- Inline images stop writing to the shell after exit +- Display descriptions for slash command subcommands +- Refresh MCP server headers automatically after authentication changes +- LSP commands and tools resolve project configs and server paths more reliably +- Add --allow-all-mcp-server-instructions to optionally include instructions from all MCP servers in system prompts +- Auto-accept opt-in MCP consent prompts in --yolo sessions while still showing system permission prompts +- Use the full terminal height in full-screen views +- Use clearer icons for shell and search timeline entries +- Match the terminal text color to the GitHub theme canvas +- Show the active agent mode in the working footer text +- /worktree keeps a valid branch name exactly as typed, e.g. feature/JIRA-123, instead of flattening it to a slug like feature-jira-123 +- With no argument, /worktree names the branch from your uncommitted changes and recent conversation using your active model instead of a fixed small one +- Consolidate color palette settings under /settings theme +- Store CLI settings and session state more reliably + +## 1.0.65 - 2026-06-24 + +- /cd now persists the working directory so resuming a session returns to it, and discovers custom agents in the new directory +- Commands with slash-prefixed string arguments (e.g. --body "/azp run") no longer trigger spurious filesystem permission prompts +- Fullscreen timeline stays anchored when older content is trimmed +- Resume open canvases automatically after restarting the CLI +- Add an opt-in status bar item showing CI check status (passing/running/failing) for the current branch +- Add a `copilot skill` subcommand (and a `/skill` alias for `/skills`) to list, add, and remove skills from a file, URL, or directory +- Prevent the GitHub background from flashing on startup with non-GitHub themes +- Prevent brief console windows from flashing on Windows when the agent runs hook commands or resolves command paths +- Include userPromptSubmitted hook additionalContext in the model-facing prompt +- Keep Windows paths intact when adding stdio MCP servers +- Stop MCP shutdown from waiting on in-flight server connects +- Restart the CLI without shutdown timeouts +- Remove syntax highlighting from shell commands in the timeline +- Keep custom-agent subagent model selections when using BYOK providers +- Parse /every schedules on the session's main model +- Render inline images reliably in tmux +- The ask_user freeform option wraps text and keeps the cursor aligned +- Save custom status line commands in /settings +- Show the streaming byte count separately from the cancel hint +- Handle wakeup misfires with a graceful message when no self-paced schedule is active +- Silent MCP OAuth refresh reuses the granted scope so reconnects stay signed in +- Up/down history and Ctrl+R reverse search now include past shell commands while in normal mode, so you can recall and re-run a shell command without first typing ! to enter shell mode + +## 1.0.64 - 2026-06-23 + +- Path access prompt shows resolved symlink targets so you can see exactly what access is being granted +- Show the pay-as-you-go additional usage budget at launch, refresh it after a request is rejected for hitting the additional spend limit, and show a friendly message when the additional usage limit is reached +- Add websocket responses support for BYOK OpenAI-compatible providers +- Resumed sessions reproduce the original attached-file references even if those files later change on disk, avoiding prompt-cache resets +- Free-text search terms containing colons (e.g. `CLI:`) now return correct results in Issues and Pull requests search instead of being misread as invalid qualifiers by GitHub +- Support static OAuth client overrides, including client secrets, for MCP server authentication +- Preserve keystrokes typed while the CLI is still loading +- Add an option to bypass the sandbox for shell commands +- Add mouse click and double-click selection to paginated lists +- Link PR and issue references in markdown tables +- Use the GitHub theme by default and enable home tabs and prompt frame for all users +- Keep terminal output aligned after terminal resizes +- Content exclusion no longer blocks every file when the rules service is unreachable (offline or a transient network error). Access is allowed until rules can be fetched and retried in the background, matching the editor's behavior. +- Configure the rubber-duck subagent in /subagents, including a complementary model strategy that picks an opposite-family model +- /diff shows a session diff of Copilot's changes in non-git folders +- Set an HTTP(S) proxy with a user setting +- Resume sessions by name even when the name contains spaces +- Hide unsupported slash commands in remote-hosted sessions +- Add a setting to hide the conversation scrollbar +- Add inline image rendering in the CLI +- Add argument-hint frontmatter support for skills +- OpenTelemetry: chat spans after a successful compaction carry gen_ai.conversation.compacted=true, and the summary is emitted as a CompactionPart in gen_ai.input.messages +- PowerShell cmdlets (Select-String, Where-Object, ForEach-Object) no longer trigger spurious directory access prompts +- Non-interactive prompt output now stays at column 1 +- Clear queued tool images when vision is disabled +- Changing the model now waits until the new model is applied +- Treat 2>/dev/null redirects as read-only in shell safety prompts +- Normalize edited text to LF when opening prompts in an external editor +- Skip computer-use consent prompts in full allow-all sessions +- Remote export keeps running after /clear and /session info keeps the task URL +- Keep the cursor on the adjacent session after deleting one in the session selector +- Use the correct Linux libc target when resolving and auto-updating SEA packages on musl hosts +- Allow required multi-select prompts to submit an empty selection when minItems is not set +- Keep the home session timeline visible after attaching and restoring +- The /settings search field supports readline editing keys and cursor movement +- OpenTelemetry GenAI spans now emit `gen_ai.usage.cache_read.input_tokens`, `gen_ai.usage.cache_creation.input_tokens`, and `gen_ai.usage.reasoning.output_tokens` per the GenAI semantic conventions spec (previously used incorrect underscore-separated names) +- Fix mouse wheel scrolling being broken in the terminal after the CLI exits by tearing down terminal modes in reverse order (mouse tracking is now disabled before leaving the alt screen) +- Fix the /rewind file-restore confirmation dialog being clipped at the bottom when it opens above a scrolled timeline; it now shows at full height once the file list loads +- Show --remote-export and --no-remote-export in --help output +- Wrap expanded compact timeline shell entries so long commands and descriptions stay visible +- Make links in markdown tables clickable +- Show per-model token totals in /usage and speed up large history scans +- OpenTelemetry GenAI chat spans emit `gen_ai.request.reasoning.level` for the configured reasoning effort +- Autopilot mode now returns to interactive mode after the agent calls task_complete, so you aren't left in autopilot for your next prompt +- Add /branch as an alias for /fork, matching Claude Code's command naming +- Experimental: adds a `--worktree [name]` (`-w`) flag (enable with `/experimental`) that creates or reuses a git worktree under `.worktrees/` and starts the session inside it +- Add tab completion for /agent names +- Add model family aliases like opus, sonnet, haiku, gpt, and gemini in the model setting +- Add Ctrl+Backspace binding in /terminal-setup for Windows Terminal +- Add SDK support for host-provided OAuth tokens for remote MCP servers +- Experimental: in the compact timeline, click a tool-call or reasoning row to expand or collapse just that entry (like ctrl+o / ctrl+t for one row), with a subtle highlight on the row under the mouse +- Apply MCP org policy when sessions create or reload MCP servers +- Fixed completed background command output being unavailable when requested later +- Keep task companion tools available to custom agents that use the task or agent alias +- Custom agents using a tools wildcard '\*' now respect deferredToolLoading opt-in switch +- Respect tmux color detection in WSL sessions +- Respect `deferTools` on MCP servers configured in custom agent frontmatter +- Ctrl+Q enqueues a prompt while a completion picker is open +- Sessions tab row label updates immediately when a session is renamed +- --continue and --resume select the most recent session for the current repository +- Shell session starts correctly when a nix-provided bash is first in PATH +- Marketplace plugins that declare MCP servers in marketplace.json now authenticate correctly with OAuth +- Content exclusion no longer blocks shell commands on command names or phantom paths +- Lone surrogates no longer break session resume or truncate prompts +- Expand Windows home-directory paths in slash-command completion +- Keep truncated tool output previews valid UTF-8 +- CLI auto-updater downloads the correct musl Linux package on Alpine systems +- Copy the full last assistant turn, including multi-block responses +- Load workspace MCP servers in trusted server-mode sessions +- Stacked diffs use the same file order as the file tree +- Make /pr status and web confirmations link to the PR's repository +- Restore later file changes when rewinding to a turn without a snapshot +- Run queued ! shell commands locally instead of sending them to the agent +- Scheduled prompts manager dialog shrinks to fit its entries +- Keep the @-file picker populated when file search hits a symlink loop +- Display cache-write pricing for models that omit it +- Allow /update to restart sessions started with copilot -r +- Prevent pickers and dialogs from shifting or clipping as content loads +- Only render double tildes as strikethrough in markdown +- Allow /allow-all to work in relay sessions +- Restore clickable PR and issue links in compact timeline markdown +- Repo-scoped plugins no longer leak into global config across projects +- Keep /model working on resumed sessions after signing in +- PowerShell script blocks and interpolated `$()` sub-expressions no longer trigger content-exclusion refusals +- Exit message always shows the session ID in the resume command instead of the friendly name +- Wait for the remote sandbox to start before opening the cloud session +- Autopilot mode now auto-handles elicitation, ask_user, sampling, and permission prompts (including on launch with --autopilot and during continuation turns) instead of surfacing dialogs to the user +- Newly spawned sessions appear at the bottom of their group in the agents tab +- Attached images and PDFs persist across session resume even if the source file is later changed or deleted +- Allow disabling task and explore built-in subagents +- Session resume stays responsive while large histories load +- Code search and worktree listing are faster +- Use plain text labels instead of decorative emoji in CLI output +- Syntax-highlight shell commands in the timeline +- Preserve open canvas instances across reconnects and restarts +- Forward typed rejection feedback from preToolUse prompts to the model +- Show statusline picker checkboxes in green for enabled items and gray for disabled items +- Show shell timeline rows with a yellow $ prompt and Shell label +- Add a Folder column to the resume picker to show each session's working directory +- Automatically follow your system light and dark mode changes +- Use semantic mascot theme colors in the CLI banner +- Let footer dialogs scroll with the timeline in unified view +- Click filenames in /diff tree to jump to that file's first change +- Render inline code with themed chip styling in Markdown +- Show installed plugin MCP servers in `mcp` commands +- Remove terminal-reported color scheme support +- Add /diagnose command to analyze session logs +- Add /mcp registry installation for browsing and installing MCP servers +- Make `/security-review` available to all users without --experimental +- Discover MCP servers provided by installed plugins +- Add CSV output support for MCP tools +- Add /loop alias for the /every command +- Remove bogus Ctrl+Enter VS Code keybinding created by old /terminal-setup +- Images returned by tools stay visible to the model across later turns and after resuming a session +- Preserve Markdown blockquotes in /share exports +- Filter long streamed results correctly when content exclusion is enabled +- Show a friendly message when additional usage limit is reached +- Search tools handle Windows-style glob patterns correctly +- Prevent kill self-protection from flagging quoted pipes and paths ending in kill +- Azure CLI, PowerShell, and Developer CLI credentials work again for Azure auth +- Slash-command picker name column widened from 25 to 35 characters so fewer long skill names are truncated +- Wrap long lines in /diff view so content no longer truncates +- Improve /diff hotkey labels for branch, whitespace, and tree navigation +- Remove the legacy intent-reporting tool from the CLI + ## 1.0.63 - 2026-06-15 - Blocked image attachments now explain what to do — enable vision via the "Editor preview features" policy, switch to a vision-capable model, or try a different image — instead of showing a confusing error.