Ansible-style skill management for agent CLIs
Project description
skillsible
Ansible-style skill management for Codex, Claude Code, and agent CLIs.
What It Does
skillsible manages skills declaratively across machines and agents.
- define desired skills in a manifest
- target multiple agent CLIs
- preview changes with
plan - apply installs idempotently
- make workstation setup reproducible
MVP
The initial version focuses on skills.sh-style installs driven by a YAML manifest.
Example
version: 1 # Manifest format version
agents:
- codex # Default target agent
- claude-code # Also receives any skill that does not override `agents`
defaults:
scope: global # Default scope: install for the current user across projects
skills:
- source: obra/the-elements-of-style
skill: writing-clearly-and-concisely
version: v1.2.0 # Pin this skill to a specific source revision, such as a tag
# No `agents` field here, so this inherits both top-level agents:
# - codex
# - claude-code
# No `scope` field here, so this inherits `defaults.scope = global`
- source: https://github.com/obra/the-elements-of-style
skill: writing-clearly-and-concisely
version: main # A skill version can also be a branch, tag, or commit SHA
agents:
- codex # Override: only install this one for codex
scope: project # Override: install only for the current project
Top-level version and per-skill version mean different things:
-
top-level
versionThe manifest schema version. This tellsskillsiblehow to interpret the playbook itself. -
per-skill
versionThe source revision to install for that skill. This is used for reproducibility and can be:- a semantic tag like
v1.2.0 - a git tag like
release-2026-03 - a branch like
main - a commit SHA like
8c1f2d4
- a semantic tag like
When a per-skill version is set, skillsible resolves that source to a concrete git checkout before
calling npx skills add .... This keeps apply reproducible even though skills.sh does not expose its
own documented --ref flag.
Recommended usage:
- use a branch for moving development targets
- use a tag for readable pinned versions
- use a commit SHA for exact replayability
CLI
uv run skillsible plan -f skills.yml
uv run skillsible apply -f skills.yml
uv run skillsible doctor
Install
From PyPI:
uv tool install skillsible
skillsible doctor
For a specific version:
uv tool install skillsible==1.0.0
skillsible doctor
From a checkout:
uv tool install .
skillsible doctor
From a built wheel:
uv build
uv tool install dist/skillsible-1.0.0-py3-none-any.whl
skillsible doctor
CI And Release
This repo includes GitHub Actions for:
- CI on pushes to
mainand pull requests - building distributions with
uv build - publishing to PyPI when a tag like
v1.0.0is pushed
PyPI Trusted Publishing Setup
Before publishing will work, configure skillsible on PyPI to trust this repository's publish workflow:
- PyPI project:
skillsible - GitHub owner:
srikalyan - GitHub repository:
skillsible - Workflow file:
.github/workflows/publish.yml - Environment name:
pypi
After that, pushing a tag such as v1.0.0 will trigger the publish workflow.
Workflow
The default branch is main and it is protected.
Expected flow:
- Create a feature branch.
- Open a pull request to
main. - Let CI pass.
- Merge to
main. - Tag the merge commit with
vX.Y.Z. - Push the tag to publish to PyPI.
See CONTRIBUTING.md for the release workflow in more detail.
Design Goals
- declarative desired state
- multi-agent support
- idempotent operations
- portable across machines
- extensible adapter model
Near-Term Roadmap
- manifest validation
- agent adapters
- drift detection
- lockfile support
- export current installed skills
- lockfile support for exact resolved commits
Development
uv sync --dev
uv run pytest
uv run skillsible plan -f examples/skills.yml
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 skillsible-1.0.0.tar.gz.
File metadata
- Download URL: skillsible-1.0.0.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed3a53e5839d29ee3e4e000530692112ccd75a5e2ce3a498de7d8e4cac781594
|
|
| MD5 |
4a3ac7a927c9699a36eb18b6317b57da
|
|
| BLAKE2b-256 |
ab0ebfa178369ebef025533142e3b71b075f5123853b2c25795705c006750e93
|
Provenance
The following attestation bundles were made for skillsible-1.0.0.tar.gz:
Publisher:
publish.yml on srikalyan/skillsible
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillsible-1.0.0.tar.gz -
Subject digest:
ed3a53e5839d29ee3e4e000530692112ccd75a5e2ce3a498de7d8e4cac781594 - Sigstore transparency entry: 1085353940
- Sigstore integration time:
-
Permalink:
srikalyan/skillsible@7e4a0c5f2f123d5d6bfe14f1672e3d566d928fd6 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/srikalyan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7e4a0c5f2f123d5d6bfe14f1672e3d566d928fd6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file skillsible-1.0.0-py3-none-any.whl.
File metadata
- Download URL: skillsible-1.0.0-py3-none-any.whl
- Upload date:
- Size: 9.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a17a10125886d092904ac72ca6d77328131c0b35b060ec90e2bb88655ed32589
|
|
| MD5 |
43acc7949d2cbc514d227ec369080553
|
|
| BLAKE2b-256 |
f0c40cbed1c041c8866f30fa29f1d65ab7f3a9dc4966a8ca003860335025b966
|
Provenance
The following attestation bundles were made for skillsible-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on srikalyan/skillsible
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillsible-1.0.0-py3-none-any.whl -
Subject digest:
a17a10125886d092904ac72ca6d77328131c0b35b060ec90e2bb88655ed32589 - Sigstore transparency entry: 1085354013
- Sigstore integration time:
-
Permalink:
srikalyan/skillsible@7e4a0c5f2f123d5d6bfe14f1672e3d566d928fd6 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/srikalyan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7e4a0c5f2f123d5d6bfe14f1672e3d566d928fd6 -
Trigger Event:
push
-
Statement type: