Skill & Agent Manager
See every AI skill and agent on your machine in one place, and turn them on or off per workspace.
VS Code discovers skills and agents from fixed locations. This extension shows you what is
actually there, what each item does, and lets you activate exactly the ones you want for
the project you are working on.
What it does
- Finds your skills and agents. Scans any folder you point it at, including ones reached
through Windows junctions. A skill is a folder holding a
SKILL.md. An agent is a single
<name>.agent.md file, or any .md file inside an agents folder.
- Explains them. Every row shows a short summary. Hover for the full description, plus the
model and tools an agent declares.
- Enables per item. Activating a skill links its folder into
.github/skills or
~/.copilot/skills. Activating an agent links its file into .github/agents or
~/.copilot/agents. Each item carries its own Workspace or Global scope, so one
location can mix both.
- Locations follow you. A location you add is remembered for every workspace, not just the
one you added it in.
- Flags problems. Broken links and missing files are shown rather than silently skipped,
with the unresolved target named.
- Switches chat models. A Models section lists every chat model this window can reach.
Click one to switch the active chat model. Nothing is written to disk.
How activation works
Enabled skills and agents are linked, not copied, so editing the source takes effect
immediately. Disabling removes only the link. Source files and folders are never modified, and
the extension refuses to remove anything that is not a link to the item you are disabling.
Skills link as directory junctions. Agents are single files, so they link as file symlinks and
fall back to hard links when Windows Developer Mode is off.
Where the links go depends on each item's scope. In workspace scope they go into a folder
inside the current workspace, so each project gets its own set. In user scope they go into
~/.copilot, shared everywhere. With no folder open there is nothing to link into, so workspace
scope is unavailable and items show as Global. See Settings below.
An activated item also appears under the built-in location it was linked into, so you can see
what each folder actually loads. Those mirrored rows are read-only and carry a Global or
Workspace pill; you change them from the location that owns them. A mirror whose source is
not one of your locations can still be unlinked directly, so nothing gets stranded.
The target has to be a folder VS Code scans, otherwise links there load nothing. If you point at
an unscanned folder, or switch the folder off in chat.agentSkillsLocations or
chat.agentFilesLocations, the view says so instead of claiming the item is enabled.
The first time something is linked into a workspace folder, a .gitignore is written there so
the links are not committed. It is skipped if the folder already has a .gitignore or holds
real content.
Getting started
- Open the Skill & Agent Management view in the activity bar.
- Every skill and agent location on this machine is listed automatically, collapsed. Expand one
to see what is inside.
- Tick the items you want, or use the location's overflow menu to enable or disable all of them.
Add any other folder with Add skill root or Add agent root. Folders found automatically
cannot be removed; ones you add yourself can.
Settings
| Setting |
Default |
What it does |
AISkillAgentManager.skillActivationScope |
workspace |
Where enabled skills are linked: the workspace folder below, or ~/.copilot/skills. |
AISkillAgentManager.workspaceSkillFolder |
.github/skills |
Which workspace folder skills are linked into, used when the scope is workspace. |
AISkillAgentManager.skillRoots |
[] |
Skill folders to track the first time the extension runs. Shared by every workspace. |
AISkillAgentManager.agentActivationScope |
workspace |
Where enabled agents are linked: the workspace folder below, or ~/.copilot/agents. |
AISkillAgentManager.workspaceAgentFolder |
.github/agents |
Which workspace folder agents are linked into, used when the scope is workspace. |
AISkillAgentManager.agentRoots |
[] |
Agent folders to track the first time the extension runs. Shared by every workspace. |
AISkillAgentManager.ruleSet |
empty |
Glob rules that auto-disable matching items, read once per workspace. |
Every setting has a skill and an agent form, apart from ruleSet, which covers both and picks
its target with each rule's assetKind.
All of it at once
{
"AISkillAgentManager.skillActivationScope": "workspace",
"AISkillAgentManager.workspaceSkillFolder": ".github/skills",
"AISkillAgentManager.skillRoots": [
"C:\\Files\\Dev\\main\\copilot\\skills"
],
"AISkillAgentManager.agentActivationScope": "user",
"AISkillAgentManager.workspaceAgentFolder": ".github/agents",
"AISkillAgentManager.agentRoots": [
{ "path": "./team-agents", "displayName": "Team agents" }
]
}
That combination keeps skills per project while sharing agents across every workspace, which is
why the two scopes are separate settings.
Choosing a different activation folder
Change workspaceSkillFolder if you already keep your own committed skills in .github/skills
and would rather activation links stayed out of the way. VS Code scans .github/skills,
.agents/skills and .claude/skills by default, so any of those works, as does anything you
add to chat.agentSkillsLocations. The agent equivalents are .github/agents and
.claude/agents.
"AISkillAgentManager.workspaceSkillFolder": ".agents/skills",
"AISkillAgentManager.workspaceAgentFolder": ".claude/agents"
Seeding tracked folders
skillRoots and agentRoots populate the tracked list once per installation. The list is kept
in VS Code's global state and is shared by every workspace, so the setting is read once and
ignored from then on. To change the list afterwards, use Add skill root and Add agent
root in the view; editing the setting will appear to do nothing.
An entry is a path, or an object if you want a label:
"AISkillAgentManager.skillRoots": [
"C:\\Files\\Dev\\main\\copilot\\skills",
"./team-skills",
{ "path": "../shared/skills", "displayName": "Shared skills" }
]
Relative paths resolve against the first open workspace folder. You do not need to list the
folders VS Code already scans; those are discovered automatically. Locations are grouped by how
much control you have over them:
| Group |
What it holds |
| My locations |
Folders you added. Items here are off until you switch them on. |
| Workspace locations |
Folders VS Code scans inside the open repository, such as .github/skills. |
| Global locations |
Folders VS Code scans in your home directory, such as ~/.copilot/skills. They apply to every workspace. |
| Built-in locations |
Skills contributed by an extension. They always load and cannot be switched off. |
Rules
ruleSet auto-disables items whose path matches a glob. Like the seed settings above it is read
once per workspace, after which you edit it through Edit rules in a location's overflow menu.
"AISkillAgentManager.ruleSet": {
"version": 1,
"rules": [
{
"action": "disable",
"assetKind": "both",
"priority": 10,
"match": ["**/experimental/**"],
"exclude": [],
"reason": "Not ready yet"
}
]
}
match globs are relative to the location the item was found in. assetKind is skill,
agent or both, and defaults to skill so older rules keep their original behaviour. Higher
priority wins, and ties go to the first rule listed.
A rule only stops this extension from activating an item. It cannot stop VS Code loading
something that already sits in a scanned folder.
VS Code settings this works with
| Setting |
What it does |
chat.agentSkillsLocations |
Folders VS Code scans for skills. A default folder is dropped by setting it to false; any other path is scanned by setting it to true. |
chat.agentFilesLocations |
The same, for agents. |
chat.useAgentSkills |
Master switch for file-based skills. When off, nothing linked loads. |
These take folder paths, not item names, so VS Code has no per-item switch. Turning one skill or
agent on and off means adding or removing it from a scanned folder, which is what this extension
does for you.
That also means anything sitting directly in a scanned folder loads no matter what, which is a
problem when the folder is committed to a repository. Start managing these skills individually
in a workspace or global location's overflow menu solves it: the folder comes off VS Code's scan
list and everything in it is linked into ~/.copilot/skills instead, so each item gets its own
switch. Nothing in the folder is moved, renamed, or deleted. The false flag is written to
.vscode/settings.json when git is ignoring that file, and to your user settings when it is
committed, so managing a location never changes a tracked file behind your back. Because the
links live in your home directory, an item you leave enabled loads in every workspace.
Stop managing these skills individually reverses it, removes the links, and hands the folder
back to VS Code.
Skills that ship inside an extension are a separate case. They are registered through VS Code's
chatSkills contribution point rather than loaded from a folder, so they always load and cannot
be switched off here. They are listed as managed by the extension.
Development
npm install
npm run compile
npm test
Press F5 to launch an Extension Development Host. Open a folder in that window to exercise
workspace-scoped activation.