Sync agent skills from GitHub repos via API
Project description
skills-utils
Sync agent skills from GitHub repos into Cursor, Claude Code, or Copilot — no git clone required.
What it is for
Agent skills are folders with a SKILL.md file. Repos like anthropics/skills publish official skills, but agents have no built-in install/update flow.
skills-sync is an interactive CLI that:
- Lists skills from GitHub via API
- Installs selected skills into the correct agent directory
- Detects local edits vs upstream changes
- Supports multiple repos and agents
- Ships in Python and Node (shared config + manifest)
Install (pick one runtime)
Python (PyPI)
pip install skills-utils-mi
skills-sync doctor
Node (npm)
npm install -g skills-sync-node-mi
skills-sync-node doctor
Python registers
skills-sync; Node registersskills-sync-nodeto avoid PATH collisions when both are installed.
From source (development)
# Python
git clone git@github.com:mariuszizydorek/skills-utils.git
cd skills-utils/python
python3 -m venv .venv && source .venv/bin/activate
pip install -e . --index-url https://pypi.org/simple/
skills-sync doctor
# Node
cd skills-utils/node
npm install && npm run build && npm link
skills-sync-node doctor
Usage
After install, run from any folder:
skills-sync # interactive: pick agent → repo → tick skills
skills-sync status # show installed skills
skills-sync doctor # health check
skills-sync doctor --fix # repair symlinks / create missing dirs
Common workflows
| Goal | Command |
|---|---|
| First-time setup | skills-sync → pick Cursor → anthropics/skills → tick skills |
| Check what's installed | skills-sync status |
| Check for upstream updates | skills-sync status --check-remote |
| Fix broken setup | skills-sync doctor --fix |
Where data lives
~/.skills-utils/
├── config.yaml # repos + agent paths (created on first run)
├── manifest.json # installed skills tracking
└── cache/ # downloaded skill files
Skills install to agent dirs:
| Agent | Install path |
|---|---|
| Cursor (personal) | ~/.cursor/skills/<repo>/<skill>/ |
| Cursor (project) | <project>/.cursor/skills/<repo>/<skill>/ |
| Claude Code (personal) | ~/.claude/skills/<repo>/<skill>/ |
| Claude Code (project) | <project>/.claude/skills/<repo>/<skill>/ |
| Copilot (project) | <project>/.github/skills/<repo>/<skill>/ |
Run project-scoped agents from inside the project (or its git root).
Flat symlinks (~/.cursor/skills/pdf → anthropics/pdf) are created by default so agents can discover skills.
Configuration
Edit ~/.skills-utils/config.yaml or the template config.yaml. Override with --config or SKILLS_UTILS_CONFIG.
For private repos, use gh auth login or set GITHUB_TOKEN.
Development
# Python tests
cd python && .venv/bin/pytest -v
# Node tests
cd node && npm run build && npm test
# Build release artifacts
./scripts/publish.sh
Publishing (maintainers)
PyPI package: skills-utils-mi
npm package: skills-sync-node-mi
One-time setup:
- Create a PyPI API token with upload scope for
skills-utils-mi - Create an npm access token with publish scope
- For GitHub Actions (recommended): add repo secrets
NPM_TOKENand enable PyPI trusted publishing for this repo
Manual publish:
./scripts/publish.sh
# PyPI (use __token__ as username, API token as password)
cd python
twine upload dist/skills_utils_mi-*
# npm
cd node
npm login
npm publish --access public
Or create a GitHub Release — the publish workflow uploads both packages automatically.
See plans/skills-sync-cli/plan.md for the full design.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file skills_utils_mi-0.1.0.tar.gz.
File metadata
- Download URL: skills_utils_mi-0.1.0.tar.gz
- Upload date:
- Size: 14.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fb70bd51619ff40414492fcdcde2c1fdfc958f9b5830a16d9379ddfbb3982d5
|
|
| MD5 |
d01f4b51cb92ac50148fbd5f626f6c73
|
|
| BLAKE2b-256 |
f1789212939246e917e96b859f917fe31f48fba7408231d9ff6de94e80b21803
|
Provenance
The following attestation bundles were made for skills_utils_mi-0.1.0.tar.gz:
Publisher:
publish.yml on mariuszizydorek/skills-utils
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skills_utils_mi-0.1.0.tar.gz -
Subject digest:
7fb70bd51619ff40414492fcdcde2c1fdfc958f9b5830a16d9379ddfbb3982d5 - Sigstore transparency entry: 1749931958
- Sigstore integration time:
-
Permalink:
mariuszizydorek/skills-utils@1f95173e1b05d239060e9d359065658e7eeb822a -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/mariuszizydorek
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1f95173e1b05d239060e9d359065658e7eeb822a -
Trigger Event:
release
-
Statement type:
File details
Details for the file skills_utils_mi-0.1.0-py3-none-any.whl.
File metadata
- Download URL: skills_utils_mi-0.1.0-py3-none-any.whl
- Upload date:
- Size: 20.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19f7cd0a95f248e8fac7a8aad76bcb1450bd4508f9eee68aa7ba6be2f1445ca1
|
|
| MD5 |
4d7dc1ce69d26d441beb916df98777e6
|
|
| BLAKE2b-256 |
230241bb294187c3a934e1ecccbe4a8245a01ad2580bbab3a483a67382ebac7a
|
Provenance
The following attestation bundles were made for skills_utils_mi-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on mariuszizydorek/skills-utils
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skills_utils_mi-0.1.0-py3-none-any.whl -
Subject digest:
19f7cd0a95f248e8fac7a8aad76bcb1450bd4508f9eee68aa7ba6be2f1445ca1 - Sigstore transparency entry: 1749932162
- Sigstore integration time:
-
Permalink:
mariuszizydorek/skills-utils@1f95173e1b05d239060e9d359065658e7eeb822a -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/mariuszizydorek
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1f95173e1b05d239060e9d359065658e7eeb822a -
Trigger Event:
release
-
Statement type: