From runpod
Runpod CLI for managing GPU/CPU workloads from the terminal — pods, serverless endpoints, templates, network volumes, Hub deploys, models, SSH, and file transfer (send/receive). Use for terminal/CI/scripting, Hub browse/deploy, SSH setup, `doctor`, or when the Runpod MCP tools are not connected. For structured tool calls in an MCP-enabled session, prefer runpod-mcp.
How this skill is triggered — by the user, by Claude, or both
Slash command
/runpod:runpodctlThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Manage GPU pods, serverless endpoints, templates, volumes, and models.
evals/cpu-pod-create.eval.mdevals/hub-deploy-serverless.eval.mdevals/image-to-template-to-serverless.eval.mdevals/pod-auto-terminate.eval.mdevals/pod-from-template-with-volume.eval.mdevals/pod-ssh-connect.eval.mdevals/serverless-autoscale-by-requests.eval.mdreference/command-reference.mdreference/install.mdreference/model-caching.mdManage GPU pods, serverless endpoints, templates, volumes, and models.
curl -sSL https://cli.runpod.net | bash (any platform) or brew install runpod/runpodctl/runpodctl. Manual binaries, Windows/Linux steps, and the version caveat (--model-reference + multi-volume need v2.4.0+): reference/install.md.
Old runpodctl builds silently lack newer flags/behaviors (e.g.
--model-referencedoesn't exist before v2.4.0) and produce confusing downstream errors — and the Homebrew tap can lag well behind. So, before any work:
- Update to the latest build — check
runpodctl version, then runrunpodctl update(or reinstall from the latest release).- Pin to one recent version for the whole task.
- Never switch between an old and a new binary mid-task (that flip-flop is a known failure).
- Verify once —
runpodctl versionshows the current build before you continue.
runpodctl update # FIRST: get on the latest build — old versions cause confusing errors
runpodctl version # confirm the current version before doing any work
export RUNPOD_API_KEY=your_key # Non-interactive auth (agents) — runpodctl reads this
runpodctl doctor # Interactive first-time setup (API key + SSH) — for humans
runpodctl --help # See current top-level commands
runpodctl pod create --help # Inspect exact current flags before creating
runpodctl gpu list # See available GPU types
runpodctl datacenter list # GPU availability per data center (use to co-locate GPU + volume)
runpodctl hub search vllm # Find a hub repo
runpodctl serverless create --hub-id <id> --name "my-vllm" # Deploy from hub
runpodctl template search pytorch # Find a template
runpodctl pod create --template-id runpod-torch-v21 --gpu-id "NVIDIA GeForce RTX 4090" # Create from template
runpodctl pod list # List your pods
Auth: an agent should
export RUNPOD_API_KEY=...(non-interactive).runpodctl doctoris interactive (prompts) and also sets up SSH keys — good for a human's first run, not for scripted use.
API key: https://console.runpod.io/user/settings
Live runpodctl --help output is authoritative for exact flags, aliases, and command syntax. Use this skill for workflows, decision rules, safety notes, and common examples.
runpodctl --help
runpodctl <resource> --help
runpodctl <resource> <action> --help
Before using unfamiliar commands, inspect live help first. Do not rely on this skill as an exhaustive flag reference.
runpodctl hub list: --owner runpod-workers (first-party), --order-by releasedAt/updatedAt (recency), --order-by deploys/stars (adoption). Don't pin a scarce large-GPU tier a small model doesn't need.--workers-min 1 (keep one worker always warm → no cold start), not --workers-max 1 (that only caps the ceiling). A warm min-1 worker is ideal for development/iteration.--workers-min 1 for dev, you must set it back to --workers-min 0 (or delete the endpoint) when done — otherwise it quietly runs up cost.serverless update has no --gpu-id flag. To change an existing endpoint's GPU pool, call PATCH https://rest.runpod.io/v1/endpoints/<id> with {"gpuTypeIds":[...]} directly.runpodctl serverless create --compute-type CPU (or the MCP server). Never use the public control REST POST https://rest.runpod.io/v1/endpoints with "computeType":"CPU" — it silently provisions a GPU endpoint instead (verified evidence in the Serverless command section below).--image when the user has a specific Docker image and does not need a saved template.runpodctl pod create --help for the current valid flag set.--ports and --env at creation (they can't be added to a running pod without a reset), then follow the pod development loop in the runpod-usage skill (reference/pod-workflows.md) — SSH-exec the install, bind to 0.0.0.0, and poll the proxy URL until it answers.runpodctl pod get <pod-id> or runpodctl ssh info <pod-id> to retrieve connection details. runpodctl has no interactive-shell command — ssh info returns the connection command + key but does not connect. Run commands over SSH yourself with ssh user@host "command".send / receive or S3-compatible storage for migrations.--terminate-after (deletes the pod); --stop-after only stops it, so disk/volume keep billing.--workers-min 0 (the default) — no GPU billing while idle, only per request-second; this is the right cost posture for a request/response API.ready but jobs sit IN_QUEUE with inProgress: 0, the image is broken/mis-dispatching — the fix is to switch to a different worker rather than wait it out./health worker counts.Essentials below. Full flag menu → reference/command-reference.md (pods lifecycle, hub/template filters, registry auth, billing, SSH key management); live runpodctl <resource> <action> --help is authoritative for exact flags.
runpodctl pod list # running pods (+ --all / --status / --since / --created-after)
runpodctl pod get <pod-id> # details incl. SSH info
runpodctl pod create --template-id <id> --gpu-id "NVIDIA GeForce RTX 4090" # from template
runpodctl pod create --image <img> --gpu-id "NVIDIA GeForce RTX 4090" # from image
runpodctl pod create --compute-type cpu --image ubuntu:22.04 # CPU pod (lowercase `cpu`; serverless uses `CPU`)
runpodctl pod {start|stop|restart|reset|update|delete} <pod-id> # lifecycle (delete aliases: rm/remove)
Browse/search the Runpod Hub (curated deployable repos).
runpodctl hub search vllm # find a repo (+ hub list [--type/--category/--order-by/--owner])
runpodctl hub get <listing-id|owner/name> # repo details
runpodctl serverless list | get <endpoint-id> | delete <endpoint-id>
runpodctl serverless create --name "x" --template-id <id> # from template
runpodctl serverless create --name "x" --hub-id <listing-id> # from hub (+ --env KEY=VAL to override defaults)
runpodctl serverless create --hub-id <id> --gpu-id "NVIDIA GeForce RTX 4090" \
--model-reference https://huggingface.co/<org>/<model>:main # attach & host-cache a HF model (GPU only)
runpodctl serverless update <endpoint-id> --workers-max 5
Create from hub: --hub-id resolves the hub listing, extracts the build image and config (GPU IDs, container disk, env vars), creates an inline template, and deploys. Accepts both SERVERLESS and POD listing types. GPU IDs and env var defaults from the hub config are included automatically; override with --gpu-id and --env.
CPU serverless endpoints (the always/never rule is in Decision Rules above): create with runpodctl serverless create --compute-type CPU (optionally --instance-id, e.g. cpu3g-4-16) or the MCP server. Verified evidence for why the public REST must not be used: 2026-07-14, POST https://rest.runpod.io/v1/endpoints with "computeType":"CPU" silently returned a GPU endpoint (gpuCount:1, cpuFlavorIds:null), while runpodctl --compute-type CPU correctly returned computeType:"CPU" with instanceIds:["cpu3g-4-16"]. The MCP server drives Runpod's internal REST v2 and handles this correctly; the public control REST is v1-only (rest.runpod.io/v2 just redirects to docs). The separate runtime/invoke API https://api.runpod.ai/v2/<endpoint-id>/… (health/run/runsync/openai) is a different v2 and works fine — the v1-vs-v2 caveat here is only about the control/management REST.
Model cache (--model-reference): Attach a Hugging Face model to the endpoint by full URL with a ref, e.g. https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct:main. Runpod caches it host-side in the standard HF cache dir (/runpod-volume/huggingface-cache/hub/), so the worker loads it directly — no bake, no volume. Repeatable; works with --template-id/--hub-id, GPU only, runpodctl v2.4.0+. Full mechanics + how it compares to baking / network volume / the Model Repository: reference/model-caching.md. Worked end-to-end: golden path 20 — model-caching endpoint.
Multi-region / high-availability (--network-volume-ids): attach multiple network
volumes (one per data center) so workers spread across DCs instead of being pinned to one —
runpodctl serverless create --template-id <t> --network-volume-ids <v1>,<v2> --data-center-ids <dc1>,<dc2> ….
Requires runpodctl ≥ v2.4.0 (older versions don't support multi-volume attach). Check
runpodctl version; the Homebrew tap can lag, so prefer the
GitHub releases binary. Data does not
sync between volumes automatically — see golden path
10 — multi-region HA serverless.
For exact serverless flags, run runpodctl serverless <action> --help.
runpodctl template search <q> # find (+ template list [--type official/community/user, --all, --limit])
runpodctl template get <template-id> # details (README, env, ports)
runpodctl template create --name "x" --image "img" [--serverless]
runpodctl template delete <template-id>
runpodctl network-volume list # List all volumes
runpodctl network-volume get <volume-id> # Get volume details
runpodctl network-volume create --name "x" --size 100 --data-center-id "US-GA-1" # Create volume
runpodctl network-volume update <volume-id> --name "new" # Update volume
runpodctl network-volume delete <volume-id> # Delete volume
For exact network volume flags, run runpodctl network-volume <action> --help.
No storage-tier flag.
createprovisions the data center's default tier — there's no--type. To get a High-Performance volume, use the console (a ⚡ data center's toggle) or a raw v2 REST call (POST https://v2-rest.runpod.io/v2/network-volumeswith"type":"HIGH_PERFORMANCE"). The MCPcreate-network-volumetool can't set it either. Tier is immutable after creation. Launch details: golden path 21.
runpodctl model manages the Runpod Model Repository — managed, versioned storage
for your own model artifacts (upload once, distributed to workers; not pinned to a
data center like a network volume). What it is, why/how, migrating off a baked-in model,
and Model-Repo-vs-volume: reference/model-caching.md.
runpodctl model list # List your models
runpodctl model list --all # List all models (not just yours)
runpodctl model list --name "llama" # Filter by name
runpodctl model list --provider "meta" # Filter by provider
runpodctl model add --name "my-model" --model-path ./model # Upload a local model dir (multipart)
runpodctl model remove --name "my-model" --owner <owner> # Remove a model
model add supports upload sessions, versioning, metadata, and private-source credentials — see live runpodctl model add --help.
runpodctl user # account info + balance (alias: me)
runpodctl gpu list # available GPUs (+ --include-unavailable)
runpodctl datacenter list # datacenters (alias: dc)
runpodctl ssh info <pod-id> # SSH connection details (command + key; NOT an interactive session)
ssh info gives connection details, not a session — if interactive SSH isn't available, run ssh user@host "command". Registry auth, billing history, and SSH key management (ssh add-key/remove-key) are in reference/command-reference.md.
runpodctl send <path> # prints a one-time code, then blocks until the receiver connects
runpodctl receive <code> # positional code (no --code flag)
Encrypted/incremental/compressed — don't pre-tar. Key gotchas: capture the first line of send stdout (the code) as it streams (background + tee), each send mints a fresh code, both sides must exit 0. Full agent flow (pod push via ssh + receive): reference/command-reference.md.
runpodctl doctor # Diagnose and fix CLI issues
runpodctl update # Update CLI
runpodctl version # Show version
runpodctl completion # Auto-detect shell and install completion
Access exposed ports on your pod:
https://<pod-id>-<port>.proxy.runpod.net
Example: https://abc123xyz-8888.proxy.runpod.net
https://api.runpod.ai/v2/<endpoint-id>/run # Async request
https://api.runpod.ai/v2/<endpoint-id>/runsync # Sync request
https://api.runpod.ai/v2/<endpoint-id>/health # Health check
https://api.runpod.ai/v2/<endpoint-id>/status/<job-id> # Job status
npx claudepluginhub runpod/runpod-plugins-official --plugin runpodStart here for any Runpod task — running GPU/CPU pods, deploying serverless endpoints, templates, network volumes, building images, or understanding how Runpod works. Routes the request to the right Runpod skill (runpod-mcp, runpodctl, flash, companion-clis, or runpod-usage). Use when it is unclear which Runpod skill applies.
Guides running Python code on Modal serverless platform for AI inference, batch jobs, web endpoints, scheduled tasks, and sandboxed execution. Activates on modal imports, decorators like @app.function, or CLI commands.
Launches and manages GPU/TPU/CPU workloads across 25+ clouds, Kubernetes, and Slurm. Handles training, fine-tuning, inference serving with autoscaling, and cost optimization.