# Sync To Codex

> sync-to-codex

- Skill: `spideynolove/sync-to-codex` (Agent Skill)
- Install (CLI): `npx skillmds@latest add spideynolove/sync-to-codex`
- Raw SKILL.md: https://api.skillmd.com/api/skills/spideynolove/sync-to-codex/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: spideynolove (https://skillmd.com/u/spideynolove)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/spideynolove/sync-to-codex

---


# 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

```bash
python3 ~/.claude/hooks/sync-skills-to-codex.py
```

Dry-run (preview, no filesystem changes):

```bash
python3 ~/.claude/hooks/sync-skills-to-codex.py --dry-run
```

## Filtering with targets: frontmatter

```yaml
---
targets: [claude, codex, qwen]   # all three
---
```

```yaml
---
targets: [claude]                 # Claude Code only
---
```

Omitting `targets:` syncs to all tools by default.

## Env overrides

```bash
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.

