Skip to main content

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:

  1. --source CLI flag: skillsctl --source https://catalog.example.com install my-skill
  2. source field in skills.yaml
  3. SKILLSCTL_SOURCE environment variable
  4. 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    │
└─────────────────────────────┘
  1. skillsctl install <name> calls GET /api/v1/items/<name> to fetch metadata
  2. Downloads the raw .md file via GET /api/v1/items/<name>/raw
  3. Saves it to .skillsctl/{category}/{name}.md (or custom path if --path is set)
  4. Updates skills.yaml with the installed version
  5. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skillsctl-0.3.1.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skillsctl-0.3.1-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

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

Hashes for skillsctl-0.3.1.tar.gz
Algorithm Hash digest
SHA256 42132e04b209695f8dcfef0806464fa261ac78ffa36d1f012f075080bbb37b87
MD5 d70fccb3e9561b89ef1d48894c65ba68
BLAKE2b-256 fdd3e033e0900dc7bc0b6bc4626c3d5863a15b1cbb79a9cce85f58ac0587bd83

See more details on using hashes here.

Provenance

The following attestation bundles were made for skillsctl-0.3.1.tar.gz:

Publisher: publish.yml on yashshingvi/skillsctl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for skillsctl-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 38de8bc6f1ab41f32f70b3be0c938c94aa9e3ebfdb150797e0e9637bd5f826d8
MD5 771c322fc1d514894a13bf3a47c04881
BLAKE2b-256 b1a93f2e1edbcec2c2024c9f526bbfe0fa58d474f4f2b8d4dc67da22a2912852

See more details on using hashes here.

Provenance

The following attestation bundles were made for skillsctl-0.3.1-py3-none-any.whl:

Publisher: publish.yml on yashshingvi/skillsctl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page