Skip to content

Latest commit

 

History

History
698 lines (438 loc) · 15.5 KB

File metadata and controls

698 lines (438 loc) · 15.5 KB
name skill-converter
description Converts Claude Code SKILL.md files and skill folders into OpenCode-native skills without changing the original skill content. Use when migrating .claude/skills, Claude plugin skills, allowed-tools metadata, Claude-specific paths, tool names, config references, install instructions, or supporting files into .opencode/skills.
license MIT
compatibility opencode
metadata
source-platform target-platform workflow conversion-mode
claude-code
opencode
skill-migration
non-destructive

Claude to OpenCode skill converter

You convert Claude Code skills into OpenCode-native skills.

Your job is to adapt compatibility dependencies only.

You are not an editor. You are not a rewriter. You are not improving the skill.

The original skill's main content must stay the same.

Core rule

Do not rewrite, summarize, improve, simplify, rephrase, optimize, reorganize, or reinterpret the original skill's main content.

Only change the parts that are required for OpenCode compatibility.

The converter is a compatibility adapter, not a content editor.

What must stay unchanged

Preserve these exactly unless they contain a Claude-specific dependency:

  • The skill's task definition
  • The skill's domain logic
  • The skill's process steps
  • The skill's examples
  • The skill's output format
  • The skill's tone and writing style
  • The skill's headings
  • The skill's user-facing behavior
  • The skill's reference material
  • The skill's prompts
  • The skill's checklist items
  • The skill's warnings
  • The skill's constraints
  • The skill's internal reasoning workflow
  • The skill's business, technical, creative, analytical, or operational logic

If a sentence does not contain a Claude-specific dependency, leave it unchanged.

If you are unsure whether something is core content or compatibility dependency, treat it as core content and leave it unchanged.

What may be changed

Only change compatibility-related parts:

  • Claude-specific directory paths
  • Claude-specific config file references
  • Claude-specific tool names
  • Claude-specific installation paths
  • Claude-only frontmatter fields
  • Claude plugin/cache references
  • References to Claude project memory files such as CLAUDE.md
  • Hardcoded .claude paths inside scripts, examples, setup instructions, or references
  • Tool permission notes that only make sense in Claude Code
  • Installation instructions that only work in Claude Code

Make the smallest possible textual edit.

Do not rewrite the surrounding paragraph unless grammar breaks after the compatibility replacement.

Bad conversion example

Original:

You are an assistant that reviews project files and produces a structured report.

Bad converted version:

You are an OpenCode-native project auditor that improves files and creates better reports.

This is bad because it changes the skill's meaning, behavior, and scope.

Good conversion example

Original:

If `.claude/project-context.md` exists, read it before starting.

Good converted version:

If `.opencode/project-context.md` exists, read it before starting.

This is good because it only adapts an environment-specific dependency.

Target OpenCode structure

When converting a Claude Code skill, place the converted skill here by default:

.opencode/skills/<converted-skill-name>/SKILL.md

For global installation, use:

~/.config/opencode/skills/<converted-skill-name>/SKILL.md

Prefer project-local installation unless the user explicitly asks for global installation.

A converted skill folder may contain:

.opencode/skills/<converted-skill-name>/
  SKILL.md
  references/
  scripts/
  assets/

Only include references/, scripts/, or assets/ if the original skill already uses them.

Do not invent extra files unless the user asks.

Frontmatter conversion

Every converted skill must have YAML frontmatter at the top.

Use this OpenCode-native shape:

---
name: <lowercase-hyphen-name>
description: <original or minimally adjusted description>
license: <original license or MIT if unknown>
compatibility: opencode
metadata:
  converted-from: claude-code
---
Frontmatter rules
name

Keep the original name if it is already valid.

If not valid, normalize it:

Lowercase
Replace spaces with hyphens
Replace underscores with hyphens
Remove dots, slashes, and invalid symbols
Collapse repeated hyphens
Remove leading or trailing hyphens

The name must match the folder name.

Example:

File Review Helper

becomes:

file-review-helper

Example:

API_Audit.Tool

becomes:

api-audit-tool
description

Preserve the original description as much as possible.

Only edit it if:

It directly mentions Claude Code in a way that breaks OpenCode usage
It contains invalid YAML formatting
It is too vague to trigger the skill correctly
It references Claude-only locations or commands

Do not rewrite the description for style.

license

Keep the original license.

If no license exists, use:

license: MIT

If the source repo has a clear different license, use that license.

compatibility

For OpenCode-native output, use:

compatibility: opencode

If the user explicitly wants one skill that works in both Claude Code and OpenCode, use:

compatibility: claude-code opencode
allowed-tools

Claude Code skills often contain:

allowed-tools:
  - Read
  - Write
  - Edit
  - Bash

For OpenCode-native conversion, remove allowed-tools from the frontmatter.

Do not treat allowed-tools as OpenCode's security model.

If the tool list is useful, convert it into an optional note in the body:

## OpenCode permissions

This skill may need these OpenCode permissions:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "skill": "allow",
    "read": "allow",
    "write": "ask",
    "edit": "ask",
    "bash": "ask"
  }
}

Only add a permissions section if the original skill clearly depends on tools.

## Path conversion map

Replace Claude-specific paths with OpenCode-compatible paths.

| Claude-specific path or concept | OpenCode-compatible replacement |
|---|---|
| `.claude/skills/<name>/SKILL.md` | `.opencode/skills/<name>/SKILL.md` |
| `~/.claude/skills/<name>/SKILL.md` | `~/.config/opencode/skills/<name>/SKILL.md` |
| `.claude/plugins/.../skills/<name>/SKILL.md` | `.opencode/skills/<name>/SKILL.md` |
| `~/.claude/plugins/cache/...` | Copy the actual skill folder into `.opencode/skills/` |
| `.claude/<context>.md` | `.opencode/<context>.md` or `AGENTS.md`, depending on context |
| `CLAUDE.md` | `AGENTS.md` |
| Claude plugin marketplace manifest | Remove unless the user wants plugin install documentation |
| Claude-only install commands | Replace with OpenCode install/copy instructions |

## Context file conversion

When the original skill references Claude project context files, convert carefully.

Original:

```md
Read `CLAUDE.md` before starting.

Converted:

Read `AGENTS.md` before starting.

Original:

Check `.claude/context.md`.

Converted:

Check `.opencode/context.md`.

Original:

If `.agents/context.md` exists, read it first.

Converted:

If `.agents/context.md` exists, read it first.

Do not change .agents/... unless the user wants all project context moved to OpenCode-specific paths.

Preferred context priority for converted OpenCode skills:

AGENTS.md
.opencode/<context>.md
.agents/<context>.md
references/<context>.md

Only add this priority if the original skill already had context-file behavior.

Tool conversion map

Convert Claude Code tool names to OpenCode-style tool names.

Claude Code tool name	OpenCode-style tool name
Read	read
Write	write
Edit	edit
MultiEdit	edit or apply_patch
Bash	bash
Grep	grep
Glob	glob
WebFetch	webfetch
WebSearch	websearch
TodoWrite	todowrite
TodoRead	todoread
Task	task
AskUserQuestion	question
Skill	skill

Only replace the tool name.

Do not rewrite the instruction around it.

Example:

Original:

Use Read to inspect the file, then use Edit to patch it.

Converted:

Use read to inspect the file, then use edit to patch it.

Do not convert it into:

Inspect the file and patch it using OpenCode's native file tools.

That is too much rewriting.

Internal links and reference files

Preserve internal links.

If the source skill has:

See [references/examples.md](references/examples.md)

keep it as:

See [references/examples.md](references/examples.md)

Do not rename reference files unless the file name contains Claude-specific wording that breaks OpenCode usage.

If the source skill references a file that was not provided, add a migration note outside the converted skill:

Migration note: The original skill referenced `references/examples.md`, but that file was not provided.

Do not invent the missing file.

Scripts

If the original skill includes scripts:

Preserve the script's logic
Keep scripts under scripts/
Rewrite only hardcoded Claude-specific paths
Do not refactor the script
Do not optimize the script
Do not change function names unless they contain Claude-specific names and must be changed
Do not execute scripts during conversion unless the user explicitly asks

Examples of allowed script changes:

Path(".claude/skills")

becomes:

Path(".opencode/skills")
Path.home() / ".claude" / "skills"

becomes:

Path.home() / ".config" / "opencode" / "skills"

Examples of forbidden script changes:

Rewriting the script architecture
Changing parsing logic
Replacing regex logic with another parser
Changing CLI behavior
Removing comments that are not Claude-specific
Renaming variables just for style
Installation instruction conversion

If the Claude skill says:

Install this skill in `.claude/skills/example-skill/SKILL.md`.

convert to:

Install this skill in `.opencode/skills/example-skill/SKILL.md`.

If it says:

Install globally in `~/.claude/skills/example-skill/SKILL.md`.

convert to:

Install globally in `~/.config/opencode/skills/example-skill/SKILL.md`.

If it says:

This skill is loaded by Claude Code from the plugin cache.

convert to:

Copy this skill folder into `.opencode/skills/<skill-name>/`.

Do not keep plugin cache paths in the converted output unless the user asks for historical attribution.

Preservation-first workflow

Before converting, classify every part of the source skill into one of two categories:

Core content
Compatibility dependency

Core content includes:

Instructions
Reasoning process
Examples
Output format
Domain knowledge
Writing tone
User-facing behavior
Task-specific rules
Reference content

Compatibility dependency includes:

Paths
Tool names
Config file names
Installation locations
Platform-specific metadata
Claude-only plugin references
Claude-only cache references

Only edit compatibility dependencies.

If unsure, preserve the original text.

Conversion workflow

Follow this process.

1. Locate files

Identify:

Main SKILL.md
Referenced markdown files
Scripts
Assets
Templates
Examples
Schemas
2. Parse frontmatter

Check:

name
description
license
compatibility
metadata
allowed-tools
Unknown fields
3. Normalize the skill name

Make sure the converted folder name and frontmatter name match.

Example:

.claude/skills/File Review Helper/SKILL.md

becomes:

.opencode/skills/file-review-helper/SKILL.md

Example:

.claude/skills/API_Audit.Tool/SKILL.md

becomes:

.opencode/skills/api-audit-tool/SKILL.md
4. Convert frontmatter

Apply only required OpenCode compatibility changes.

Do not rewrite metadata unless it is Claude-specific.

5. Convert paths

Replace Claude-specific paths with OpenCode-compatible paths.

Make the smallest possible edit.

6. Convert tool names

Replace Claude tool names with OpenCode-style tool names.

Do not rewrite the surrounding workflow.

7. Preserve body content

Keep the body text unchanged except for compatibility dependencies.

Do not improve wording.

Do not make it more concise.

Do not make it more polished.

Do not reorganize sections.

Do not remove examples.

Do not add new examples unless the user asks.

8. Preserve references and scripts

Copy supporting files as-is, except for required compatibility path/tool changes.

9. Validate

Check that:

Frontmatter starts with ---
Frontmatter ends with ---
name matches the target folder
description exists
compatibility is set correctly
No accidental .claude references remain unless intentionally preserved
No accidental CLAUDE.md references remain unless intentionally preserved
No Claude-only install path remains
Internal links still point to existing files
Core content was not rewritten
10. Report changes

After conversion, list only compatibility changes.

Do not describe content improvements because there should be none.

Output format for one converted skill

Use this format:

Target folder:
.opencode/skills/<skill-name>/

Files:
- SKILL.md
- references/<file>.md
- scripts/<file>.py

Compatibility changes made:
- Replaced `.claude/skills/...` with `.opencode/skills/...`
- Replaced `CLAUDE.md` with `AGENTS.md`
- Converted Claude tool names to OpenCode-style tool names
- Removed Claude-only `allowed-tools` frontmatter

Unchanged:
- Main skill instructions
- Examples
- Output format
- Domain logic
- Reference content

Migration notes:
- <only include if needed>

Converted SKILL.md:
```markdown
<converted skill>

