make-instructions

$npx mdskill add dotnet/efcore/make-instructions

This skill helps you scaffold VS Code file-based instructions (`.instructions.md` files) that provide background knowledge to Copilot about specific parts of the codebase. These files are applied automatically based on glob patterns or semantic matching, giving Copilot domain-specific context when working on matching files.

SKILL.md

.github/skills/make-instructionsView on GitHub ↗
---
name: make-instructions
description: 'Create VS Code file-based instructions (.instructions.md files). Use when asked to create, scaffold, or add file-based instructions for Copilot. Generates .instructions.md with YAML frontmatter and background knowledge content.'
---

# Create File-Based Instructions

This skill helps you scaffold VS Code file-based instructions (`.instructions.md` files) that provide background knowledge to Copilot about specific parts of the codebase. These files are applied automatically based on glob patterns or semantic matching, giving Copilot domain-specific context when working on matching files.

## When Not to Use

- Setting project-wide instructions — use `.github/copilot-instructions.md` or `AGENTS.md` instead
- Creating reusable agent workflows with structured steps — use Agent Skills instead
- Adding instructions that need to be invokable on demand — use Agent Skills instead

## Workflow

### Step 1: Investigate the topic

Build understanding of the area the instructions should cover. Identify:

- [ ] What files or file patterns the instructions apply to
- [ ] Key conventions, patterns, or architectural rules for that area
- [ ] Common pitfalls that Copilot should avoid
- [ ] Non-obvious domain knowledge that isn't discoverable from code alone

If the scope is unclear or overlaps with existing instructions, ask the user for clarification.

### Step 2: Choose the file location

Instructions files go in `.github/instructions/` by default. Pick a descriptive filename:

```
.github/instructions/<topic>.instructions.md
```

Examples: `csharp-style.instructions.md`, `query-pipeline.instructions.md`, `test-conventions.instructions.md`

### Step 3: Generate the file with YAML frontmatter

Create the file with the required YAML frontmatter header:

```yaml
---
name: '<Display Name>'              # Optional. Display name in the UI. Defaults to filename.
description: '<Short description>'  # Optional. Shown on hover. Also used for semantic matching.
applyTo: '<glob pattern>'           # Optional. Glob pattern relative to workspace root. Omit to require manual attachment or rely on semantic matching only.
---
```

Common `applyTo` patterns:

- `**/*.cs` — all C# files
- `test/**` — files under a specific folder

### Step 4: Write the body content

Write concise, actionable Markdown content. Follow these principles:

- **Be concise** — instructions share the context window; only include what the agent wouldn't already know
- **Be specific** — use concrete rules, not vague guidance
- **Include examples** — short code snippets showing preferred vs. avoided patterns are very effective
- **Explain why** — when a rule exists for a non-obvious reason, state it so the agent applies it correctly in edge cases
- **Skip linter-enforced rules** — don't repeat what formatters and linters already catch
- **Use Markdown links** to reference specific files or URLs for additional context

Recommended sections (adapt as needed):

1. **<Title>** — one-line heading describing the domain
2. **Context paragraph** — brief explanation of what this area is and why these rules matter
3. **Guidelines / Conventions** — bullet list of concrete rules
4. **Examples** — short code blocks showing do/don't patterns (optional)
5. **Key Files** — table of important files for orientation (optional)
6. **Common Pitfalls** — traps to avoid (optional)

### Step 5: Validate

After creating the file, verify:

- [ ] File is in `.github/instructions/` (or a configured instructions folder)
- [ ] Filename ends with `.instructions.md` and only contains lowercase letters, numbers, and hyphens
- [ ] YAML frontmatter is valid
- [ ] `applyTo` glob matches the intended files
- [ ] Content is concise (aim for under 500 lines or 5000 tokens) — long instructions dilute effectiveness
- [ ] No secrets, tokens, or internal URLs included
- [ ] Instructions don't duplicate what's already in `.github/copilot-instructions.md` or under `.agents/skills/`

## Common Pitfalls

| Pitfall | Solution |
|---------|----------|
| `applyTo` too broad | Use specific globs; `**` applies to every file and wastes context |
| Missing `applyTo` | Without it, instructions won't auto-apply — they require manual attachment or semantic matching via `description` |
| Vague guidance | Replace "write good tests" with something like "add both positive and negative test cases using `[ConditionalFact]` methods" |

More from dotnet/efcore

SkillDescription
change-trackingImplementation details for EF Core change tracking. Use when changing InternalEntityEntry, ChangeDetector, SnapshotFactoryFactory, or related entity state, snapshot, or property accessor code.
cosmos-providerImplementation details for the EF Core Azure Cosmos DB provider. Use when changing Cosmos-specific code.
make-custom-agentCreate custom GitHub Copilot agents. Use when asked to create, scaffold, or configure a custom agent, declarative agent, or @-invokable chat participant for GitHub Copilot.
make-github-actions-workflowCreate GitHub Actions workflows for CI, automation, or PR management. Use when asked to create, scaffold, or add a GitHub Actions workflow (.yml file under .github/workflows/).
make-skillCreate new Agent Skills for GitHub Copilot. Use when asked to create, scaffold, or add a skill. Generates SKILL.md with frontmatter, directory structure, and optional resources.
migrationsImplementation details for EF Core migrations. Use when changing MigrationsSqlGenerator, model diffing, migration operations, HistoryRepository, the Migrator or related classes.
model-buildingImplementation details for EF Core model building. Use when changing ConventionSet, ModelBuilder, IConvention implementations, ModelRuntimeInitializer, RuntimeModel, or related classes.
query-pipelineImplementation details for EF Core LINQ query translation, SQL generation, and bulk operations (ExecuteUpdate/ExecuteDelete). Use when changing expression visitors, SqlExpressions, QuerySqlGenerator, ShaperProcessingExpressionVisitor, UpdateExpression, DeleteExpression, or related classes.
run-apichiefRun ApiChief in the EF Core repo to emit baselines, summaries, deltas, review files, or breaking-change checks. Use when refreshing `*.baseline.json`, preparing API review artifacts, or validating API changes.
scaffoldingImplementation details for EF Core scaffolding (reverse engineering). Use when changing ef dbcontext scaffold pipeline implementation, database schema reading, CSharpModelGenerator, or related classes.