Sync to codex
Skill spideynolove/claude-code-in-action/20-skill-sync/skills/sync-to-codex
The process I experienced firsthand through the https://anthropic.skilljar.com/claude-code-in-action course using real-world daily projects
npx -y skills add spideynolove/claude-code-in-action --skill sync-to-codexAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Sync Claude Code skills to Codex CLI and Qwen Code via filesystem symlinks. One source of truth at ~/.claude/skills/, symlinked into ~/.codex/skills/ and ~/.qwen/skills/. Respects targets: frontmatter field.
SKILL.md
1.6 KB, as published. Nobody here has run it
sync-to-codex
Syncs skills from ~/.claude/skills/ → ~/.codex/skills/ and ~/.qwen/skills/ using symlinks.
Both tools read plain markdown SKILL.md files from their own paths. No translation — the format is identical across Claude Code, Codex CLI, and Qwen Code.
~/.claude/skills/my-skill/SKILL.md ← one source
↓ symlink
~/.codex/skills/my-skill/ ← Codex CLI reads this
~/.qwen/skills/my-skill/ ← Qwen Code reads this
The PostToolUse hook fires automatically after any Edit or Write to a .claude/skills/ file.
Manual sync
python3 ~/.claude/hooks/sync-skills-to-codex.py
Dry-run (preview, no filesystem changes):
python3 ~/.claude/hooks/sync-skills-to-codex.py --dry-run
Filtering with targets: frontmatter
---
targets: [claude, codex, qwen] # all three
---
---
targets: [claude] # Claude Code only
---
Omitting targets: syncs to all tools by default.
Env overrides
SKILLSHARE_SOURCE=~/.claude/skills \
SKILLSHARE_CODEX_TARGET=~/.codex/skills \
python3 ~/.claude/hooks/sync-skills-to-codex.py
Manifest
~/.codex/skills/.skillshare-manifest.json and ~/.qwen/skills/.skillshare-manifest.json track managed symlinks. The prune step only removes symlinks it created — manually placed files are never touched.