CLI tool for managing Claude Code skills from a shared repository.
Project description
repo-skills
CLI tool for managing Claude Code skills from a shared repository.
Keep your team's skills in a central git repo, install them into any provider (Claude Code by default), edit freely, and merge changes back — all from the command line.
Requirements
- Python 3.10+
- uv (recommended for installation)
Install
uv tool install repo-skills
Verify the installation:
skills --version
Quick start
1. Register a skills source
Navigate to a git repository that contains a skills/ directory and register it:
cd /path/to/your-skills-repo
skills init
This registers the current repo as a skill source, pinned to the current branch. You can override the name and branch:
skills init --name my-team --branch main
By default the source's skills root is auto-detected (typically skills/). Pin it explicitly with --skills-dir (the directory must already exist, repo-relative):
skills init --skills-dir packages/skills
Adjust a source's settings later with skills source config.
2. Check available skills
skills status
This shows installed skills, available skills from registered sources, and any untracked (orphan) skill directories.
3. Install skills
skills install my-skill
skills install skill-a skill-b skill-c
When multiple sources are registered, specify which one:
skills install my-skill -s my-team
4. Update skills
Pull the latest version from the source:
skills update # update all installed skills
skills update my-skill # update a specific skill
5. Merge local edits back
If you edit an installed skill (e.g. Claude refines it while working), push those changes back to the source repo:
skills merge # merge all modified skills
skills merge my-skill # merge a specific skill
The merge creates a commit in the source repo. Use --no-commit to stage changes without committing, or --abort / --continue to manage an in-progress merge.
6. Uninstall
skills uninstall my-skill
skills uninstall skill-a skill-b
Concepts
| Term | Description |
|---|---|
| Source | A git repo registered via skills init (configurable later via skills source config). Contains a skills root directory (auto-detected, or set with --skills-dir) with one or more skills. Multiple sources can coexist. |
| Skill | A directory containing a SKILL.md file inside a source's skills/ tree. Identified by leaf directory name, regardless of nesting depth. |
| Provider | An agent platform with a known skills install directory. Claude Code is the built-in default. |
| Installed copy | A skill directory inside a provider's install path, editable by the user. |
| Pinned branch | The branch captured at skills init time. Merge and write operations target this branch. |
Commands
skills source
Manage skill sources (git repositories).
skills init # register current repo as a source (first-time setup)
skills init --name foo # custom source name
skills init --branch dev # pin to a specific branch
skills init --skills-dir path # pin the skills root (must already exist)
skills source config # edit this repo's source settings later
skills source config --branch dev # re-pin to a different branch
skills source config --skills-dir path # change the skills root
skills source list # list all registered sources
skills source remove <name> # unregister a source
skills source remove <name> --force # remove even if skills are installed
skills source init still works as a hidden alias of skills source config.
skills provider
Manage providers (agent platforms). Claude Code is registered by default.
skills provider list # list registered providers
skills provider add <name> --install-dir /path/to/skills # register a new provider
skills provider remove <name> # unregister a provider
skills install
skills install <name> [<name> ...] # install one or more skills
skills install <name> -s <source> # from a specific source
skills install <name> --force # overwrite existing skill
skills install <name> --offline # skip git pull
skills update
skills update # update all installed skills
skills update <name> [<name>…] # update specific skills
skills update -s <source> # update only skills from a source
skills update --offline # skip git pull
skills uninstall
skills uninstall <name> [<name> ...]
skills merge
Merge provider-side edits back into the source repo.
skills merge # merge all modified skills
skills merge <name> # merge a specific skill
skills merge -s <source> # merge skills from a specific source
skills merge --from <provider> # specify provider (when ambiguous)
skills merge --no-commit # stage changes without committing
skills merge --continue # finalize an in-progress merge
skills merge --abort # abort an in-progress merge
skills merge --rebase # use rebase instead of merge
skills merge --search-base # search git history for base commit
skills merge --offline # skip git pull
skills status
skills status # show status of all skills
skills status --sync # pull source repos before checking
Global options
skills --version # show version
skills --debug # show full traceback on errors
Skill directory structure
A source repository organizes skills under a skills/ root:
your-skills-repo/
skills/
my-skill/
SKILL.md
...
category/
another-skill/
SKILL.md
...
Categories (subdirectories) are purely organizational — the tool identifies skills by their leaf directory name.
Configuration
Configuration files are stored in ~/.config/repo-skills/:
sources.json— registered skill sourcesproviders.json— registered providers
License
Release Notes
v0.11.0
skills initis now the top-level command for registering a source, withskills source configto edit an existing one (skills source initkept as a hidden alias)--skills-diroption on init/config pins the source's skills directory, accepting only an existing repo-relative path under the repo rootskills updaterecovers a detached install by searching the pinned branch for a commit whose content matches the on-disk copy, then re-pins and reports it as recovered- Content-sync now advances the baseline commit, so
skills statusstops showing a synced install as outdated - One source's failed pull no longer aborts the run — remaining sources keep updating and the failure is reported as a
failedstatus line skills mergereports "now tracked and in sync" when re-attaching a detached or untracked skill, distinct from "already synced"- Git pull output no longer clobbers the
skills updatestatus line
v0.10.1
- Orphan merges now commit as
feat: add `<name>` skillwith the skill'sSKILL.mddescription as the body - Error out instead of silently loading when a manifest or provider registry was written by a newer tool version
- Consistent blank-line separation between source groups and the untracked section in
skills status
v0.10.0
skills updateaccepts multiple skill names and-s/--sourcefilter to narrow by source- Auto-attach untracked skills during
updatewhen they uniquely match a source by content -salias for--sourceonskills merge- CRLF-agnostic content hashing and POSIX-canonical paths for Windows compatibility
v0.9.0
- Streaming progress for
skills update— per-source pull and per-skill status skills mergeuses git merge by default, preserving history;--rebaserestores legacy behavior--search-baseflag for merge — locate a base commit via history search for orphan merges- Detached skill detection and auto-recovery during
skills update --forceflag forsource removeto unregister sources with installed skills- Broken source/config resilience — warn and continue instead of crashing
- Outdated install detection in
skills status --debugstreams git and subprocess invocations- Per-provider update results and unified status column layout
- Internal:
ProviderRegistry/SkillManifestAPI,Consoleclass,Baselinedataclass
v0.2.0
- Multi-source architecture: register skill sources (
init,source config/list/remove), pin to a branch - Provider management: add, list, and remove agent platforms (Claude Code built-in)
- Install, update, and uninstall skills across sources and providers
skills merge— push provider-side edits back to source repos with--continue,--abort,--no-commitskills status— installed, available, orphan, and mergeable skills at a glance--versionand--debugglobal flags- Short flags (
-s,-f) for install; multi-skill install/uninstall - Offline mode (
--offline) for all network operations - Pretty error reporting with structured CLI output styling
v0.1.0
- Initial release
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 repo_skills-0.11.0.tar.gz.
File metadata
- Download URL: repo_skills-0.11.0.tar.gz
- Upload date:
- Size: 242.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbbdbc2aad08ae4c760666142a96cd085eaaf1dc984c05aec540fdade078be7e
|
|
| MD5 |
982653770593a086570d40509b84b6d2
|
|
| BLAKE2b-256 |
d7ee9e7dcfcafdbf6964144d070a8fa736ea0444a64554498b60a7a23c9807f1
|
Provenance
The following attestation bundles were made for repo_skills-0.11.0.tar.gz:
Publisher:
release.yml on greendwin/repo-skills
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
repo_skills-0.11.0.tar.gz -
Subject digest:
fbbdbc2aad08ae4c760666142a96cd085eaaf1dc984c05aec540fdade078be7e - Sigstore transparency entry: 1820422328
- Sigstore integration time:
-
Permalink:
greendwin/repo-skills@5de0406f48112c28a85f0fba06fabc296ed1aee1 -
Branch / Tag:
refs/tags/v0.11.0 - Owner: https://github.com/greendwin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5de0406f48112c28a85f0fba06fabc296ed1aee1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file repo_skills-0.11.0-py3-none-any.whl.
File metadata
- Download URL: repo_skills-0.11.0-py3-none-any.whl
- Upload date:
- Size: 44.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 |
13c4a8db55c1004250f3ede491834894f00c9e920d05d6137210c3a68548e732
|
|
| MD5 |
67add541fa30a155c11422c920a86141
|
|
| BLAKE2b-256 |
fd3bbd7e29929f7caa29cd6adc5e589052f24062dcac0ff0ed64817375074ced
|
Provenance
The following attestation bundles were made for repo_skills-0.11.0-py3-none-any.whl:
Publisher:
release.yml on greendwin/repo-skills
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
repo_skills-0.11.0-py3-none-any.whl -
Subject digest:
13c4a8db55c1004250f3ede491834894f00c9e920d05d6137210c3a68548e732 - Sigstore transparency entry: 1820422355
- Sigstore integration time:
-
Permalink:
greendwin/repo-skills@5de0406f48112c28a85f0fba06fabc296ed1aee1 -
Branch / Tag:
refs/tags/v0.11.0 - Owner: https://github.com/greendwin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5de0406f48112c28a85f0fba06fabc296ed1aee1 -
Trigger Event:
release
-
Statement type: