CLI tool for installing skills, agents, workflows, and rules from an Enterprise Skills Catalog
Project description
skillsctl
CLI tool for installing skills, agents, workflows, and rules from an Enterprise Skills Catalog server.
Think npm install but for enterprise knowledge — versioned markdown files that define reusable AI skills, agent prompts, operational runbooks, and compliance rules.
Installation
pip install skillsctl
Quick Start
# Point at your org's catalog
export SKILLSCTL_SOURCE=https://catalog.your-company.com
# Search for available items
skillsctl search slack
# Install a skill (its dependencies come along too)
skillsctl install send-slack-notification
# Install into a custom directory (flat, no category subfolder)
skillsctl install my-rule --path .claude/commands
# Set a project-wide default output directory
skillsctl config base-dir .claude # → .claude/skills/… .claude/agents/… etc.
skillsctl config base-dir .windsurf # → .windsurf/rules/… .windsurf/agents/… etc.
skillsctl config base-dir --unset # reset to .skillsctl (default)
# List what's installed
skillsctl list
# Update everything to latest
skillsctl sync
Commands
skillsctl install
Download and save items from the catalog into your project.
# Install one or more items (required dependencies are pulled in by default)
skillsctl install send-slack-notification http-request
# Skip dependency resolution
skillsctl install send-email --no-deps
# Install to a custom path (flat, no category subfolder)
skillsctl install my-rule --path .claude/commands
Files are saved to .skillsctl/{category}/{name}.md by default and tracked in skills.yaml.
skillsctl config
Set project-wide configuration stored in skills.yaml.
# Change the default install directory for all future installs
skillsctl config base-dir .claude # saves to .claude/{category}/{name}.md
skillsctl config base-dir .windsurf # saves to .windsurf/{category}/{name}.md
# Reset to default (.skillsctl)
skillsctl config base-dir --unset
skillsctl search
Search the remote catalog.
skillsctl search "database"
skillsctl search "deploy" --category workflows
skillsctl search "auth" --tag security
skillsctl list
Show all installed items from your skills.yaml lockfile.
skillsctl list
skillsctl update
Update specific items to their latest catalog version.
skillsctl update send-slack-notification
skillsctl update http-request send-email
skillsctl sync
Re-download all installed items, updating any that have newer versions.
skillsctl sync
skillsctl remove
Remove installed items and clean up the lockfile.
skillsctl remove send-slack-notification
Configuration
Catalog Source
The catalog server URL is resolved in this order:
--sourceCLI flag:skillsctl --source https://catalog.example.com install my-skillsourcefield inskills.yamlSKILLSCTL_SOURCEenvironment variable- Default:
http://localhost:8000
Lockfile (skills.yaml)
skillsctl maintains a lockfile in your project root that tracks the catalog source, configuration, and installed items with pinned versions:
source: https://catalog.your-company.com
base_dir: .claude # optional — set via `skillsctl config base-dir`
installed:
http-request: "1.3.0" # default path — bare string
send-slack-notification: "2.1.0"
slack-ops-agent: "1.0.0"
my-rule: # installed with --path
version: "1.0.0"
path: .claude/commands # custom flat path stored here
Project Structure
After installing items, your project will look like:
your-project/
├── skills.yaml # lockfile (commit this)
├── .skillsctl/ # default install directory (commit this)
│ ├── skills/
│ │ ├── http-request.md
│ │ └── send-slack-notification.md
│ ├── agents/
│ │ └── slack-ops-agent.md
│ └── rules/
│ └── no-direct-production-deploy.md
└── ... your code ...
With skillsctl config base-dir .claude:
your-project/
├── skills.yaml
├── .claude/
│ ├── skills/
│ │ └── http-request.md
│ └── agents/
│ └── slack-ops-agent.md
└── ... your code ...
Commit both skills.yaml and the install directory to version control so your entire team uses the same skills at the same versions.
How It Works
┌─────────────────────────────┐
│ Skills Catalog Server │
│ (FastAPI + in-memory index)│
│ │
│ Serves .md files from any │
│ git repo or local folder │
└──────────────┬──────────────┘
│
│ REST API
▼
┌─────────────────────────────┐
│ skillsctl (this CLI) │
│ │
│ install / search / sync │
│ remove / update / list │
│ config │
│ │
│ Writes .md files into │
│ your project + lockfile │
└─────────────────────────────┘
skillsctl install <name>callsGET /api/v1/items/<name>to fetch metadata- Downloads the raw
.mdfile viaGET /api/v1/items/<name>/raw - Saves it to
.skillsctl/{category}/{name}.md(or custom path if--pathis set) - Updates
skills.yamlwith the installed version - Recursively resolves and installs items listed in
requires(suppress with--no-deps)
Setting Up a Catalog Server
See the Skills Catalog repo for the server that skillsctl connects to. The server indexes markdown files with YAML frontmatter and serves them via a REST API + web UI.
# Quick start
pip install fastapi uvicorn python-frontmatter watchdog pydantic pydantic-settings jinja2 aiofiles markdown packaging
uvicorn catalog.main:app --port 8000
# Or point at your org's git repo
CATALOG_CONTENT_REPO=https://github.com/your-org/playbooks.git uvicorn catalog.main:app --port 8000
License
MIT
Project details
Release history Release notifications | RSS feed
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 skillsctl-0.3.1.tar.gz.
File metadata
- Download URL: skillsctl-0.3.1.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42132e04b209695f8dcfef0806464fa261ac78ffa36d1f012f075080bbb37b87
|
|
| MD5 |
d70fccb3e9561b89ef1d48894c65ba68
|
|
| BLAKE2b-256 |
fdd3e033e0900dc7bc0b6bc4626c3d5863a15b1cbb79a9cce85f58ac0587bd83
|
Provenance
The following attestation bundles were made for skillsctl-0.3.1.tar.gz:
Publisher:
publish.yml on yashshingvi/skillsctl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillsctl-0.3.1.tar.gz -
Subject digest:
42132e04b209695f8dcfef0806464fa261ac78ffa36d1f012f075080bbb37b87 - Sigstore transparency entry: 1522815982
- Sigstore integration time:
-
Permalink:
yashshingvi/skillsctl@921b1f88dcc1705373d0acc40e775a05f8cbba4d -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/yashshingvi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@921b1f88dcc1705373d0acc40e775a05f8cbba4d -
Trigger Event:
push
-
Statement type:
File details
Details for the file skillsctl-0.3.1-py3-none-any.whl.
File metadata
- Download URL: skillsctl-0.3.1-py3-none-any.whl
- Upload date:
- Size: 14.7 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 |
38de8bc6f1ab41f32f70b3be0c938c94aa9e3ebfdb150797e0e9637bd5f826d8
|
|
| MD5 |
771c322fc1d514894a13bf3a47c04881
|
|
| BLAKE2b-256 |
b1a93f2e1edbcec2c2024c9f526bbfe0fa58d474f4f2b8d4dc67da22a2912852
|
Provenance
The following attestation bundles were made for skillsctl-0.3.1-py3-none-any.whl:
Publisher:
publish.yml on yashshingvi/skillsctl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillsctl-0.3.1-py3-none-any.whl -
Subject digest:
38de8bc6f1ab41f32f70b3be0c938c94aa9e3ebfdb150797e0e9637bd5f826d8 - Sigstore transparency entry: 1522816001
- Sigstore integration time:
-
Permalink:
yashshingvi/skillsctl@921b1f88dcc1705373d0acc40e775a05f8cbba4d -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/yashshingvi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@921b1f88dcc1705373d0acc40e775a05f8cbba4d -
Trigger Event:
push
-
Statement type: