Caasi v0.2.0 Environment: doctor · gpu · system · info · version

Environment

Answer the question “can this machine actually run my stack?” before wasting an hour on a launch that was going to fail anyway. These commands inspect the OS, GPUs, drivers, Python environment and the detected ecosystem — all read-only, all scriptable.

caasi doctor

Runs the full environment diagnostics suite: 18 sections, each made of small independent checks. Every check reports one of four statuses and, when useful, a fix hint.

caasi doctor [--component|-c NAME] [--verbose] [--quiet|-q] [--json]

Options

OptionShortTypeDefaultDescription
--component-cstrallRun a single section only (see table below).
--verboseflagoffShow details and hints for every check, not only problems.
--quiet-qflagoffPrint nothing; only the exit code speaks.
--jsonflagoffMachine-readable report.

What gets checked

Section (--component)Checks
systemOS (fails unless Linux), kernel version
hardwareCPU model/cores, RAM (warns below 16 GiB)
nvidianvidia-smi presence (fails if missing), driver version, every GPU, CUDA version
graphicsVulkan (vulkaninfo or libvulkan via ldconfig), display server (skipped headless)
pythonPython ≥ 3.10 (fails otherwise), environment kind (conda / venv / system)
isaacIsaac Sim and Isaac Lab detection (registry → env → common paths → pip)
rosROS 2 distro, setup.bash, ros2 CLI, RMW middleware
roboticsNav2, MoveIt 2, ros2_control via ros2 pkg prefix (skipped without ros2)
acceleratedGPU-Accelerated Robotics: the Isaac ROS capabilities (NITROS, visual SLAM, nvblox, cuMotion, perception), NITROS types/bridge, cuRobo and the MoveIt 2 planners, then the prerequisites — CUDA, TensorRT, RMW_IMPLEMENTATION, ROS_DOMAIN_ID (skipped without ros2)
physicsPhysics Engines: PhysX (fails when absent), Newton, Warp, MuJoCo, Gazebo
assetsAssets & USD: usdcat and usdchecker (fail when absent), usdview, usdrecord, the URDF importer, check_urdf, xacro, NuRec
dataData & Recording: Replicator (fails when absent), the rosbag2 MCAP and SQLite3 storage plugins, the Hugging Face CLI, the NGC CLI
platformFoundation Models & Teleop: the GR00T repository and package, the Cosmos package and CLI, NuRec, keyboard and joystick teleop (teleop rows skip without ros2)
mlPyTorch, TensorRT, ONNX Runtime (pip metadata), cuDNN
visionOpenCV, Open3D
simulatorsGazebo, MuJoCo (skipped when absent)
containersDocker, Podman (warns if neither)
storageFree disk on paths.runs (fails < 5 GiB, warns < 20 GiB)

The five sections added in 0.2.0 — accelerated, physics, assets, data and platform — probe the capability catalog: a missing capability marked core reports fail, every other missing capability reports skip, and a renamed upstream is fixed with caasi config set catalog.<domain>.<capability>.<field> [...] rather than a Caasi upgrade. The groups behind them are documented on Isaac ROS & accelerated groups, physics & foundation models and synthetic data & teleoperation.

Example — full report

shellcaasi doctor
Environment Diagnostics

system
  ✓ OS — Ubuntu 24.04.1 LTS
  ✓ Kernel — 6.8.0-45-generic

hardware
  ✓ CPU — AMD Ryzen 9 7950X (32 cores)
  ✓ RAM — 62.7 GiB

nvidia
  ✓ nvidia-smi — 550.107.02
  ✓ GPU 0 — NVIDIA GeForce RTX 4090 (24564 MiB)
  ✓ CUDA — 12.4

python
  ✓ Python — 3.11.9
  ✓ Environment — venv

isaac
  ✗ Isaac Sim — not detected
    ↳ Install it or register a path: caasi setup isaacsim

ros
  ✓ ROS 2 distro — jazzy
  ✓ ros2 CLI — /opt/ros/jazzy/bin/ros2

