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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.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.
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.
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.
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.
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.
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):
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 yourAuthenticationProvider
? 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:
- Follow the Contribution Guidelines for getting a local version of Code OSS running.
- 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:
- @gjsjohnmurray (John Murray)
- @albertosantini (Alberto Santini)
- @RedCMD (RedCMD)
- @IllusionMH (Andrii Dieiev)
Pull Requests
Contributions to vscode
:
- @alpalla (Alessio Palladino): Maintain line breaks in transform to Camel and Pascal case actions PR #263781
- @andr8928: Suggest widget: Bug fix - when widget is too tall, ensure larger of above and below space is used. PR #260583
- @avarayr (avarayr): Fix: Disable window shadows on macOS Tahoe to prevent GPU performance issues PR #267724
- @bwateratmsft (Brandon Waterloo [MSFT]): Fix the type incompatibility issue in the MCP HTTP server handler PR #268548
- @CGNonofr (Loïc Mangeonjean)
- fix: race condition on supported task types PR #265847
- fix: properly update cloned stylesheets on mutation in firefox PR #269126
- @dmiska25 (Dylan Miska): dispose of ref instead of object itself to avoid null objects. PR #266299
- @DrSergei (Sergei Druzhkov): Improve canSetExpressionValue check PR #268952
- @essjay05 (Joy Serquiña): fix: adds aria-description to provide screen reader context for tooltip PR #267818
- @garciasdos (Diego García): fix: elicitation email validator PR #265326
- @harbin1053020115 (ermin.zem): feat: split editor group direction according to workbench.editor.splitInGroupLayout configuration when clicking walkthrough ':toSide' commands PR #267557
- @hron (Aleksei Gusev): Allow to bind
diffEditor.revert
to keyboard PR #225881 - @leonard520 (Xiaoyun Ding): Add conversation id to mcp meta PR #265303
- @lukocode: fix: ensure SVG images are loaded before clipboard copy PR #263799
- @mawosoft (Matthias Wolf)
- Fix PowerShell shell integration when strict mode is enabled. PR #266260
- Restore PSReadline key remapping in PowerShell shell integration PR #267311
- @narbit (Natalya Arbit): Do not allow localhost redirect in favor of loopback IP redirect PR #267546
- @Peter-developer01 (Peter): Fix a typo in nls.localize(...) in localization.contribution.ts PR #263228
- @RedCMD (RedCMD): Fix RangeFormat wrong document race condition PR #267628
- @SimonSiefke (Simon Siefke)
- fix: memory leak in ReplAccessibilityAnnouncer PR #264937
- fix: memory leak in chat widget PR #265002
- reduce memory by ~1.2 MB PR #267785
- fix: memory leak in folding PR #269071
- @Skn0tt (Simon Knott): Treat ellipsis character as search wildcard PR #262462
- @tmm1 (Aman Karmani): Fix disposable leak in BrowserSocketFactory PR #263736
- @turansky (Victor Turansky): fix:
lm.registerLanguageModelChatProvider
jsdoc formatting PR #266485 - @witsaint (DQ): fix: confirmation btn style PR #267438
- @yiliang114 (易良): Fix to #263546, for submenu of treeView view/item/context z-index iss… PR #263555
Contributions to vscode-copilot-chat
:
- @24anisha: Adding accept/reject and survival to GH Telemetry PR #1059
- @DGideas (Wanlin Wang 王万霖): improve custom OpenAI Compatible model URL resolution PR #1074
- @johan-j (Johan Jansson): Grouping of BYOK custom models in model picker PR #1111
- @shaunm-msft (Shaun Miller)
- @vritant24 (Vritant Bhardwaj): Ungroup tools based on embedding rankings PR #678
- @yemohyleyemohyle
Contributions to vscode-eslint
:
- @frodi-karlsson (Fróði Karlsson)
- @fronterior (Low Front): Fix workspaceFolder check to use optional chaining PR #2075
Contributions to vscode-json-languageservice
:
- @danila-schelkov (Danila Schelkov): feat: examples completion for propertyNames PR #286
Contributions to vscode-mypy
:
- @cnaples79 (Chase Naples): Fix: parse mypy diagnostics from stderr in non_interactive mode PR #375
Contributions to vscode-python-environments
:
- @almarouk (Abdelrahman AL MAROUK): fix conda env refresh not waiting for promises PR #751
- @renan-r-santos (Renan Santos): Display activate button when a terminal is moved to the editor window PR #764
Contributions to vscode-vsce
:
- @joyceerhl (Joyce Er): fix: generate language model tag for
languageModelChatProvider
contributions PR #1199
Contributions to debug-adapter-protocol
:
- @dmjio (David M. Johnson): Update debug adapters list in adapters.md PR #562
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.