Your Home for Multi-Agent Development


February 5, 2026 by VS Code Team, @code

Agents are everywhere. We’ve been working to make VS Code the home for multi-agent development. One place to run your agents, manage your sessions, and pick the right tool for each task, without switching editors or juggling subscriptions.

With the January 2026 release (1.109), we’re taking the biggest step forward since we laid out that vision at GitHub Universe last year. You can now run Claude and Codex agents directly alongside GitHub Copilot. Start them as local agents when you need fast, interactive help, or delegate async to a cloud agent for longer-running tasks. We’ve also made updates to the Agent Sessions view, your single place to manage your agents.

Manage all your agents

The agent landscape keeps moving fast. We’re all still figuring out how to work with agents. Fire-and-forget when the task is clear, hands-on when you want control, or somewhere in between; it depends on the task, and it changes. Either way, more agents mean more sessions to keep track of.

The Agent Sessions view gives you one place to see all your agent sessions—local, background, cloud—and move between them as you work.

Kick off a cloud agent for a well-defined refactor, then jump into a local session for something more exploratory. Monitor a background task or let it run as you work on something else.

The above demo illustrates how developers are constantly tackling multiple things at once: planning improvements, building features, reviewing results, debugging errors. For each moment, you need to pick the right tool: local when needing to steer, background or cloud when wanting isolated changes, parallel subagents when needing multiple processes.

Here’s a quick overview to help you decide when to use local, background, or cloud agents:

Criteria Local Background Cloud
Where it runs Your machine Your machine (CLI) Remote infrastructure
Interaction style Interactive Unattended (async) Unattended (async), Autonomous
Team visibility No No Yes (PRs/issues)
Isolation No (direct workspace) Yes (worktrees) Yes (remote)

Now that you can run multiple agent types, the next question is which agents to use.

Your agent, your choice

With 1.109, you can run Claude and Codex agents: locally, or in the cloud, all under your same GitHub Copilot subscription.

Codex has been available as a local agent for a few months. Claude is new. It uses the official Claude Agent harness by Anthropic, so you get the same prompts, tools, and overall architecture as other Claude implementations.

Screenshot of the Sessions Type picker in VS Code, showing the Claude and Codex agent options.

GitHub also just announced Claude and Codex agent support. Copilot Pro+ and Enterprise subscribers can use them in VS Code as cloud agents today.

Screenshot of the Partner Agents picker in VS Code, showing options for Claude and Codex.



Note

Enable or disable support for Claude agent sessions with the

github.copilot.chat.claudeAgent.enabled

setting.

Prerequisites for the Codex local agent: a Copilot Pro+ subscription and the OpenAI Codex extension.

The beauty of this unified approach is that all these agents show up in the same Agent Sessions view. You can delegate tasks between them, compare their outputs, and pick the right tool for each job.

Orchestrate with subagents

Running multiple agents is one thing. Getting them to work together is another.

Let’s say you’re adding a new feature and your agent needs to research authentication patterns, check how similar features are structured in your codebase, AND scan the relevant docs. Doing this sequentially eats up time and adds a lot of context that makes it hard for the agent to focus on what’s important.

Subagents solve this. They’re context-isolated agents that run independently from your main session—your main agent delegates work and only the final result flows back. The intermediate exploration stays contained, keeping your primary context clean.

What’s new this release: VS Code can now run multiple subagents in parallel. Fire off multiple tasks at once, get results faster, and save premium requests in the process.

We’ve also added better visibility into what subagents are doing. You can see which tasks are running, which agent is being used, and expand any subagent to see the full prompt and result.

Combine this with custom agents to give each subagent specialized behavior: a research agent with read-only access and web search tools, an implementation agent with full editing capabilities, a security agent focused on vulnerability scanning. Define the tools, instructions, and model for each. Use handoffs to create workflows that transition from plan to implement to review—all orchestrated from your main session.

Building on open standards

More agents, more ways to use them. But agents are only as useful as you can make them for your workflow.

That’s where open standards come in.

