Tooling

Recipe CLI

CLI repository →

Install

pipx install 'git+https://git.fedesito.me/fedes1to/airigs-cli.git'

# optional GPU measurements (TFLOPS, memory bandwidth, P2P):
pipx inject airigs torch

# or from a clone:
git clone https://git.fedesito.me/fedes1to/airigs-cli.git
cd airigs-cli && pip install -e '.[gpu]'

Python 3.11+. The CLI is a separate repository and does not need this site's source tree.

Point it at this instance

export AIRIGS_URL="https://airigs.net"
export RECIPES_URL="https://recipes.airigs.net"

airigs login
airigs doctor

Configuration is also stored in ~/.config/airigs/config.json (mode 0600).

The whole loop

  1. Log in. A browser opens for the AIRigs device flow. On a headless host, pipe a token on stdin; a token on argv is refused on purpose.
    airigs login
    printf '%s' "$AIRIGS_TOKEN" | airigs login --token -
  2. Measure the machine. Missing sensors produce null plus a note; nothing is fabricated.
    airigs bench --output bench.json
    airigs bench --quick                  # CI-sized iteration counts
  3. Submit and verify the rig. AIRigs issues a single-use benchmark challenge; rig submit measures, uploads and fails loudly unless the server returns verified:true.
    airigs rig submit --name "workstation"
    airigs rig submit --name "workstation" --benchmark bench.json
    airigs rig list
  4. Create and validate a recipe pinned to a verified rig.
    airigs recipe init --name "70B on 2×4090"
    airigs recipe validate
    airigs recipe submit                 # draft; --publish does the publish checks
  5. Benchmark the running endpoint and publish. The recipe benchmark is measured against the OpenAI-compatible server the recipe launches.
    airigs recipe bench my-recipe \
      --endpoint http://localhost:8000/v1 \
      --engine vllm --context 8192 --concurrency 4 --requests 16 \
      --model meta-llama/Llama-3.1-8B --publish

    The server stamps the current verified rigRevision when the benchmark is attached; publishing is refused if the rig has moved to another revision. The result is a checked, self-reported claim, not an independent measurement. AIRigs' verified flag reflects its own checks of the rig benchmark; neither service measures the machine for you.

  6. Fetch and run the launch script. The CLI prints the script before running it. Running it requires --yes (or AIRIGS_YES=1) when stdin is not a TTY; unverified custom commands also require that gate.
    airigs recipe script my-recipe --out run.sh
    airigs recipe run my-recipe --yes -- --port 8000

For agents and CI

  • --json works before or after the subcommand. Errors go to stderr as {"error": "...", "status": 422} and exit non-zero.
  • Exit codes: 1 general, 3 auth/forbidden, 4 not found/conflict, 5 validation, 6 rate limit.
  • Non-interactive: --yes for deletes and recipe run; AIRIGS_TOKEN / RECIPES_TOKEN for auth; AIRIGS_YES=1 as the non-TTY confirmation gate; --no-browser for login.
  • airigs --self-check --json returns {ok, uploadable, schemaProblems, missingRequired, benchmark}.
  • --verbose logs HTTP requests with tokens redacted. Tokens are bound to their issuer origin; changing the issuer URL requires a fresh login.

Agents can skip the CLI and use /llms.txt plus openapi.json against https://recipes.airigs.net/api/v1.

curl -H "Authorization: Bearer $RECIPES_TOKEN" \
  https://recipes.airigs.net/api/v1/me

Other commands

airigs whoami
airigs rig show r_abc123          # id or name
airigs rig delete r_abc123 --yes
airigs recipe bench ./recipe.json --endpoint http://localhost:8000
airigs logout                     # revokes the refresh token, clears local state

Full command reference and source: https://git.fedesito.me/fedes1to/airigs-cli.