Skip to main content

CLI tool for managing Claude skills from GitHub repositories

Project description

skillman: a CLI for managing Claude skills

███████╗ ██╗ ██╗ ██╗ ██╗ ██╗ ███╗ ███╗ █████╗ ███╗ ██╗ ██╔════╝ ██║ ██╔╝ ██║ ██║ ██║ ████╗ ████║ ██╔══██╗ ████╗ ██║ ███████╗ █████╔╝ ██║ ██║ ██║ ██╔████╔██║ ███████║ ██╔██╗ ██║ ╚════██║ ██╔═██╗ ██║ ██║ ██║ ██║╚██╔╝██║ ██╔══██║ ██║╚██╗██║ ███████║ ██║ ██╗ ██║ ███████╗ ███████╗ ██║ ╚═╝ ██║ ██║ ██║ ██║ ╚████║ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═══╝

Tests and Build Code Quality Python 3.8+ License: MIT PyPI

A Python CLI for managing Claude skills from GitHub repositories. Handles installation, versioning, and synchronisation of skills across user and project scopes -- mostly gracefully.

Installation

Via pip (from PyPI)

Once published to PyPI:

pip install skillman

Via uv (recommended)

The uv tool is a fast, all-in-one Python package installer and tool runner:

uv tool install skillman

Or run directly without installing:

uv run --with skillman skillman init

Install uv

Via pipx

pipx install skillman

From source (development)

Clone the repository and install in development mode:

git clone https://github.com/chrisvoncsefalvay/skillman.git
cd skillman
pip install -e .

Or with development dependencies:

pip install -e ".[dev]"

Quick start

Create an empty manifest in your project:

skillman init

List installed skills:

skillman list

Commands

skillman init

Create empty skills.toml in current directory.

skillman add [options]

Add and install a skill from GitHub.

By default, the tool displays a security warning before installation to help you make informed decisions about which skills to install.

Options:

  • -s, --scope <local|user>: Installation scope (default: local)
  • --no-verify: Skip skill validation
  • --force: Overwrite existing skill
  • --dangerously-skip-permissions: Skip security warning (not recommended)

Skill specification format:

  • Single skill repo: username/reponame[@version]
  • Skill in repository folder: username/reponame/foldername[@version]
  • Nested skill (multi-tier): username/reponame/folder1/folder2/...[@version]
  • Version: @1.2.3 (tag), @abc1234 (SHA), @latest or omitted (latest)

Supports arbitrary nesting levels. The tool will look for SKILL.md in the specified path.

Example:

skillman add anthropics/skills/canvas-design
skillman add anthropics/skills/document-skills/docx
skillman add myorg/repo/custom-skill@1.2.3

skillman remove [options]

Remove skill from manifest and filesystem.

Options:

  • -s, --scope <local|user>: Only remove from specified scope
  • --keep-files: Remove only from manifest, keep installed files

skillman verify

Check if skill exists at source and has valid structure.

skillman list [options]

List installed skills with status.

Options:

  • -s, --scope <local|user>: Show only specified scope

Status values:

  • synced: Installed and matches manifest version
  • outdated: Installed version differs from manifest
  • orphaned: Installed but not in manifest
  • missing: In manifest but not installed

skillman show

Display detailed skill information.

skillman update [|--all] [--dry-run]

Update installed skills to versions specified in manifest.

Options:

  • --all: Update all skills
  • --dry-run: Show what would happen

Examples:

skillman update canvas-design
skillman update --all
skillman update --dry-run

skillman fetch [--dry-run]

Fetch and update all skills (alias for update --all).

skillman sync [options]

Synchronise skills between manifest and installed.

Options:

  • --up: Update skills to latest matching manifest constraints
  • --down: Add installed-but-unlisted skills to manifest
  • -y, --yes: Don't prompt for confirmation
  • --dry-run: Show what would happen

skillman clean [options]

Remove orphaned skills (installed but not in manifest).

Options:

  • -s, --scope <local|user>: Clean only specified scope
  • --dry-run: Show what would happen
  • -y, --yes: Don't prompt for confirmation

skillman config [args]

Manage configuration.

Subcommands:

  • get <key>: Get configuration value
  • set <key> <value>: Set configuration value
  • list: List all configuration values

Configuration keys:

  • default-scope: Default installation scope (local or user)
  • github-token: GitHub token for private repositories

Configuration file location: ~/.skillman/config.toml

Example:

skillman config set github-token your-token-here
skillman config get default-scope
skillman config list

Installation paths

Skills are installed to:

  • User scope: ~/.claude/skills/user/
  • Project scope: ./.claude/skills/

Manifest file

Skills are declared in skills.toml:

[tool.skillman]
version = "1.0.0"

[[skills]]
name = "canvas"
source = "anthropics/skills/canvas-design"
version = "latest"
scope = "user"
aliases = ["design"]

[[skills]]
name = "custom"
source = "myorg/repo/custom-skill"
version = "1.0.0"
scope = "local"

Security considerations

Skills can execute code and access system resources. Before installing a skill, you should:

  1. Install only from trusted sources: Only install skills from repositories you trust or that have been recommended by reliable sources.

  2. Review skill functionality: Use skillman verify to examine what a skill does before installing it.

  3. Understand permissions: Skills can:

    • Read, create, and modify files on your system
    • Execute system commands
    • Access and manipulate data
  4. Permission warnings: By default, skillman displays a security warning and asks for confirmation before installing any skill. This helps you make informed decisions.

  5. Skipping warnings: The --dangerously-skip-permissions flag allows skipping the security warning. This is not recommended except for trusted, well-known skills.

For detailed information about skill security and permissions, see: Using Skills in Claude - Security

Skill metadata extraction

Skillman automatically extracts metadata from SKILL.md front matter in YAML format:

---
title: My Skill
description: What this skill does
license: MIT
author: Author Name
version: 1.0.0
tags:
  - documentation
  - productivity
---

# Skill content...

Extracted metadata is displayed when:

  • Verifying a skill: skillman verify username/repo/skill
  • Showing skill details: skillman show skillname

If no YAML front matter is present, the first non-header paragraph from the markdown is used as the description.

Lock file

skills.lock is automatically generated and maintains exact commit SHAs for reproducible installations. This file should be committed to version control.

Configuration

Create ~/.skillman/config.toml for global configuration:

default-scope = "local"
github-token = "your-github-token"

Or use the skillman config command:

skillman config set github-token your-token

Development

Install development dependencies:

pip install -e ".[dev]"

Run tests:

pytest

Format code:

black skillman

Type check:

mypy skillman

Requirements

  • Python 3.8+
  • click: CLI framework
  • rich: Formatted output
  • GitPython: Git operations
  • tomli/tomli_w: TOML parsing
  • requests: HTTP operations

Architecture

The tool is structured as follows:

  • cli.py: Click-based CLI commands
  • models.py: Data models (Skill, Manifest, LockFile)
  • config.py: Configuration management
  • github.py: GitHub operations and skill validation
  • installer.py: Skill installation and management
  • utils.py: Utility functions for manifest and lock file handling

All output uses the Rich library for ASCII-compatible formatting (no Unicode box-drawing or emoji).

Error handling

The tool provides (mostly) clear error messages for:

  • Network failures (with retry suggestions)
  • Validation failures (showing what's wrong with the skill structure)
  • Conflict warnings (these are only warnings as Claude should determine how to actually resolve them)
  • Sync failures (showing which skills succeeded and which failed)

License

MIT

Made with ❤️ in the Mile High City 🏔️ by Chris von Csefalvay and 🐶 Oliver.

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

skillman-0.3.3.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

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

skillman-0.3.3-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file skillman-0.3.3.tar.gz.

File metadata

  • Download URL: skillman-0.3.3.tar.gz
  • Upload date:
  • Size: 20.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for skillman-0.3.3.tar.gz
Algorithm Hash digest
SHA256 df4f6bf155dcc34b2d0b476370d151ae8ee0f7667bc871674ca118aa470757e8
MD5 aae5ff4675791f570aabfcc1990b9dcb
BLAKE2b-256 7c3c8db41360edd195bb0278c9d718113675d96b81fca204a326d265dcda2f63

See more details on using hashes here.

Provenance

The following attestation bundles were made for skillman-0.3.3.tar.gz:

Publisher: publish-pypi.yml on chrisvoncsefalvay/skillman

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

File details

Details for the file skillman-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: skillman-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 18.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for skillman-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 91e1055c2d62603ab8c23a63857a2ff45c4a6744816342ce2baf4931c563c04e
MD5 a15c672987724a7b4e23dc65e86e81e4
BLAKE2b-256 39f40fbdca6e9a79f6777845a79bc8a273676fe72e3a7e45f4f99117e44e0a5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for skillman-0.3.3-py3-none-any.whl:

Publisher: publish-pypi.yml on chrisvoncsefalvay/skillman

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