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 updates across configured directories; --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 explicit 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

In an interactive terminal, skill rows show their source beneath the name (for example, GitHub · owner/repo). list checks known update sources in the background without blocking navigation: a spinner marks pending checks, while , , and ! mark current, updatable, and failed checks. Plain non-interactive output remains local-only.

Without a destination flag, skilly update checks every directory configured through skilly configure. Pass --local, --global, an agent flag, or --directory <path> to limit it to one destination.

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

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.37.tar.gz (229.0 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.37-cp310-abi3-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.10+Windows x86-64

skilly-0.0.37-cp310-abi3-win32.whl (2.1 MB view details)

Uploaded CPython 3.10+Windows x86

skilly-0.0.37-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.37-cp310-abi3-musllinux_1_2_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

skilly-0.0.37-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.37-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.37-cp310-abi3-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

skilly-0.0.37-cp310-abi3-macosx_10_12_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: skilly-0.0.37.tar.gz
  • Upload date:
  • Size: 229.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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.37.tar.gz
Algorithm Hash digest
SHA256 51ad99f4c1aebab98cc6d3dd95acfd1a92de6f6ec7022d4a55f6d8f39495c766
MD5 24126438d808ce072c42a2a59dcc5781
BLAKE2b-256 478af2d56c71da0da11bb7ba0924c3d06f204d092c2b43b5a8ccb97bbbfdb4ba

See more details on using hashes here.

File details

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

File metadata

  • Download URL: skilly-0.0.37-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.3 {"installer":{"name":"uv","version":"0.12.3","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.37-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3cd568df20f1c90f3f3a06f37552462feee13c2ef85c1d19665c195970ebe64d
MD5 7291f27e6a4b7547214bf9d6c155ad0e
BLAKE2b-256 d3768c427c4a272be7cbaa09215e1b32d81c69711e54a4872d12af28556b8bb8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: skilly-0.0.37-cp310-abi3-win32.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.10+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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.37-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 9ccf7be08d60b3c384e03d8fe501ad6d6a5089cc20d3b5db334d8eaf121843e9
MD5 bef16d47782ef54533281b46e31647ee
BLAKE2b-256 e0596e7f3d4dff2c8a6e91a836a9eb685a698d052cd1ce509b08c78d67fd6104

See more details on using hashes here.

File details

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

File metadata

  • Download URL: skilly-0.0.37-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.3 {"installer":{"name":"uv","version":"0.12.3","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.37-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 99b6c13c26e27250e392b64b6f192e4dcaa831bdcf49fd5db21c2848afb4b5d7
MD5 9c054394c86fe35189998a39893ed90e
BLAKE2b-256 7fe2e0226e44762f35d137061a0894cd3791bcd6010182f5932db4b0174d3503

See more details on using hashes here.

File details

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

File metadata

  • Download URL: skilly-0.0.37-cp310-abi3-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.10+, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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.37-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c2a0ffb51d5a06a28c56b066e8aad20e41ed861a35ac3c65d2322a7568c4496a
MD5 f81cf6448166b950fa54bbd79fee2ce2
BLAKE2b-256 2f9de7bb22e038fa94934eb912e205cc173fcfa34c706df9c6236ab008459f77

See more details on using hashes here.

File details

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

File metadata

  • Download URL: skilly-0.0.37-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.3 {"installer":{"name":"uv","version":"0.12.3","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.37-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5eae13d88224664eb92cf9f210f6570ba8a12df246adb61f670773e33469aa19
MD5 1fde09c8c30a0966abe178e44a8b0471
BLAKE2b-256 94440ec1f89271bad9a333f6f32cad44c877ccc934848e5e4f7fbb6690c01dfd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: skilly-0.0.37-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.3 {"installer":{"name":"uv","version":"0.12.3","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.37-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7b0f68cbbd41ae04fcf1887b595e43408cf905d9ccbdaa491ffa9a8ae4f2cc40
MD5 9a74e3d2d5d2030ca693ea641fd85cd3
BLAKE2b-256 c151a83195044e3fd003d7819e644b620864a7dce790de4804f982c04794abf4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: skilly-0.0.37-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.3 {"installer":{"name":"uv","version":"0.12.3","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.37-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 890e293dab81feeb9c846e3fbc6210298583e43716a453fd553b69dc38280444
MD5 bbe83f4b93bcba1dcae50bc6d8b9f72a
BLAKE2b-256 fd66609eda9fb1dab429ef7b2af59cb722c645634c456907aea8106e41853c95

See more details on using hashes here.

File details

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

File metadata

  • Download URL: skilly-0.0.37-cp310-abi3-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.10+, macOS 10.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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.37-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2f9077fa2eb26df7a84bb65bb447979564f15ccc43993d74ad9ba5b4f23f56b7
MD5 7b178eba498ee5f172b4a3b485d0ed00
BLAKE2b-256 21e5fd10fec03be9812d7dd3f0bc5dbcea1901a2bb44e349a308e4a84ddfe56b

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.37 This release

9 files

0.0.36

9 files

0.0.35

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