MCP Apps landed last week. This is the first official MCP extension, and it lets tool calls return interactive UI components that render directly in chat: dashboards, forms, visualizations, multi-step workflows. This creates opportunities for a richer and more effective human-agent collaboration. VS Code is the first major AI code editor with full MCP Apps support, and we’re so excited to see what the community builds.

We’ve also made Agent Skills, Anthropic’s open standard for extending AI agents, generally available. Skills are specialized capabilities that help agents produce high-quality outputs—they provide tested instructions for domains like testing strategies, API design, or performance optimization. Extension authors can now even package and distribute skills with their extensions using the chatSkills contribution point. This means the ecosystem can share specialized AI capabilities the same way it shares code snippets and themes.

VS Code: your unified agent experience

Agents are changing how we work. You shouldn’t have to pick just one, or switch tools every time something new comes along. With VS Code, you can run the agents you want, extend them with open standards, and manage it all from one place.

A year ago, we were just introducing agent mode. Now you’ve got Copilot, Claude, and Codex running side by side and SO much more. We’re building this alongside you, and your feedback shapes what comes next. Drop us an issue in the VS Code repo or find us on social. We’re just getting started.

Want to see these features demoed live? Join us for Agent Sessions Day on February 19th!

Happy coding!

c++ – Overloaded function is not found


I am following the example from the book professional cpp 5ed, ch9.
I have a .ixx file with a member swap function taking 1 argument, and a non-member function taking 2.

export module Spreadsheet;
export import SpreadsheetCell;

export class Spreadsheet
{
public:
    Spreadsheet(size_t width, size_t height);
    Spreadsheet(const Spreadsheet& src);
    Spreadsheet(Spreadsheet&& src) noexcept; 
    ~Spreadsheet();

    Spreadsheet& operator=(const Spreadsheet& rhs);
    Spreadsheet& operator=(Spreadsheet&& rhs) noexcept; 

    void setCellAt(size_t x, size_t y, const SpreadsheetCell& cell);
    SpreadsheetCell& getCellAt(size_t x, size_t y);

    void swap(Spreadsheet& other) noexcept;

private:
    void verifyCoordinate(size_t x, size_t y) const;

    size_t m_width{ 0 };
    size_t m_height{ 0 };
    SpreadsheetCell** m_cells{ nullptr };
};

export void swap(Spreadsheet& first, Spreadsheet& second) noexcept;

Here are their implementations in the .cpp file:

void Spreadsheet::swap(Spreadsheet& other) noexcept
{
    std::swap(m_width, other.m_width);
    std::swap(m_height, other.m_height);
    std::swap(m_cells, other.m_cells);
}

void swap(Spreadsheet& first, Spreadsheet& second) noexcept
{
    first.swap(second);
}

The book recommends implementing move constructor and move assign through swap, like so:

// Move constructor
Spreadsheet::Spreadsheet(Spreadsheet&& src) noexcept
{
    cout << "Move constructor" << endl;

    swap(*this, src);
}

// Move assignment operator
Spreadsheet& Spreadsheet::operator=(Spreadsheet&& rhs) noexcept
{
    cout << "Move assignment operator" << endl;

    swap(*this, rhs);
    return *this;
}

However, my visual studio doesn’t see the exported non-member function swap that takes 2 parameters. It gives me E0140 too many arguments in function call, C2660 'Spreadsheet::swap' function does not take 2 arguments, and the intellisense overload list for swap is empty.

error in visual studio

So my questions are:

  1. is it a bug in visual studio, or am i blind and missing something? I thought the exported non-member would be treated like a regular overloaded function, and i can’t understand why compiler is not seeing it.

  2. Why are we using the non-member function for it in the first place? Omitting it and using swap(rhs); instead of swap(*this, rhs); seems to work, so why would it be recommended to do it the other way?

Im using VS2022(v143), c++ standard set to latest features

Roadmap for AI in Visual Studio (February)


After a busy January (catch up here), we’re shifting focus to reliability and refinement. This month is about tightening core workflows, improving agent stability, and building on the MCP foundations we’ve been laying.

