Skip to main content

npm pypi pyrefly GitHub stars npm Downloads PyPI Downloads License

skilly

Manage Agent Skills from the command line or Python. Creates specification-compliant skills, installs from GitHub, Bitbucket Cloud, Bitbucket Data Center, or dependencies, and keeps them up to date.

Installation

uvx skilly --help               # Python (uvx/pip)
npx @xelandernt/skilly --help   # Node (npx)
brew install xelandernt/skilly/skilly  # Homebrew

Python

uvx skilly --help

Ships CLI + Python import surface. Pre-built wheels for Linux x64, macOS arm64/x64, Windows x64.

Node

npx @xelandernt/skilly --help

Ships native Rust CLI (macOS arm64/x64, Linux x64 glibc, Windows x64). No Python import surface.

Homebrew

brew tap xelandernt/skilly https://github.com/xelandernt/skilly
brew install xelandernt/skilly/skilly

Ships native Rust CLI (macOS arm64/x64, Linux x64).

Info

See the installation guide for a full capability comparison.

Quick Start

skilly create deployment-checks \
  --description "Validate deployment readiness." \
  --instructions "# Instructions\n\nRun the deployment checklist." \
  --yes
skilly list

CLI Commands

Command Purpose
scan Find skills provided by Python and Node project dependencies
download <repository-url> Install one or more skills from a supported repository
list Browse, update, or remove installed skills
update Preview available updates; --yes applies all
remove <name> Remove an installed skill by directory name
skillsmp search <query> Search SkillsMP and install a selected result
create Create a valid skill directory
configure Manage directories and repository credentials

Run skilly <command> --help for all options. Run skilly --version to print the installed package version.

Create Skills

See creating skills.

Install Dependency Skills

See dependency scanning.

Install Repository Skills

See installing and managing.

Destinations

All management commands accept the same destination options:

uvx skilly list --local        # .agents/skills
uvx skilly list --global       # ~/.agents/skills
uvx skilly list --claude       # .claude/skills
uvx skilly list --codex        # .codex/skills
uvx skilly list --copilot      # .github/skills (local), ~/.copilot/skills (global)
uvx skilly list --directory ~/custom     # Explicit directory
Flags Resolved destination
none SKILLY_DEFAULT_DIRECTORY if set, otherwise .agents/skills
--local .agents/skills
--global ~/.agents/skills
--claude .claude/skills
--claude --global ~/.claude/skills
--codex .codex/skills
--codex --global ~/.codex/skills
--copilot .github/skills
--copilot --global ~/.copilot/skills
--directory <path> That directory (after ~ expansion)

Set a default destination:

export SKILLY_DEFAULT_DIRECTORY="$HOME/.config/skilly/skills"

--directory overrides all other destination options and SKILLY_DEFAULT_DIRECTORY.

Configuration

skilly configure manages directories and saved repository credentials.

uvx skilly configure
uvx skilly configure --show          # Print current config as TOML
uvx skilly configure --reset         # Restore defaults

Add or remove custom directories via CLI:

uvx skilly configure --add-global /opt/skills
uvx skilly configure --add-local .project/skills
uvx skilly configure --remove-global /opt/skills
uvx skilly configure --remove-local .project/skills

Configuration is stored in ~/.skilly.toml:

default_directory = ".agents/skills"

[global]
directories = ["~/.agents/skills", "/opt/skills"]

[local]
directories = [".agents/skills", ".project/skills"]

The default directory opens first in interactive menus (list, scan, etc.). When viewing a skill's files, press / to filter by filename and Esc to clear the filter.

Repository Authentication

For download, list, and update, Skilly resolves credentials in this order:

  1. --token <TOKEN> for a one-off command.
  2. A saved provider credential with the exact provider and base URL.
  3. A provider environment variable.
Provider Environment fallback Saved base URL example
GitHub SKILLY_GITHUB_TOKEN, GITHUB_TOKEN, GH_TOKEN https://github.com
Bitbucket Cloud SKILLY_BITBUCKET_CLOUD_TOKEN https://bitbucket.org
Bitbucket Data Center SKILLY_BITBUCKET_DATA_CENTER_TOKEN https://git.example.com/bitbucket

Save a reusable credential with skilly configure, or use the non-interactive command:

skilly configure --add-provider bitbucket-data-center \
  --provider-url https://git.example.com/bitbucket \
  --provider-token "$BITBUCKET_TOKEN"

Saved tokens are redacted from skilly configure --show, never written to installed skill metadata, and stored in ~/.skilly.toml; on Unix that file is owner-only. Remove a saved credential with:

skilly configure --remove-provider bitbucket-data-center \
  --provider-url https://git.example.com/bitbucket

Use --provider bitbucket-data-center for Bitbucket Data Center repositories:

uvx skilly download https://git.example.com/bitbucket/projects/ENG/repos/skills \
  --provider bitbucket-data-center --token "$SKILLY_BITBUCKET_DATA_CENTER_TOKEN"

Python API

Full Python API reference with SkillRepository, local discovery functions, caller-owned repository discovery, source types, SkillsMP client, and custom filesystem protocol.

from pathlib import Path
from skilly import (
    ProjectSettings,
    PythonSource,
    Skill,
    SkillRepository,
)

repository = SkillRepository(
    directory=Path(".agents/skills"),
    project=ProjectSettings(
        sources=(
            PythonSource(
                dependency_groups=("dev",),
                optional_dependencies=("docs",),
            ),
        ),
    ),
)

repository.install(
    Skill(
        name="code-review",
        description="Review code for correctness and maintainability.",
        body="# Instructions\n\nReview the proposed change.",
    )
)

for match in repository.scan_project():
    print(match.available.name, match.status)

Load an untrusted skill bundle directly from memory without filesystem or network access:

from pathlib import PurePosixPath
from skilly import Skill, SkillResource

skill = Skill.from_bundle(
    skill_markdown,
    (
        SkillResource(PurePosixPath("references/runbook.md"), "reference", runbook_bytes),
    ),
)

Stateless discovery functions for one-shot reads:

from skilly import (
    NodeSource,
    PythonSource,
    discover_installed_skills,
    discover_package_source_skills,
)

installed = discover_installed_skills()
python_skills = discover_package_source_skills(PythonSource())
node_skills = discover_package_source_skills(NodeSource())

ProjectSettings accepts PythonSource, NodeSource, and MavenSource:

from pathlib import Path

from skilly import (
    MavenSource,
    NodeSource,
    ProjectSettings,
    PythonSource,
    SkillRepository,
)

repository = SkillRepository(
    directory=Path(".agents/skills"),
    project=ProjectSettings(
        sources=(
            NodeSource(
                include_dependencies=True,
                include_dev_dependencies=False,
            ),
        ),
    ),
)

Use ProjectSettings(sources=()) to disable scanning, or pass individual PackageSource entries to scan only specific ecosystems. SkillRepository() defaults to Python, Node, and Maven sources.

Maven support

Maven skills are discovered from JAR artifacts in the local Maven repository (~/.m2/repository by default). The scanner:

  • Reads only direct <dependencies> from pom.xml — profiles, plugins, and <dependencyManagement> are ignored.
  • Resolves ${property} references defined in the same file's <properties> block.
  • Loads skills from recognized archive layouts: .agents/skills/<name>/SKILL.md and skills/<name>/SKILL.md.
  • Preserves binary resources inside JARs.
  • Rejects coordinates with path traversal components.

Known limitations:

  • Only the local repository is used; no remote artifact resolution.
  • No POM inheritance or effective-model merging.
  • No Gradle build file support.
  • Build execution and dependency graph traversal are not performed.
  • MavenSource includes compile, runtime, and test scopes by default; provided and system scopes are excluded.

SkillsMP client with typed results:

from skilly.skillsmp import ClientSettings, SkillsMp, SkillsMpSearchQuery

client = SkillsMp(settings=ClientSettings(base_url="https://skillsmp.com/api/v1"))
result = client.search(SkillsMpSearchQuery(text="python", limit=5))
print(result.data.skills[0].repository_url)

Development

just install
just lint
just test
just typecheck

License

MIT

Download files

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

Source Distribution

skilly-0.0.35.tar.gz (213.5 kB view details)

Uploaded Source

Built Distributions

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

skilly-0.0.35-cp310-abi3-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.10+Windows x86-64

skilly-0.0.35-cp310-abi3-win32.whl (2.0 MB view details)

Uploaded CPython 3.10+Windows x86

skilly-0.0.35-cp310-abi3-musllinux_1_2_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

