Plan Before You Build: Introducing the Plan agent in Visual Studio


You ask Copilot to tackle something big, it gets to work, and a dozen file changes later you realize you had a completely different approach in mind. The code isn’t wrong… it just isn’t what you were going for.

Last year, we introduced planning as a feature in Agent mode to help with exactly this. Since then, you’ve told us you wanted more control over when planning happens, the ability to edit plans directly, and a way to save and share them. Your feedback shaped what came next: the new Plan agent.

Instead of jumping straight into implementation, the Plan agent starts with a deeper understanding of what you’re trying to build: asking questions, clarifying your intent, and enabling you to iterate on the plan before making a single change.


How it works

Here’s how it works:

  • Select the Plan agent and describe what you want to build — Choose Plan from the agent picker in Copilot Chat, then tell Copilot what you’re trying to do. You can be as broad as “add authentication to this app” or as specific as “refactor the payment module to support multiple providers.” The more context you give, the better the plan.

plan selected in agent picker image

  • Explore and clarify — Copilot scans your codebase using read-only tools and asks clarifying questions when something is ambiguous. Answer these to help Copilot understand what you’re going for. For straightforward tasks, it moves straight to drafting.

plant agent clarifying questions image

  • Draft and refine — Copilot creates a detailed implementation plan you can review together. Ask it to rethink an approach, add edge cases, split a step into smaller pieces, or reconsider which files to touch.
  • Edit the plan directly — Every plan is saved as a markdown file at .copilot/plans/plan-{title}.md. Edit it in your editor, refine it through chat, or share it with your team for review. Copilot picks up your changes and keeps everything in sync.
  • Implement — When you’re satisfied, click Implement plan to hand it off to Agent mode to build. No code changes happen until you say so. Copilot works through the plan step by step, creating and editing files while you watch the progress in real time.

plan agent implement plan button image

plan implemented image

Try it today

The Plan agent helps you figure out what to build before you start building it. Give it a try on your next feature or refactoring task, and let us know how it goes!

Share your feedback on Developer Community and let us know what’s working, what’s not, and what you’d like to see next!

Visual Studio Code 1.122


Follow us on LinkedIn, X, Bluesky


Last updated: May 21, 2026

Welcome to the 1.122 release of Visual Studio Code.

Happy Coding!



May 19, 2026

  • Agents can now trigger tasks on remote machines. #312052

  • Source control state in the Agents window now refreshes automatically after the agent commits, syncs, or performs other git operations. #317317

  • Use /models in the chat input to open the model picker. #317060

  • Mermaid C4 diagrams with inline data-URI images now render correctly in chat and Markdown preview. #317235

  • Screen readers now announce the problem message when opening the error peek widget with F8. #316835

May 20, 2026

  • New “Search only in changed files” toggle in the search panel restricts results to files with uncommitted source control changes. #314790

  • Language Models editor shows granular actions for provider groups, such as Update API Key, Add Model, Go to config file, Rename, and Delete. #317419

  • Terminal commands running in chat show dot/ASCII loading animations. #317416

  • New issue reporter wizard lets you create high-quality issues directly from VS Code, including screenshots and video recordings. Enable it with issueReporter.wizard.enabled. #317577

  • Mermaid diagrams use a theme derived from the current VS Code color theme, and diagrams opened in a new editor show the full content. #317617, #317244

  • GitHub Enterprise sign-in onboarding uses an inline form with real-time validation instead of a modal dialog. #317205

  • Commands using sudo -S to pipe passwords via stdin are no longer auto-cancelled in auto-approve mode. #317594

  • Fixed editor labels for remote agent changed files that were showing internal URIs instead of user-facing paths. #316812

May 21, 2026

  • Bring Your Own Key (BYOK) models now work in air-gapped scenarios without GitHub authentication. #317428

  • Local agent host is now enabled by default in Insiders builds. #317667

  • “Sort imports” and “Remove unused imports” actions no longer appear when tsgo is active, since tsgo handles these operations differently. #317656

  • The reasoning effort picker now shows a valid level instead of ‘undefined’ for model families that don’t specify an explicit default. #317622


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

The Coding Harness Behind GitHub Copilot in VS Code


May 15, 2026 by Julia Kasper, Megan Rogge and Aaron Munger

With each new model release, the same conversation is reignited. Which model is the smartest? Which one is fastest? Which one should we use? Those are useful questions, but for a product like Visual Studio Code the model is only one part of the agentic coding experience. What developers actually interact with is the coding harness: the layer that assembles context, exposes tools, runs the agent loop, interprets tool calls, and turns a model’s output into something useful inside the editor. In this post, we’ll look at what that harness does, why it matters, and how we evaluate it as models and developer workflows evolve.

Diagram showing that an agent is made up of a model plus a harness. The harness includes the agent loop, tools, context management, and system prompt.

What is the coding harness?

Language models do not edit files, execute commands, or run tests by themselves. They can only produce text. The coding harness is the system that acts as a bridge between the code editor and the language model. It turns that text into action and feeds the results back so the model can decide what to do next.

In VS Code, the coding harness has three main responsibilities:

  1. Context assembly: Before any request reaches the model, the harness builds a prompt. That prompt includes a system message with behavioral instructions, the user’s query, workspace structure (languages, frameworks, open editors), conversation history from prior turns, tool results, custom instructions, and memory from earlier sessions. The harness decides what the model sees, and those decisions directly affect quality.

  2. Tool exposure: The harness declares the tools the model is allowed to call: reading files (read_file), editing code (replace_string_in_file or apply_patch), running terminal commands (run_in_terminal), searching the codebase (semantic_search), and many more. Each tool has a JSON schema the model must follow and a description the model uses to decide when to invoke it. The set of available tools can change per request. Some tools are only enabled for certain models, some require user confirmation before execution, users can toggle tools on and off in the tool picker, MCP servers and extensions can contribute entirely new tools that slot into the same loop, and custom agents (.agent.md) can restrict their tool set to a specific subset.

  3. Tool execution: When the model requests a tool to be run (using JSON like {"name": "run_in_terminal", "arguments": {"command": "npm test"}}), the harness is the one that validates the arguments, runs the tool, handles errors, formats the result, and feeds it back in the next iteration. For example, if the model asks to edit a file, the harness writes the diff. If the model asks to run a shell command, the harness is what spawns the process, captures output, and relays it.

None of these tasks can be directly achieved by the language model. However, this input determines the behavior and outcome of the model and what you experience in the code editor.

The logic that orchestrates these tasks, deciding when to continue or stop iterating and how to keep the conversation coherent across many rounds, is the agent loop.

The agent loop

At its core, when you use an agent in VS Code, a tool-calling loop happens: a “think → act → observe → think again” cycle. On each iteration, the agent harness builds the prompt (system instructions + context + history + all tool results so far), sends it to the model, and checks the response. If the response includes tool calls, the harness executes those tools, captures their results, and loops back. If there are no tool calls, the loop can finish and the assistant’s text becomes the final response.

Simplified diagram of the VS Code agent loop: the user sends a chat message, the tool-calling loop builds a prompt, sends it to the model, executes requested tools, records results, checks loop-control conditions, and either continues or finalizes the chat result.

A turn is the user-visible chat exchange: you send one message, and the agent eventually produces a response. During that turn, the agent loop may perform many rounds. A round is one pass through the loop: build the prompt, call the model, receive text and/or tool calls, execute any tools, record the results, and decide whether to continue. The full execution of all those rounds is the loop’s run. A single user turn might trigger many rounds as the model searches files, reads code, edits files, runs tests, reads the output, and iterates on failures.

The tool-calling loop is bounded by loop-control checks. We enforce a tool-call limit, check for cancellation between rounds, and run stop hooks. Stop hooks are extension points that can inspect the agent state and either allow it to finish or push it to keep working. Within the loop, the prompt is rebuilt on every iteration. That means the model always sees the latest state of the workspace: if it edited a file three rounds ago, the current prompt reflects that edit. The harness also manages conversation summarization. When the accumulated history grows too large, it compresses earlier rounds into a summary so the model can keep working without hitting the context window ceiling.

Note:
Want to see the harness in action? You can explore the VS Code source code, use the Tools UI in Chat to review the tools available for a request, and open the Chat Debug View to inspect the prompts, tool calls, and results.

The harness is the product

When a new model ships, it needs to fit into an existing harness. The system prompt, the tool definitions, the loop logic, the context assembly, all of it was built and tuned over many months of real-world use. The model gets better at filling in the blanks, but the harness defines what the blanks are.

This matters even more because GitHub Copilot lets you use models from multiple model providers. And GitHub Copilot in VS Code supports a growing model ecosystem. Developers can switch between models, use auto-selection, bring their own keys, or install extra providers via extensions. This means that VS Code has to deal with a broad and continuously evolving ecosystem, not a single stable API.

The harness is what enables VS Code to handle this model flexibility without forcing developers to relearn the product every time. You should be able to switch models or try a new provider while keeping the core experience familiar: chat, sessions, tools, terminal output, debugging, and source control.

But integrating a new model is rarely just adding an extra option to the model picker. Providers differ in how they expose tool calling, structured outputs, reasoning controls, prompt caching, context limits, and error behavior. Some models are better at long planning. Some are better at terse edits. Each model has different strengths, and we work closely with model providers before each release to adapt the system prompt, tool descriptions, and loop behavior accordingly. Providers often grant us early access to new model checkpoints, which are pre-release snapshots of upcoming models, so we can start tuning the harness before the model is generally available.

Flow diagram showing VS Code and model providers iterating from an upcoming model release through Copilot API onboarding, harness optimization, evaluation, provider feedback, and launch.

Different models need different harness behavior. Claude models use replace_string_in_file for edits; GPT models use apply_patch. Gemini needs reminders to use tool-calling instead of narrating it, and breaks on orphaned tool calls in history. Some models support extended thinking and need reasoning-effort controls. Some work best with a concise system prompt; others need verbose, structured instructions to stay on track. The harness selects different system prompts per model – Claude Sonnet 4 gets a different prompt than Claude 4.5, which gets a different one than Opus.

All these per-model differences aren’t trivial. They translate into per-model system prompts, per-model tool sets, and per-model conversation management. This means that when a new model ships, we can’t just flip a switch but we need to validate its behavior. We validate tool schemas, retune defaults, and re-run full agent sessions before anything ships. Beyond the model functioning correctly, the harder question is how can we verify that a new model actually gives better results.

Evaluation keeps the harness honest

Just like you need to test a new feature before you ship it, models also need to be tested. That’s where model evaluation comes in. Before a model ships in VS Code, we evaluate it from multiple angles. We run offline benchmarks, test it internally, and compare it against the models already available in the product. After the model is live, we keep measuring: A/B tests, aggregate usage signals, and weekly reporting help us understand how the model behaves in real developer workflows.

Diagram showing an overview of the VS Code evaluation pipeline.

There are multiple public model benchmarks, which are useful as a shared reference point. We use these benchmarks to compare against the broader model ecosystem and to catch obvious regressions. But at frontier levels, they are no longer sufficient as a quality indicator. OpenAI stopped reporting SWE-bench Verified results after finding that frontier models could sometimes reproduce gold patches from memory, making contamination harder to ignore.

Coverage is another limitation. SWE-bench is valuable, but it is still centered on public bug-fixing tasks. Terminal-Bench is useful for measuring command-line competence, but many tasks look more like isolated terminal puzzles than the kinds of workflows developers actually bring to an editor. Real-world coding agents need to do more than patch a known bug or solve a shell challenge. They need to scaffold projects, migrate codebases, refactor across files, follow instructions, and handle terminals and browsers.

We still run these benchmarks, but they are only a starting point. To decide which models are ready to ship in VS Code, we need something closer to the product we are actually building.

Building VSC-Bench

That’s why we built VSC-Bench, our offline evaluation suite for VS Code agent behavior. VSC-Bench focuses on VS Code-specific developer tasks that public benchmarks do not cover well: custom agent modes, extension workflows, MCP and tool use, terminal and browser interaction, multi-turn conversations, and multi-language coding tasks across TypeScript, Python, C++, and others.

We use VSC-Bench to measure model behavior across solution correctness, agent effort, token efficiency, and latency. The chart below focuses on resolution rate and token usage, but before a model becomes part of the VS Code experience, we evaluate the full set of dimensions. That trade-off matters before a model or reasoning setting becomes a default in the editor.

Scatter chart comparing VSC-Bench model resolution rate against median total tokens for different models and reasoning settings.
This chart summarizes 40 VSC-Bench runs across eight model-effort configurations. Each point represents one model-effort configuration, with higher points resolving more tasks and points farther to the right using more tokens. For these set of VSC-benchmark tasks, xhigh uses more tokens than high but resolves slightly fewer, which may indicate that it is past the useful effort sweet spot where extra thinking no longer converts into better outcomes.

Each VSC-Bench task runs in a reproducible, containerized workspace. The harness launches VS Code, opens the workspace, sends one or more user prompts to the agent, lets the agent respond with text and tool calls, and then evaluates what happened. That gives us a more realistic view of the full agent loop: not just whether the final code looks right, but whether the agent used the editor, terminal, language services, browser, and tools in ways that match the VS Code experience.

Together with public benchmarks, VSC-Bench gives us a more balanced signal: public evals tell us how a model compares to the field, while product-specific evals tell us whether it is ready for the experience developers expect inside VS Code.

How we benchmark agent changes before they merge

Benchmarks aren’t just for shipping models. They’re also how we vet harness changes before they land. If a PR touches a core tool, a system prompt, or anything else that could move agent behavior, we want benchmark numbers before it merges.

For those PRs, the VS Code team uses an automated eval assessment flow. Adding the ~requires-eval-assessment label to a PR kicks off the process: the PR is built, shipped as an eval agent, benchmarked, and the results are posted back on the PR:

  1. Build the PR. A webhook routes the label event into a workflow in vscode-engineering, which kicks off an Azure DevOps build against the PR’s merge ref. One automatic retry on failure; the PR gets a “queued 1 of 2” comment so reviewers can follow along.

  2. Publish an eval agent. On a successful build, a publish pipeline ships a versioned agent (0.0.0-dev.<sha>) to the vscode-evals npm feed on the dev tag. The PR comment flips to “queued 2 of 2”.

  3. File an evald issue. The publish pipeline fires a repository_dispatch back at vscode-engineering, which opens a model-evaluation issue on github/evald pinned to that exact published agent.

  4. Report back. evald runs the benchmark, monitors it, and produces an analysis comment. An Azure Logic App forwards just the comment URLs (not the analysis body — that stays private on evald) back as another repository_dispatch, which posts a link on the original VS Code PR.

Screenshot of an eval assessment report showing eval evidence with terminal logs, a task comparison table, and the proposed fix.

The model is the engine. The harness is the car.

We started with a question developers ask every few months: which model is best? But for a coding agent, that question is a little like asking: which engine is best? The engine matters, but it’s not enough on its own. It’s the context the model sees, the tools it can reach, the loop that keeps it going, and the evaluation that makes sure it all works. That’s the harness, and it’s what we spend most of our engineering time on.

As models gain new capabilities like longer context, better planning, and native tool use, the harness evolves to take advantage of them. And as developers push agent mode into new workflows, we feed what we learn back into the loop, the tools, and the evaluations. Every VS Code release ships harness improvements alongside model updates.

If you’re curious about how the harness works, you can get hands-on with it today. Explore the VS Code source code, use the Tools UI in Chat to see which tools are available for a request, and open the Chat Debug View to inspect the prompts, tool calls, and results behind an agent run. Try switching models, add your own tools, and let us know what works — share your feedback in our GitHub repo.

Happy coding! 💙

VSLive! Microsoft AI Hackathon 2026: Send Your Team Home With Working Code


Hackathon image

If you lead a development team, you already know the pattern. You approve the travel, your developers attend a great conference, they come back energized, and then the work resumes exactly as it was. The ideas don’t survive contact with the backlog.

This July at VSLive! @ Microsoft HQ in Redmond, we’re trying to change that pattern.

We’re adding the VSLive! Microsoft AI Hackathon 2026, a focused, hands-on build event that runs alongside the conference. Your developers learn during the day, then build at night, on the Microsoft campus, with Microsoft engineers and MVPs in the room. They leave with working code, not just notes.

Why this matters for dev leads

Most of your team is being asked to ship AI features into production right now. Most of them have not had uninterrupted time to actually build with Microsoft Foundry, Azure OpenAI, GitHub Copilot, or agent-based patterns under realistic constraints. Sprint work doesn’t allow it. Brown-bag sessions don’t go deep enough. Internal POCs get deprioritized.

This is structured time, with expert mentors, focused on the exact stack your team already runs on.

If you send two or three developers together, you get a small working group that returns with shared context, a real artifact, and the start of a pattern your team can extend. That’s a much better outcome than three separate sets of session notes.

Learn during the day. Build at night.

VSLive! @ Microsoft HQ runs on the Microsoft campus, which means your team is spending the week alongside the engineers, product managers, and MVPs who build and ship these tools.

Days cover Visual Studio, C#, .NET, Azure, Microsoft Foundry, Azure OpenAI, GitHub Copilot, agent-based development, and modern application patterns.

Evenings shift to the VSLive! Microsoft AI Hackathon, where the focus is building. Your developers take what they saw in sessions and apply it the same day, while it’s still fresh, with mentors on hand to unblock them.

They’ll work through the decisions that matter in production: architecture, security, user experience, and whether a pattern is actually viable for the kind of software your team supports.

The judging criteria reflect real engineering

Projects are evaluated on:

  • Architecture and design
  • Security and safety
  • Relevance to real business problems
  • User experience and execution
  • Practical use of Microsoft AI technologies

This is the right bar. AI is moving fast, but enterprise teams still have to ship software that is secure, maintainable, and defensible in a code review. The criteria reward the kind of thinking you want your developers practicing.

What your team can build

The goal is something a developer can demo, explain, defend, and improve. Not the flashiest demo, the most useful one.

That could be a C# application, a .NET service, an internal developer tool, an agent-based workflow, a line-of-business app, or a creative project applying AI to content or interactive scenarios.

Participants declare a primary category, with the option to add a secondary:

  • Microsoft .NET Powered Business Applications
  • Best AI Agent or Workflow Automation
  • Best Azure OpenAI / LLM-Powered App
  • Best GitHub Copilot Integration
  • Creative Applications

Participants retain full ownership and rights to their project IP. What your team builds belongs to them, and to you.

Who this fits

This is a fit for C# and .NET developers building business apps, web apps, desktop apps, cloud services, backend systems, and internal tools. It’s also a fit for developers exploring how AI fits inside the software they already build, whether that’s adding intelligence to an existing application, building an agent workflow, or improving a developer tool.

It’s approachable for developers new to hackathons and substantive enough for senior developers, architects, and dev leads who want practical patterns to bring back.

Your team can compete solo or as a team of up to four. Developers attending alone can form teams onsite.

Event details

Location:
Microsoft Commons Mixer, Building 98
Microsoft Headquarters, Redmond, WA

Schedule:

  • Tuesday, July 28, 2026, 6:00 PM to 10:00 PM
    • Kickoff, team formation, idea pitches, planning, first coding sprint.
  • Wednesday, July 29, 2026, 5:00 PM to 9:00 PM
    • Build time, mentor check-ins, final submissions, demo video submissions.
  • Thursday, July 30, 2026, 11:00 AM to 11:30 AM
    • Awards and select demos before the Thursday keynote.

Confirmed judges and proctors include Brian Randell, Phil Japikse, Eric Boyd, Allen Conway, and Microsoft representatives.

Prizes

Awards total up to $25,000, with a $6,000 Hackathon Grand Champion prize and additional team, solo, and category awards. Each project or team may win one monetary prize. Additional sponsored awards may be announced closer to the event.

A few logistics worth knowing

This is in-person only. There is no virtual option. Participation is capped, and once it’s full, it’s full.

If your developers are attending VSLive! @ Microsoft HQ, they can add hackathon participation during registration. There’s also a hackathon-only option for community attendees who aren’t doing the full conference.

If you’re local to Redmond, come spend an evening with us

If you’re in the Puget Sound area and the full conference isn’t in the cards, the hackathon-only pass exists for exactly this reason.

You don’t need a travel budget. You don’t need a hotel. You need an evening or two, a laptop, and an interest in building something real with the people who build the tools.

Being on the Microsoft campus after hours, working through a build with engineers, MVPs, and other developers in the room, is a different kind of experience than reading docs at your desk. The conversations are better. The unblocks are faster. The work sticks.

If you’ve been meaning to get more hands-on with Microsoft Foundry, GitHub Copilot, or agent-based development, this is a low-friction way to do it. Grab the hackathon-only pass, show up Tuesday night, and see where the build takes you.

The case for sending more than one

The single best decision a dev lead can make about this event is to send people in pairs or small groups. Two developers from the same team, in the same sessions, building together at night, will return with a shared frame of reference and the start of something your org can actually use. One developer returning alone has to re-explain everything to skeptical teammates, and most of what they learned will quietly evaporate.

If you’ve been waiting for the right reason to get a few of your developers to Redmond, this is it. They’ll learn from the people building the tools, build alongside the community, and come back with working code your team can keep improving.

And…. if you have an active Visual Studio Pro or Enterprise Subscription, don’t forget to login to my.visualstudio.com for your exclusive conference discount code.

Explore the Hackathon

Build, compete, and win.

Visual Studio Code 1.121


Follow us on LinkedIn, X, Bluesky


Last updated: May 14, 2026

Welcome to the 1.121 release of Visual Studio Code.

Happy Coding!



May 13, 2026

  • Add support for pinning favorite models in the language model picker. #299776

  • Set a VSCODE_AGENT environment variable when Copilot Chat runs commands in the terminal. #311734

  • Add an “Add to Chat” option to the right-click context menu in integrated browser. #305718

  • Automatically dispose background terminals created by the chat agent once their command finishes. #287177

  • Allow extensions contributing markdown.previewScripts to declare their scripts as ES modules by using the { "path": "...", "type": "module" } object syntax. #316328

  • Expand terminal tool output compression to cover more commands, including test runners (pytest, jest, cargo test), build tools (tsc, cargo build, make), linters, Docker, and package managers. #315881

May 12, 2026

  • Add an idle-silence timer to the run_in_terminal tool that automatically promotes a sync command to background execution when it produces no output for a configurable period. #315884

  • Fix multi-line shell commands in the Agent Host terminal tool. #312922

  • Bundle a newer version of ConPTY (conpty.dll) directly with VS Code on Windows. #224488

May 11, 2026

  • Add keyboard-interactive authentication support for Agent Host SSH connections. #315588

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

Agent Skills in Visual Studio: Teach Copilot How Your Team Works


Visual Studio now supports Agent Skills, which are reusable instruction sets that teach Copilot agents how to handle specific tasks like running a build pipeline, generating boilerplate, or following your team’s coding standards. Define a skill once, and the agent applies it automatically whenever it’s relevant.

Copilot chat displays that a skill is read and referenced

Creating a skill

You can create a skill directly from within Visual Studio. Click the tools icon in the bottom-right corner of Copilot Chat to open the skills panel, a dedicated view of every discovered skill. Click the + button in the top-right corner of the panel and follow the guided flow: choose a destination (global or solution-level skill), pick a name, and Visual Studio generates a skill template for you to fill in. Copilot Agent mode can then assist you in filling in the template. Currently this flow is only available in the Insiders channel and will be in Release soon.

create a new skill from the skills panel    create new skills panel where user define the location of the skill and the name.

You can also create a skill manually:

  1. Create a skill directory in your repository (.github/skills/my-skill/) or user profile (~/.copilot/skills/my-skill/).
  2. Add a SKILL.md file following the agentskills.io/specification format.
  3. Optionally include scripts, templates, or examples alongside it.

For example, you could have two skills, github-issues and code-review like this:

.github/
  skills/
    github-issues/
      SKILL.md
      templates/
        bug-report.md
    code-review/
      SKILL.md
      checklist.md

Skills are auto-discovered from these locations:

  • Solution skills (shared via your solution): .github/skills/, .claude/skills/, .agents/skills/
  • Global/Personal skills (shared via your user profile and available across solutions): ~/.copilot/skills/, ~/.claude/skills/, ~/.agents/skills/

When a skill activates, it appears in the chat window so you always know what’s being applied.

If you are not sure where to start or what skills to create, please check out awesome-copilot for many great community examples!

Managing skills from the skills panel

In addition to creating new skills, you can also manage your skills easily from the skills panel.

Skills panel where you can edit and open skills directly

From the panel you can:

  • Edit — Open any skill’s SKILL.md directly in the editor via the ⋯ menu.
  • Open file location — Jump to the skill directory on disk.
  • Search — Filter skills by name or keyword.

The panel also surfaces diagnostics for any skill configuration errors, so you can quickly spot and fix issues.

Skills panel displaying error information

Skills vs. Custom Instructions: when to use what

You may already be using custom instructions (.github/copilot-instructions.md) to guide your Copilot’s behavior. Custom instructions are great for broad, always-on guidance, such as things like “use tabs, not spaces” or “prefer async/await over callbacks.” They are automatically applied to every interaction you have with Copilot.

Agent Skills are different. Skills are task-specific and dynamically loaded. The model decides when a skill is relevant and applies it only in matching contexts.

Custom Instructions Agent Skills
Scope Always active Activated per-task
Best for Coding style, conventions, general preferences Workflows, templates, multi-step procedures
Structure Single markdown file Directory with SKILL.md + supporting files
Examples “Use PascalCase for public methods” “When creating a GitHub issue, use this template and include severity, repro steps, and environment info”

Use custom instructions for rules that should always apply. Use skills for specialized workflows that only matter in certain contexts. Another way to extend your agent’s capabilities is through MCP tools, which let the agent interact with external services and APIs. Skills and MCP tools complement each other well — a skill can describe how to handle a task while an MCP tool provides the capability to execute it.

Please give Agent Skills a try and share your feedback in the comments or on Developer Community.

Happy coding!

Visual Studio Code 1.120


Follow us on LinkedIn, X, Bluesky |


Last updated: May 7, 2026

Welcome to the 1.120 release of Visual Studio Code.

Happy Coding!



May 7, 2026

  • Group chat sessions by recency by default in the sessions Quick Pick. #314965
  • Add a context size picker to the model picker. #314814

May 6, 2026

  • Hide archived sessions by default in the chat sessions Quick Pick to reduce visual clutter. Searching in the Quick Pick still matches archived sessions, so you can revive one by title. #297421
  • Surface GitHub metadata, including a pull request button, in the agent host UI for sessions backed by a GitHub repository. #314811
  • Detect password and passphrase prompts in chat agent terminal commands and show a confirmation dialog that focuses the terminal so you can enter the secret directly. The prompt is announced to screen readers, and secrets are never routed through the model. #314796
  • Discover Copilot CLI user-installed plugins from ~/.copilot/installed-plugins/. #302152

May 5, 2026

  • Agent host terminals respect the user’s preferred shell from


    terminal.integrated.defaultProfile

    instead of hardcoding the platform default. #313160

  • Add support for custom diff editors with the new customDiffEditorProvider proposed API. Extensions that implement resolveCustomDiffEditor can render a unified diff in a single webview with access to both the original and modified documents, instead of two side-by-side custom editor webviews. #298924
  • Restore the ability to select and copy code in chat edit suggestions that the agent proposes to remove. #252762

May 4, 2026

  • Add a custom duration option to the Snooze Inline Suggestions Quick Pick. #288770
  • Reduce the CSS context attached when adding a DOM element to chat. The attachment only includes modified computed styles and CSS rules and variables that actually affect the element. #314188

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 Code 1.119


Follow us on LinkedIn, X, Bluesky |


Last updated: April 30, 2026

Welcome to the 1.119 release of Visual Studio Code.

Happy Coding!



April 30, 2026

  • Add a preview button for Markdown files. #312425
  • Allow hiding the update notification button in the title bar. #311929

April 29, 2026

  • Organize Markdown settings into subcategories for better discoverability. #313363
  • Add support for indexing external ingest in virtual file systems for chat codebase context. #313281
  • Add support for attaching browser tabs to chat to share page snapshots as context. #312169
  • Add support for Copilot CLI plan mode in AHP. #312050
  • Allow agents to request access to browser tabs through a permission dialog. #297372

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

TypeScript 7 Beta Now Enabled by Default in Visual Studio 2026 18.6 Insiders 3


TypeScript 7 Beta Now Enabled by Default in Visual Studio 2026 18.6 Insiders 3

In Visual Studio 2026 18.6 Insiders 3 we have updated the built-in TypeScript SDK to TypeScript 7 Beta (native preview). The TypeScript SDK provides the compiler and language service used for TypeScript and JavaScript support in Visual Studio. This update impacts any project that uses the built-in SDK, including TypeScript projects, ASP.NET Core projects with npm packages, and any TypeScript or JavaScript files you are editing. If your project doesn’t have a specific TypeScript version installed, Visual Studio will use the new native compiler by default. In this post we will go over what this change means for you, how to use a different version of TypeScript if needed, and the known issues we are currently working on. You can download the latest Insiders release with the link below.

What is the TypeScript 7 native preview?

TypeScript 7 is a native port of the TypeScript compiler and tools. This is a significant change that brings native execution speed and shared-memory parallelism to the TypeScript compiler and language service. We have seen compile time improvements of up to 10x for large code bases, along with substantially reduced memory usage. If you are working with large TypeScript or JavaScript projects, you should see a noticeable improvement across your entire development experience.

In addition to faster compile times, the TypeScript language service has significant performance improvements as well. We have seen that the time to load projects has decreased roughly 8x. The improvements are not limited to load times; you should see a general speed improvement across the board with any features which interact with the TypeScript language service. Some of the Visual Studio features that benefit from these improvements include.

  • IntelliSense and completions. Code completions and parameter info should appear faster, especially in large projects where you may have previously noticed a delay.
  • Find All References. Searching for references across your solution is significantly faster.
  • Go to Definition. Navigating to definitions is more responsive.
  • Error diagnostics. Squiggles and error lists update more quickly as you type.
  • Project load times. Opening TypeScript and JavaScript projects in Visual Studio should be noticeably faster, with load times decreasing by roughly 8x.

If you are working with large code bases, you should see a noticeable improvement to your entire development experience. You will spend less time waiting for the IDE to respond and more time being productive working on your applications.

For more details on TypeScript 7 and the performance improvements, see the Announcing TypeScript 7.0 Beta blog post.

Using a different TypeScript version

Visual Studio ships with a built-in version of the TypeScript compiler and language service for cases where the project doesn’t specify a specific version to be used. Starting with this release, that built-in version is TypeScript 7 Beta. If you prefer to use a different version, you can install it in your project and Visual Studio will always use the project-local version over the built-in one.

Disabling TypeScript 7 native preview

If you want to go back to using the previous TypeScript language service, you can disable the native preview in Visual Studio. Go to Tools > Options > Preview Features and search for “native preview”. Uncheck the Enable JavaScript/TypeScript Native Language Service Preview option and restart Visual Studio.

Using TypeScript 6.x (GA)

To use the current stable release, install the typescript package in your project.

npm install -D typescript@^6.0.0

Using a specific TypeScript 7 native preview version

If you want to pin to a specific version of the native preview, install the @typescript/native-preview package.

npm install -D @typescript/native-preview@beta

In both cases, Visual Studio will detect the version in your node_modules and use that instead of the built-in SDK.

Known issues

TypeScript 7 brings significant performance improvements to Visual Studio, and we are continuing to refine the experience. Below are the known issues that we are actively working on. This is not an exhaustive list.

  • IntelliSense. You may notice completions not appearing in some cases. In .cshtml files, the TypeScript completion list may not appear inside a <script> tag. When accepting a completion for the last argument of a function, the closing parenthesis may be removed. Pressing Ctrl+Space can work around this.
  • Code Actions & Refactoring. Quick fixes (Ctrl+.) are not available yet. Only Copilot AI-based suggestions may appear. The Organize Imports command (Ctrl+R, Ctrl+G) is also not available.
  • Navigation & Search. The navigation bar dropdowns at the top of the editor do not show document symbols. Find All References (Shift+F12) shows a flat list without semantic grouping (read/write/declaration), and cross-file references may be incomplete. Code search results may show mismatched titles and descriptions.
  • CodeLens. Reference counts (e.g., “19 references”) do not appear above interface and class declarations.
  • Hover tooltips. Hover tooltips are missing the symbol icon and have different text coloring compared to the previous language service.
  • Snippets. Insert Snippet (Ctrl+K, Ctrl+X) does not work in JavaScript files.
  • JSDoc. Typing /** above a function with parameters does not auto-generate the JSDoc template with @param entries.
  • Formatting. Unchecking “Format on open block {” in Tools > Options > Text Editor > JavaScript/TypeScript > Formatting does not take effect.
  • Task List. If a TypeScript file contains both a TODO comment and a variable named “TODO”, the Task List may incorrectly show duplicate tasks.
  • File and folder rename. Renaming a file or folder in a TypeScript project does not consistently update import paths in other files.
  • File watching. When files are modified outside of Visual Studio, changes are not detected until the file is opened and modified inside the IDE. Errors from external edits will not appear in the Error List.

We appreciate your feedback as we work toward full parity.

Reporting feedback

If you have feedback on the TypeScript compiler, or language service, the best place to file feedback is the typescript-go GitHub repo.

If you are running into an issue that is specific to Visual Studio, you can share feedback with us via Developer Community: report any bugs or issues via report a problem and share your suggestions for new features or improvements to existing ones.

We would love if you could try out the new experience and let us know how it’s working for you. Please try it out and share your feedback with us.

 

SDK-Style Support for Extension Projects


Starting in Visual Studio 18.5, you can create and build Visual Studio extensions (VSIX) using an officially supported SDK-style project. This brings VSIX projects into the modern build and deployment pipeline, improving incremental build performance and making the build → deploy → debug workflow more reliable. Install the Visual Studio extension development workload to get the templates and tooling and try it out for yourself!

Note: Extensions written using the modern VisualStudio.Extensibility framework already supports SDK-style projects today. This update extends the same SDK-style experience to VSSDK-based Visual Studio extensions.

 What We Are Adding:

  • Official SDK-style support for projects that produce VSSDK-based extensions.
  • Build time reductions of up to 75%! We’ve added end-to-end incremental build support including Fast Up To Date Check and up to date deployment logic. Through internal adoption, we see a reduction of up to 75% in build time in large solutions for small changes or changes confined to a single sub project.
  • Updated in-box templates: SDK-style by default, with the familiar project items (tool windows, classifiers, commands, etc.).

Project Usage

Creating a project is done the same way you are used to, using the “VSIX Project” or “Empty VSIX Project” template:

new vsix project template image

This will yield a much more compact csproj than before: only 20 lines:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
    <Nullable>enable</Nullable>
    <LangVersion>14</LangVersion>

    <!-- VSIX settings -->
    <VSSDKBuildToolsAutoSetup>true</VSSDKBuildToolsAutoSetup>
    <VsixDeployOnDebug>true</VsixDeployOnDebug>
    <GeneratePkgDefFile>true</GeneratePkgDefFile>
  </PropertyGroup>
  <ItemGroup>
    <ProjectCapability Include="CreateVsixContainer" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.VisualStudio.SDK" Version="17.14.40265" ExcludeAssets="runtime" />
    <PackageReference Include="Microsoft.VSSDK.BuildTools" Version="18.5.38461" />
  </ItemGroup>
</Project>

Does it impact my extension?

  • If you create a new extension, you will automatically get full SDK-Style support.
  • Your existing MPF style extension will continue to work should you choose not to migrate. This update adds an official SDK-style option; it doesn’t force a conversion.
  • You can update your project to an SDK-style project file to take advantage of these features.
  • Vsixmanifest files included in SDK-style projects now open by default in the XML editor. The old designer is still available through the ‘Open With’ menu.

Migration In Brief

  • When available, you can do this in the project configuration:
    configuration manager image
  • <VSSDKBuildToolsAutoSetup>true</VSSDKBuildToolsAutoSetup> will setup most sensible defaults for you and reduce the size of your csproj. This will setup options like CreateVsixContainer as true, and the legacy DeployExtension to false.
  • <VsixDeployOnDebug>true</VsixDeployOnDebug> Should be added to your csproj if you will add it to other solution files to ensure the deploy checkbox is set automatically.

Agentic conversion

We’re experimenting with ways of making this as easy as possible for you. To that end, we’ve added an agent skill to the vs-agent-plugins repository you can use in conjunction with the Modernize agent. Let us know whether this workflow is helpful, or if you have a different agentic workflow in mind for extension development.

modernize agent image

Reference projects

Here are a few extensions that are already converted, so you can use them as references.

We want to hear from you!

Please send us feedback and issues you encounter in Developer Community. Thank you, and happy extending!