Install
openclaw skills install claude-skill-syncThis skill should be used when the user wants to sync, synchronize, or compare skills between Claude Code and OpenClaw. Use it for requests like "sync my ski...
openclaw skills install claude-skill-syncScan skill directories for both Claude Code and OpenClaw, compare their contents, and perform a bidirectional sync — asking the user for confirmation before making any changes, and asking the user to resolve conflicts when the same skill exists in both tools with different content.
Both sides store full SKILL.md content. There are no wrapper stubs.
List all immediate subdirectories (one level deep, not recursive) under ~/.claude/skills/ that contain a SKILL.md file.
Record the name (directory name) and read the full content of each SKILL.md.
List all immediate subdirectories (one level deep, not recursive) under ~/.openclaw/workspace/skills/ that contain a SKILL.md file.
Record the name (directory name) and read the full content of each SKILL.md.
Build four categories by matching skill names across both directories:
A. Claude Code only — exists in Claude Code, no entry in OpenClaw at all.
B. OpenClaw only — exists in OpenClaw, no entry in Claude Code at all.
C. In sync — exists in both, content is textually identical after stripping leading/trailing whitespace from each line and ignoring line-ending differences (LF vs CRLF). No action needed.
D. Conflict — exists in both, but content differs after the normalization above.
Output a summary before taking any action:
## Skill Sync Report
### In Sync ✅
{count} skills are already in sync.
{list skill names, one per line}
### Claude Code Only — missing from OpenClaw (A)
- {skill-name}
### OpenClaw Only — missing from Claude Code (B)
- {skill-name}
### Conflicts — same name, different content (D)
- {skill-name}
If all skills are in sync, output "✅ All skills are in sync. Nothing to do." and stop.
For each skill in category A, ask the user:
"{skill-name}" exists in Claude Code but is missing from OpenClaw. Copy it to OpenClaw? [y/n/all/skip-all]
y → copy this skilln → skip this skillall → copy all remaining category A skills without asking againskip-all → skip all remaining category A skills (applies to this category only — you will still be prompted for categories B and D)To copy a Claude Code skill to OpenClaw:
version field from the SKILL.md frontmatter. If absent, use 1.0.0.~/.openclaw/workspace/skills/{name}/SKILL.md content to ~/.openclaw/workspace/skills/{name}/SKILL.md as-is.~/.openclaw/workspace/skills/{name}/_meta.json:{
"slug": "{name}",
"version": "{version}"
}
For each skill in category B, ask the user:
"{skill-name}" exists in OpenClaw but is missing from Claude Code. Copy it to Claude Code? [y/n/all/skip-all]
y → copy this skilln → skipall → copy all remaining category B skills without askingskip-all → skip all remaining category B skills (applies to this category only — you will still be prompted for category D)To copy an OpenClaw skill to Claude Code:
~/.claude/skills/{name}/SKILL.md content to ~/.claude/skills/{name}/SKILL.md as-is.
Do not copy _meta.json — it is OpenClaw-specific.For each conflict, show the user:
Conflict: {skill-name}
Claude Code version (first 5 lines of body, i.e. content after the closing --- of frontmatter):
{lines}
OpenClaw version (first 5 lines of body, i.e. content after the closing --- of frontmatter):
{lines}
Which version should be kept?
[1] Keep Claude Code version → overwrites OpenClaw
[2] Keep OpenClaw version → overwrites Claude Code
[3] Skip — leave both as-is
Apply the user's choice:
~/.openclaw/workspace/skills/{name}/SKILL.md with the Claude Code content.
Update ~/.openclaw/workspace/skills/{name}/_meta.json version to match the frontmatter of the winning file. If _meta.json does not exist, create it.~/.claude/skills/{name}/SKILL.md with the OpenClaw content.
No changes to _meta.json — it is OpenClaw-specific and remains as-is.After all actions are complete, output:
## Sync Complete
- Copied to OpenClaw: {count}
- Copied to Claude Code: {count}
- Conflicts resolved: {count}
- Skipped: {count}
~/.claude/ and ~/.openclaw/ path notation. Never expand ~ to an absolute path.version field is absent from a SKILL.md frontmatter, use 1.0.0 as the default.