CLI tool for managing Claude skills from GitHub repositories
Project description
skillman: a CLI for managing Claude skills
███████╗ ██╗ ██╗ ██╗ ██╗ ██╗ ███╗ ███╗ █████╗ ███╗ ██╗ ██╔════╝ ██║ ██╔╝ ██║ ██║ ██║ ████╗ ████║ ██╔══██╗ ████╗ ██║ ███████╗ █████╔╝ ██║ ██║ ██║ ██╔████╔██║ ███████║ ██╔██╗ ██║ ╚════██║ ██╔═██╗ ██║ ██║ ██║ ██║╚██╔╝██║ ██╔══██║ ██║╚██╗██║ ███████║ ██║ ██╗ ██║ ███████╗ ███████╗ ██║ ╚═╝ ██║ ██║ ██║ ██║ ╚████║ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═══╝
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
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),@latestor 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 valueset <key> <value>: Set configuration valuelist: 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:
-
Install only from trusted sources: Only install skills from repositories you trust or that have been recommended by reliable sources.
-
Review skill functionality: Use
skillman verifyto examine what a skill does before installing it. -
Understand permissions: Skills can:
- Read, create, and modify files on your system
- Execute system commands
- Access and manipulate data
-
Permission warnings: By default, skillman displays a security warning and asks for confirmation before installing any skill. This helps you make informed decisions.
-
Skipping warnings: The
--dangerously-skip-permissionsflag 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 commandsmodels.py: Data models (Skill, Manifest, LockFile)config.py: Configuration managementgithub.py: GitHub operations and skill validationinstaller.py: Skill installation and managementutils.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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df4f6bf155dcc34b2d0b476370d151ae8ee0f7667bc871674ca118aa470757e8
|
|
| MD5 |
aae5ff4675791f570aabfcc1990b9dcb
|
|
| BLAKE2b-256 |
7c3c8db41360edd195bb0278c9d718113675d96b81fca204a326d265dcda2f63
|
Provenance
The following attestation bundles were made for skillman-0.3.3.tar.gz:
Publisher:
publish-pypi.yml on chrisvoncsefalvay/skillman
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillman-0.3.3.tar.gz -
Subject digest:
df4f6bf155dcc34b2d0b476370d151ae8ee0f7667bc871674ca118aa470757e8 - Sigstore transparency entry: 621885358
- Sigstore integration time:
-
Permalink:
chrisvoncsefalvay/skillman@1daa4dcadb2330b7b04b2a0a4bdd76e117a99c1d -
Branch / Tag:
refs/tags/v0.3.3001 - Owner: https://github.com/chrisvoncsefalvay
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@1daa4dcadb2330b7b04b2a0a4bdd76e117a99c1d -
Trigger Event:
workflow_dispatch
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91e1055c2d62603ab8c23a63857a2ff45c4a6744816342ce2baf4931c563c04e
|
|
| MD5 |
a15c672987724a7b4e23dc65e86e81e4
|
|
| BLAKE2b-256 |
39f40fbdca6e9a79f6777845a79bc8a273676fe72e3a7e45f4f99117e44e0a5e
|
Provenance
The following attestation bundles were made for skillman-0.3.3-py3-none-any.whl:
Publisher:
publish-pypi.yml on chrisvoncsefalvay/skillman
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skillman-0.3.3-py3-none-any.whl -
Subject digest:
91e1055c2d62603ab8c23a63857a2ff45c4a6744816342ce2baf4931c563c04e - Sigstore transparency entry: 621885367
- Sigstore integration time:
-
Permalink:
chrisvoncsefalvay/skillman@1daa4dcadb2330b7b04b2a0a4bdd76e117a99c1d -
Branch / Tag:
refs/tags/v0.3.3001 - Owner: https://github.com/chrisvoncsefalvay
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@1daa4dcadb2330b7b04b2a0a4bdd76e117a99c1d -
Trigger Event:
workflow_dispatch
-
Statement type: