command line
GPU Flow from your terminal.
One command for inference, your account, Sandboxes and dedicated GPU. It carries no dependencies: Node 18.3 or later is enough, and your data is still processed in the European Union.
Install and check
One command to install. The doctor command validates your setup in seconds and exits non-zero when something is wrong, so it works the same in your terminal and inside a pipeline.
npm install -g @gpuflow/cli gpuflow doctor
What doctor checks
The service and the catalogue, which are public; whether your API key is valid; whether you have a session open; and, with a session, your balance and your Sandboxes. Each mark is green, red or neutral: having no session is a valid state, not a failure. “All set” means inference is ready, not that you are logged in.
No dependencies
The tool installs no third-party packages: it uses Node's own built-ins. Node 18.3 or later is the whole requirement.
doctor and status are the same
The status command is an alias for doctor. Type whichever comes to mind.
Your key and your session
There are two ways in and they are independent. The API key is for inference. Logging in is for your account, your Sandboxes and your disks.
terminal
gpuflow config set api-key sk-gpuflow-... gpuflow login gpuflow config show
Where it is stored
In the file ~/.gpuflow/config.json. On macOS and Linux it is mode 0600, yours only; on Windows it inherits your user profile's permissions. The CLI writes it atomically, so a failure mid-write never leaves you a half-written file.
HTTPS only
Service addresses must use HTTPS. The CLI rejects an http:// URL pointing at a real host, because your credentials would travel unencrypted; plain HTTP is allowed only against localhost, for development.
One login for everything
The same login unlocks your account and your infrastructure. It renews itself: when the access token expires, the CLI refreshes it and retries the call without you doing anything.
Models and chat
The catalogue is public: you can see the models, their context and their price before signing up. To talk to one you need your API key.
terminal
gpuflow models gpuflow chat "What is RDMA?" gpuflow chat --model qwen-3.5-9b "Hello" gpuflow chat --no-stream "Explain RDMA in one sentence"
The summary goes elsewhere
When it finishes, the chat command prints the model, the latency, the tokens and the estimated cost. That footer goes to stderr, not stdout, so you can redirect the answer to a file without the summary sneaking in.
Cost does not inflate latency
To estimate cost, the chat command reads the catalogue before starting the timer. That read does not count towards the latency it reports.
Balance, keys and usage
These commands need a prior gpuflow login.
terminal
gpuflow whoami gpuflow balance gpuflow usage --days 7 gpuflow keys list gpuflow keys create ci-key gpuflow keys revoke sk-gpuflow-xxxx
The key is shown once
The keys create command prints the full secret exactly once. Save it then: afterwards only the prefix can be retrieved. Revoking is irreversible and breaks everything using that key, so it asks for confirmation; in a script or without an interactive terminal, pass --yes.
Logging out does not remove the key
The logout command revokes the session and clears local tokens, but the API key stays in your config and keeps spending. To remove that too, set it back to empty with gpuflow config set api-key.
Create and run Sandboxes
A Sandbox is a cloud machine with processors, memory and a disk for your files. Every command here needs an open session.
The three sizes
The size fixes the processors, the memory and the default disk. They are the same ones you see on the Sandboxes page and in the dashboard wizard.
| Size | Processors | Memory | Disk |
|---|---|---|---|
| Starter | 4 | 8 GB | 10 GB |
| Pro | 8 | 32 GB | 50 GB |
| Team | 16 | 64 GB | 100 GB |
Three ways to create one
With flags, from a YAML manifest, or with the wizard. The wizard only opens when you pass no spec flags: if you pass one, the CLI errors instead of opening it, so it never provisions a machine you did not mean to create.
gpuflow sandbox create --plan starter --service opencode
How to refer to yours
By its full name, by the label you gave it, or by the unique tail of its name. If what you type matches more than one, the CLI stops and asks you to be specific rather than picking for you. You can see the names with gpuflow sandbox list.
Pause, resume and delete
Pausing scales it to zero and keeps the disk, but you lose whatever was in memory. On resume the machine is recreated and may land on a different node: the disk and the connection command do not change. Deleting destroys the Sandbox and keeps the disk. Both ask for confirmation, and the --yes flag skips it.
terminal
gpuflow sandbox list gpuflow sandbox status my-box gpuflow sandbox pause my-box gpuflow sandbox resume my-box gpuflow sandbox delete my-box --yes
Automatic pause
Pauses the Sandbox after N idle minutes, between 0 and 1440, or the value off to pause only by hand.
terminal
gpuflow sandbox auto-suspend my-box 30 gpuflow sandbox auto-suspend my-box off
Connecting
The CLI does not open the connection: it prints the command for you to copy. Since stdout carries only the command, you can also chain it. You need a registered key before connecting.
terminal
gpuflow sandbox ssh my-box eval "$(gpuflow sandbox ssh my-box)"
What you have spent
The sandbox usage command breaks down the current billing cycle. A freshly created Sandbox may show 0.00 for the first few minutes: the current hour's estimate is a fraction of a cent until it has been up for a while.
terminal
gpuflow sandbox usage my-box
Two figures that do not add up
A Sandbox's spend and your inference balance come from different places and may be shown in different currencies. They are separate things: do not compare or add them.
Your files and your access
The disk is what makes your work outlive the machine. The SSH key is what lets you in.
The disk outlives the Sandbox
Deleting a Sandbox does not delete its disk: your files are still there and you can reuse it for the next one. It is created together with the Sandbox, so there is no separate command to create it. You cannot delete a disk that a Sandbox has mounted.
terminal
gpuflow storage list gpuflow storage rm <id> --yes
Registering your key
The ssh-key add command with no arguments looks for ~/.ssh/id_ed25519.pub. You can also give it a path, read it from standard input, or pass the contents. The CLI checks whether it was already registered before sending it. If you have no key, create one with ssh-keygen -t ed25519.
terminal
gpuflow ssh-key add gpuflow ssh-key list
Removing a key
Removals are handled from the dashboard: the CLI does not have a command for them yet.
See the offering and the capacity
GPU discovery is public: it works with no key and no session. You can check the offering and the free capacity before signing up.
terminal
gpuflow gpu list gpuflow gpu availability
Capacity you can trust
The gpu availability command would rather withhold a figure than report a wrong one: when the numbers for a card type do not reconcile, it leaves it out and tells you which, instead of publishing a number it knows is off.
Automating it
Everything above works inside a script. The --json flag is global and the exit code does the rest.
--json on any command
With the --json flag, the CLI emits a single JSON value on stdout, silences the decoration meant for humans and sends errors as JSON on stderr. The exit code is non-zero when something fails, so you can check the result without parsing the output.
terminal
gpuflow models --json | jq '.[0].pricing'
gpuflow chat --json "Hello" | jq '{model, cost_usd, latency_ms}'
gpuflow doctor --json | jq '.healthy'Environment variables
They take precedence over the config file. The three service addresses can be overridden too, but that is for local development.
| Variable | What it is for |
|---|---|
| GPUFLOW_API_KEY | Your API key for inference. |
| GPUFLOW_EMAIL | Email, to log in without prompts. |
| GPUFLOW_PASSWORD | Password, to log in without prompts. |
| NO_COLOR | Turns off coloured output. |
Non-interactive login
In a pipeline, GPUFLOW_EMAIL and GPUFLOW_PASSWORD together with --json keep the login prompt-free. Store them as pipeline secrets, never in the repository.
Your first command, today.
An account in a minute, no card, with 50 € of credit already loaded.