A CLI for managing AI coding assistant skills from a single source.
Both Claude Code and Codex support skills—reusable instructions that extend what the assistant can do. This tool keeps them in sync across tools, so you can maintain skills in one place (your dotfiles, a team repo) and push them everywhere.
- One source — No more copying files between
~/.claude/skills/and~/.codex/skills/ - Sync everywhere — Push to both tools with a single command
- Pull edits back — Edit a skill in Claude Code, pull it to your repo, push to Codex
- Team sharing — Point everyone at a shared repo; they all get the same skills
- Version control — Skills live in git, so you get history and can roll back
Install
Quick Start
How It Works
Point the CLI at your source directories in ~/.skills.toml:
= [
"~/dotfiles/skills",
"~/work/team-skills",
]
Each skill is a folder with a SKILL.md file:
code-review/
SKILL.md
name: code-review
description: Use when reviewing pull requests or code changes
When reviewing code, focus on:
- ---
Provide specific, actionable feedback with line references.
Commands
Core Commands
| Command | What it does |
|---|---|
skills list |
Show all skills and their sync status (aliases: ls, status) |
skills push [SKILLS...] |
Push skills from source to tools |
skills pull [SKILL] |
Pull edits from tools back to source |
skills sync [SKILLS...] |
Two-way sync based on timestamps |
skills diff [SKILL] |
Show differences between source and installed |
Skill Management
| Command | What it does |
|---|---|
skills new <path> |
Create a new skill skeleton |
skills edit <skill> |
Open a skill in your editor ($EDITOR) |
skills mv <old> <new> |
Rename a skill across source and tools |
skills validate [SKILL] |
Check skill structure and template syntax |
skills render <skill> --tool <tool> |
Preview rendered output for a tool |
Sharing & Import
| Command | What it does |
|---|---|
skills pack [SKILLS...] |
Package skills into ZIP files for sharing |
skills import <source> |
Import from ZIP file, URL, or GitHub |
skills unload <skill> |
Remove a skill from tool directories |
skills promote <skill> |
Move a local skill to global directory (alias: uplift) |
Setup
| Command | What it does |
|---|---|
skills init |
Set up your configuration |
Common Flags
--tool <tool>— Target specific tool:claude,codex, orall(default)--project— Work with project-local skills (.claude/skills/,.codex/skills/)-n, --dry-run— Preview changes without writing-f, --force— Skip confirmation prompts (shows diff for overwrites)-y, --yes— Skip all prompts (use with--forcefor fully silent operation)
Typical Workflow
Create or edit a skill in Claude Code (it has a built-in skill editor), then sync:
Or use two-way sync:
Handle conflicts:
Templating
Skills can include tool-specific sections using MiniJinja:
{% if tool == "claude" %}
Use the Task tool for background operations.
{% elif tool == "codex" %}
Use /background for async tasks.
{% endif %}
Validate templates before pushing:
Supported Tools
| Tool | Skills Directory | Documentation |
|---|---|---|
| Claude Code | ~/.claude/skills/ |
docs |
| Codex | ~/.codex/skills/ |
docs |
Community
Want to contribute? Have ideas or feature requests? Come tell me about it on Discord.
License
MIT