Guide for creating effective GitHub Copilot skills (.github/skills/) in this repository. Use when creating a new skill, updating an existing skill, or when asked about skill structure, format, or best practices for the vscode-documentdb project.
npx skills add https://github.com/microsoft/skills --skill skill-creator
Create and maintain skills in .github/skills/ that extend GitHub Copilot's capabilities with project-specific knowledge.
Skills are SKILL.md files that provide specialized, procedural knowledge that Copilot doesn't inherently have. They turn Copilot from a general assistant into a domain expert for specific tasks in this codebase.
Skills provide:
.github/skills/
└── skill-name/
├── SKILL.md (required — frontmatter + instructions)
└── references/ (optional — detailed docs, loaded on demand)
---
name: my-skill-name
description: What this skill does and WHEN to use it. Include trigger words and scenarios. This is the primary mechanism for Copilot to decide whether to load the skill body.
---
# Skill Title
Concise instructions for using this skill.
## When to Use
- Bullet list of triggering scenarios
## Core Content
(workflow, patterns, examples)
After creating the SKILL.md, register it in .github/copilot-instructions.md under the <skills> section:
<skill>
<name>my-skill-name</name>
<description>Same or similar description as in SKILL.md frontmatter</description>
<file>${workspaceFolder}\.github\skills\my-skill-name\SKILL.md</file>
</skill>
> Note: Replace ${workspaceFolder} with the absolute path to the repository root on your machine (e.g. \home\user\repos\vscode-documentdb). VS Code resolves skill file paths at runtime and currently requires absolute paths.
Copilot reads skill metadata (name + description) to decide when to trigger. The SKILL.md body is loaded only after triggering.
The context window is shared with conversation history, other instructions, and user requests. Challenge each paragraph: "Does Copilot already know this?" and "Does this justify its token cost?"
Use a three-level loading system:
For skills with multiple variants or extensive reference material, keep the core workflow in SKILL.md and move details to references/:
## Advanced Topics
- **Detailed format spec**: See [FORMAT.md](./FORMAT.md)
- **Migration patterns**: See [references/migration.md](./references/migration.md)
| Freedom Level | When | Example |
| ----------------------------------- | ------------------------- | ---------------------------- |
| High (text guidance) | Multiple valid approaches | Architecture recommendations |
| Medium (patterns with examples) | Preferred pattern exists | tRPC router creation |
| Low (exact steps) | Fragile, error-prone | Release note formatting |
Identify concrete scenarios the skill addresses:
For each scenario, determine:
.github/skills/{skill-name}/SKILL.mdname and description (description is the trigger — be comprehensive about when to use).github/copilot-instructions.md.github/copilot-instructions.md and .github/instructions/).github/instructions/ files| Skill | Purpose |
| --------------------------- | ------------------------------------------------------ |
| writing-release-notes | Release notes and changelog generation |
| accessibility-aria-expert | Accessibility issues in React/Fluent UI webviews |
| webview-trpc-messaging | tRPC communication between extension host and webviews |
---
name: my-pattern
description: Implements the XYZ pattern for this codebase. Use when creating new XYZ instances, modifying existing XYZ behavior, or debugging XYZ-related issues.
---
# XYZ Pattern
## When to Use
- Creating a new XYZ
- Modifying XYZ behavior
- Debugging XYZ issues
## Pattern
\`\`\`typescript
// core pattern example
\`\`\`
## Common Pitfalls
- Don't do X because Y
- Always do Z when W
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.
Build agentic applications with GitHub Copilot SDK. Use when embedding AI agents in apps, creating custom tools, implementing streaming responses, managing sessions, connecting to MCP servers, or creating custom agents. Triggers on Copilot SDK, GitHub SDK, agentic app, embed Copilot, programmable agent, MCP server, custom agent.
Coding Agent Session Search - unified CLI/TUI to index and search local coding agent history from Claude Code, Codex, Gemini, Cursor, Aider, ChatGPT, Pi-Agent, Factory, and more. Purpose-built for AI agent consumption with robot mode.
Destructive Command Guard - High-performance Rust hook for Claude Code that blocks dangerous commands before execution. SIMD-accelerated, modular pack system, whitelist-first architecture. Essential safety layer for agent workflows.
Makepad UI development skills for Rust apps: setup, patterns, shaders, packaging, and troubleshooting.
Secure environment variable management ensuring secrets are never exposed in Claude sessions, terminals, logs, or git commits
Prompt for generating an AGENTS.md file for a repository
Take microsoft/skill-creator from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.