These are active areas of work, not delivery commitments. Upvote the features that matter most to you.

Agent Mode & Coding Agents

Reliability is the priority this month. We’re raising the floor on agent-driven scenarios with:

Planning Agent

First steps toward a dedicated agent for multi-step task planning and execution.

Copilot SDK & Platform Integration (Experimental)

We’re also beginning early work to better integrate the Copilot CLI into Visual Studio Copilot.

Model Context Protocol (MCP)

MCP keeps external tools and services connected to VS in a governed, scalable way. February focus:

Models & Context Management

Under-the-hood work to keep Copilot fast as context grows:

Copilot experience in Editor

Smoother Copilot integration with existing editor behavior:

We’re excited for you to try these improvements as they roll out. As always, feedback is incredibly important—please upvote or comment on the linked Developer Community items so we know what matters most to you.

Thanks for continuing to build with us.

February 2026 Insiders (version 1.110)


VS Code Insiders banner

Last updated: February 5, 2026

These release notes cover the Insiders build of VS Code and continue to evolve as new features are added. To try the latest updates, download Insiders.
To read these release notes online, go to code.visualstudio.com/updates.

You can still track our progress in the Commit log and our list of Closed issues.

These release notes were generated using GitHub Copilot and might contain inaccuracies.

Happy Coding!


February 5, 2026

  • Add setting to control the scroll behavior in the Settings editor, offering continuous or paginated. Paginated will restrict the settings shown to only those in that category. #291391

February 4, 2026

  • Improved chat askQuestion carousel now has improved accessibility. ARIA labels have been added, keyboard focus can be moved to the container, and focus no longer automatically moves to the first response. A new command and keybinding is available to focus the first response in screen reader mode. #292917

  • Add support for the text blink attribute in the integrated terminal. #292550

  • Add support for color scheme reporting in the integrated terminal, allowing programs to query the terminal’s current color palette. #290919

  • Populate the Find control input in the integrated browser’s with the currently selected text on the page, matching standard browser behavior. #291378

  • Show download progress information when downloading a VS Code update. #277330

February 3, 2026

  • Terminal performance has been improved with updates to xterm.js, including optimizations for rendering and processing. #292572

  • Respect session list filters in the agent sessions Quick Pick and welcome page. If you have specific agent types filtered out from the session list, they will also be excluded from the Quick Pick when switching sessions. #291603

February 2, 2026

  • Improved screen reader accessibility for quick input dialogs. ARIA attributes are now dynamically set only when the list is active, preventing redundant announcements. The Go to Line dialog (Ctrl+G) now provides proper screen reader announcements for characters typed and list item navigation. #292353

  • Selecting Hidden terminal in the terminal dropdown now directly opens the terminal when there is only one hidden terminal, instead of showing a quick pick menu. #291884

  • Fixed an issue where the terminal output panel in chat would auto-collapse on command success even when manually expanded. The panel now respects the user’s manual expand state and remains expanded after successful command completion. #291120

January 30, 2026

  • The chat question carousel UI now uses a list-style selection interface similar to QuickPick instead of native radio buttons and checkboxes. This provides better visual consistency with other VS Code selection UIs across platforms. #291328

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

visual studio – Generating C# Rest API Client from swagger.json


