Loading...
Loading...
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.
npx skill4agent add runpod/runpod-plugins-official runpodctlcurl -sSL https://cli.runpod.net | bashbrew install runpod/runpodctl/runpodctl--model-referenceOld runpodctl builds silently lack newer flags/behaviors (e.g.doesn't exist before v2.4.0) and produce confusing downstream errors — and the Homebrew tap can lag well behind. So, before any work:--model-reference
- Update to the latest build — check
, then runrunpodctl version(or reinstall from the latest release).runpodctl update- 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 —
shows the current build before you continue.runpodctl version
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 podsAuth: an agent should(non-interactive).export RUNPOD_API_KEY=...is interactive (prompts) and also sets up SSH keys — good for a human's first run, not for scripted use.runpodctl doctor
runpodctl --helprunpodctl --help
runpodctl <resource> --help
runpodctl <resource> <action> --help--helprunpodctl serverless get nope--output=yaml{"error":"failed to get endpoint: endpoint not found","code":"not_found","status":404}codestatusstatusif status == 404 | what to do |
|---|---|
| retry with backoff — the only code meaning "couldn't reach the API" |
| retry with backoff — 429/5xx from the API |
| don't retry, fix the input |
| no key set: |
| a key is set but is wrong/expired or lacks access — don't retry, don't re-prompt for a missing key |
| anything else | treat as fatal, surface |
not_foundcli_errorcli_errorssh remove-key--name--fingerprintusage_errorusage_errorwarning:note:urls{"error":"…"}codestatusswitch (err.code)undefinedcoderunpodctl versionexecpodprojectRUNPOD_INVOKE_URLrunpodctl hub list--owner runpod-workers--order-by releasedAtupdatedAt--order-by deploysstars--workers-min 1--workers-max 1--workers-min 1--workers-min 0serverless update--gpu-idPATCH https://rest.runpod.io/v1/endpoints/<id>{"gpuTypeIds":[...]}runpodctl serverless create --compute-type CPUcreate-endpointgpuPoolIdsPOST https://rest.runpod.io/v1/endpoints"computeType":"CPU"--imagerunpodctl pod create --help--ports--envrunpod-usagereference/pod-workflows.md0.0.0.0runpodctl pod get <pod-id>runpodctl ssh info <pod-id>ssh infossh user@host "command"sendreceive--terminate-after--stop-after--workers-min 0readyIN_QUEUEinProgress: 0/healthrunpodctl <resource> <action> --helprunpodctl 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)runpodctl hub search vllm # find a repo (+ hub list [--type/--category/--order-by/--owner])
runpodctl hub get <listing-id|owner/name> # repo detailsrunpodctl 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 5creategetlistupdateurlsrunrunsynchealthRUNPOD_INVOKE_URLhttps://api.runpod.ai/v2RUNPOD_API_URLRUNPOD_GRAPHQL_URL--hub-id--gpu-id--envrunpodctl serverless create --compute-type CPU--instance-idcpu3g-4-16POST https://rest.runpod.io/v1/endpoints"computeType":"CPU"gpuCount:1cpuFlavorIds:nullrunpodctl --compute-type CPUcomputeType:"CPU"instanceIds:["cpu3g-4-16"]create-endpointgpuPoolIdscomputeTypecpuFlavorrest.runpod.io/v2https://api.runpod.ai/v2/<endpoint-id>/…--model-referencehttps://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct:main/runpod-volume/huggingface-cache/hub/--template-id--hub-id--network-volume-idsrunpodctl serverless create --template-id <t> --network-volume-ids <v1>,<v2> --data-center-ids <dc1>,<dc2> …runpodctl versionrunpodctl serverless <action> --helprunpodctl 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 volumerunpodctl network-volume <action> --helpNo storage-tier flag.provisions the data center's default tier — there's nocreate. To get a High-Performance volume, use the console (a ⚡ data center's toggle) or a raw v2 REST call (--typewithPOST https://v2-rest.runpod.io/v2/network-volumes) — or the MCP"type":"HIGH_PERFORMANCE"tool, which takescreate-network-volume(volumeType|STANDARD). Tier is immutable after creation. Launch details: golden path 21.HIGH_PERFORMANCE
runpodctl modelrunpodctl 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 modelmodel addrunpodctl model add --helprunpodctl user # account info + balance (alias: me)
runpodctl gpu list # available GPUs + $/hr + per-DC stock (+ --include-unavailable)
runpodctl datacenter list # datacenters (alias: dc)
runpodctl ssh info <pod-id> # SSH connection details (command + key; NOT an interactive session)gpu listsecurePricePerHrcommunityPricePerHrnulldataCenterAvailability[]stockStatus--include-unavailable"none"ssh infossh user@host "command"billingssh add-keyremove-keyrunpodctl send <path> # prints a one-time code, then blocks until the receiver connects
runpodctl receive <code> # positional code (no --code flag)sendsend0sshreceiverunpodctl doctor # Diagnose and fix CLI issues
runpodctl update # Update CLI
runpodctl version # Show version
runpodctl completion # Auto-detect shell and install completionhttps://<pod-id>-<port>.proxy.runpod.nethttps://abc123xyz-8888.proxy.runpod.nethttps://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 statusserverless creategetlistupdaterunrunsynchealthurlsRUNPOD_INVOKE_URLstatus/<job-id>