A skill is a folder with a SKILL.md in it. skl skills lists the ones on your machine, installs ones from Skillsync, and publishes yours.
Anything that talks to Skillsync needs skl login. Listing your local skills doesn't.
Where skills live
| Scope | Folders |
|---|---|
| User | ~/.claude/skills, ~/.agents/skills |
| Project | .claude/skills, .agents/skills in the current directory |
An install writes to both folders of the scope you pick.
List your skills
skl skills list
skl skills list --scope project
skl skills list --json
Find and preview
skl skills search "code review"
skl skills show @owner/skill-name
show prints the skill and its files without installing anything. Both take --json.
Install
skl skills install @owner/skill-name
skl skills install @owner/skill-name --scope project
The first installs for you, the second into the current project. If the skill is already there, skl asks before replacing it. --force replaces it without asking.
Update
skl skills update --dry-run
skl skills update
skl skills update skill-one skill-two
--dry-run shows what would change. update only touches skills you installed from Skillsync.
Workspace skills
skl skills sync
skl skills sync --workspace <slug>
skl skills sync <name>
With no name, sync compares your workspace's skills with the ones here and changes nothing. With a name, it writes that workspace's version onto this machine. It never uploads.
| Option | What it does |
|---|---|
--workspace <SLUG> | Only skills shared through this workspace. |
--project | Write into the current project instead of your user folders. |
--dry-run | Show the changes file by file and write nothing. |
-f, --force | Replace a local copy that differs, without asking. |
--json | Print JSON. |
When two people share a skill with the same name, pass author/name.
Publish
skl skills upload <skill> --dry-run
skl skills upload <skill>
skl skills upload <skill> --public
<skill> is a skill's name or the path to its folder. Leave it out to pick from a list. A skill is private unless you pass --public. --project also looks in the current project when you give a name.
The skill needs a description in its frontmatter and a body. SKILL.md and the text files beside it are sent. Binary files and dotfiles are not.
Publishing the same skill again updates it.