Skip to main content

Declarative agent skill manager for GitHub CLI skills.

Project description

🛠️ skeel

Declarative agent skill management.

skeel reads a desired-state manifest and applies it through gh skill.

✨ Features

  • Desired state: declare skill sources in one YAML file
  • Inventory, dry run, and diff: list manifest skill status, preview commands, and compare managed skills against what's installed locally
  • Add, apply, and update: edit desired state, reconcile installed skills with clypi spinners, and update declared installed skills
  • Target flags: choose local or global scope from the CLI
  • JSON output: pass --json for one machine-readable object on stdout

🚀 Quickstart

Run skeel directly with uvx:

uvx skeel --help

⚙️ Manifest

Default path: .agents/skills.yaml in project scope, ~/.agents/skills.yaml in user scope.

sources:
  anthropics/skills:
    - skill-creator
  mavam/quarto-brief:
  openclaw/gogcli:
    - gog
  tenzir/skills:
    pin: main
    skills:
      - tenzir-ecs

An empty value installs all skills from a source. A list is the common form for selected skills. Use a nested mapping only for source options, such as pin or custom install commands.

By default, skeel installs gh skill skills into .agents/skills in the current working directory. Use --scope user for global installs into ~/.agents/skills:

uvx skeel --scope user apply

Use --manifest (-m) for a non-default desired-state manifest:

uvx skeel --manifest ./skills.yaml apply --dry-run

Scope selects the base directory for the implicit manifest and managed skill directory: project scope uses the current working directory and user scope uses $HOME. If the implicit manifest does not exist, apply, diff, list, and update are no-ops; add creates the manifest. Use --manifest or SKEEL_MANIFEST to use a manifest from another path.

✨ Usage

uvx skeel apply              # reconcile desired state
uvx skeel apply --dry-run    # print reconciliation commands
uvx skeel apply --reinstall  # reinstall every manifest entry
uvx skeel apply --reinstall tenzir/skills
uvx skeel add tenzir/skills tenzir-docs@main
uvx skeel remove tenzir/skills tenzir-docs
uvx skeel add mavam/quarto-brief --apply
uvx skeel update             # update installed manifest skills
uvx skeel list               # show manifest skill status
uvx skeel diff               # compare desired vs installed skills
uvx skeel path               # print manifest path

For scripts, use --json:

uvx skeel --json apply --dry-run
uvx skeel --json add tenzir/skills tenzir-docs
uvx skeel --json remove tenzir/skills tenzir-docs
uvx skeel --json list
uvx skeel --json diff
uvx skeel --json update --dry-run

list shows every skill entry from the manifest and whether it is installed. By default, list, diff, apply, and update read both .agents/skills.yaml in the current working directory and ~/.agents/skills.yaml; use --scope project or --scope user to operate on one scope.

For the default target, diff compares project scope against .agents/skills in the current working directory and user scope against ~/.agents/skills. apply uses the same comparison to install missing skills and remove extra installed skills. Use apply --reinstall to run every manifest installer without reconciling first. Pass apply <source> [skill] to limit the operation to one manifest source; targeted apply installs missing selected entries and leaves unrelated installed skills alone.

add <source> [skill@version] upserts desired state into the manifest. Omitting the skill selects all skills from the source. remove <source> [skill] removes the selected skill or the whole source when the skill is omitted. Pass --apply to either command to update the manifest and immediately reconcile installed skills.

update checks each installed skill separately. Human output uses the leading marker as the status:

  • updated the skill. When provenance is available, the muted suffix shows the local version before and after the update, such as main@oldsha → main@newsha.
  • checked the skill and it is already current.
  • skipped the skill. The skill is installed and available locally, but was not updated. This usually means the installed SKILL.md has no GitHub metadata or the skill is not represented by an updatable manifest entry.

Pinned GitHub entries declared in the manifest are updated by resolving the configured pin and refreshing the installed files when the source changes.

Skills installed by gh skill include provenance in SKILL.md frontmatter, and future updates can track them directly.

🧰 GitHub Skill Policy

When applying, skeel delegates placement to gh skill with:

gh skill install <repo> <skill> --dir .agents/skills --force

The target directory is derived from scope: project scope uses the current working directory and user scope uses $HOME. A bare GitHub source installs all skills from that repository:

sources:
  mavam/quarto-brief:

which runs:

gh skill install mavam/quarto-brief --all --dir .agents/skills --force

For installers that are not backed by gh skill, provide source-level install commands under the source key. Skeel runs those commands as the complete install command set:

sources:
  slack-clacks/clacks:
    skills:
      - clacks
    install:
      - uvx --from slack-clacks clacks skill --mode universal --force

To add a GitHub source from the CLI, use the same positional shape as gh skill install:

uvx skeel add tenzir/skills tenzir-docs@main
uvx skeel remove tenzir/skills tenzir-docs
uvx skeel add mavam/quarto-brief --apply

📄 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

skeel-0.3.0.tar.gz (26.9 kB view details)

Uploaded Source

Built Distribution

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

skeel-0.3.0-py3-none-any.whl (24.1 kB view details)

Uploaded Python 3

File details

Details for the file skeel-0.3.0.tar.gz.

File metadata

  • Download URL: skeel-0.3.0.tar.gz
  • Upload date:
  • Size: 26.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for skeel-0.3.0.tar.gz
Algorithm Hash digest
SHA256 20f00c41c17e12d869ff6c624285db9b6d47758959be653865a92155e039e2b0
MD5 eff1d1ea4dbbd8ccd52176a9edd2d605
BLAKE2b-256 9a51543987292d0f585867611a5afe04498f04ba17b6b68a611ea24b06e35042

See more details on using hashes here.

Provenance

The following attestation bundles were made for skeel-0.3.0.tar.gz:

Publisher: release.yaml on mavam/skeel

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

File details

Details for the file skeel-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: skeel-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 24.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for skeel-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4df02350cc2c95ccae18265ad87aca71af98bc622f0346844831b8400428d033
MD5 7d5691d98b9fbab659cde57797f7d987
BLAKE2b-256 75f98996c683057509fb51437bdaaf14f2f7f4128fdea24d4ed63196e9cb4d39

See more details on using hashes here.

Provenance

The following attestation bundles were made for skeel-0.3.0-py3-none-any.whl:

Publisher: release.yaml on mavam/skeel

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