skilly-0.0.35-cp310-abi3-musllinux_1_2_aarch64.whl (2.5 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

skilly-0.0.35-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

skilly-0.0.35-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

skilly-0.0.35-cp310-abi3-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

skilly-0.0.35-cp310-abi3-macosx_10_12_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file skilly-0.0.35.tar.gz.

File metadata

  • Download URL: skilly-0.0.35.tar.gz
  • Upload date:
  • Size: 213.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skilly-0.0.35.tar.gz
Algorithm Hash digest
SHA256 2fd13ee126598a524049d541332f5a94500852c19f36cb396ec59a562d622c4f
MD5 fbf35a8c64ec6dedcae683a3adeeff92
BLAKE2b-256 d440811324dcc6e12dff1f7c8dd3a51892422eaa23836f165ae04460f868561a

See more details on using hashes here.

File details

Details for the file skilly-0.0.35-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: skilly-0.0.35-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skilly-0.0.35-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 70c8edc4132cb7956ff0592cfd68e4cdc6148f641e7a947c5334ad295c1a1462
MD5 b61afd45d97f4d8496a51d9b02f6c26c
BLAKE2b-256 17428847690b91549abfad8fd614708c4fc9d7407340bf000606c144e2963656

See more details on using hashes here.

File details

Details for the file skilly-0.0.35-cp310-abi3-win32.whl.

File metadata

  • Download URL: skilly-0.0.35-cp310-abi3-win32.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.10+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skilly-0.0.35-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 0f2f51a7e5eb11c22f55dad6eda10652029592bb31c4fdd1e2d1498dc57cc923
MD5 01e16dc835f86245388c7f9d080d3a26
BLAKE2b-256 e71d5e42fc8345f565c32e1204d93d99df4ab813046c22c7112ae8f841ac985f

See more details on using hashes here.

File details

Details for the file skilly-0.0.35-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: skilly-0.0.35-cp310-abi3-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.10+, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skilly-0.0.35-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 272e43e6d8e3ebac0514aaed6c770fc7548abf1bce358ad7b226cfcb9e0d3a17
MD5 6b9a009b4ba9946f6bc4e95ad3517ecb
BLAKE2b-256 ace9fc405b9547550c75acbcc812bf16b218ff8661adf6a37b8ea81cb91f806d

See more details on using hashes here.

File details

Details for the file skilly-0.0.35-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: skilly-0.0.35-cp310-abi3-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.10+, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skilly-0.0.35-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6a8b45b4829cf427cf5783eac2d94e424618a380d3c726dfdd3795eccb8b2164
MD5 02256de57f55c9f6cfc6e69b277769f8
BLAKE2b-256 33a22ab4e6a9d0e5ead72a6556ea43d44d6facb51a2495a689ab600b348fb3c7

See more details on using hashes here.

File details

Details for the file skilly-0.0.35-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: skilly-0.0.35-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skilly-0.0.35-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 69f09c8e19e72659d5e87b78484892360312e4d09ad663941756468c0d8a27da
MD5 ce9b36077262ac506be6672a6c68b260
BLAKE2b-256 deb852a505c2b8d77282632c037851aba0f79660087c39789964e034874bafc6

See more details on using hashes here.

File details

Details for the file skilly-0.0.35-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

  • Download URL: skilly-0.0.35-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skilly-0.0.35-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a66673111b7fa619c5c85264e69497ed64e67085a9af1cf729cc2a9fee5ba26c
MD5 9ae1f635ab3ab04e719ebb8e059de1b3
BLAKE2b-256 7d93403862e79728d5daee2dbceb35d38e8594df042ed8375261b757684e39b8

See more details on using hashes here.

File details

Details for the file skilly-0.0.35-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: skilly-0.0.35-cp310-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.10+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skilly-0.0.35-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 80d43aa09213b5df669ee8a64412d820ffa72ff54323ab24b9e95ba481f68594
MD5 6e1590ae03bb9acc3628ab270db19cdc
BLAKE2b-256 9d498257b87b272abffd1ee13c975eff4eab4c99ac5b7b4e3d726638e1433a6b

See more details on using hashes here.

File details

Details for the file skilly-0.0.35-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

  • Download URL: skilly-0.0.35-cp310-abi3-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.10+, macOS 10.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skilly-0.0.35-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ee48bbc72c8cc44bd76ea9e1c64b89bea85f097febdbc0e4c7a1cc0ffd8bca64
MD5 a46ea0a587ee44c307ff8c07a5046372
BLAKE2b-256 5783b4d5455214fc1027a29717b0919a73b3b8001de5cf707260045a2fe20fe7

See more details on using hashes here.

Release history Release notifications | RSS feed

0.0.37

9 files

0.0.36

9 files

This release

0.0.35 This release

9 files

0.0.34

9 files

0.0.33

9 files

0.0.32

9 files

0.0.31

9 files

0.0.30

9 files

0.0.29

9 files

0.0.28

9 files

0.0.27

9 files

0.0.26

9 files

0.0.25

9 files

0.0.24

9 files

0.0.23

9 files

0.0.21

9 files

0.0.20

9 files

0.0.19

9 files

0.0.18

9 files

0.0.17

9 files

0.0.16

9 files

0.0.15

9 files

0.0.14

9 files

0.0.10

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

Supported by

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