Skip to main content

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

skillplus-0.2.0.tar.gz (11.4 kB view details)

Uploaded Source

Built Distribution

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

skillplus-0.2.0-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

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

Hashes for skillplus-0.2.0.tar.gz
Algorithm Hash digest
SHA256 71fae4facf2053ffdf276f65c003cdbab1e88ba217cc04d95cb118bea2bac41b
MD5 088ff5b7749218d1c5c01e4bb853254f
BLAKE2b-256 0749cd1d93f96decf13bcd87ff0a53bb115425ee3e340af3d3f7dcab50c10320

See more details on using hashes here.

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

Hashes for skillplus-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9ebde239ee368129102bbb3926e85e5ebe37093547f4248b3dea98ac3ee793df
MD5 c99cd608bd4eef307ddde726cd6df0c2
BLAKE2b-256 721f5217fbab27b5fdeee1d83983219dcd6db7fa37ae00db2037f9ad06ee077e

See more details on using hashes here.

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