OpenAPI-driven Python SDK and CLI for the SkillDock.io API.
Project description
SkillDock Python SDK and CLI
skilldock is an OpenAPI-driven Python client (and a simple CLI) for the SkillDock API.
It loads the OpenAPI spec at runtime and exposes:
- A Python
SkilldockClientthat can call anyoperationId - A CLI that can list available operations and call them from your terminal
Package version: 2026.02.101309 (note: PyPI normalizes versions like 2026.02 to 2026.2 per PEP 440).
Install
pip install skilldock
Quickstart (CLI)
List operations from the OpenAPI spec:
skilldock ops
The first column is a python-friendly python_name you can use as client.ops.<python_name>(...).
Authenticate (browser login + polling):
skilldock auth login
This starts a CLI auth session on the API, prints an auth_url, opens it in your browser, then polls until it receives an app-issued access_token and saves it as the CLI token.
Access tokens are short-lived; if you see auth errors later, run skilldock auth login again.
Create a long-lived personal API token (recommended for CI and to avoid short-lived JWT expiry):
# Prints the token (shown only once by the API) and saves it into the CLI config.
skilldock tokens create --save
# List your tokens
skilldock tokens list
Call an endpoint by operationId:
skilldock call SomeOperationId --param foo=bar --json '{"hello":"world"}'
Search skills (public, no auth):
skilldock skills search "docker"
Install a skill locally (default destination is ./skills, with recursive dependency resolution):
Public skills can be installed without auth. Logged-in auth is optional and used automatically when needed (for example, private skills).
# latest
skilldock install acme/my-skill
# exact version
skilldock i acme/my-skill --version 1.2.3
# custom local destination
skilldock install acme/my-skill --skills-dir /path/to/project/skills
Uninstall a direct skill and reconcile/remove no-longer-needed dependencies:
skilldock uninstall acme/my-skill
Verify a local skill folder (packages a zip and prints sha256/size):
skilldock skill verify .
Upload a new skill release:
skilldock skill upload --namespace myorg --slug my-skill --version 1.2.3 --path .
This packages the folder into a zip and uploads it as multipart form field file.
If your API supports release dependencies, you can pass them from CLI too:
# Repeatable string form:
skilldock skill upload --namespace myorg --slug my-skill --path . \
--dependency "core/base-utils@^1.2.0" \
--dependency "tools/lint@>=2.0.0 <3.0.0"
# JSON form (array or map), inline or from file:
skilldock skill upload --namespace myorg --slug my-skill --path . \
--dependencies-json @dependencies.json
If you haven't created the namespace yet:
skilldock namespaces create myorg
skilldock namespaces list
Low-level request (method + path, bypassing operationId):
skilldock request GET /health
Quickstart (Python)
from skilldock import SkilldockClient
client = SkilldockClient(
# Optional: override if needed
openapi_url="https://api.skilldock.io/openapi.json",
# base_url="https://api.skilldock.io",
token=None, # set after `skilldock auth login`
)
ops = client.operation_ids()
print("operations:", len(ops))
# Call by operationId (params are split into path/query/header based on OpenAPI metadata)
result = client.call_operation("SomeOperationId", params={"id": "123"})
print(result)
# Or call by a generated python-friendly name:
# (see `skilldock ops` output and use the `python_name`-like identifier)
# result = client.ops.someoperationid(id="123")
client.close()
Configuration
The CLI stores config (including token) in a local JSON file:
skilldock config path
skilldock config show
You can set config values:
skilldock config set --base-url https://api.example.com --openapi-url https://api.example.com/openapi.json
skilldock config set --token "YOUR_TOKEN"
Environment variables (override config):
SKILLDOCK_OPENAPI_URLSKILLDOCK_BASE_URLSKILLDOCK_TOKENSKILLDOCK_TIMEOUT_S
Authentication Notes (Google)
This SDK assumes the API accepts a token in an HTTP header (usually Authorization: Bearer <token>).
The exact details are derived from the OpenAPI securitySchemes when present.
The SkillDock API can accept (depending on server configuration):
- Google ID token (JWT)
- App-issued access token (JWT, returned by the CLI OAuth flow)
- Personal API token (opaque string, created via
skilldock tokens create)
skilldock auth login works like this:
- Creates a CLI auth session via
POST /auth/cli/sessions - Prints the returned
auth_urland opens it in your browser - After you complete Google login, the backend approves the session
- The CLI polls
GET /auth/cli/sessions/{session_id}until it receives an app-issuedaccess_token, then saves it as the configured API token
If you want to set a token manually:
skilldock auth set-token "PASTE_TOKEN_HERE"
To create a personal API token (recommended for longer-lived auth):
skilldock tokens create --save
Development
Run the small unit test suite:
python -m unittest discover -s tests
Project details
Release history Release notifications | RSS feed
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 skilldock-2026.2.131255.tar.gz.
File metadata
- Download URL: skilldock-2026.2.131255.tar.gz
- Upload date:
- Size: 33.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89577b9dbab79322c7a9be1da5a369ce25f2dc59a89033cb76cd55ecb5671b1c
|
|
| MD5 |
18459eb28987ec310d8a1042e5972459
|
|
| BLAKE2b-256 |
f2b8a16e89a2534e0599531d58f1664b5c9556386afec5b16dc12e7f7ff8fdfa
|
File details
Details for the file skilldock-2026.2.131255-py3-none-any.whl.
File metadata
- Download URL: skilldock-2026.2.131255-py3-none-any.whl
- Upload date:
- Size: 39.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cb974ebc280400423e51cb1253b6840dfc472c4dca004cd6458c5a28d139eb8
|
|
| MD5 |
103a42d1136b714a7e35a9dc0e66ffe3
|
|
| BLAKE2b-256 |
d3f59aff27338c5d3d870fe46d3bb9787278ab4b83393a18a3357e4b316f75a6
|