runpod/runpod-plugins-official/runpodctl
Claude Code and agent skill by runpod/runpod-plugins-official
- community
Checking that the SKILL.md file is still in the repository.
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, network-volume upload/download). Use for terminal/CI/scripting, SSH setup, `doctor`, or when the Runpod MCP tools are not connected; prefer runpod-mcp for structured tool calls in an MCP-enabled session.
Install
npx vskill@latest install runpod/runpod-plugins-official/runpodctlSKILL.md
Runpodctl
Manage GPU pods, serverless endpoints, templates, volumes, and models. For serverless development workflows, use the Runpod SDK regardless of CLI version.
Install
curl -fsSL https://cli.runpod.net | sudo bash (Linux/macOS, and Windows via WSL) or brew install runpod/runpodctl/runpodctl. Manual binaries and the Windows and conda steps: the runpodctl README, beside the install.sh they describe. API key: https://console.runpod.io/user/settings
Old builds silently lack newer flags/behaviors (e.g.--model-referencedoesn't exist beforev2.4.0) and produce confusing downstream errors, and the Homebrew tap can lag well behind.Before any work: update to the latest build (runpodctl version, thenrunpodctl update,or reinstall from the latest release); **pin onerecent version for the whole task; never switch between an old and a new binary mid-task**(a known failure); verify once withrunpodctl versionbefore you continue.
Quick start
Live Help Is Authoritative
Live runpodctl --help, runpodctl <resource> --help and runpodctl <resource> <action> --help are authoritative for exact flags, aliases, and syntax (the generated pages under `runpodctl/docs/` mirror them). Inspect live help before unfamiliar commands; this skill covers workflows, decision rules, safety notes, and common examples, and is not an exhaustive flag reference.
Live help does not cover output shapes, error codes, or exit-code behavior: use reference/output-and-errors.md, and when in doubt probe the binary (run it wrong on purpose, e.g. runpodctl serverless get nope, and read the JSON). Every doc is a snapshot, this skill included; the binary in front of you wins.
Output & errors
Data is JSON on stdout (--output=yaml is the only alternative; there is no table format; v2.10.0+ rejects any other value with usage_error, v2.9.0 and earlier silently return JSON). A failure is one flat JSON object on stderr plus a non-zero exit:
- Branch on `code`, never on `status` or the message (GraphQL reports a missing resource as HTTP 200 + null data, so
statusis often absent). - Retry with backoff only on `network_error`, `rate_limited`, `server_error`; the API commands never retry internally.
no_credentials= no key set (fornetwork-volume upload/download: no S3 API keys, or no API key for the data-center lookup, which--data-center-idskips; the message names which);unauthorized/forbidden= a key is set but wrong or lacks access (don't re-prompt).usage_error,cli_error,bad_request,not_found,conflict: fix the input. Any other code is fatal: surfaceerrorverbatim. - `network-volume upload`/`download` (v3.1.0+) retry on their own (429, 5xx, dropped connections).
transfer_incomplete= it stopped partway: rerun the same command, it resumes.volume_full= grow the volume (network-volume update --size), then rerun. - Gate on the exit code, then parse stderr: deprecation
warning:/note:lines go to stderr on success too. - Coded errors, the serverless `urls` object and GPU pricing need runpodctl ≥ v2.8.0. Older binaries emit
{"error":"…"}with nocode, so gate oncodebeing present, not onrunpodctl version. - `project` behaves differently per build (exit 0 with errors on stdout through v3.0.1; exit 1 with a Runpod SDK notice in builds with runpod/runpodctl#382). Treat that notice as fatal.
Full code table, cli_error vs usage_error, plain-text exceptions, the exact SDK notice, and the env-var table (incl. RUNPOD_INVOKE_URL): [reference/output-and-errors.md](reference/output-and-errors.md).
Decision Rules
- Hub for a known deployable app or worker (vLLM, ComfyUI, Whisper, a Runpod-maintained repo). Picking a worker: prefer a first-party or well-adopted, recently-released worker on a broad, high-availability GPU pool; signals in
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. - Templates when the user already has a template ID, wants reusable image/config defaults, or needs lower-level control than Hub. `pod create --image` for a specific Docker image with no saved template.
- Serverless for request/response inference APIs and scalable workers; pods for interactive work, notebooks, training, debugging, or long-lived sessions. CPU pods for preprocessing, file movement, lightweight scripts, and non-CUDA work; GPU pods when CUDA, model inference, training, or GPU memory is required.
- "Active worker" = minimum workers, not maximum:
--workers-min 1(one worker always warm → no cold start; ideal for development/iteration), not--workers-max 1(that only caps the ceiling). - ⚠️ A min-1 worker bills continuously, even while idle (it defeats scale-to-zero). After dev you must set
--workers-min 0(or delete the endpoint), or it quietly runs up cost. - Needs runpodctl ≥ v2.10.0. Earlier binaries silently dropped
--workers-min 0and--idle-timeout 0from the update request (omitemptyate the zero): the reset looked applied and the endpoint kept billing. Checkrunpodctl version; on an older binary confirm withserverless get <id>and fall back toPATCH https://api.runpod.io/v2/serverless/<id>with an explicit{"workers":{"min":0}}. - Set the execution timeout on every endpoint create. A v2 create without
timeoutcomes back"timeout": 0(live-verified 2026-10-29; why it matters). runpodctl ≥ 2.14.0 hasserverless create --execution-timeout <seconds>(as of 2.14.0serverless updatedoes not; check--help); read the timeout back withserverless get, and fix a 0 withPATCH https://api.runpod.io/v2/serverless/<id>{"timeout":<ms>}. serverless updatehas no `--gpu-id` flag. To change an endpoint's GPU pools,PATCH https://api.runpod.io/v2/serverless/<id>with{"gpu":{"pools":["ADA_24"]}}(pool ids, from thepoolfield ofGET /v2/catalog/gpus). SendingpoolswithoutexcludedTypesclears any exclusions.- CPU serverless endpoints:
runpodctl serverless create --compute-type CPU(on REST v2, sendcpuinstead ofgpu). Never send"computeType":"CPU"to REST v1POST https://rest.runpod.io/v1/endpoints: it silently provisions a GPU endpoint (evidence). - Leave `--cloud-type` at its `SECURE` default (why). Pass
--cloud-type COMMUNITYonly when the user explicitly asks (a public port 22 there needs a machine with a public IP, which the CLI cannot request). - A CPU pod gets 2 vCPUs on whichever CPU flavor has the most stock;
--namedefaults to the image name without its tag. CPU pods take a network volume (--network-volume-id) but not a pod volume (--volume-in-gbis rejected). Do not pass GPU flags. - Set a CUDA floor on every GPU create: `--min-cuda-version 12.8` (
pod createandserverless create; nottemplate create). Without it a modern image can land on a host too old to run it, and the create will not reject it: the container dies at startup or silently runs on CPU.13.0only for a CUDA-13 image; omit for CPU. Rule, exceptions and capacity check: `runpod-usage` gpu-selection "pin the CUDA floor". - Waiting for a resource to be usable: use `--wait`, don't hand-roll a poll loop (v2.9.0+).
createreturns once the resource is scheduled, which is why a "RUNNING" pod often refuses ssh and a fresh endpoint 404s.pod create --waitreturns when port 22 answers with an ssh banner.pod create --wait-for running(v2.15.0+) returns when the container is up, no ssh needed: use it when container-up is all the task needs, or for an image that does not start sshd (most cpu images, since cpu pods get no Runpod-managed ssh), where plain--waitwould bill through the whole timeout and then fail; a cpu image that starts its own sshd still satisfies plain--wait, so keep that when the user needs ssh.serverless create --waitreturns when/healthreports a ready or running worker. On timeout or ctrl-c the resource is kept and its id is in the error object'sidfield: read it and clean up, don't assume nothing was created (a pod bills by the second; an endpoint with no running worker doesn't, but starts one on the first request). - A service on a pod (Ollama, ComfyUI, a dev server): declare its
--portsand--envat creation when possible (runpodctl pod updatecan change them on an existing pod), then follow the pod development loop inrunpod-usage(reference/pod-workflows.md): SSH-exec the install, bind to0.0.0.0, poll the proxy URL until it answers. - SSH: connection details from
runpodctl pod get <pod-id>orrunpodctl ssh info <pod-id>. runpodctl has no interactive-shell command:ssh inforeturns the connection command + key but does not connect, so runssh user@host "command"yourself. - Network volumes are location-sensitive: pick the data center from the GPU stock read (
datacenter list, orgpu list --include-unavailable) before creating the volume, and create it once. Ifpod createis then refused for stock, re-read stock: retry once with the same volume when its data center shows stock; otherwise ask the user (wait, another GPU type there, the console's Deploy when available, or a move to another data center, which is the user's call). Never delete the volume to try another data center; on a move, name it in the hand-back (id, data center, storage cost) and delete it only when the user asks. Move data onto or off a volume withnetwork-volume upload/download(v3.1.0+, resumable);send/receivefor machine to machine. - Clean up paid resources after tests: serverless endpoints, pods, and temporary volumes created for validation.
- Cost guard: remove the pod when the work is done (
runpodctl pod remove <pod-id>); a stopped pod still bills for disk and any volume. Unattended deadline: pod-workflows (schedule a stop from inside the pod). - `--stop-after` / `--terminate-after` never worked. Before v2.12.0
pod createaccepts both, but the backend never enforced them, so the pod keeps running and billing past the deadline; v2.12.0 removed them. If `runpodctl pod create --he
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingplugins/runpod/skills/runpodctl/SKILL.md
Popularity
- Repository stars
- 38
- Repository forks
- 5
- 7-day trend score
- 18
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/runpod/runpod-plugins-official/runpodctl)