prompt-file-design
VS Code prompt file (.prompt.md) format specification and design principles. Use when creating prompt files, designing reusable prompts, or reviewing prompt templates.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Prompt File Design
Two-part reference for VS Code .prompt.md files: File Format Specification (syntax, variables, runtime behavior) and Design Principles (philosophy, quality tests, anti-patterns). Based on official VS Code documentation, GitHub best practices, and the three-layer agentic model.
Scope boundary: This skill covers .prompt.md file format and design. For prompt content patterns (XML sections, guards), apply prompting-guide. For context management within prompts, apply prompt-context-efficiency.
Part 1: File Format Specification
YAML Frontmatter & Variables
---
name: prompt-name # Used after typing / in chat
description: "One-line purpose" # Shown in slash command menu
agent: "agent-name" # Optional: which agent executes
model: "Claude Sonnet 4.5" # Optional: override default model
tools: ['read', 'search'] # Optional: restrict tools
---
Body Components
| Component | Syntax | Purpose |
|---|---|---|
| Variables | ${input:varName:placeholder} |
User-provided parameters |
| Selection | ${selection} |
Currently selected code |
| Current file | ${file} |
Active editor file |
| Workspace | ${workspaceFolder} |
Root workspace path |
| File references | [guidelines](../path/to/file.md) |
Link to referenced files (loaded as context) |
| Tool references | #tool:githubRepo |
Include specific tool context |
Dual-Runtime Compatibility
Prompt files can serve both VS Code Copilot (via agent: routing) and Claude Code (via .claude/commands/ symlink) from a single source file.
Architecture
.github/prompts/plan.prompt.md ← Source of truth
↓ (read by VS Code) ↓ (symlinked)
VS Code Copilot agent routing .claude/commands/ → ../.github/prompts/
Runtime Behavior Matrix
| File Section | VS Code Copilot | Claude Code |
|---|---|---|
YAML frontmatter (--- block) |
Consumed — routes to agent, picks model | Ignored — skipped entirely |
${input:varName:prompt} |
Rendered as UI input widget | Literal text — harmless, ignored |
| Body (markdown content) | Sent to model as additive context (agent has full methodology) | Primary instruction — this IS the command |
$ARGUMENTS |
Literal text — harmless, ignored | Interpolated with user's input |
Enrichment Pattern
VS Code prompts that only contain ${input:...} are "thin launchers" — they route to an agent that has the full methodology. Claude Code has no agent routing, so thin prompts produce poor results.
Solution: Enrich the body with a compressed summary of the agent's methodology. This serves as additive reinforcement in VS Code and primary instruction in Claude Code.
---
name: plan
agent: "plan"
description: "Create an implementation plan"
---
${input:request:What would you like to plan?}
## Context
You are an **Implementation Planner**. Create detailed, actionable plans without modifying code.
### Key Rules
- {3-5 agent-specific constraints, not generic project rules}
- Read `docs/DOCUMENTATION-GUIDE.md` to find relevant docs
- Use `make` targets — never raw `npm`, `poetry`, `pip`, or `python` commands
### Methodology
1. **{Phase}** — {compressed description}
2. **{Phase}** — {compressed description}
3. **{Phase}** — {compressed description}
### Output
{What to produce — format expectations}
### Skills
Apply these skills from `.github/skills/`: {skill1}, {skill2}
$ARGUMENTS
Key Principles
- Header unchanged — VS Code frontmatter stays exactly as-is
- Body = compressed agent — NOT a copy, but enough for standalone operation (~20-30 lines)
-
Both variable systems present —
${input:...}(VS Code) and$ARGUMENTS(Claude Code) coexist harmlessly -
Single source of truth —
.github/prompts/is canonical;.claude/commands/is a symlink - Still under 50 lines — enriched prompts should stay within the size limit
Symlink Setup
# Directory symlink — zero-maintenance on new prompts
cd .claude && ln -s ../.github/prompts commands
Claude Code invokes as /project:plan.prompt "add auth module". The .prompt suffix in the command name is a cosmetic tradeoff for zero-maintenance directory symlink.
Part 2: Design Principles
For design philosophy, quality tests, prompt types (routing vs task), templates, and anti-patterns, see design-principles.md.
Sources
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-03-11
- Index updated
- 2026-03-11
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!