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.3.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.3-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dais_skills-0.1.3.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.3.tar.gz
Algorithm Hash digest
SHA256 63b107317145a36d5ec7f5642e88b96ecb5932453bdebbb0559ca69ac3d0bc06
MD5 3c0f042e2aa1286f4137dd468656f83f
BLAKE2b-256 686b6f871c9778208b2a313bba3f38baf8661e8042b368744f0ae772185103ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for dais_skills-0.1.3.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.3-py3-none-any.whl.

File metadata

  • Download URL: dais_skills-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 11.8 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c639128093e3217fe0045fbbab04f344e4e6a09a48e5cf4e6663a306a30dcab5
MD5 ba4cdd8760bb24dd5101cd8f58516c16
BLAKE2b-256 0125e5d214e5932aa99442d0195d505216fa7dd904ec243118dc49b871390780

See more details on using hashes here.

Provenance

The following attestation bundles were made for dais_skills-0.1.3-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