The past week has brought a wave of updates to VS Codeâs Copilot experience, with major improvements to how agents work together, a new skills system, deeper Claude integration, and significant terminal enhancements. Hereâs what you need to knowâwith concrete examples you can try today.
For those who want to dive deeper into the implementation details, Iâve included links to the relevant GitHub pull requests and issues throughout this post.
Subagents Get Smarter (and Faster)
Two significant changes make subagents far more practical for complex workflows.
Related: Issue #274630 - Parallel subagent execution
Parallel Execution
Previously, if you kicked off multiple runSubagent calls, theyâd run one after another. Now they can run simultaneously when tasks are independent, dramatically reducing wait times for research and code review operations.
Example prompt:
Research the best approaches for:
1. Rate limiting in our REST API
2. Caching strategies for our database queries
3. Error handling patterns for our microservices
Use a subagent for each topic and compile the findings.
With parallel execution, all three research subagents run concurrently instead of sequentiallyâcutting total wait time significantly.
Fine-Grained Tool Access
You can now constrain which tools a subagent can access. This is critical for safety-conscious workflows where you want AI help without the risk of unintended changes.
Creating a custom agent with restricted tools:
Create a file at .github/agents/github-researcher.md:
---
name: github-researcher
description: Research agent with access to GitHub. Use for searching issues,
reading documentation, and gathering information. Cannot edit files.
tools: ['read', 'search', 'web', 'github/*']
argument-hint: The research task to complete
---
You are a research assistant with read-only access to the codebase and GitHub.
Your capabilities:
- Search and read files in the repository
- Search GitHub issues and pull requests
- Fetch web documentation
You cannot:
- Edit or create files
- Run terminal commands
- Make commits
When researching, provide citations and links to sources.
Now you can ask: âUse a subagent to find all issues assigned to me about authentication and summarize themâ â and the subagent will be limited to read-only operations.
If youâve used Claude Codeâs subagent system, youâll recognize this patternâitâs similar to how Claude Code handles skills and subagents Claude Code customization guide: CLAUDE.md, skills, subagents explained Compare CLAUDE.md, slash commands, subagents, and skills in Claude Code. Learn when to use each with practical Dexie.js examples. with tool restrictions.
Control Subagent Availability
Use the infer attribute to control whether an agent can be used as a subagent:
---
name: dangerous-deployer
description: Handles production deployments
tools: ['execute', 'edit', 'read']
infer: false # This agent cannot be auto-invoked as a subagent
---
Skills Are Now a First-Class Feature
Skills are now enabled by default for all users. Theyâre folders containing instructions and resources that Copilot loads on-demand when relevant to your task.
Related PRs:
- Issue #286237 - Custom agent improvements
- Issue #286238 - Skill lookup enhancements
- PR #3082 - Implement agent using CustomAgentProvider API
Creating Your First Skill
Create a directory structure:
SKILL.md:
---
name: webapp-testing
description: Guide for testing web applications using Playwright.
Use this when asked to create or run browser-based tests.
---
# Web Application Testing with Playwright
When creating tests for this project, follow these patterns:
## Test Structure
- Use `describe` blocks for feature groupings
- Use `test` for individual test cases
- Always include setup and teardown
## Assertions
- Prefer `toBeVisible()` over `toHaveCount(1)`
- Use `waitFor` for async operations
- Include accessibility checks
## Example Template
Reference the [test template](./test-template.js) for the standard structure.
## Naming Convention
- Test files: `*.spec.ts`
- Test descriptions: "should [expected behavior] when [condition]"
Now when you ask âWrite Playwright tests for the login formâ, Copilot automatically loads this skill and follows your projectâs testing conventions.
Loading Skills from Custom Locations
For teams sharing skills across repos, use the new setting:
{
"chat.agentSkillsLocations": [
".github/skills",
"~/shared-skills",
"/team/copilot-skills"
]
}
Extension-Contributed Skills
Extensions can now contribute skills via their package.json:
{
"contributes": {
"copilotSkills": [
{
"name": "docker-compose",
"description": "Helps create and debug Docker Compose configurations",
"path": "./skills/docker-compose"
}
]
}
}
Or dynamically via the new API:
vscode.chat.registerSkill({
name: 'dynamic-skill',
description: 'A skill registered at runtime',
async getInstructions(context) {
// Return context-aware instructions
return generateInstructionsFor(context.workspace);
}
});
Instruction Files Work Everywhere
Instruction files now apply to non-coding tasks like code exploration, architecture explanation, and documentation. #287152
Before: Your .github/copilot-instructions.md was ignored when you asked âExplain how authentication works in this codebaseâ
After: Those instructions are now read for all codebase-related work.
This aligns with the progressive disclosure approach Stop Bloating Your CLAUDE.md: Progressive Disclosure for AI Coding Tools AI coding tools are statelessâevery session starts fresh. The solution isn't cramming everything into CLAUDE.md, but building a layered context system where learnings accumulate in docs and specialized agents load on-demand. where context is loaded on-demand rather than crammed into a single file.
Example copilot-instructions.md:
# Project Context
This is a microservices architecture with:
- API Gateway (Node.js/Express)
- Auth Service (Go)
- User Service (Python/FastAPI)
- Shared message queue (RabbitMQ)
When explaining code:
- Always mention which service a file belongs to
- Reference the architecture diagram at docs/architecture.md
- Note any cross-service dependencies
Now âHow does user registration work?â will include this context automatically.
Claude Code Gets Extended Thinking
The Claude Code integration now supports extended thinking, showing Claudeâs chain-of-thought reasoning in a collapsible section. #287658
Related: Issue #266962 - Claude agent support, #287933 - Model picker support
What It Looks Like
When you ask Claude to solve a complex problem, youâll see:
âź Thinking...
Let me analyze the codebase structure first. I see there are
three main modules: auth, api, and database. The user is asking
about the authentication flow, so I should trace the request
from the API gateway through to the auth service...
The JWT validation happens in middleware/auth.ts, but the token
generation is in services/auth/token.go. I need to explain how
these connect via the shared Redis cache...
Here's how authentication works in your codebase:
[Final response]
Configuration
Enable/disable thinking display in settings:
{
"github.copilot.chat.claude.showThinking": true
}
Model Picker
You can now select which Claude model to use:
- Open the Chat view
- Click the model selector dropdown
- Choose from available Claude models (Sonnet, Opus, etc.)
Different models offer different speed/capability tradeoffsâuse faster models for simple tasks, more capable models for complex reasoning.
Terminal Gets Major Upgrades
The integrated terminal received significant keyboard handling improvements this release, with two new protocol implementations.
Related PRs:
- PR #286897 - xterm.js 6.1.0 with kitty keyboard and win32-input-mode
- Issue #286809 - Kitty keyboard protocol support
- Issue #286896 - Win32 input mode support
- xterm.js PR #5600 - Implement kitty keyboard protocol (upstream)
Kitty Keyboard Protocol (CSI u)
VS Codeâs terminal now supports the kitty keyboard protocol, enabling more sophisticated keyboard input handling. This unlocks previously unavailable key combinations and provides better support for terminal applications that use this modern standard.
Important: This feature is disabled by default as itâs experimental. Enable it in settings:
{
"terminal.integrated.enableKittyKeyboardProtocol": true
}
The protocol improves handling of modifiers, key events, repeat detection, and escape sequencesâparticularly useful if you use tools like fish shell, neovim, or other terminal applications that support CSI u.
Win32 Input Mode
For Windows users, the terminal now supports win32-input-mode, improving keyboard handling compatibility with Windows console applications. VT sequences alone canât send everything that Windows console programs expect (encoded as win32 INPUT_RECORDs), so this mode bridges that gap.
Also disabled by default. Enable with:
{
"terminal.integrated.enableWin32InputMode": true
}
Terminal Command Output Streams Inline
When using Copilot in agent mode, terminal command output now streams inline inside the Chat view instead of requiring you to switch to the terminal panel. #257468 The output auto-expands on command execution and collapses on success #287664âkeeping you focused on the conversation flow.
Terminal Timeout Parameter
The terminal tool now supports a timeout parameter to control how long commands run before timing out. #286598 This prevents unnecessary polling and gives you more control over long-running operations.
Terminal Command Sandboxing
Terminal command sandboxing is now available for macOS and Linux #277286, adding an extra layer of security when running commands through the terminal tool.
Syntax Highlighting in Confirmation Dialogs
The terminal tool now presents Python, Node.js, and Ruby commands with syntax highlighting in the confirmation dialog #287772, #287773, #288360âmaking it easier to review commands before execution.
Expanded Auto-Approved Commands
More commands are now automatically approved for execution:
dirin PowerShell #288431sed -iwhen editing files within the workspace #288318od,xxd, and safedockercommands #287652
SGR 221/222 Escape Sequences
The terminal now supports SGR 221 and 222 escape sequences #286810, allowing independent control of bold and faint text attributes for more granular formatting.
MCP Gets More Powerful
Model Context Protocol continues to evolve with significant new capabilities.
Dynamic Context Updates
MCP apps now support model context update methods, enabling servers to update the context model dynamically. #289473 This means MCP servers can push new context to your chat sessions without requiring a refresh.
Custom Package Registries
Added support for registryBaseUrl in MCP packages #287549, allowing teams to use private package registries for their MCP servers.
Built-in MCP Apps Support
Built-in support for MCP Apps enables servers to provide custom UI for tool invocation. #260218 This opens the door for richer, more interactive MCP experiences beyond simple text-based tools.
Quality of Life Improvements
Codex Agent in Dropdown
The OpenAI Codex agent now appears directly in the agents dropdown #289040 for quick access:
Agents âź
âââ Local Agent
âââ Background Agent
âââ Cloud Agent
âââ Codex Agent â New!
New MCP Server Command
A new workbench.mcp.startServer command #283959 lets you programmatically start specific or all MCP servers to discover their tools. This is useful for automation scenarios where you need to ensure servers are running before invoking their tools.
The /clear Command Archives Sessions
The /clear command now archives the current session and starts a new one automatically #285854âno more losing your chat history when you want a fresh start.
New Local Chat Command
A new âNew Local Chatâ command #288467 lets you start a local chat session quickly.
Chat Session Imports
You can now import a chat session directly into the Chat view #283954, instead of only being able to open it in a new editor tab. This makes it easier to continue conversations from exported sessions.
Chat Session Exports with MCP Info
Exported sessions now include MCP server What Is the Model Context Protocol (MCP)? How It Works Learn how MCP (Model Context Protocol) standardizes AI tool integration, enabling LLMs to interact with external services, databases, and APIs through a universal protocol similar to USB-C for AI applications. configuration #283945:
{
"session": {
"messages": [...],
"mcpServers": [
{
"name": "github",
"url": "https://mcp.github.com",
"tools": ["search_issues", "get_pr", "list_repos"]
}
]
}
}
This makes sessions reproducibleâshare them with teammates and they can recreate your exact setup.
Multi-Select in Sessions View
Select multiple chat sessions with Cmd/Ctrl+Click #288448:
- Archive all selected
- Mark all as read
- Batch delete
Additional session management improvements include âMark All Readâ, âArchive Allâ, and âUnarchive Allâ actions in context menus #288147, and increased locally persisted chat sessions #283123.
Resizable Sessions Sidebar
You can now resize the sessions sidebar in the Chat view by dragging the separator #281258, similar to how terminal tabs work.
Extension Context Tooltips
Hover over extension-contributed context items to see additional information about what they provide. #280658
Accessible View Streams Thinking Content
The Accessible View now dynamically streams thinking content #289223, making Claudeâs chain-of-thought reasoning accessible to screen reader users in real-time.
Multi-Model Selection in Language Models Editor
Select multiple models in the Language Models editor and toggle their visibility at once #287511. Enterprise and Business users also get access to the Manage Models action #287814.
Editor & Language Improvements
Improved Shebang Detection
VS Code now recognizes Deno, Bun, and other modern JavaScript runtimes #287819 for better language detection when opening scripts.
Better Ghost Text Visibility
Improved visibility of ghost text in next edit suggestions #284517, making it easier to distinguish AI suggestions from regular text.
Double-Click Selects Block Content
Double-clicking immediately after a curly brace or bracket now selects the content inside it #9123âa small but impactful change for manipulating code blocks.
Match File Path Case Toggle
A new âMatch File Path Caseâ toggle in the Search viewâs âfiles to includeâ input #10633 lets you control whether file paths and glob patterns match case-sensitively.
Bracket Match Foreground Color
New editorBracketMatch.foreground theme color #85775 enables customization of matched bracket text color.
Parallel Build Tasks
Dependent build tasks can now run in parallel #288439, improving build performance for projects with multiple independent compilation steps.
Git Delete File Command
A new âGit: Delete Fileâ command #111767 performs git rm on the current file directly from the command palette.
Try It Today
Hereâs a quick workflow to test the new features:
- Create a custom agent at
.github/agents/researcher.mdwith restricted tools - Create a skill at
.github/skills/my-skill/SKILL.md - Ask Copilot: âWhat skills and subagents do you have available?â
- Test parallel execution: âUse subagents to research three different topics simultaneouslyâ
- Enable Claude thinking and ask a complex architecture question
Looking Ahead
These updates signal a clear direction: Copilot is evolving from a single-agent assistant into a coordinated multi-agent system. The combination of parallel subagents, constrained tool access, and shareable skills creates a foundation for sophisticated automated workflows.
If youâre interested in building your own agent systems, check out Building Your Own Coding Agent from Scratch Building Your Own Coding Agent from Scratch A practical guide to creating a minimal Claude-powered coding assistant in TypeScript. Start with a basic chat loop and progressively add tools until you have a fully functional coding agent in about 400 lines. for a hands-on guide to the underlying patterns.
Key settings to know:
{
"chat.useAgentSkills": true,
"chat.agentSkillsLocations": [".github/skills"],
"chat.customAgentInSubagent.enabled": true,
"github.copilot.chat.claude.showThinking": true,
"terminal.integrated.enableKittyKeyboardProtocol": true,
"terminal.integrated.enableWin32InputMode": true
}
The ecosystem is about to get a lot more interesting.
Related Pull Requests & Issues
For those who want to dig into the implementation details:
Agent & Skills
- #274630 - Parallel subagent execution
- #280704 - Agents define allowed subagents
- #288480 - Skills enabled by default
- #288483 - Extension-contributed skills via manifest
- #288486 - Dynamic skills API
- #282738 - Skills from custom locations
Claude Integration
- #287658 - Extended thinking support
- #287933 - Model picker for Claude
- #266962 - Claude agent support
Terminal
- #286809 - Kitty keyboard protocol
- #286896 - Win32 input mode
- #286810 - SGR 221/222 escape sequences
- #257468 - Terminal output streams inline
- #287664 - Auto-expand/collapse terminal output
- #277286 - Terminal sandboxing for macOS/Linux
- #286598 - Terminal timeout parameter
- #287772 - Python syntax highlighting in confirmations
- xterm.js #5600 - Kitty keyboard protocol
MCP
- #289473 - Dynamic context updates
- #287549 - Custom package registries
- #260218 - Built-in MCP Apps
- #283959 - startServer command
- #283945 - MCP info in session exports
Chat & Sessions
- #285854 - /clear archives sessions
- #288467 - New Local Chat command
- #283954 - Import chat sessions
- #288448 - Multi-select in sessions
- #281258 - Resizable sessions sidebar
- #283123 - Increased persisted sessions
- #289223 - Accessible View streams thinking
Editor & Other
- #287819 - Improved shebang detection
- #284517 - Ghost text visibility
- #9123 - Double-click selects block content
- #10633 - Match file path case toggle
- #288439 - Parallel build tasks
- #111767 - Git Delete File command
Iteration Plan
These features are rolling out in VS Code Insiders (1.109) now, with stable release expected in early February. Note that some features like kitty keyboard protocol and win32-input-mode are disabled by default and require manual opt-in.