migrate-to-skills
Skill 名称: migrate-to-skills
调用方式: /migrate-to-skills(仅手动调用)
用途: 将 Rules 和斜杠命令迁移到 Skills 格式
此 Skill 设置了 disable-model-invocation: true,意味着 Agent 不会自动调用它。你需要在对话中显式输入 /migrate-to-skills 来使用。
Skill 描述
将”应用智能”类型的 Cursor Rules(.cursor/rules/.mdc)和斜杠命令(.cursor/commands/.md)转换为 Agent Skills 格式(.cursor/skills/)。当用户想要将 Rules 或命令迁移到 Skills、将 .mdc Rules 转换为 SKILL.md 格式,或将命令整合到 Skills 目录时使用。
完整 Skill 文档
以下是该技能的完整 SKILL.md 内容:
---
name: migrate-to-skills
description: Convert 'Applied intelligently' Cursor rules (.cursor/rules/*.mdc) and slash commands (.cursor/commands/*.md) to Agent Skills format (.cursor/skills/). Use when the user wants to migrate rules or commands to skills, convert .mdc rules to SKILL.md format, or consolidate commands into the skills directory.
disable-model-invocation: true
---
# Migrate Rules and Slash Commands to Skills
Convert Cursor rules ("Applied intelligently") and slash commands to Agent Skills format.
**CRITICAL: Preserve the exact body content. Do not modify, reformat, or "improve" it - copy verbatim.**
## Locations
| Level | Source | Destination |
|-------|--------|-------------|
| Project | `{workspaceFolder}/**/.cursor/rules/*.mdc`, `{workspaceFolder}/.cursor/commands/*.md` |
| User | `~/.cursor/commands/*.md` |
Notes:
- Cursor rules inside the project can live in nested directories. Be thorough in your search and use glob patterns to find them.
- Ignore anything in ~/.cursor/worktrees
- Ignore anything in ~/.cursor/skills-cursor. This is reserved for Cursor's internal built-in skills and is managed automatically by the system.
## Finding Files to Migrate
**Rules**: Migrate if rule has a `description` but NO `globs` and NO `alwaysApply: true`.
**Commands**: Migrate all - they're plain markdown without frontmatter.
## Conversion Format
### Rules: .mdc → SKILL.md
```markdown
# Before: .cursor/rules/my-rule.mdc
---
description: What this rule does
globs:
alwaysApply: false
---
# Title
Body content...
```
```markdown
# After: .cursor/skills/my-rule/SKILL.md
---
name: my-rule
description: What this rule does
---
# Title
Body content...
```
Changes: Add `name` field, remove `globs`/`alwaysApply`, keep body exactly.
### Commands: .md → SKILL.md
```markdown
# Before: .cursor/commands/commit.md
# Commit current work
Instructions here...
```
```markdown
# After: .cursor/skills/commit/SKILL.md
---
name: commit
description: Commit current work with standardized message format
disable-model-invocation: true
---
# Commit current work
Instructions here...
```
Changes: Add frontmatter with `name` (from filename), `description` (infer from content), and `disable-model-invocation: true`, keep body exactly.
**Note:** The `disable-model-invocation: true` field prevents the model from automatically invoking this skill. Slash commands are designed to be explicitly triggered by the user via the `/` menu, not automatically suggested by the model.
## Notes
- `name` must be lowercase with hyphens only
- `description` is critical for skill discovery
- Optionally delete originals after verifying migration works
### Migrate a Rule (.mdc → SKILL.md)
1. Read the rule file
2. Extract the `description` from the frontmatter
3. Extract the body content (everything after the closing `---` of the frontmatter)
4. Create the skill directory: `.cursor/skills/{skill-name}/` (skill name = filename without .mdc)
5. Write `SKILL.md` with new frontmatter (`name` and `description`) + the EXACT original body content (preserve all whitespace, formatting, code blocks verbatim)
6. Delete the original rule file
### Migrate a Command (.md → SKILL.md)
1. Read the command file
2. Extract description from the first heading (remove `#` prefix)
3. Create the skill directory: `.cursor/skills/{skill-name}/` (skill name = filename without .md)
4. Write `SKILL.md` with new frontmatter (`name`, `description`, and `disable-model-invocation: true`) + blank line + the EXACT original file content (preserve all whitespace, formatting, code blocks verbatim)
5. Delete the original command file
**CRITICAL: Copy the body content character-for-character. Do not reformat, fix typos, or "improve" anything.**
## Workflow
If you have the Task tool available:
DO NOT start to read all of the files yourself. That function should be delegated to the subagents. Your job is to dispatch the subagents for each category of files and wait for the results.
1. [ ] Create the skills directories if they don't exist (`.cursor/skills/` for project, `~/.cursor/skills/` for user)
2. Dispatch three fast general purpose subagents (NOT explore) in parallel to do the following steps for project rules (pattern: `{workspaceFolder}/**/.cursor/rules/*.mdc`), user commands (pattern: `~/.cursor/commands/*.md`), and project commands (pattern: `{workspaceFolder}/**/.cursor/commands/*.md`):
I. [ ] Find files to migrate in the given pattern
II. [ ] For rules, check if it's an "applied intelligently" rule (has `description`, no `globs`, no `alwaysApply: true`). Commands are always migrated. DO NOT use the terminal to read files. Use the read tool.
III. [ ] Make a list of files to migrate. If empty, done.
IV. [ ] For each file, read it, then write the new skill file preserving the body content EXACTLY. DO NOT use the terminal to write these files. Use the edit tool.
V. [ ] Delete the original file. DO NOT use the terminal to delete these files. Use the delete tool.
VI. [ ] Return a list of all the skill files that were migrated along with the original file paths.
3. [ ] Wait for all subagents to complete and summarize the results to the user. IMPORTANT: Make sure to let them know if they want to undo the migration, to ask you to.
4. [ ] If the user asks you to undo the migration, do the opposite of the above steps to restore the original files.
If you don't have the Task tool available:
1. [ ] Create the skills directories if they don't exist (`.cursor/skills/` for project, `~/.cursor/skills/` for user)
2. [ ] Find files to migrate in both project (`.cursor/`) and user (`~/.cursor/`) directories
3. [ ] For rules, check if it's an "applied intelligently" rule (has `description`, no `globs`, no `alwaysApply: true`). Commands are always migrated. DO NOT use the terminal to read files. Use the read tool.
4. [ ] Make a list of files to migrate. If empty, done.
5. [ ] For each file, read it, then write the new skill file preserving the body content EXACTLY. DO NOT use the terminal to write these files. Use the edit tool.
6. [ ] Delete the original file. DO NOT use the terminal to delete these files. Use the delete tool.
7. [ ] Summarize the results to the user. IMPORTANT: Make sure to let them know if they want to undo the migration, to ask you to.
8. [ ] If the user asks you to undo the migration, do the opposite of the above steps to restore the original files.使用场景
当你想要做以下事情时,可以手动调用此 Skill:
- 将 Cursor 2.4 之前的 Rules 迁移到新的 Skills 格式
- 将斜杠命令(Slash Commands)转换为 Skills
- 将
.cursor/rules/*.mdc中的”智能应用” Rules 迁移 - 将
.cursor/commands/*.md迁移到.cursor/skills/
什么 Rules 会被迁移?
动态 Rules
只有满足以下条件的 Rules 才会被迁移:
- 有
description字段 - 没有
globs模式(或globs为空) - 没有
alwaysApply: true(或alwaysApply: false)
这些 Rules 被称为”应用智能”(Applied Intelligently)规则,它们的行为类似于 Skills——由 Agent 根据上下文决定何时应用。
不会被迁移的 Rules
以下 Rules 不会被迁移,因为它们有明确的触发条件:
alwaysApply: true的 Rules(始终应用)- 有特定
globs模式的 Rules(基于文件模式触发)
斜杠命令(Slash Commands)
所有斜杠命令都会被迁移,并会自动添加 disable-model-invocation: true 字段,以保持其”显式调用”的行为。
迁移示例
Rules 迁移示例
迁移前 (.cursor/rules/code-review.mdc):
---
description: Review code for quality and best practices
alwaysApply: false
---
# Code Review Guidelines
When reviewing code, check for:
- Code clarity
- Error handling
- Test coverage迁移后 (.cursor/skills/code-review/SKILL.md):
---
name: code-review
description: Review code for quality and best practices
---
# Code Review Guidelines
When reviewing code, check for:
- Code clarity
- Error handling
- Test coverage命令迁移示例
迁移前 (.cursor/commands/commit.md):
# Generate commit message
Analyze git diff and generate a conventional commit message.迁移后 (.cursor/skills/commit/SKILL.md):
---
name: commit
description: Generate commit message
disable-model-invocation: true
---
# Generate commit message
Analyze git diff and generate a conventional commit message.迁移后的效果
迁移完成后:
- 原来的动态 Rules 现在变成了 Skills,Agent 会根据上下文自动调用
- 原来的斜杠命令现在也变成了 Skills,但只能通过
/skill-name显式调用 - 原始文件会被删除(可以通过要求 Agent 撤销迁移来恢复)
迁移完成后,如果你想恢复原来的文件,可以对 Agent 说:“请撤销迁移”或”Undo the migration”。