App and CLI
The app and the CLI do the same work over the same library. Both use the plain lane:
one SSH alias offrig, the tunnel on 127.0.0.1:11435, and pods named
offrig-<profile>. A side-car’s pods live in their own lanes and are never touched from
here (see Lanes and job pods).
The app
Section titled “The app”Start offrig-app. From one window it:
- shows your RunPod balance, live GPU prices and how long the balance lasts;
- launches the pod for the profile you pick, and pulls its models on the pod;
- opens the SSH tunnel;
- adds the pod’s models to Zed as their own provider;
- runs the seven guard checks;
- shuts the pod down, or terminates it after a stretch with every GPU idle.
Cancel launch stops a launch that is waiting for GPUs; nothing is rented while it waits. Closing the app with a pod running asks whether to terminate the pod or leave it running.
The CLI
Section titled “The CLI”| Command | What it does | Costs money |
|---|---|---|
offrig status |
Balance, spend per hour, runway, and every pod on the account | no |
offrig gpus --count 2 [--min-vram 160] |
Live secure-cloud offers for a GPU count, cheapest first | no |
offrig profiles |
The tiers in your config, with their models and sizes | no |
offrig init |
Write the default config file if there is none, and print its path | no |
offrig up <profile> |
Launch, pull the models, wire Zed, run the checks, hold the tunnel | yes |
offrig up <profile> --wait 180 |
Wait up to 180 minutes for GPUs, renting nothing meanwhile | yes, once they free up |
offrig up <profile> --detach |
Set up, then exit instead of holding the tunnel | yes |
offrig up <profile> --no-zed |
Set up and do not write Zed’s settings | yes |
offrig tunnel <profile> |
Hold the tunnel to a running pod, with idle auto-stop | the pod’s rate |
offrig pull <model> [<profile>] |
Pull another model onto the pod; the pull runs on the pod | the pod’s rate |
offrig models [<profile>] |
Models on the pod, read over SSH | no |
offrig check [<model>] |
A streamed chat with a tool call through the tunnel, the way Zed sends it | the pod’s rate |
offrig guard [<profile>] |
Run the seven “never on my GPU” checks | no |
offrig zed [<profile>] / offrig zed-remove |
Write or remove offrig’s provider in Zed’s settings | no |
offrig connect [/workspace] |
Open the pod in Zed for remote editing | the pod’s rate |
offrig down <profile> --yes |
Terminate the pod; its disk goes with it | stops billing |
offrig budget [--provider runpod|openrouter] [<usd>] |
Set this project’s caps (human only): one per provider, plus an optional overall ceiling. With no amount in a terminal, a menu; --show prints every cap beside each provider’s own balance. Never below spent + committed |
no |
offrig index <paths...> [--status] [--rebuild] |
Index this project’s files for hybrid search. Embeddings come from the CPU-only embed server, EmbeddingGemma 2 by default (embed_url, default http://127.0.0.1:11490). --status reports and changes nothing. --rebuild embeds every chunk again |
no |
offrig verify calibrate <gold.jsonl>... |
Score a local loopback model as a verifier. Cloud model names are refused. Flags are in Reference | local compute only |
offrig stage <profile> --dc <DC> [--yes] |
Stage a recipe profile’s weights on a network volume | yes, monthly |
offrig up refuses when your runway with the pod running would be under one hour,
because at zero RunPod stops every pod on the account. --yes overrides that refusal.
The pod’s models are a separate provider called offrig, pointing at the tunnel. If the
pod is down, choosing one of its models errors; Zed never falls back to another provider.
offrig up <profile> --default-model <model> also makes one of them Zed’s default agent
model. offrig zed-remove takes the provider out and restores the previous default.
The provider is deliberately not named runpod. Zed would then read RUNPOD_API_KEY
and send it to the model server.
Money safety
Section titled “Money safety”- Before a launch, offrig shows the cheapest free match and your runway with the pod running.
offrig upand the app do not start a watchdog. If the command stops with an error (a hang, an unresponsive engine, an engine that exited, or a timeout), the pod keeps billing untiloffrig down <profile> --yesor the app’s Shut down. A pod RunPod reports asERRORorEXITEDis terminated during the launch.- Auto-stop terminates the pod after 30 minutes with every GPU under 5% busy. The minutes
are set by
auto_stop_idle_minutesin the config;auto_stop_idle_minutes = "off"turns it off. - offrig only changes pods it named. Every other pod on the account is listed and left alone.
The seven guard checks
Section titled “The seven guard checks”| Check | Fails when |
|---|---|
| Tunnel avoids the local Ollama port | the tunnel port is 11434 |
| Zed sends pod models through the tunnel | Zed’s provider URL is anything but the tunnel |
| The pod’s Ollama is not exposed to the internet | the pod maps port 11434 publicly |
| The tunnel ends at the pod | the model list through the tunnel differs from the list read on the pod over SSH |
| Pod models are not on this machine | a pod model also exists in the local Ollama |
| No pod model shares a name with a local Zed model | a name in the offrig provider is also in Zed’s local Ollama list |
| Every model Zed offers is on the pod | Zed offers a model the pod does not have |
