Official Python SDK for SkillPlus
Project description
SkillPlus Python SDK
Official Python SDK for the hosted SkillPlus API.
SkillPlus provides security intelligence for AI skills and agent-facing software, helping developers, teams, and platforms scan, understand, and trust AI skills before installation, approval, or integration.
Install
pip install skillplus
Requires Python 3.10+.
Quick start
query gives a binary answer: is there a report, or not.
from skillplus import SkillPlus
client = SkillPlus(api_key="skp_...")
result = client.query("https://www.skills.sh/vercel-labs/skills/find-skills")
# GitHub repositories work the same way: "https://github.com/owner/repo"
if result.status == "found":
print(result.report.verdict) # "safe" | "medium" | "high" | "unknown" — UI labels: Safe / Caution / High Risk / Unrated
else:
print("no report yet", "(scan in progress)" if result.scanning else "")
Prefer verdict over the legacy rating field — it folds historical values
onto the current three-tier scale.
The three integration patterns
1. Show a report (frontend page) — pure read, instant:
result = client.query(url) # found | not_found, never blocks
2. Scan in the background (batch pipelines) — fire-and-forget, or wait:
ack = client.scan(url) # returns immediately: ack.accepted / ack.scanning
report = client.scan(url, wait=True) # blocks until the report completes, returns it
3. Query-and-scan (skill detail pages) — if it was never scanned, scan it:
result = client.query(url, scan_if_missing=True) # triggers a scan, still returns immediately
result = client.query(url, wait=True) # scans if needed AND waits for the report
wait=True implies scan_if_missing; a failing scan raises SkillPlusError
(errors travel on the exception channel, never as a status value).
Client options
client = SkillPlus(
api_key="skp_...",
base_url="https://skillplus.xyz", # staging / self-hosted override
timeout=30.0, # per-request timeout (seconds)
max_retries=2, # retries on 429/502/503, honoring Retry-After
)
Waiting calls accept wait_interval (default 5 s) and wait_timeout
(default 600 s).
Context manager
from skillplus import SkillPlus
with SkillPlus(api_key="skp_...") as client:
ack = client.scan("https://www.skills.sh/vercel-labs/skills/find-skills")
print(ack.accepted)
Methods
| Method | Use case |
|---|---|
query(url, ...) |
Binary check: found (report attached) or not_found. Options: scan_if_missing, wait. |
scan(url, ...) |
Trigger a scan: fire-and-forget ack, or wait=True for the finished report. force=True re-scans fresh reports. |
get_report(scan_id) |
Retrieve a report by id: verdict, findings, AI audit, supply-chain snapshot. |
get_badge(scan_id) |
Fetch the badge SVG for embedding. |
get_badge_url(scan_id) |
Generate a badge URL for READMEs, marketplaces, or internal portals. |
Error handling
from skillplus import SkillPlus, SkillPlusError
client = SkillPlus(api_key="skp_...")
try:
result = client.query("https://www.skills.sh/vercel-labs/skills/find-skills")
except SkillPlusError as error:
print(error.status_code)
print(error.message)
Development
uv sync --extra dev
uv run pytest
uv build
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 skillplus-0.2.0.tar.gz.
File metadata
- Download URL: skillplus-0.2.0.tar.gz
- Upload date:
- Size: 11.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71fae4facf2053ffdf276f65c003cdbab1e88ba217cc04d95cb118bea2bac41b
|
|
| MD5 |
088ff5b7749218d1c5c01e4bb853254f
|
|
| BLAKE2b-256 |
0749cd1d93f96decf13bcd87ff0a53bb115425ee3e340af3d3f7dcab50c10320
|
File details
Details for the file skillplus-0.2.0-py3-none-any.whl.
File metadata
- Download URL: skillplus-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ebde239ee368129102bbb3926e85e5ebe37093547f4248b3dea98ac3ee793df
|
|
| MD5 |
c99cd608bd4eef307ddde726cd6df0c2
|
|
| BLAKE2b-256 |
721f5217fbab27b5fdeee1d83983219dcd6db7fa37ae00db2037f9ad06ee077e
|