Join a near you to learn about AI-assisted development in VS Code.

September 2025 (version 1.105)

Release date: October 9, 2025

Downloads: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


Welcome to the September 2025 release of Visual Studio Code. There are many updates in this version that we hope you'll like, some of the key highlights include:

  • OS integration

    • Get notified about task completion and chat responses (Show more)
    • Native authentication experience on macOS (Show more)
  • Developer productivity

    • Resolve merge conflicts with AI assistance (Show more)
    • Pick up where you left off with the recent chats (Show more)
  • Agent tools

    • Install MCP servers from the MCP marketplace (Show more)
    • Use fully-qualified tool names to avoid conflicts (Show more)

If you'd like to read these release notes online, go to Updates on code.visualstudio.com.

Insiders: Want to try new features as soon as possible?
You can download the nightly Insiders build and try the latest updates as soon as they are available.
Download Insiders

Chat

Fully qualified tool names

Prompt files and custom chat modes enable you to specify which tools can be used. To avoid naming conflicts between built-in tools and tools provided by MCP servers or extensions, we now support fully qualified tool names for prompt files and chat modes. This also helps with discovering missing extensions or MCP servers.

Tool names are now qualified by the MCP server, extension, or tool set they are part of. For example, instead of codebase, you would use search/codebase or list_issues would be github/github-mcp-server/list_issues.

You can still use the previous notation, however a code action helps you migrate to the new names.

Screenshot of a prompt file showing a Code Action to update an unqualified tool name.

Improved edit tools for custom models

Setting: github.copilot.chat.customOAIModels

We improved the set of edit tools for Bring Your Own Key (BYOK) custom models to better integrate with VS Code built-in tools. In addition, we enhanced our default tools and added a 'learning' mechanism to select the optimal tool set for custom models.

If you're using OpenAI-compatible models, you can also explicitly configure the list of edit tools with the github.copilot.chat.customOAIModels setting.

Support for nested AGENTS.md files (Experimental)

Setting: chat.useNestedAgentsMdFiles

Last milestone, we introduced support for AGENTS.md at the root of your workspace. This functionality is now generally available and enabled by default.

We now also added support for nested AGENTS.md files in subfolders of your workspace. This enables you to provide more specific context and instructions for different parts of your codebase. For example, you might have different instructions for frontend and backend code. This functionality is currently experimental and can be enabled with the chat.useNestedAgentsMdFiles setting.

Learn more about customizing chat in VS Code to your practices and team workflows.

Chat user experience improvements

OS notifications for chat responses

Setting: chat.notifyWindowOnResponseReceived

In VS Code 1.103, we introduced OS notifications for chat sessions that required a user confirmation when the VS Code window was not focused. In this release, we are expanding this functionality to show an OS badge and notification toast when a chat response is received. The notification includes a preview of the response, and selecting it brings focus to the chat input.

Screenshot showing an OS notification while the VS Code window is unfocused.

You can control the notification behavior with the chat.notifyWindowOnResponseReceived setting.

Chain of thought (Experimental)

Setting: chat.agent.thinkingStyle

Chain of thought shows the model’s reasoning as it responds, which can be great for debugging or understanding suggestions the model provides. With the introduction of GPT-5-Codex, thinking tokens are now shown in chat as expandable sections in the response.

Screenshot of a chat response showing thinking tokens as expandable sections in the response.

You can configure how to display or hide chain of thought with the chat.agent.thinkingStyle setting. Thinking tokens will soon be available in more models as well!

Show recent chat sessions (Experimental)

Setting: chat.emptyState.history.enabled

Last milestone, we introduced prompt file suggestions to help you get started when creating a new chat session (⌘N (Windows, Linux Ctrl+N)). In this release, we are building on that by showing your recent local chat conversations. This helps you quickly pick up where you left off or revisit past conversations.

Screenshot of the Chat view showing recent local chat conversations when there are no active chat sessions.

By default, this functionality is off, but you can enable it with the chat.emptyState.history.enabled setting.

Keep or undo changes during an agent loop

Previously, when an agent was still processing your chat request, you could not keep or undo file edits until the agent finished. Now, you can keep or undo changes to files while an edit loop is happening. This enables you to have more control, especially for long-running tasks.

Keyboard shortcuts for navigating user chat messages

To quickly navigate through your previous chat prompts in the chat session, we added keyboard shortcuts for navigating up and down through your chat messages:

  • Navigate previous: ⌥⌘↑ (Windows, Linux Ctrl+Alt+Up)
  • Navigate next: ⌥⌘↓ (Windows, Linux Ctrl+Alt+Down)

Agent sessions

This milestone, we made several improvements to the Chat Sessions view and the experience of delegating tasks to remote coding agents:

Chat Sessions view enhancements

Setting: chat.agentSessionsViewLocation

The Chat Sessions view provides a centralized location for managing both local chat conversations and remote coding agent sessions. This view enables you to work with multiple AI sessions simultaneously, track their progress, and manage long-running tasks efficiently.

In this release, we made several UI refinements and performance improvements to enhance the Chat Sessions experience.

  • The Chat Sessions view continues to support features like Status Bar tracking for monitoring multiple coding agents, context menus for session management, and rich descriptions to provide detailed context for each session.

  • Quickly initiate a new session by using the "+" button in the view header.

    Screenshot of the Chat Sessions view with a new session open via the + button.

Delegating to remote coding agents

A typical scenario for working with remote coding agents is to first discuss and plan a task in a local chat session, where you have access to the full context of your codebase, and then delegate the implementation work to a remote coding agent. The remote agent can then work on the task in the background and create a pull request with the solution.

If you're working in a repository that has Copilot coding agent enabled, the Delegate to coding agent button in the Chat view now appears by default.

Screenshot of the Chat view with the Delegate to coding agent button highlighted.

When you use the delegate action, all context from your chat conversation, including file references, is forwarded to the coding agent. If your conversation exceeds the coding agent's context window, VS Code automatically summarizes and condenses the information to fit the window.

Chat terminal profiles

We added platform-specific settings chat.tools.terminal.terminalProfile.windows, chat.tools.terminal.terminalProfile.osx and chat.tools.terminal.terminalProfile.linux for configuring the shell that is launched by the run-in-terminal tool.

Having a chat-specific shell is useful to simplify or remove interactive elements from your regular shell setup and make it easier for the agent to use. At the same time, it keeps your regular environment and shell launch scripts unchanged.

"chat.tools.terminal.terminalProfile.osx": {
  "path": "bash", // bash instead of zsh
  "args": [], // non-login instead of login on macOS
  "env": {
    "COPILOT": "1" // environment variable that can be used in init scripts
  }
}

Terminal commands

Auto-reply to terminal prompts (Experimental)

Setting: chat.tools.terminal.autoReplyToPrompts

We introduced an opt-in setting, chat.tools.terminal.autoReplyToPrompts, which enables the agent to respond to prompts for input in the terminal automatically, like Confirm? y/n.

Terminal free-form input request detection

When the terminal requires free-form input, we now display a confirmation prompt. This lets you stay focused on your current work and only shift attention when input is needed.

Sign in with Apple accounts

In addition to signing in with a GitHub or Google account, you can now also sign in or set up a GitHub Copilot account by using an Apple account. This functionality will be rolling out to VS Code users.

Screenshot showing the sign in dialog showing the option to use an Apple account.

You can find more information about this in the announcement GitHub blog post.

Model availability

This milestone, we added support for the following models in chat. The available models depend on your Copilot plan and configuration.

  • GPT-5-Codex, OpenAI’s GPT-5 model, optimized for agentic coding.

  • Claude Sonnet 4.5, Anthropic’s most advanced model for coding and real-world agents.

You can choose between different models with the model picker in chat. Learn more about language models in VS Code.

MCP

MCP marketplace (Preview)

Setting: chat.mcp.gallery.enabled

VS Code now includes a built-in MCP marketplace that enables users to browse and install MCP servers directly from the Extensions view. This is powered by the GitHub MCP registry and provides a seamless experience for discovering and managing MCP servers directly within the editor.

Note: This feature is currently in preview. Not all features are available yet and the experience might still have some rough edges.

The MCP marketplace is disabled by default. When no MCP servers are installed, you see a welcome view in the Extensions view that provides easy access to enable the marketplace. You can also enable the MCP marketplace manually by using the chat.mcp.gallery.enabled setting.

Screenshot showing the MCP Servers welcome view with text describing how to browse and install Model Context Protocol servers, and an "Enable MCP Servers Marketplace" button.

To browse the MCP servers from the Extensions view:

  • Use the @mcp filter in the Extensions view search box
  • Select MCP Servers from the filter dropdown in the Extensions view
  • Search for specific MCP servers by name

Screenshot showing the GitHub MCP server details from the MCP server marketplace inside VS Code.

Autostart MCP servers

Setting: chat.mcp.autostart

In this release, new or outdated MCP servers are now started automatically when you send a chat message. VS Code also avoids triggering interactions such as dialogs when autostarting a server, and instead adds an indicator in chat to let you know that a server needs attention.

Screenshot of the Chat view, showing a notification message that the GitHub MCP requires restarting.

With MCP autostart on by default, we no longer eagerly activate extensions and instead only activate MCP-providing extensions when the first chat message is sent.

For extension developers, we also added support for the when clause on the mcpServerDefinitionProviders contribution point, so you can avoid activation when it's not relevant.

Improved representation of MCP resources returned from tools

Previously, our implementation of tool results that contain resources left it up to the model to retrieve those resources, without clear instructions on how to do so. In this version of VS Code, by default, we include a preview of the resource content and add instructions to retrieve the complete contents. This should lead to better model performance when using such tools.

MCP specification updates

This milestone, we adopted the following updates to the MCP specification:

  • SEP-973, which lets MCP servers specify icons to associate with their data. This can be used to give a custom icon to servers, resources, and tools.

    Screenshot of the tools picker, showing one of the MCP servers in the list with a custom icon.

    HTTP MCP servers must provide icons from the same authority that the MCP server itself is listening on, while stdio servers are allowed to reference file:/// URIs on disk.

  • SEP-1034, which lets MCP servers provide default values when using elicitation.

Accessibility

Shell integration for pwsh on Windows support for screen readers

PSReadLine has historically been disabled when a screen reader is detected to avoid overwhelming users with excessive auditory feedback. Since our terminal's shell integration relies on PSReadLine support, we now activate a streamlined version of PSReadLine in screen reader mode. This ensures shell integration and its features work for screen reader users.

Chat improvements

Setting: accessibility.verboseChatProgressUpdates

A new setting, accessibility.verboseChatProgressUpdates, enables more detailed announcements for screen reader users about chat activity.

From the chat input, users can focus the last focused chat response item ⇧⌘↓ (Windows, Linux Ctrl+Shift+Down).

Accessible view persistence

When switching between VS Code and other windows, we now maintain the user's position in the Accessible view for a seamless workflow.

Editor Experience

Override default shortcuts for Quick Input

The Quick Input controls, like the ones used in the Command Palette (Quick Pick, Input Box), used to hard-code keyboard shortcuts for navigation, such as moving up or down the list, accepting (Enter), and a few other interactions.

These actions are now moved to commands, which enables you to override their keyboard shortcuts. For example, if you want Tab to be used to accept something in the Quick Pick, this is now possible. To see all keyboard shortcuts that you can override, open the Keyboard Shortcuts editor (kb(workbench.action.openGlobalKeybindings)) and search for quickInput.

Disallow whitespace-only next edit suggestions

Setting: github.copilot.nextEditSuggestions.allowWhitespaceOnlyChanges

It is now possible to disallow next edit suggestions (NES) to propose whitespace-only changes such as code formatting.

Source Control

Resolve merge conflicts with AI

When opening a file with git merge conflict markers, you are now able to resolve merge conflicts with AI. We added a new action in the lower right-hand corner of the editor. Selecting this new action opens the Chat view and starts an agentic flow with the merge base and changes from each branch as context.

Screenshot of the proposed merge conflict resolution in the editor.

You can review the proposed merge conflict resolution in the editor and follow up with additional context if needed. You can customize the merge conflict resolution by using an AGENTS.md file.

Add file commit to chat context

A couple of milestones ago, we added the capability to view the files in each history item shown in the Source Control Graph view. You can now add a file from a history item as context to a chat request. This can be useful when you want to provide the contents of a specific version of a file as context to your chat prompt.

To add a file from a past commit to chat, select a commit to view the list of files, right-click on a particular file, and then select Add to Chat from the context menu.

Screenshot of the Source Control Graph view showing the context menu for a file in a history item with the Add to Chat option highlighted.

Testing

Run tests with code coverage

If you have a testing extension installed for your code, the runTests tool in chat enables the agent to run tests in your codebase by using the VS Code testing integration rather than running them from the command line.

In this release, the runTests tool now also reports test code coverage to the agent. This enables the agent to generate and verify tests that cover the entirety of your code.

Swap test result column

You can change the side on which the result tree is displayed in the Test Results view by using the new swap ↔️ button in the view's title menu.

Screenshot of the Test Results view with the swap button highlighted.

Tasks

OS notification for long-running task completion

Setting: task.notifyWindowOnTaskCompletion

When a user-initiated, long-running task completes while the VS Code window is not focused, an OS badge and notification toast are shown. Selecting the notification focuses the window where the task completed. You can configure this behavior with the task.notifyWindowOnTaskCompletion setting.

Screenshot of an OS notification that shows a task completion message saying Task "build" completed in 1 minute 21 seconds.

Task terminal title persistence

Setting: terminal.integrated.tabs.title

You can configure the title of terminal tabs with the terminal.integrated.tabs.title setting. By default, the value is ${process}, which shows the name of the process running in the terminal.

For tasks, this means that the terminal title might change when the task starts a different process, which can be confusing. To address this, we now persist the task's name as the terminal title when a task is started.

Terminal

Start dictation exposed

We added the Start dictation action to the terminal overflow menu. This action enables you to use voice dictation to input text into the terminal. A corresponding Stop dictation action appears when relevant.

Screenshot of the terminal overflow menu with a Start Dictation option.

Authentication

macOS native broker support for Microsoft Authentication

Setting: microsoft-authentication.implementation

This milestone, we adopted the latest MSAL libraries and with that you are now able to sign in through a native experience on macOS (in addition to Windows):

Screenshot of a native broker dialog window asking to sign into VS Code.

Native broker authentication is only available for:

  • M-series (also known as ARM) macOS devices
  • macOS machines that are Intune-enrolled with the policy to go through the broker

This enables nice single sign-on flows and is the recommended way of acquiring a Microsoft authentication session. The MSAL team will enable this up for the remaining platforms (Linux, Windows ARM, macOS Intel/x64) over time, so stay tuned!

NOTE: If you have trouble authenticating via the broker, you can change the microsoft-authentication.implementation to msal-no-broker, which will use your browser to authenticate instead.

PKCE support for GitHub Authentication

GitHub recently enabled PKCE (Proof Key for Code Exchange) support in their authentication flows. We have adopted this in the flow that VS Code uses to authenticate to GitHub.

Languages

Python

Copy test ID action

The run gutter icon context menu now includes a Copy Test Id command to copy the fully qualified pytest or unittest test identifier.

Contributions to extensions

GitHub Pull Requests

There has been more progress on the GitHub Pull Requests extension, which enables you to work on, create, and manage pull requests and issues. New features include:

  • The #openPullRequest tool recognizes open PR diffs and PR files as being the "open pull request".
  • The setting githubIssues.issueAvatarDisplay can be used to control whether the first assignee's avatar or the author's avatar is shown in the Issues view.
  • Instead of always running the pull request queries that back the Pull Requests view when refreshing, we now check to see if there are new PRs in the repo before running the queries. This should reduce API usage when there are no new PRs.

Review the changelog for the 0.120.0 release of the extension to learn about everything in the release.

Extension Authoring

Microsoft Authentication now supports WWW-Authenticate claims challenges

Azure is now enforcing that all create/delete operations to Azure resources must be done using authenticated sessions that used MFA to sign in. While some organizations require MFA for any authentication reason, some organizations do not enforce this, and those are affected by this MFA enforcement.

If you have an extension that uses Microsoft Authentication and talks to ARM, you need to handle the case when the ARM API call returns a 401 Unauthorized with a WWW-Authenticate header like so:

Bearer realm="", authorization_uri="https://login.microsoftonline.com/common/oauth2/authorize", error="insufficient_claims", claims="SOME VALUE HERE"

The good news is that we have introduced a finalized API that you can use to handle this status code:

const wwwAuthenticateFromRequest = headers['WWW-Authenticate']; // the string above
vscode.authentication.getSession(
  'microsoft',
  {
    wwwAuthenticate: wwwAuthenticateFromRequest,
    fallbackScopes: scopesFromOriginalRequest
  },
  {
    createIfNone: true
  }
);

All you have to do is pass in, verbatim, that WWW-Authenticate value along with the scopes that you originally asked for (most likely the ARM scope), and the Microsoft Authentication Provider handles the rest and makes sure the user goes through MFA.

We have worked with the Azure Tools team, who owns the Azure Resources extension, to adopt this new API. If you are using that extension or something that uses that extension, this enforcement should be handled. If you experience problems, open an issue on the Azure Resources extension.

NOTE: Looking to support WWW-Authenticate challenges in your AuthenticationProvider? Provide your thoughts on the proposed API in issue #267992.

Prompt and instructions file contributions

Extensions can now contribute prompt and instructions files.

  "contributes": {
    "chatPromptFiles": [
      {
        "name": "ReviewAndCreateIssue",
        "description": "Review the selected code and create an issue",
        "path": "./prompts/reviewAndCreateIssue.prompt.md"
      }
    ],
    "chatInstructions": [
      {
        "name": "TextMateGuidelines",
        "description": "Use these instructions when creating or modifying TextMate grammars",
        "path": "./prompts/textMateGuidelines.instructions.md"
      }
    ]
  }

Chat mode contributions (chatModes) are currently behind a proposed API flag.

List keys in SecretStorage

This iteration, we have finalized the API to list all keys that your extension has stored in Secret Storage. This can be found in the context.secrets object:

export function activate(context: ExtensionContext) {
  const keys: string[] = await context.secrets.keys();

  const value = await context.secrets.get(keys[0]); // a value that exists
}

One example where this can be used is on deactivate, where you might want to delete all secret storage data.

Engineering

Playwright VS Code MCP server

We further explored using an MCP server that can control a local build of VS Code to help in the development loop for VS Code. While we had mixed results on model comprehension for parsing screenshots, orchestration for subagents using the #executePrompt tool (which can be enabled with github.copilot.chat.executePrompt.enabled) was effective at not polluting context.

We plan to explore this further in future releases, so stay tuned!

To try this MCP Server, you can find it in the test/mcp folder of the vscode repo. It's very easy to get started:

  1. Follow the Contribution Guidelines for getting a local version of Code OSS running.
  2. Use our trivial (for now) prompt file in agent mode to ask a question: /playwright <your question here>.

Notable fixes

  • vscode#265842 - Chat: fix a file corruption issue affecting Sonnet, Gemini, and Grok models
  • vscode#221255 - Fix terminal links opening regardless of confirmation of "Opening URIs can be insecure" warning.
  • vscode#229374 - Fix to open terminal OSC 8 hyperlink to a folder in VS Code's explorer instead of native file explorer.
  • vscode#268443 - Settings links in Release Notes do nothing.

Thank you

Issue tracking

Contributions to our issue tracking:

Pull Requests

Contributions to vscode:

Contributions to vscode-copilot-chat:

Contributions to vscode-eslint:

Contributions to vscode-json-languageservice:

Contributions to vscode-mypy:

Contributions to vscode-python-environments:

Contributions to vscode-vsce:

Contributions to debug-adapter-protocol:

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 on code.visualstudio.com.