Skip to main content

A Python package for scanning and downloading agent skills from specified GitHub repositories.

Project description

dais-skills

A Python package for programmatically discovering, downloading, and parsing Agent Skills.

Currently supports GitHub as a skill source. GitLab, arbitrary Git repositories, and custom sources (e.g. S3) are planned.

This project is in early development. The API may change at any time and backward compatibility is not guaranteed yet.

中文文档

Features

  • Scan a repository: given a GitHub repo URL, list every skill in it along with its path, name, and description
  • Download a skill: given a repo URL and a skill path, package that skill directory as a zip byte stream
  • Parse a skill archive: extract SKILL.md metadata (with frontmatter) and every resource file (auto-classified as text or binary) from a zip

Installation

Requires Python 3.14+.

uv add dais-skills
# or
pip install dais-skills

Quick Start

Scan a repository for skills

import asyncio
from dais_skills import scan_repo

async def main():
    skills = await scan_repo("https://github.com/<owner>/<repo>")
    for s in skills:
        print(s.path, "-", s.name)
        print(" ", s.description)

asyncio.run(main())

scan_repo returns list[ScannedSkill], where each item has:

  • path: the skill directory path inside the repo
  • name: the name field from the SKILL.md frontmatter
  • description: the description field from the SKILL.md frontmatter

The scanner walks the priority directories defined by the Agent Skills specification (such as skills/, .claude/skills/, .github/skills/, and so on) and skips irrelevant directories like node_modules, .git, dist, build, and __pycache__.

Download a single skill as a zip

import asyncio
from dais_skills import download_skill_zip

async def main():
    data: bytes = await download_skill_zip(
        "https://github.com/<owner>/<repo>",
        "skills/my-skill",
    )
    with open("my-skill.zip", "wb") as f:
        f.write(data)

asyncio.run(main())

skill_path may point at either the skill directory or the SKILL.md inside it. Both forms are treated as equivalent.

Parse a downloaded skill archive

import zipfile
from dais_skills import Skill

with zipfile.ZipFile("my-skill.zip") as zf:
    skill = Skill.from_zip(zf)

print(skill.name, skill.description)
print("license:", skill.license)
print("compatibility:", skill.compatibility)
print("allowed-tools:", skill.allowed_tools)

for res in skill.resources:
    if res.type == "text":
        print("[text]", res.relative, len(res.content))
    else:
        print("[bin] ", res.relative, len(res.content))

Skill.from_zip will:

  1. Locate the skill root inside the zip (the first-level directory containing SKILL.md, or the archive root)
  2. Parse the frontmatter and body of SKILL.md
  3. Collect every remaining file as a SkillResource, splitting them into TextResource and BinaryResource via binaryornot

Public API

Exported from the top-level package:

Name Description
scan_repo(repo_url) -> list[ScannedSkill] Scan a repository and return a summary of every skill found
download_skill_zip(repo_url, skill_path) -> bytes Download the given skill directory and pack it into a zip
Skill.from_zip(zip_file) -> Skill Parse a full skill object from a zip file
ScannedSkill Scan-result dataclass
Skill Fully parsed skill dataclass
SkillResource TextResource | BinaryResource
SkillException Base exception for this package

Submodule-specific exceptions (ScannerError, DownloaderError, InvalidSkillArchiveError, GitHubError) can be imported from their respective submodules.

Development

uv sync
uv run pytest              # run unit tests
uv run pytest -m smoke     # run end-to-end smoke tests that hit real network services

Roadmap

  • Scan skills in a GitHub repository
  • Download and package a single skill from GitHub
  • Parse a skill archive
  • GitLab repository support
  • Arbitrary remote Git repository support
  • S3 and other custom sources

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

dais_skills-0.1.2.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

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

dais_skills-0.1.2-py3-none-any.whl (12.1 kB view details)

Uploaded Python 3

File details

Details for the file dais_skills-0.1.2.tar.gz.

File metadata

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

File hashes

Hashes for dais_skills-0.1.2.tar.gz
Algorithm Hash digest
SHA256 ad770f1a7fde77ddfd76b4ec51fc7e351edde22872e44773d05287f0fe4c5314
MD5 e87316b06f9ab5155290e9ff0727c373
BLAKE2b-256 2163afd65a6ef1ca72dd1d9d7bd86eb9f8368d67ff0b289e676a8bad2bee0b26

See more details on using hashes here.

Provenance

The following attestation bundles were made for dais_skills-0.1.2.tar.gz:

Publisher: publish.yaml on Dais-Project/Dais-Skills

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

File details

Details for the file dais_skills-0.1.2-py3-none-any.whl.

File metadata

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

File hashes

Hashes for dais_skills-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1e4891ec9a5a3410ca91c43690c2c50caace036985137a23439d76af0be2735a
MD5 25fc85be5ccaa452e28b1feb3b0d9667
BLAKE2b-256 ec09411ad82d50061de163de72632b2aa224fc9e461ff4d6aaf9b71a7f78d4a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for dais_skills-0.1.2-py3-none-any.whl:

Publisher: publish.yaml on Dais-Project/Dais-Skills

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