HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Users/fred/AppData/Roaming/Code/Cache/Cache_Data/f_0000a6
# Visual Studio Code 1.120

Follow us on [LinkedIn](https://www.linkedin.com/showcase/vs-code), [X](https://go.microsoft.com/fwlink/?LinkID=533687), [Bluesky](https://bsky.app/profile/vscode.dev) <!-- %IF INSIDERS % | Follow Insiders Changelog on [X](https://x.com/VSCodeChangelog) or [Bluesky](https://bsky.app/profile/vscodechangelog.bsky.social) %ENDIF % --> <!-- %IF IN_PRODUCT % | [View online](https://code.visualstudio.com/updates)%ENDIF % -->

---

_Release date: May 13, 2026_

<!-- DOWNLOAD_LINKS_PLACEHOLDER -->

---

Welcome to the 1.120 release of Visual Studio Code. This release brings the Agents window to Stable, improves BYOK model visibility and control, and adds Markdown quality-of-life improvements and agent safety features. Here are the highlights for this release:

* [Agents window in Stable](#orchestrate-tasks-across-projects-with-the-agents-window-preview): Work in an agents-first way across all your projects with the new Agents window.

* [BYOK improvements](#language-models): Track and optimize token usage and configure thinking effort for your BYOK models.

* [Markdown improvements](#languages): Review Markdown content instead of syntax with Markdown preview for diffs.

* [Command risk assessment](#risk-assessment-for-terminal-commands-experimental): Assess the risk of terminal commands before they run.

* [Token optimization](#terminal-tool-output-compression-preview): Reduce context window usage by compressing large terminal output.

Happy Coding!

---

<!-- %IF STABLE %
VS Code is rolling out gradually to all users. Use **Check for Updates** in VS Code to get the latest version immediately.

To try new features as soon as possible, [**download the nightly Insiders build**](https://code.visualstudio.com/insiders), which includes the latest updates as soon as they are available.

---
%ENDIF % -->

<!-- TOC
<div class="toc-nav-layout">
  <nav id="toc-nav">
    <div>In this update</div>
    <ul>
      <li><a href="#agents">Agents</a></li>
      <li><a href="#language-models">Language models</a></li>
      <li><a href="#chat">Chat</a></li>
      <li><a href="#languages">Languages</a></li>
      <li><a href="#proposed-apis">Proposed APIs</a></li>
      <li><a href="#contributions-to-extensions">Contributions to extensions</a></li>
      <li><a href="#deprecated-features-and-settings">Deprecated features and settings</a></li>
      <li><a href="#notable-fixes">Notable fixes</a></li>
      <li><a href="#thank-you">Thank you</a></li>
    </ul>
  </nav>
  <div class="notes-main">
Navigation End -->

## Agents

### Orchestrate tasks across projects with the Agents window (Preview)

While VS Code is already used by millions of developers for agentic coding, its editor layout is primarily optimized for single-task, single-workspace workflows. To enable our users (and ourselves!) to work with multiple agents across multiple projects, we created a new type of window: **Agents**.

The new Agents window is a companion to the editor you already know: purpose-built for agent-driven development, with a dedicated space to explore, iterate on, and review tasks across multiple projects, and seamlessly switch between them. And because VS Code is built for developer choice and flexibility, the Agents window lets you pick your agent harness, run agents on remote machines, and configure the environment the way you want it - color themes, keybindings, and extensions included.

The Agents window has been available as part of VS Code Insiders in our past few releases, and with this release, it's now available as a preview in VS Code Stable.

<video src="images/1_120/agents-demo-20260510.mp4" title="Video showing the Agents window experience in VS Code." controls></video>

You can open the Agents window in several ways, including the "Open in Agents" button in the VS Code title bar. To learn more about how it works and what you can do with it, visit the [Agents window documentation](https://aka.ms/VSCode/Agents/docs).

#### What's new?

If you've already been using the Agents window in Insiders, thank you! We've continued to act on your feedback, with the following improvements landing this week:

* **Preferences persist across new sessions**: Your last choices in dropdowns like agent harness and isolation mode are retained when you create new sessions.
* **Discard changes more easily**: You can discard edits directly from the Changes panel.
* **Sync upstream changes in new sessions**: A sync button on the Files panel lets you see upstream changes from the base branch and pull them in before the agent gets to work.
* **More deterministic changes interactions**: Actions in the Changes panel can complete more quickly as they're now deterministic.
* **View all changes by default for completed sessions**: When you open a session marked as done, you automatically get a view of the agent's full set of edits at a glance.
* **Navigate between recent sessions**: Use the arrow buttons in the top-left of the title bar to jump between recent sessions without leaving the window.
* **Override settings per window**: The Agents window now shares all of your VS Code settings, and you can override specific settings just for the Agents window when you want a different behavior there.

Your feedback continues to be a great help in shaping Agents. Please [file issues on GitHub](https://github.com/microsoft/vscode/issues) or browse [existing issues](https://github.com/microsoft/vscode/issues?q=state%3Aopen%20label%3A%22agents-window%22).

#### Extensibility

Extensions that contribute only static content, such as themes, grammars, languages, and keybindings, activate in the Agents window automatically. We also tested the top 100 Marketplace extensions, and some of those activate as well when installed in your default VS Code profile.

For other extensions, you can opt them in by ID with the `setting(extensions.supportAgentsWindow)` setting. Any extension you enable this way needs to be installed in your default VS Code profile.

```json
"extensions.supportAgentsWindow": {
    "myextension.id": true
}
```

While we're still working on the broader extension story, we're looking to collaborate with extension authors on what extension enablement in the Agents window unlocks and how various extensions should behave in this environment. Whether you'd like to ideate on new scenarios that take advantage of running agents across projects, or share feedback on how your existing extension behaves in the Agents window, we'd love to collaborate with you through [GitHub issues](https://github.com/microsoft/vscode/issues?q=state%3Aopen%20label%3A%22agents-window%22).

### Discover Copilot CLI plugins automatically

[Agent plugins](https://code.visualstudio.com/docs/copilot/customization/agent-plugins) installed with the GitHub Copilot CLI are picked up automatically by VS Code, so a single `copilot plugin install` covers both surfaces. Previously, you had to install the same plugin separately in VS Code or add its path to `setting(chat.plugins.paths)`.

## Language models

With Bring Your Own Key (BYOK), you can use your own API keys from providers like Anthropic, OpenAI, and others to take advantage of your own billing or model hosting options. To learn more, see the [BYOK documentation](https://code.visualstudio.com/docs/copilot/customization/language-models#_bring-your-own-language-model-key).

### View BYOK model token usage

Managing a model's context window is key to getting good results and controlling costs. The model can lose track of important details from the conversation, and token usage can increase costs. This release brings better visibility into token usage for BYOK models, so you can keep an eye on the context window.

Previously, when chatting with a model you brought via your own API key (Anthropic, OpenAI, or other), the control always displayed 0% and a zero-token count because token accounting was only working for built-in models.

The context window control in the Chat view now shows accurate token usage and percent-full for BYOK models.

![Screenshot of the context window control in the Chat view showing accurate token usage and percent-full for BYOK models.](images/1_120/context-window-byok-token-usage.webp)

### Configure thinking effort for BYOK reasoning models

Reasoning-capable language models allow you to configure their "thinking effort", which is a way to trade off between response quality and speed/cost. You can learn more in the [thinking effort](https://code.visualstudio.com/docs/copilot/concepts/language-models#_thinking-effort) documentation.

In this release, you can now configure the thinking effort for BYOK reasoning models directly from the model picker in the Chat view. The selected effort is forwarded to the model on every request, letting you trade off latency and cost against answer quality.

![Screenshot of the Language Models editor showing the Thinking Effort configuration option for a BYOK model.](images/1_120/byok-configure-thinking-effort.webp)

> Applies to: Bring-Your-Own-Key (BYOK) reasoning models served via OpenAI-compatible endpoints (OpenAI, xAI (Grok), OpenRouter, and custom OpenAI / Azure OpenAI deployments). Anthropic models already supported this; the control is now consistent across providers.

### Model picker organized by provider

The model picker in the Chat view now groups models by their provider, making it easier to find the model you want when you have access to models from multiple sources. You can also search for models by name.

<video src="images/1_120/model-picker-demo.mp4" title="Video showing the model picker in the Chat view with models grouped by provider and search functionality." autoplay loop controls muted></video>

Recently used models now display the provider name in grey text alongside the model name, so you can quickly distinguish between similarly named models from different providers.

> [!TIP]
> You can quickly access the models by typing `/models` in the chat input.

## Chat

### Terminal tool output compression (Preview)

**Setting**: `setting(chat.tools.compressOutput.enabled)`

Long terminal output from commands like `git diff`, `ls -l`, and `npm install` can consume a large share of the model's context window, which leaves less room for your code and the agent's reasoning.

When you enable the `setting(chat.tools.compressOutput.enabled)` setting, VS Code post-processes the output of these commands before sending it to the model. Large unchanged hunks in diffs are collapsed, lockfile and snapshot diffs are dropped, `ls -l` is reduced to entry names, and `npm install` progress bars, deprecation warnings, and audit summaries are stripped.

A short banner is prepended to any compressed output, so the model can see which filters fired and how to disable compression if it needs the raw text.

### Risk assessment for terminal commands (Experimental)

**Setting**: `setting(chat.tools.riskAssessment.enabled)`

To help you decide quickly whether a command is worth a closer look, terminal command confirmations now include a risk badge with an AI-generated explanation of what the command does.

Each badge shows one of three levels along with a one-sentence summary tailored to the specific command:

* **Safe** (green): reads files or prints output without making changes.
* **Caution** (orange): modifies the workspace, installs packages, or sends data over the network.
* **Review carefully** (red): performs an action that may be difficult or impossible to undo, such as force-pushing to a remote or deleting files outside the workspace.

![Screenshot showing a terminal command confirmation in chat with an AI-generated risk badge and explanation below the command.](images/1_120/terminal-risk-assessment.webp)

### Plan mode control for Claude and Copilot CLI

**Setting**: `setting(chat.planWidget.inlineEditor.enabled)`

When you use plan mode with the Claude agent or the Copilot CLI, VS Code shows an inline plan control that lets you review and shape the plan before the agent starts executing. This release brings several improvements to that flow:

* **Edit the plan inline**: Editing the plan now happens in an inline editor inside the control instead of opening a separate editor tab, so you can iterate on the plan without losing context.
* **Clearer feedback mode**: When you're providing feedback on a plan, the control shows clearer indications that you're in feedback mode and shows the feedback you've added so far.
* **Disable the inline editor**: Opt out of the inline editing experience and fall back to editing in a regular editor tab by configuring the `setting(chat.planWidget.inlineEditor.enabled)` setting.

## Languages

### Markdown preview for diffs (Preview)

When you open a Markdown file from the **Source Control** view, you can view the diff using VS Code's rendered Markdown preview instead of the raw source.

![Screenshot of the source control diff rendered in a side-by-side Markdown preview.](images/1_120/md-diff-overview.webp)

This makes it much easier to spot meaningful changes, such as updated headings, new sections, modified images, or restructured lists, without having to mentally parse Markdown syntax line by line.

The diff Markdown preview supports both a side-by-side diff view and an inline view.

![Screenshot of the source control diff rendered in an inline Markdown preview.](images/1_120/md-diff-inline.webp)

To try it, open a Markdown diff from Source Control (or any other diff editor) and use **Reopen Editor With...** to switch to the Markdown preview diff view. You can also open diffs in the Markdown preview by default with the `setting(workbench.diffEditorAssociations)` setting:

```json
"workbench.diffEditorAssociations": {
  "*.md": "vscode.markdown.preview.editor"
}
```

This feature is still a preview, so you might run into issues. We think it will be especially useful for reviewing documentation changes from agents or pull requests.

### Markdown preview default changes

VS Code's built-in Markdown preview has been around for a while and a few of the original features aren't as necessary as they once were. This iteration we decided to disable two of these features by default:

* `setting(markdown.preview.doubleClickToSwitchToEditor)`: Double-clicking in the preview switches back to the source editor. Users often found it confusing as they wanted to use double click to make selections. We now have features like `Reopen With` that largely replace this functionality

* `setting(markdown.preview.markEditorSelection)`: Marks the currently selected line in the editor. We think it's less useful for modern workflows.

You can re-enable these settings if you prefer the previous behavior.

### HTML id support for Markdown path completions and validation

Our built-in [Markdown path completions](https://code.visualstudio.com/docs/languages/markdown#_path-completions) and [link validation](https://code.visualstudio.com/docs/languages/markdown#_link-validation) now recognize `id` attributes from HTML elements in Markdown files.

```md
<div id="install-guide">...</div>

See the [installation steps](#install-guide) for details.
```

Links for these IDs are now suggested in completions:

![Screenshot showing ID attribute completions in a Markdown link.](images/1_120/md-id-completion.webp)

They are also used for [link validation](https://code.visualstudio.com/docs/languages/markdown#_link-validation):

![Screenshot showing a validation error for a Markdown link with an unknown HTML id.](images/1_120/md-id-validation.webp)

### Smart select for Markdown tables

Markdown tables now support basic [smart selection](https://code.visualstudio.com/docs/editing/codebasics#_shrinkexpand-selection). Use **Expand Selection** (`kb(editor.action.smartSelect.expand)`) to grow the selection from a cell to its row and then to the full table, and **Shrink Selection** (`kb(editor.action.smartSelect.shrink)`) to step back down.

## Proposed APIs

### Custom editor diffs

The new `customEditorDiffs` proposed API lets custom editors render diffs with a dedicated diff UI. This is what powers the new [Markdown preview in the diff view](#markdown-preview-for-diffs-preview), and it opens up a much nicer compare experience where a textual diff of the underlying source isn't useful.

A custom editor provider can opt in by implementing one or both of the following on `CustomReadonlyEditorProvider` or `CustomTextEditorProvider`:

* `resolveCustomEditorInlineDiff(documents, webviewPanel, token)`: render the diff in a single webview, with both the original and modified documents available to the extension.

* `resolveCustomEditorSideBySideDiff(documents, webviewPanels, token)`: render the diff using two webviews, one for each side, with VS Code coordinating layout and scroll sync.

Combined with [`diffEditorPriority`](#separate-custom-editor-priorities-diffs-and-merges), extensions now have full control over whether their custom editor handles diffs and how those diffs are presented. See [issue #138525](https://github.com/microsoft/vscode/issues/138525) to follow along and provide feedback.

### Separate custom editor priorities diffs and merges

Custom editor extensions can now set different default priorities for editing, diffing, and merging a file type. The `customEditors` contribution accepts two new optional fields, `diffEditorPriority` and `mergeEditorPriority`, alongside the existing `priority`.

```json
"contributes": {
  "customEditors": [
    {
      "viewType": "myExtension.editor",
      "displayName": "My Custom Editor",
      "selector": [
        { "filenamePattern": "*.custom" }
      ],
      "priority": "default",
      "diffEditorPriority": "option",
      "mergeEditorPriority": "option"
    }
  ]
}
```

The above contribution makes it so that opening a `*.custom` file uses the custom editor, but opening a diff from source control uses the normal text diff view.

This API is still proposed. Try it out and share feedback in [issue #292379](https://github.com/microsoft/vscode/issues/292379).

### Document diff

The new `documentDiff` proposed API exposes VS Code's built-in diff algorithm to extensions via `workspace.getTextDiff(original, modified, options?)`. It returns a streaming async iterable of line-level changes plus a `complete` promise with summary information (identical, may-be-incomplete, and optional move detection). Inner character-level ranges are included on each change.

This is especially useful for custom diff editors (see [Custom editor diffs](#custom-editor-diffs)) so they can render exactly the same diffs as the built-in editor instead of shipping their own algorithm.

```ts
const diff = vscode.workspace.getTextDiff(originalDoc, modifiedDoc, {
  ignoreTrimWhitespace: true,
  computeMoves: false,
});

for await (const change of diff.changes) {
  // change.originalRange, change.modifiedRange, change.innerChanges
}

const { identical, mayBeIncomplete, moves } = await diff.complete;
```

Track progress and provide feedback in [issue #315174](https://github.com/microsoft/vscode/issues/315174).

## Contributions to extensions

### GitHub Pull Requests

There has been more progress on the [GitHub Pull Requests](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github) extension, which enables you to work on, create, and manage pull requests and issues. New features include:

* Uploading images to pull request comments through copy/paste and an upload button.
* More descriptive folder name when checkout out pull requests in a worktree.
* `"githubIssues.issueBranchTitle"` now supports the `${issueType}` template variable.

Review the [changelog for the 0.144.0](https://github.com/microsoft/vscode-pull-request-github/blob/main/CHANGELOG.md#01440) release of the extension to learn about everything in the release.

## Deprecated features and settings

### New deprecations in this release

### Upcoming deprecations


## Notable fixes

* [microsoft/vscode #314545](https://github.com/microsoft/vscode/issues/314545) Include All-Interfaces links in integrated browser localhost targets

## Thank you

Contributions to our issue tracking:

* [@gjsjohnmurray (John Murray)](https://github.com/gjsjohnmurray)
* [@RedCMD (RedCMD)](https://github.com/RedCMD)
* [@IllusionMH (Andrii Dieiev)](https://github.com/IllusionMH)
* [@albertosantini (Alberto Santini)](https://github.com/albertosantini)

Contributions to `vscode`:

* [@damonxue (DamonXue)](https://github.com/damonxue): Add File to Chat" does nothing when right-clicking a non-active editor tab [PR #315197](https://github.com/microsoft/vscode/pull/315197)
* [@davidwengier (David Wengier)](https://github.com/davidwengier): Update repository and path for Razor repo [PR #313011](https://github.com/microsoft/vscode/pull/313011)
* [@Dmitriusan](https://github.com/Dmitriusan): Fix gitignore negation in child files not overriding parent/global rules [PR #300613](https://github.com/microsoft/vscode/pull/300613)
* [@EhabY (Ehab Younes)](https://github.com/EhabY): Detect dead connections via keepalive timeout [PR #310131](https://github.com/microsoft/vscode/pull/310131)
* [@JeffreyCA](https://github.com/JeffreyCA)
  * Update Fig spec for Azure Developer CLI (azd) [PR #308613](https://github.com/microsoft/vscode/pull/308613)
  * Integrated terminal - fix stale OSC 8 link hover tooltip issues [PR #309539](https://github.com/microsoft/vscode/pull/309539)
* [@kevin-m-kent](https://github.com/kevin-m-kent)
  * Emit parentRequestId on response.* events and from subagent loops [PR #314309](https://github.com/microsoft/vscode/pull/314309)
  * Add X-Interaction-Type header and requestKind telemetry property for chat requests [PR #312262](https://github.com/microsoft/vscode/pull/312262)
  * Ship stable symbol tool descriptions [PR #315686](https://github.com/microsoft/vscode/pull/315686)
* [@Larsjep (Lars Jeppesen)](https://github.com/Larsjep): fixes https://github.com/microsoft/vscode/issues/291188 [PR #314713](https://github.com/microsoft/vscode/pull/314713)
* [@n-gist (n-gist)](https://github.com/n-gist): guarantee that return of TreeDataProvider.getChildren() is not mutated by vscode [PR #306955](https://github.com/microsoft/vscode/pull/306955)
* [@Pengkun-ZHU (pzhu)](https://github.com/Pengkun-ZHU): Pzhu/feature custom snooze time [PR #298934](https://github.com/microsoft/vscode/pull/298934)
* [@pranavvaid-ac](https://github.com/pranavvaid-ac)
  * Update chat inline references after late anchor resolution [PR #314281](https://github.com/microsoft/vscode/pull/314281)
  * Improve linked symbol anchors with tree-sitter fallback [PR #314864](https://github.com/microsoft/vscode/pull/314864)
* [@ruryu (ruryu)](https://github.com/ruryu): fix(agentHost): await dbClose to resolve flaky session database tests [PR #313810](https://github.com/microsoft/vscode/pull/313810)
* [@ShehabSherif0 (Shehab Sherif)](https://github.com/ShehabSherif0): Fix incorrect inspect property usage in scope detection [PR #301472](https://github.com/microsoft/vscode/pull/301472)
* [@SimonSiefke (Simon Siefke)](https://github.com/SimonSiefke): fix: memory leak in utilityProcessWorkerMainService [PR #294005](https://github.com/microsoft/vscode/pull/294005)
* [@Tyriar (Daniel Imms)](https://github.com/Tyriar)
  * Put ambiguous options into interface [PR #313953](https://github.com/microsoft/vscode/pull/313953)
  * Remove unused export const [PR #315244](https://github.com/microsoft/vscode/pull/315244)
* [@yemohyleyemohyle](https://github.com/yemohyleyemohyle): Yemohyle/response success gdpr blocks [PR #315128](https://github.com/microsoft/vscode/pull/315128)
* [@yogeshwaran-c (Yogeshwaran C)](https://github.com/yogeshwaran-c): Strip codicons from terminal quickpick filter matching [PR #313197](https://github.com/microsoft/vscode/pull/313197)

Contributions to `vscode-pull-request-github`:

* [@MaxDNG (Maxime Guitet)](https://github.com/MaxDNG): Fix: Re-parent pulled-up directory children to ensure proper checkbox refresh [PR #8679](https://github.com/microsoft/vscode-pull-request-github/pull/8679)



---

We really appreciate people trying our new features as soon as they are ready, so check back here often and learn what's new.

>If you'd like to read release notes for previous VS Code versions, go to [Updates](https://code.visualstudio.com/updates) on [code.visualstudio.com](https://code.visualstudio.com).

<a id="scroll-to-top" role="button" title="Scroll to top" aria-label="scroll to top" href="#"><span class="icon"></span></a>
<link rel="stylesheet" type="text/css" href="css/inproduct_releasenotes.css"/>