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.mdmetadata (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 reponame: thenamefield from theSKILL.mdfrontmatterdescription: thedescriptionfield from theSKILL.mdfrontmatter
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:
- Locate the skill root inside the zip (the first-level directory containing
SKILL.md, or the archive root) - Parse the frontmatter and body of
SKILL.md - Collect every remaining file as a
SkillResource, splitting them intoTextResourceandBinaryResourceviabinaryornot
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63b107317145a36d5ec7f5642e88b96ecb5932453bdebbb0559ca69ac3d0bc06
|
|
| MD5 |
3c0f042e2aa1286f4137dd468656f83f
|
|
| BLAKE2b-256 |
686b6f871c9778208b2a313bba3f38baf8661e8042b368744f0ae772185103ff
|
Provenance
The following attestation bundles were made for dais_skills-0.1.3.tar.gz:
Publisher:
publish.yaml on Dais-Project/Dais-Skills
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dais_skills-0.1.3.tar.gz -
Subject digest:
63b107317145a36d5ec7f5642e88b96ecb5932453bdebbb0559ca69ac3d0bc06 - Sigstore transparency entry: 2081726170
- Sigstore integration time:
-
Permalink:
Dais-Project/Dais-Skills@048804219cfde78e121ae574572e4e536795d628 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/Dais-Project
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@048804219cfde78e121ae574572e4e536795d628 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c639128093e3217fe0045fbbab04f344e4e6a09a48e5cf4e6663a306a30dcab5
|
|
| MD5 |
ba4cdd8760bb24dd5101cd8f58516c16
|
|
| BLAKE2b-256 |
0125e5d214e5932aa99442d0195d505216fa7dd904ec243118dc49b871390780
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dais_skills-0.1.3-py3-none-any.whl -
Subject digest:
c639128093e3217fe0045fbbab04f344e4e6a09a48e5cf4e6663a306a30dcab5 - Sigstore transparency entry: 2081726698
- Sigstore integration time:
-
Permalink:
Dais-Project/Dais-Skills@048804219cfde78e121ae574572e4e536795d628 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/Dais-Project
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@048804219cfde78e121ae574572e4e536795d628 -
Trigger Event:
push
-
Statement type: