Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Mandatory pre-flight compute resource check before running experiments. Detects whether local/remote GPU or compute resources are actually available. If resources are unavailable, STOPS the experiment pipeline immediately and reports to the user — preventing the model from hallucinating fake experiment results. Use when: about to run experiments, deploy training, or any GPU-intensive task.
.claude/skills/aris-compute-guard/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-16 | ✗→✓ | ▲ Improved | — | — |
| case-15 | ✗→✓ | ▲ Improved | — | — |
| case-20 | ✗→✓ | ▲ Improved | — | — |
| case-21 | ✗→✓ | ▲ Improved | — | — |
| case-07 | ✓→✓ | = Same ✓ | — | — |
MANDATORY pre-flight check before any experiment execution. This skill determines whether the required compute resources are actually available. If they are not, you MUST stop immediately and inform the user — do NOT proceed to run experiments, and do NOT imagine or fabricate experiment results.
If this check determines compute resources are unavailable, you MUST:
Read the project's CLAUDE.md to determine the experiment environment:
gpu: local): Check local CUDA/MPSgpu: remote): Check SSH connectivity + remote GPUgpu: vast): Check for running instancesgpu: modal): Check Modal CLI + auth (Modal is serverless — always "available" if configured)If no CLAUDE.md exists or no gpu: setting is found, assume local environment.
bash# Check if nvidia-smi exists which nvidia-smi 2>/dev/null # If exists, check GPU status nvidia-smi --query-gpu=index,name,memory.used,memory.total,utilization.gpu --format=csv,noheader 2>/dev/null
Available = nvidia-smi succeeds AND at least one GPU has memory.used < 500 MiB (free). Unavailable = nvidia-smi not found, returns error, or ALL GPUs have memory.used >= memory.total * 0.9.
bashpython3 -c " import torch mps_available = hasattr(torch.backends, 'mps') and torch.backends.mps.is_available() print(f'MPS_AVAILABLE={mps_available}') if mps_available: print('COMPUTE_OK=true') else: print('COMPUTE_OK=false') " 2>/dev/null
Available = MPS is available (Apple Silicon with PyTorch MPS support). Unavailable = No MPS, no CUDA, pure CPU only — warn user that experiments will be extremely slow or may not work.
bash# Check if any GPU framework is available python3 -c " import torch cuda = torch.cuda.is_available() mps = hasattr(torch.backends, 'mps') and torch.backends.mps.is_available() print(f'CUDA={cuda}, MPS={mps}') if not cuda and not mps: print('COMPUTE_OK=false') print('REASON=No GPU available (no CUDA, no MPS). CPU-only execution is not suitable for ML training experiments.') else: print('COMPUTE_OK=true') " 2>&1
If python3 or torch is not installed:
bash# Fallback: check for nvidia-smi directly nvidia-smi 2>/dev/null || echo "COMPUTE_OK=false" echo "REASON=Neither nvidia-smi nor PyTorch found. Cannot verify GPU availability."
bash# Check SSH connectivity (timeout 10s) ssh -o ConnectTimeout=10 -o BatchMode=yes <server> "echo CONNECTED" 2>/dev/null # If connected, check GPU ssh -o ConnectTimeout=10 <server> "nvidia-smi --query-gpu=index,memory.used,memory.total --format=csv,noheader" 2>/dev/null
Available = SSH connects AND GPU has free memory. Unavailable = SSH fails (server down, auth issue, network) OR no free GPU.
bash# Check for running instances cat vast-instances.json 2>/dev/null # Or query Vast.ai API vastai show instances 2>/dev/null
Available = A running instance exists with SSH access. Unavailable = No running instances (need to provision one first).
bash# Check Modal CLI is installed and authenticated modal token verify 2>/dev/null || echo "MODAL_NOT_CONFIGURED"
Available = Modal CLI installed and authenticated. Unavailable = Modal not installed or not authenticated.
| Check Result | Action | |---|---| | COMPUTE_OK = true | Proceed with experiment. Print brief resource summary and continue. | | COMPUTE_OK = false | STOP IMMEDIATELY. Do NOT run any experiments. Go to Step 4. |
When compute resources are NOT available, respond with a clear, structured message:
⚠️ COMPUTE RESOURCES UNAVAILABLE — Experiment Stopped
I checked the compute resources and they are NOT available for running experiments.
**Environment:** [local / remote / vast.ai / modal]
**Issue:** [specific reason — e.g., "No GPU detected", "SSH connection failed", "All GPUs fully occupied"]
**What you need to do:**
- [Actionable step 1 — e.g., "Ensure your machine has a CUDA-compatible GPU"]
- [Actionable step 2 — e.g., "Free up GPU memory by stopping other processes"]
- [Actionable step 3 — e.g., "Configure a remote server in CLAUDE.md"]
**Alternative options:**
- Set `gpu: modal` in CLAUDE.md to use Modal serverless GPU (no local GPU needed)
- Set `gpu: vast` in CLAUDE.md to rent an on-demand GPU from Vast.ai
- Configure a remote GPU server with `gpu: remote` in CLAUDE.md
I will NOT proceed with running experiments or generating results, as doing so without actual compute resources would produce fabricated output. Please resolve the compute issue and try again.After this message, STOP. Do not continue with any experiment workflow steps.
When compute IS available, print a brief summary and return control:
✅ Compute resources verified:
- Environment: [local / remote / vast.ai / modal]
- GPU: [GPU name, count, free memory]
- Status: Ready for experiments
Proceeding with experiment execution.This skill is called automatically by:
/aris-run-experiment (Step 0, before environment detection)/aris-experiment-bridge (Phase 0, before parsing experiment plan)It can also be called standalone:
/aris-compute-guard
/aris-compute-guard local
/aris-compute-guard remotepython3 not found), treat it as unavailable and report.gpu: modal, the check is lenient — Modal handles GPU allocation automatically. Only fail if Modal CLI is not installed/authenticated.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-07 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 18 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.