storage
  ✓ Disk (runs) — 412.9 GiB free

1 failure(s), 0 warning(s)
exit code: 1

Example — one section, and scripting with exit codes

shellcaasi doctor -c nvidia --verbose
nvidia
  ✓ nvidia-smi — 550.107.02
    ↳ Install the NVIDIA driver if this check fails.
  ✓ GPU 0 — NVIDIA GeForce RTX 4090 (24564 MiB)
  ✓ CUDA — 12.4
caasi doctor -q && echo ready || echo broken
broken

Example — the sections added in 0.2.0

On a machine with ROS 2 jazzy but no Isaac Sim, -c physics shows PhysX failing while Gazebo still passes:

shellcaasi doctor -c physics
Environment Diagnostics

Physics Engines
  ✗ PhysX — not found (extsPhysics/*physx*, exts/omni.physx*)
      ↳ Install it, or point Caasi at the renamed upstream with `caasi config set catalog.physics.physx.paths [...]`.
  • Newton — not found (newton-physics, newton, isaac-sim.newton.sh)
  • Warp — not found (warp, warp-lang)
  • MuJoCo — not found (mujoco)
  ✓ Gazebo — /opt/ros/jazzy/opt/gz_tools_vendor/bin/gz

✘ 1 issue(s) found, 0 warning(s). Run with --verbose for hints.
exit code: 1

PhysX is only discoverable inside an Isaac Sim install — its probe is a pair of extension globs under the isaacsim tool root — so without one it reports fail. Gazebo is found by its gz binary on PATH. Newton is probed as a pip distribution (newton-physics, newton) and as the isaac-sim.newton.sh launcher script, Warp as warp / warp-lang and MuJoCo as mujoco: metadata and filesystem only, nothing is imported. -c platform covers the foundation-model and teleop stacks the same way:

shellcaasi doctor -c platform
Environment Diagnostics

Foundation Models & Teleop
  ✗ GR00T repository — not found (GR00T_PATH, ~/Isaac-GR00T, ~/gr00t, ~/workspaces/Isaac-GR00T)
      ↳ Install it, or point Caasi at the renamed upstream with `caasi config set catalog.groot.repo.env [...]`.
  • gr00t package — not found (gr00t)
  • Cosmos package — not found (cosmos_predict1, cosmos1)
  • Cosmos CLI — not found (cosmos, ngc)
  • NuRec (neural reconstruction) — not found (nurec)
  ✗ Keyboard teleop — not found (teleop_twist_keyboard)
      ↳ Install it, or point Caasi at the renamed upstream with `caasi config set catalog.teleop.keyboard.packages [...]`.
  • Joystick teleop — not found (teleop_twist_joy, joy)

✘ 2 issue(s) found, 0 warning(s). Run with --verbose for hints.
exit code: 1

Both exit 1 because a core capability is missing — the same contract as the full report. caasi physics and caasi groot describe what Caasi delegates to once those probes succeed.

JSON output

shellcaasi doctor --json | jq '.summary'
{
  "checks": [
    { "section": "nvidia", "name": "nvidia-smi", "status": "ok",
      "detail": "550.107.02", "hint": null },
    { "section": "isaac", "name": "Isaac Sim", "status": "fail",
      "detail": "Isaac Sim not detected",
      "hint": "Install it or register a path: caasi setup isaacsim" }
  ],
  "summary": { "ok": 11, "warn": 0, "fail": 1, "skip": 4 },
  "exit_code": 1
}

status is one of ok warn fail skip.

Exit codes

CodeMeaning
0No check reported fail (warnings are fine).
1At least one check failed, or --component named an unknown section.

Note: --quiet wins over --jsondoctor -q --json prints nothing.

caasi gpu

Inspects NVIDIA GPUs by querying nvidia-smi — no NVML bindings, no imports. If nvidia-smi is missing or fails, every subcommand exits 1 with Error: GPU information unavailable (…).

caasi gpu status

One-line-per-GPU overview: name, VRAM, utilization, temperature, power, driver/CUDA.

caasi gpu status [--json]
shellcaasi gpu status
GPU  Name                     VRAM            Util  Temp  Power  Driver / CUDA
0    NVIDIA GeForce RTX 4090  3.0 / 24.0 GiB  12%   46°C  28 W   550.107.02 / CUDA 12.4
caasi gpu status --json | jq '.gpus[0]["memory.used"]'
3111

JSON payload: {"cuda": "12.4", "gpus": [ … ]}; each GPU object carries index, name, driver_version, memory.total, memory.used, memory.free, utilization.gpu, temperature.gpu, power.draw.

caasi gpu info

Static hardware identity per GPU — useful for bug reports and inventory.

caasi gpu info [--json]
shellcaasi gpu info
GPU 0
  Name         NVIDIA GeForce RTX 4090
  UUID         GPU-9c1e2b34-…
  Serial       (not available)
  PCI          00000000:0B:00.0
  Compute cap. 8.9
  ECC          Disabled
  Driver       550.107.02
  CUDA         12.4

caasi gpu memory

VRAM overview plus the compute processes currently occupying the GPUs (answer “who is eating my VRAM?”).

caasi gpu memory [--json]
shellcaasi gpu memory
GPU Memory
GPU  Name                     VRAM             Free
0    NVIDIA GeForce RTX 4090  17.8 / 24.0 GiB  6.2 GiB
Compute Processes
PID    Process                   VRAM
48213  /opt/isaac-sim/python.sh  17.47 GiB
caasi gpu memory --json | jq '.compute_apps'
[ { "gpu_uuid": "GPU-9c1e…", "pid": 48213,
    "process_name": "/opt/isaac-sim/python.sh", "used_memory_mb": 17890 } ]

caasi gpu doctor

Just the nvidia and graphics doctor sections: driver, every GPU, CUDA, Vulkan and the display server. It shares the caasi doctor contract — exit 0 when no check failed, 1 as soon as one does (warnings alone do not fail) — so it works as a readiness gate in front of a GPU job. A missing nvidia-smi shows up here as a failed driver check rather than the Error: GPU information unavailable abort the query subcommands use; the exit code is 1 either way.

caasi gpu doctor [--verbose] [--json]
shellcaasi gpu doctor
✓ NVIDIA driver — driver 580.173.02
✓ GPU — NVIDIA GeForce RTX 3080, 10.0 GiB VRAM
✓ CUDA — CUDA 13.0 (driver-reported)
✓ Vulkan — libvulkan available
✓ Display server — display available
caasi gpu doctor --json | jq '{sections, exit_code}'
{
  "sections": [
    "nvidia",
    "graphics"
  ],
  "exit_code": 0
}

caasi gpu monitor

A live table — utilization, VRAM, temperature, power — refreshed in place until Ctrl+C stops it. --once prints a single sample and exits; --json implies a single sample and never loops. A transient nvidia-smi failure inside the loop is skipped, not fatal.

caasi gpu monitor [--interval SECONDS] [--once] [--json]
OptionShortTypeDefaultDescription
--intervalfloat ≥ 0.12.0Seconds between refreshes.
--onceflagoffPrint a single sample and exit (for scripts).
--jsonflagoffSingle sample as {"interval": …, "gpus": [ … ]}, using the same per-GPU keys as gpu status.
shellcaasi gpu monitor --once
GPU  Name                     Util  VRAM            Temp  Power
0    NVIDIA GeForce RTX 3080  19%   0.1 / 10.0 GiB  53°C  29.6 W
caasi gpu monitor --once --json | jq '.gpus[0]["memory.used"]'
71.0

caasi gpu test

Proves the GPU actually computes: verifies the driver responds, then runs a tiny CUDA matmul in a subprocess via PyTorch. If PyTorch is not importable the compute step is skipped with a warning (exit stays 0).

caasi gpu test
shellcaasi gpu test
Driver responds; 1 GPU(s) visible.
CUDA compute test passed (torch CUDA 12.4).
caasi gpu test; echo $?
0

Exit codes: 0 driver ok (and compute passed or skipped), 1 no nvidia-smi or the CUDA compute test failed. No --json.

caasi system

OS, CPU, RAM and process inspection, read from /proc and standard tools.

caasi system status

caasi system status [--json]
shellcaasi system status
OS                Ubuntu 24.04.1 LTS (x86_64)
Kernel            6.8.0-45-generic
CPU               AMD Ryzen 9 7950X 16-Core Processor (32 cores)
Load (1/5/15m)    1.24, 0.98, 0.71
RAM               41.2 / 62.7 GiB available
NVIDIA GPUs       1
Disk free (home)  412.9 GiB

JSON keys: os, kernel, arch, cpu, cores, load, ram_total_gib, ram_available_gib, gpu_count, disk_free_home. Always exits 0.

caasi system doctor

The system, hardware and storage doctor sections: OS, kernel, CPU, RAM and the free disk under paths.runs. Same exit-code contract as caasi doctor1 when a check failed, 0 otherwise; a warning (low RAM, tight disk) does not fail.

caasi system doctor [--verbose] [--json]
shellcaasi system doctor
✓ Operating system — Ubuntu 24.04.4 LTS
✓ Kernel — 6.8.0-139-generic (x86_64)
✓ CPU — 12th Gen Intel(R) Core(TM) i7-12700K, 20 cores
! RAM — 15.4 GiB total, 9.9 GiB available
    ↳ Isaac workflows are memory-hungry; 32 GiB+ is recommended.
✓ Disk space — 25.1 GiB free at /home/you/.caasi/runs
caasi system doctor --json | jq '{group, sections, exit_code}'
{
  "group": "system",
  "sections": [
    "system",
    "hardware",
    "storage"
  ],
  "exit_code": 0
}

caasi system memory

caasi system memory [--json]

Detailed /proc/meminfo breakdown: total_gib, available_gib, free_gib, buffers_gib, cached_gib, swap_total_gib, swap_free_gib. Exits 1 if /proc/meminfo cannot be read (Linux only).

caasi system processes

caasi system processes [--limit|-n N] [--json]
OptionShortTypeDefaultDescription
--limit-nint10Number of processes to show.
--jsonflagoffMachine-readable output.

Top processes by resident memory — via ps -eo pid,user,pmem,rss,comm --sort=-rss, falling back to a /proc scan. JSON is an array of {pid, user, mem_percent, rss, command}. Always exits 0.

shellcaasi system processes -n 3
PID    User  Mem %  RSS        Command
48213  you   27.4   17890 MiB  python.sh
2210   you   3.1    2013 MiB   code
1874   root  0.8    512 MiB    Xorg

caasi info

One-screen summary of the CLI itself, your effective configuration, registered tools and everything Caasi was able to detect about the ecosystem.

caasi info [--json]
shellcaasi info
CLI
  Name        caasi
  Version     0.2.0
  Python      3.11.9 (/home/you/caasi/.venv/bin/python)
Configuration
  Language    en
  Sources     ~/.config/caasi/config.yaml
Registered tools
  isaacsim    6.0 → /opt/isaac-sim-6.0
Ecosystem (detected)
  Isaac Sim   6.0 (/opt/isaac-sim-6.0)
  Isaac Lab   (not detected)
  ROS 2       jazzy
  CUDA        12.4
  PyTorch     2.4.0
  TensorRT    (not detected)

JSON payload top-level keys: cli (name, version, python, executable, platform), config (language, sources), tools (one entry per resolved registry tool: version, path, python), and ecosystem (isaac_sim, isaac_lab, ros2, cuda, pytorch, tensorrtnull when not detected). Detection failures are data, never errors: exit code is always 0.

caasi version

caasi version [--json]        # or the global flag: caasi --version
shellcaasi version
caasi 0.2.0
caasi version --json
{
  "name": "caasi",
  "version": "0.2.0"
}