Convert Cursor rules to GitHub Copilot instructions
GitHub Copilot reads repository-wide instructions from .github/copilot-instructions.md and path-specific instructions from .github/instructions/*.instructions.md. Path-specific files use an applyTo field with comma-separated globs, which maps cleanly from Cursor's globs.
Copilot has no equivalent of Cursor's description-triggered or manual rules, so those are merged into the repository-wide file with a note, or left out.
Input
Everything runs in your browser. Files are never uploaded.
Output
Converted files appear here. Conversion report
How each rule type converts
| In Cursor rules (.mdc) | Becomes | Result |
|---|---|---|
alwaysApply: true | Section in .github/copilot-instructions.md | Kept |
globs | .github/instructions/<name>.instructions.md with applyTo | Kept |
description only | Section in copilot-instructions.md with an “apply when relevant” note | Adapted |
| Manual rules | Section with an “only when asked” note, or dropped | Adapted |
Steps
- Drop your Cursor rule files into the converter.
- Choose how to handle description-only and manual rules.
- Download and unpack at the repository root; the
.githubpaths are already in place. - Commit the files and check the support notes below for which Copilot surfaces use each file.
Worked example
This output is generated by the same converter you use above, from an illustrative rule set.
Input
.cursor/rules/project.mdc
---
description:
globs:
alwaysApply: true
---
# Project
- Next.js App Router with TypeScript in strict mode.
- Use pnpm. Run `pnpm test` and `pnpm lint` before committing.
- Never commit secrets; read config from environment variables. .cursor/rules/react-components.mdc
---
description: React component conventions
globs: src/components/**/*.tsx
alwaysApply: false
---
- Function components only; no default exports.
- Co-locate tests as `Component.test.tsx`. .cursor/rules/database.mdc
---
description: Read before writing or changing database migrations
globs:
alwaysApply: false
---
- Never edit a migration that has already been applied.
- Every new table needs a primary key and created_at. .cursor/rules/release.mdc
---
description:
globs:
alwaysApply: false
---
- Bump the version in package.json and update CHANGELOG.md. Output
.github/copilot-instructions.md
## Project
- Next.js App Router with TypeScript in strict mode.
- Use pnpm. Run `pnpm test` and `pnpm lint` before committing.
- Never commit secrets; read config from environment variables.
## Database
_Apply when relevant: Read before writing or changing database migrations_
- Never edit a migration that has already been applied.
- Every new table needs a primary key and created_at.
## Release
_Apply only when explicitly asked to._
- Bump the version in package.json and update CHANGELOG.md. .github/instructions/react-components.instructions.md
---
applyTo: "src/components/**/*.tsx"
---
- Function components only; no default exports.
- Co-locate tests as `Component.test.tsx`. Report for this example
- kept Project: Merged into copilot-instructions.md (always on).
- adapted Database: copilot-instructions.md has no way to mark a rule as agent-decided, so it was inlined with a note: Apply when relevant: Read before writing or changing database migrations
- adapted Release: copilot-instructions.md has no way to mark a rule as manual, so it was inlined with a note: Apply only when explicitly asked to.
- kept React Components: Written to .github/instructions/react-components.instructions.md with `applyTo` (`src/components/**/*.tsx`).
Things to watch for
- Support differs by surface. GitHub's support matrix shows path-specific instruction files are not used by Copilot Chat on GitHub.com or by code review in VS Code, while the repository-wide file is used almost everywhere.
excludeAgentis optional and acceptscode-revieworcloud-agentif you want a file used by only one of them.- Copilot's cloud agent and VS Code chat can also read AGENTS.md. If you use several tools, AGENTS.md may be the simpler shared file.
FAQ
Can Copilot use .cursorrules directly?
No. GitHub's docs list copilot-instructions.md, .instructions.md files and agent files (AGENTS.md, CLAUDE.md, GEMINI.md) as sources; Cursor's files are not on the list.
How do I write multiple globs in applyTo?
Separate them with commas inside one string, for example "**/*.ts,**/*.tsx". The converter does this for you.