Awesome-omni-skill ai-tool-converter
Convert AI coding assistant configuration files (agents, skills, commands, rules) between formats (Claude Code, Cursor, and future tools). Handles frontmatter mapping, directory structure, and format-specific fields.
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/ai-agents/ai-tool-converter" ~/.claude/skills/diegosouzapw-awesome-omni-skill-ai-tool-converter && rm -rf "$T"
skills/ai-agents/ai-tool-converter/SKILL.mdAI Tool Converter
Convert agents, skills, commands, and rules between different AI coding assistant formats while preserving functionality and adapting format-specific features.
Supported File Types
Both Claude Code and Cursor support these concepts:
| File Type | Purpose | Claude Code | Cursor |
|---|---|---|---|
| Agents | Specialized subagents for delegation | Yes | Yes |
| Skills | Reusable capabilities with references | Yes | Yes |
| Commands | Custom slash commands | Yes | Yes |
| Rules | Project-wide instructions | Yes | Yes |
File Locations
| File Type | Claude Code | Cursor |
|---|---|---|
| Agents | | |
| Skills | | |
| Commands | | |
| Rules | , | , |
Compatibility: Cursor reads
.claude/ directories as fallback for agents and skills.
Parameters
- Source format (source-format
,claude-code
)cursor
- Target format (target-format
,claude-code
)cursor
- Path to file or directory to convertfile-path
Steps
Step 1: Identify File Type
Determine the file type from its path:
.claude/agents/foo.md -> Agent .claude/skills/foo/SKILL.md -> Skill .claude/commands/foo.md -> Command .claude/rules/foo.md -> Rule CLAUDE.md -> Rule
If unclear, ask: "What type of file is this? (agent, skill, command, or rule)"
Step 2: Validate Input
- Parse arguments to extract source format, target format, and file path
- If parameters are unclear, ask user to clarify
- Validate source and target formats are supported and different
- Verify file/directory exists
Step 3: Read and Parse Source
- Read the source file(s)
- Parse YAML frontmatter (if present)
- Extract Markdown body/prompt content
- Identify format-specific fields
Step 4: Apply Conversion Rules
Agents
Claude Code -> Cursor:
- Preserve:
,namedescription - Convert model:
->haiku
,fast
/sonnet
->opusinherit - Remove:
,tools
,disallowedTools
,permissionMode
,color
,skills
,hooksdisabled - Add if applicable:
,readonly: trueis_background: true
Cursor -> Claude Code:
- Preserve:
,namedescription - Convert model:
->fasthaiku - Remove:
,readonlyis_background - Add if applicable:
,toolspermissionMode
Skills
Claude Code -> Cursor:
- Keep:
,name
,descriptiondisable-model-invocation - Remove:
,argument-hint
,user-invocable
,allowed-tools
,model
,context
,agenthooks - Add if needed:
,license
,compatibilitymetadata - Warning:
and$ARGUMENTS
syntax won't work in Cursor!`cmd`
Cursor -> Claude Code:
- Keep:
,name
,descriptiondisable-model-invocation - Remove:
,license
,compatibilitymetadata - Add if needed:
,argument-hint
,allowed-toolsmodel
Important: Copy entire skill directory (SKILL.md + references/ + scripts/), not just SKILL.md
Commands
CRITICAL DIFFERENCE: Cursor commands have NO YAML frontmatter - they are plain Markdown only!
Claude Code -> Cursor:
- Remove ALL frontmatter - Cursor doesn't support it
- Remove
,$ARGUMENTS
substitutions - won't work$0 - Remove
dynamic context - won't work!`cmd` - Keep body as plain Markdown only
Cursor -> Claude Code:
- Add frontmatter (optional) to enhance functionality
- Consider adding:
,description
,argument-hintdisable-model-invocation - Keep body unchanged
Rules
Claude Code -> Cursor:
- File:
->CLAUDE.md
or.cursor/rules/main.mdcAGENTS.md - File:
->.claude/rules/*.md.cursor/rules/*.mdc - Convert:
->pathsglobs - Remove:
syntax (not supported)@import - Add:
,description
if neededalwaysApply
Cursor -> Claude Code:
- File:
->.cursor/rules/*.mdc.claude/rules/*.md - File:
->AGENTS.mdCLAUDE.md - Convert:
->globspaths - Remove:
,descriptionalwaysApply
Step 5: Update Internal References
CRITICAL: Scan file contents for references to agents, commands, and skills, then update them for the target format.
Common patterns to find:
| Pattern Type | Claude Code | Cursor |
|---|---|---|
| Agent paths | | |
| Skill paths | | |
| Command paths | | |
| Rule paths | | |
| Slash commands | | (no change) |
| Global rules | | |
Update strategy:
- Replace directory prefix:
<->.claude/.cursor/ - Replace global rule file:
<->CLAUDE.mdAGENTS.md - Update rule extensions:
<->.md
(for rules only).mdc - Preserve slash command names (they don't change)
- Convert agent invocation syntax (see below)
Agent Invocation Syntax
Claude Code -> Cursor conversion:
Before:
Use the Task tool to invoke the reviewer: - Set `subagent_type: code-reviewer` - Pass the file path in the prompt
After:
Invoke the reviewer agent using: - Explicit: /code-reviewer review this code - Natural: Use the code-reviewer subagent to review this code
Cursor -> Claude Code conversion:
Before:
Invoke the code reviewer: - Use /code-reviewer followed by your request - Or: Have the code-reviewer subagent check for security issues
After:
Use the Task tool to invoke the code reviewer: - Set `subagent_type: code-reviewer` - Include your request in the prompt parameter - Example: Task tool with subagent_type: code-reviewer, prompt: "Check for security issues"
Step 6: Determine Output Path
Mirror the source structure in the target format:
| Source | Target |
|---|---|
| |
| |
| |
| |
Ask user if they want a different output location.
Step 7: Write Converted File
- Create target directory with
if neededmkdir -p - For skills: copy entire directory structure
- Write converted file with appropriate frontmatter (or none for Cursor commands)
- Verify file was created successfully
Step 8: Report Results
Converted: [source-file] Type: [agent|skill|command|rule] From: [source-format] To: [target-format] Output: [output-file] Changes made: - [Field changes] - Removed: [list] - Added: [list] Limitations: - [Features that won't work in target format] Test the converted file: [Instructions for target tool]
Examples
Example 1: Convert Agent
claude-code cursor .claude/agents/reviewer.md
Result:
- Input:
(with.claude/agents/reviewer.md
,model: sonnet
)tools: [Read, Grep] - Output:
(with.cursor/agents/reviewer.md
,model: inherit
)readonly: true - Removed:
fieldtools - Added:
(since original had restricted tools)readonly: true
Example 2: Convert Skill
claude-code cursor .claude/skills/code-review/
Result:
- Copies entire skill directory to
.cursor/skills/code-review/ - Converts SKILL.md frontmatter
- Preserves references/ and scripts/ subdirectories
- Warning:
substitutions won't work$ARGUMENTS
Example 3: Convert Command
claude-code cursor .claude/commands/deploy.md
Result:
- Input:
(with frontmatter and.claude/commands/deploy.md
)$ARGUMENTS - Output:
(plain Markdown, no frontmatter).cursor/commands/deploy.md - Removed: All frontmatter,
references$ARGUMENTS - Warning: Lost functionality - user must manually pass arguments
Key Differences Summary
| Feature | Claude Code | Cursor |
|---|---|---|
| Command frontmatter | Full YAML supported | None (plain Markdown) |
| String substitutions | , | Not supported |
| Dynamic context | | Not supported |
| Model values | , , | , |
| Tool restrictions | , | flag only |
| Skill arguments | | Not supported |
| Rule scoping | array | field |
Validation Checklist
After conversion:
- Correct file type identified
- YAML frontmatter valid (or correctly removed for Cursor commands)
- Required fields present for target format
- No source-format-specific fields remain
- Internal references updated (
<->.claude/
,.cursor/
<->CLAUDE.md
)AGENTS.md - Agent invocation syntax converted
- Markdown links point to correct target paths
- Markdown body preserved (except for reference updates)
- File in correct target directory
- User warned about lost functionality
Error Handling
| Error | Cause | Resolution |
|---|---|---|
| Unknown file type | Can't determine from path | Ask user to specify |
| Invalid YAML | Malformed frontmatter | Fix source file first |
| Missing required fields | Source incomplete | Add fields before converting |
| Feature not supported | Target lacks capability | Warn user, remove feature |