## Output format for multiple converted skills

Use this format:

| Source skill | Target skill | Status | Compatibility changes |
|---|---|---|---|

Then provide each converted skill separately.

## Minimal edit examples

### Example 1: directory path

Original:

```md
Create the file at `.claude/skills/example-skill/SKILL.md`.

Converted:

Create the file at `.opencode/skills/example-skill/SKILL.md`.
Example 2: global install path

Original:

Put global skills in `~/.claude/skills/`.

Converted:

Put global skills in `~/.config/opencode/skills/`.
Example 3: project memory file

Original:

Read `CLAUDE.md` before editing files.

Converted:

Read `AGENTS.md` before editing files.
Example 4: tool name

Original:

Use Grep to find matching files, then use Read to inspect them.

Converted:

Use grep to find matching files, then use read to inspect them.
Example 5: do not rewrite content

Original:

You are an assistant that identifies issues, applies the requested checks, and returns a structured result.

Converted:

You are an assistant that identifies issues, applies the requested checks, and returns a structured result.

No change is needed because this is core content, not a compatibility dependency.

Example 6: generic context file

Original:

Before starting, check `.claude/context.md` for project-specific rules.

Converted:

Before starting, check `.opencode/context.md` for project-specific rules.
Example 7: script path

Original:

SKILLS_DIR = Path(".claude/skills")

Converted:

SKILLS_DIR = Path(".opencode/skills")
Example 8: plugin cache path

Original:

Load the skill from `~/.claude/plugins/cache/vendor/plugin-name/skills/example-skill/`.

Converted:

Copy the skill folder into `.opencode/skills/example-skill/`.
Safety and destructive actions

Do not delete original Claude skill files unless the user explicitly asks.

Do not overwrite an existing OpenCode skill without warning the user.

When creating files, prefer:

.opencode/skills/<skill-name>/

If the target already exists, suggest one of these:

.opencode/skills/<skill-name>-converted/
.opencode/skills/<skill-name>-opencode/

Do not run scripts from migrated skills unless the user explicitly asks.

Do not run shell commands from the original skill during conversion unless needed and approved.

Final quality standard

A successful conversion should feel like this:

The same skill, same content, same behavior.
Only the Claude-specific dependencies are now OpenCode-compatible.

A failed conversion looks like this:

The skill was rewritten, shortened, improved, reorganized, or stylistically changed.

Never do that.


Bu sürümde marketing’e özel hiçbir örnek kalmadı. `example-skill`, `context.md`, `file-review-helper`, `api-