Appearance
Quickstart
Install the public SDK and call Skilleo Cloud at https://api.skilleo.org.
Python SDK
│ HTTPS
▼
api.skilleo.org/v1
│
▼
Your provider (RunPod)1. Install
bash
pip install skilleo2. API key
bash
curl -s -X POST https://api.skilleo.org/v1/account \
-H "Content-Type: application/json" \
-d '{"email":"dev@example.com"}'Save data.api_key (sk_live_…). It is shown only once.
python
from skilleo import Client
client, signup = Client.signup("dev@example.com")
print(signup["data"]["api_key"])3. Connect a provider
Your GPU and API bills stay with the provider. Skilleo does not store customer provider API keys — you manage keys; Skilleo stores only a pointer (Secrets).
bash
# In your secret store (not sent to Skilleo)
export RUNPOD_API_KEY='rpa_...'
curl -s -X POST https://api.skilleo.org/v1/providers/connections \
-H "Authorization: Bearer $SKILLEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"provider":"runpod","connection_type":"environment","secret_ref":"RUNPOD_API_KEY"}'python
client.providers.connect("runpod") # registers secret_ref RUNPOD_API_KEY
print(client.providers.list())Production (AWS Secrets Manager):
bash
curl -s -X POST https://api.skilleo.org/v1/providers/connections \
-H "Authorization: Bearer $SKILLEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"provider":"minimax","connection_type":"aws_secrets_manager","secret_ref":"arn:aws:secretsmanager:...:secret/minimax"}'python
client.providers.register(
"minimax",
connection_type="aws_secrets_manager",
secret_ref="arn:aws:secretsmanager:...:secret/minimax",
)4. Run a capability
Research (no provider required)
bash
curl -s -X POST https://api.skilleo.org/v1/runs \
-H "Authorization: Bearer $SKILLEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"target":"capability","name":"research.gather","version":"1","input":{"topic":"Kenya wildlife"}}'python
run = client.capabilities.run(
"research.gather",
version="1",
input={"topic": "Kenya wildlife"},
)
done = client.runs.wait(run["id"])
print(done["data"]["output"])LLM (connect any LLM provider first)
bash
curl -s -X POST https://api.skilleo.org/v1/runs \
-H "Authorization: Bearer $SKILLEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"target":"capability","name":"llm.generate","version":"1","input":{"objective":"Write a hook about Kenya wildlife"},"options":{"optimize_for":"cost"}}'python
client.providers.connect("minimax") # MINIMAX_API_KEY in your secret store
run = client.capabilities.run(
"llm.generate",
version="1",
input={"objective": "Write a hook about Kenya wildlife"},
options={"optimize_for": "cost"},
)
client.runs.wait(run["id"])Voice (MiniMax or ElevenLabs)
bash
curl -s -X POST https://api.skilleo.org/v1/runs \
-H "Authorization: Bearer $SKILLEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"target":"capability","name":"speech.generate","version":"1","input":{"text":"Earth stops spinning."},"options":{"provider":"elevenlabs"}}'python
client.providers.connect("elevenlabs")
run = client.capabilities.run(
"speech.generate",
version="1",
input={"text": "Earth stops spinning."},
options={"provider": "elevenlabs"},
)
client.runs.wait(run["id"])Applications depend on research.gather@1 or llm.generate@1, not on a vendor or model name.
5. Infrastructure jobs (optional)
python
gpus = client.catalog.gpus()
compute = client.compute.create(name="lab", gpu_type=gpus["data"]["items"][0]["id"])
job = client.jobs.create(type="image", compute_id=compute["id"], input={"prompt": "a red cube"})
client.jobs.wait(job["id"])
client.jobs.save(job["id"], "out.png")
client.compute.delete(compute["id"])Prefer runs for application workloads.