I am attempting to create a Rest API Client from the Swagger json file generated by Ambari. Unfortunately the json uses # in item names:

  "get": {
    "tags": [ "Actions" ],
    "summary": "Get all action definitions",
    "description": "",
    "operationId": "ActionService#getActionDefinitions",       <<<<<
    "produces": [ "text/plain" ],

I have tried AutoRest, Nswag, Swagger and Open API Rest API Client Generators.
Nswag is the only one that does not crash and burn.
However it’s output is unusable because the ‘#’ characters end up in the c# names.

I end up with lines like…unusable:

System.Threading.Tasks.Task<System.Collections.Generic.ICollection<ActionResponseSwagger>> ActionService#getActionDefinitionsAsync(string fields, string sortBy, int? page_size, string from, string to);

Is there a work around to this issue ?

c++ – VisualStudio – Address Sanitizer – ASAN – not warning about memory leak


I am having trouble getting Asan to pick up on heap memory not being freed.


int main() {

    int* arr = new int[10];
    // arr[10] = 5; // Asan will warn me about this invalid access

    // Asan says nothing about the arr I did NOT free
}

I have configured Asan for Visual Studio 2022 as described here: https://learn.microsoft.com/en-us/cpp/sanitizers/asan?view=msvc-170#ide-msbuild

I have tried both the Visual Studio UI version of running Asan by running the debugger and the command line version of build the executable and then running it. Neither mention the memory not being freed.


Is it not possible ot get Asan to warn about a memory leak like this?

Performance improvements to MEF-based editor productivity extensions


If you use editor productivity extensions for Visual Studio 2026, there’s good news—they can now load faster! Extension developers with existing MEF-based editor productivity extensions should read this blog to learn about recent changes and how they might be affected. 

We introduced VisualStudio.Extensibility to simplify the creation of Visual Studio extensions for developers. Previously, handling threads in VSSDK-based extensions was often difficult, requiring knowledge of thread affinity and even the ins and outs of COM just to avoid freezing Visual Studio. The new extensibility model abstracts these technical details away seamlessly. 

Despite this advancement, we recognize most Visual Studio extensions still use VSSDK, so we’re striving to make targeted improvements there as well – especially regarding performance. For Visual Studio 2026, we’ve added the ability to load MEF-based editor extensions on a background thread, which significantly speeds up startup times for users. A major highlight of Visual Studio 2026 is its improved performance, and the proposed change we’re making to MEF is just one of many enhancements planned to make it even faster. We hope you’ll be pleased with the results. 

What changed? 

Visual Studio editor components use the Managed Extensibility Framework (MEF), which requires that objects be constructed in a free-threaded manner. Despite official MEF guidelines, we’ve often loaded components on the UI thread, resulting in many extensions relying on this behavior and limiting our ability to enhance startup performance. 

With Visual Studio 2026, we’re shifting to a free-threaded model, loading MEF components on background threads. This means extensions with UI thread dependencies might fail to load. We’ve been rigorously testing this approach in recent Visual Studio 2022 updates, and we are aware that some extensions that expect to load on the UI thread will fail to load with this optimization. To support extension developers through this transition, we’ve provided a setting and an analyzer that allows you to experiment with background loading and detect if your extension could be impacted by this change before we push it out more broadly. This initiative reflects our commitment to reducing disruptive changes and help extenders adapt when updates are necessary for the overall improvement of the product. 

Does it impact my extension? 

To help extension developers better detect if this change impacts you, we created an analyzer to identify potential issues. We hope that this will give you the opportunity to bring your extension in compliance with MEF rules, so that your extension can also get a startup performance boost like the rest of Visual Studio 2026. 

The example below shows the analyzer running and reporting access to the Microsoft.VisualStudio.Shell.ThreadHelper  and DTE2.StatusBar require UI thread. 

Picture1 image 

 To use the analyzer, add a reference to the latest version of the Microsoft.VisualStudio.SDK.Analyzers package: 

<PackageReference Include="Microsoft.VisualStudio.SDK.Analyzers" Version="17.7.98" PrivateAssets="all" />

To validate your extension can adapt to this change, enable the Preview Feature flag “Initialize editor parts asynchronously during solution load”. 

Picture2 image

When debugging, you may set a breakpoint in MEF part constructors and evaluate System.Threading.Thread.CurrentThread.ManagedThreadId. If it’s different than 1, then your code executes on the background thread.  

Picture3 image

Call to action 

Loading MEF parts on a background thread is essential for improving Visual Studio’s performance, and we have gradually enabled this change in Visual Studio 2026. We recognize that code changes can be inconvenient, so we’ve made it straightforward to spot and resolve any issues. To see examples of removing UI thread affinity, please see our documentation or a sample PR on how we made this change ourselves.  

We want to hear from you! 

Thank you for sharing your issues and suggestions with us, and we hope you’ll keep providing feedback about what you like and what we can improve in Visual Studio. For those new and experienced to extending Visual Studio, we invite you to visit our documentation to learn more, or watch the video series on Visual Studio Toolbox where Visual Studio engineers take you through how to build extensions using our samples on GitHub. Feel free to share feedback with us viaDeveloper Community: report any bugs or issues viareport a problemandshare your suggestionsfor new features or improvements to existing ones. If you want a closer engagement with other partners in the ecosystem, please visit our GitHub repo to report issues as well. 

Stay connected with the Visual Studio team by following us on YouTubeTwitterLinkedInTwitch and on Microsoft Learn



c# – Custom WPF Window ignoring specific keystrokes


I’m working on a Visual Studio Extension that creates a popup WPF Window, the window does have a TextBox in which can be input text.

The problem I’m facing is: Whenever I have the TextBox focused and send Backspace/Ctrl + A or Esc to it, the keystrokes goes to whatever document window I had active before instead of the TextBox.

In the gif: I have the TextBox focused it recognize normal keystrokes like a-z, but when i send Ctrl+A to it, it goes to the document window in the background, same thing for Backspace, it erases things in the document instead of the TextBox which is active.

I have created a minimal reproducible example, the code can be found here:
https://github.com/jinjiere/VSExtension

A similar issue related to these keystrokes:
https://developercommunity.visualstudio.com/t/Issue-where-backspace-ctrlz-and-other/11023655?ref=native&refTime=1769989905247&refUserId=67e5f4a0-c9fb-6b2b-9ad6-7f2145a23b45

I’m not sure if its a VS bug, I have also report it here: https://developercommunity.visualstudio.com/t/Custom-WPF-Window-ignore-specific-keystr/11037258

visual studio – “Add” button disabed when creating a view


I want to generate a view or partial view from actionby clicking “Add
View” button. But as you can see the button is disabled and I cannot
generete anything.

Actually, your Add button is disabled because you have either removed model class /templete value or haven’t selected anything which causing the issue.

Most importantly, While selecting view you should take either you should select context model or if there is not relevant model class it should select to Empty or without model from the dropdown, other than, your Add button would be disabled.

I have reproduced your issue accordingly as you can see down below:

enter image description here

How to resolve:

You can follow below steps to include your view:

enter image description here

Output:

enter image description here

Note: Please refer to this official document if you would like to know more details.

.net – Using a common library which contains MEF exports in multiple Visual Studio extensions


I am building a Visual Studio extension which uses a 3rd-party library (MonoDevelop.Xml to be specific). The library contains some MEF components intended to be used together with my custom components. So I have added the library into my VSIX manifest:

<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
    <!-- ... -->
    <Assets>
        <!-- ... -->
        <Asset Type="Microsoft.VisualStudio.MefComponent" d:Source="Project" d:ProjectName="%CurrentProject%.Xml.Editor" Path="|UnityModStudio.RimWorld.Xml.Editor|" />
        <Asset Type="Microsoft.VisualStudio.MefComponent" d:Source="Project" d:ProjectName="MonoDevelop.Xml.Editor" Path="|MonoDevelop.Xml.Editor|" />
    </Assets>
</PackageManifest>

So far, so good. I implemented a custom IAsyncCompletionSourceProvider in the UnityModStudio.RimWorld.Xml.Editor project and got my custom completions working as intended.

Then I decided to install the MonoDevelop.MSBuildEditor extension which also uses MonoDevelop.Xml into the experimental instance to see how some features should work and found that both extensions are not working. I found that I can make both extensions work together by removing the

<Asset Type="Microsoft.VisualStudio.MefComponent" d:Source="Project" d:ProjectName="MonoDevelop.Xml.Editor" Path="|MonoDevelop.Xml.Editor|" />

line from my VSIX manifest, but then my extension stops working when MonoDevelop.MSBuildEditor is disabled.

What can I do on my end to make both extensions work together, but independently?