training-check — Claude Code skill: training checks
Checks WandB metrics during training to spot NaN values, loss divergence, and metric degradation before a run finishes.
npx skills add wanshuiyin/Auto-claude-code-research-in-sleep --skill training-check -a claude-codeWhat training-check does
The skill reads WandB run history and checks loss trends, evaluation metrics, learning rate, and gradient norm. It looks for NaN, Inf, abrupt spikes, and sustained degradation. When a run is clearly failing, it stops training and records the run URL, key metrics, and the reason.
Ambiguous signals are sent to Codex MCP with gpt-6-astra for a STOP, CONTINUE, or WAIT decision. Clear cases do not use that review. The check interval grows from 10 to 60 minutes when results stay healthy, then returns to a short interval after an anomaly.
If WandB cannot be reached, the skill reads a training log over SSH. watchdog.py covers process health and GPU activity, while training-check focuses on training quality. If both sources fail, it reports a connectivity problem and retries later, so you need at least one reachable source of evidence.
What it helps with
- detect NaN and Inf in loss or gradients
- stop a run when loss keeps diverging
- flag evaluation metrics that fall below a baseline
- ask Codex MCP to judge unclear metric trends
- extend the polling interval after healthy checks
Example prompts for the agent
- Run
/training-check entity/project/run_idand inspect the current loss trend. - Set up recurring
/training-check entity/project/run_idchecks for this active run. - Use
/training-check entity/project/run_idto assess evaluation metrics against the baseline.
How to install training-check
1Skills CLI (Vercel)
npx skills add wanshuiyin/Auto-claude-code-research-in-sleep --skill training-check -a claude-code2Manually: put the files in place
~/.claude/skills/training-check/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/training-check/
1Skills CLI (Vercel)
npx skills add wanshuiyin/Auto-claude-code-research-in-sleep --skill training-check -a codex2Manually: put the files in place
.agents/skills/training-check/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add wanshuiyin/Auto-claude-code-research-in-sleep --skill training-check -a cursor2Manually: put the files in place
.cursor/skills/training-check/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install wanshuiyin/Auto-claude-code-research-in-sleep training-check2Manually: put the files in place
.github/skills/training-check/SKILL.md1Skills CLI (Vercel)
npx skills add wanshuiyin/Auto-claude-code-research-in-sleep --skill training-check -a gemini-cli2Platform CLI
gemini skills install https://github.com/wanshuiyin/Auto-claude-code-research-in-sleep --path skills/training-checkManually: put the files in place
.devin/skills/training-check/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add wanshuiyin/Auto-claude-code-research-in-sleep --skill training-check -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about training-check
How do I install training-check in Claude Code?
Run npx skills add wanshuiyin/Auto-claude-code-research-in-sleep --skill training-check -a claude-code, then run npx skills add wanshuiyin/Auto-claude-code-research-in-sleep --skill training-check -a claude-code again. The skill file is at ~/.claude/skills/training-check/SKILL.md.
What does training-check do?
It periodically reviews WandB metrics while training runs, including loss, evaluation metrics, NaN, Inf, spikes, and gradient norm. Unclear cases can be judged through Codex MCP.
What does training-check need for a WandB run?
Provide WANDB_ENTITY and WANDB_PROJECT through CLAUDE.md, or pass a run path in entity/project/run_id format. If WandB is unreachable, it can read a training log over SSH.
Source text
SKILL.md · MIT
---
name: training-check
description: Periodically check WandB metrics during training to catch problems early (NaN, loss divergence, idle GPUs). Avoids wasting GPU hours on broken runs. Use when training is running and you want automated health checks.
argument-hint: "[wandb-run-path]"
allowed-tools: Bash(*), Read, Grep, Glob, Write, Edit, mcp__codex__codex, mcp__codex__codex-reply, mcp__antigravity__antigravity, mcp__antigravity__antigravity-reply, mcp__grok__grok, mcp__grok__grok-reply, mcp__claude-review__review, mcp__claude-review__review_reply, mcp__claude-review__review_start, mcp__claude-review__review_reply_start, mcp__claude-review__review_status
---
# Training Check
> **Before each reviewer slot**, follow [Selectable Reviewers](../shared-references/reviewer-backends.md):
> resolve invocation → `.aris/reviewer.json` → Claude Code default (Codex MCP)
> with `reviewer_route.py` through the canonical helper resolver, preserving this
> slot's tier, fresh contexts, source/image inputs and deterministic gates.
> Codex examples/pins below apply only to `backend=codex`; other routes use their
> own first-call/reply contract. Save the route and actual returned identity;
> unavailable selections are `REVIEW_UNAVAILABLE`. Classify acceptance from actual
> families/completion/scope. Forward invocation reviewer/model/effort overrides
> to reviewer-bearing children. Generation workers are unchanged.
Periodically read WandB metrics during training to catch problems early. Do not wait until training finishes to discover it was a waste of GPU time.
> ⏱ This skill is **correctly** cron-wired (see below): it polls
> machine-checkable training health (NaN / divergence / idle GPU) — the additive
> external-wait shape in
> [`shared-references/external-cadence.md`](../shared-references/external-cadence.md).
> The occasional Codex call for an ambiguous metric is a **one-shot** check per
> tick, not a multi-round verdict loop, so it stays additive — it never grows
> into a wrapped verdict skill.
## Context: $ARGUMENTS
## Constants
- WANDB_ENTITY and WANDB_PROJECT: read from CLAUDE.md or passed as argument (format: `entity/project/run_id`)
- CHECK_INTERVAL: starts at 10 minutes, then gradually increases if consistently healthy: 10 min → 20 min → 30 min → 60 min (cap)
- REVIEWER_MODEL = `gpt-6-astra` — used via Codex MCP for ambiguous cases only
## When to Use
- After training is confirmed running (session alive, loss decreasing for first few steps)
- Set up via CronCreate to fire periodically during training
- **This skill checks training QUALITY, not process HEALTH.** Process health (session alive, GPU utilization) is [watchdog.py](../../tools/watchdog.py)'s job.
## Workflow
### Step 1: Read WandB Metrics
```python
import wandb
api = wandb.Api()
run = api.run("<entity>/<project>/<run_id>")
history = run.history()
```
If WandB is unreachable (API error, network issue), fall back to reading the log file directly via SSH:
```bash
ssh server "tail -100 /path/to/training.log"
```
Check these signals:
- **Loss trend**: Is training loss decreasing over the last N steps?
- **Eval metrics**: Are evaluation metrics improving (or at least not degrading)?
- **NaN / Inf**: Any NaN or Inf values in loss or gradients?
- **Spikes**: Sudden large jumps in loss (>10x normal variance)?
- **Learning rate**: Is the schedule behaving as expected?
- **Gradient norm**: Exploding or vanishing?
### Step 2: Judgment
| Signal | Judgment | Action |
|--------|----------|--------|
| NaN/Inf in loss | **Clearly bad** | Stop training, investigate |
| Loss diverging (increasing for >N steps) | **Clearly bad** | Stop training, investigate |
| Eval metrics significantly worse than baseline | **Clearly bad** | Stop training, investigate |
| Loss decreasing, metrics improving | **Clearly fine** | Continue, increase check interval |
| Loss flat but not diverging | **Unsure** | → Step 3 (Codex judgment) |
| Metrics noisy, can't tell trend | **Unsure** | → Step 3 (Codex judgment) |
| Slightly worse than baseline but still early | **Unsure** | → Step 3 (Codex judgment) |
### Step 3: Codex Judgment (only when unsure)
Only escalate to Codex when the signal is ambiguous. For clearly good or clearly bad signals, act directly.
> Resolve this reviewer slot first; the following is the `backend=codex` example.
```
mcp__codex__codex:
model: gpt-6-astra
config: {"model_reasoning_effort": "xhigh"}
prompt: |
TRAINING HEALTH CHECK — need your judgment on ambiguous metrics.
Run: <entity>/<project>/<run_id>
Current epoch/step: X / Y total
Training loss (last 10 checkpoints): [values]
Eval metrics (last 3 evals): [values]
Baseline reference: [numbers from paper/reproduction]
What I'm unsure about: [specific concern]
Please respond with exactly one of:
- STOP: clearly problematic, should kill training
- CONTINUE: looks fine, check again next interval
- WAIT: not enough data to judge, check again sooner
```
### Step 4: Act
| Decision | Action |
|----------|--------|
| **Stop** | Kill the training session. Save the WandB run URL, key metrics, and reason for stopping. Log to project notes for debugging. |
| **Continue** | Do nothing. Will be invoked again at next interval (increase interval if consistently healthy). |
| **Wait** | Do nothing but keep the current short interval (don't increase). |
## Integration with Watchdog
Training-check and [watchdog.py](../../tools/watchdog.py) operate at different levels:
| Layer | Tool | What it checks | Frequency |
|-------|------|----------------|-----------|
| Process health | watchdog.py | Session alive? GPU active? | Every 60s (continuous) |
| Training quality | training-check | Loss trend? Metrics improving? | Every 10-60 min (periodic) |
Use both together:
- Watchdog catches crashes and idle GPUs immediately
- Training-check catches subtle quality issues (loss plateau, metric degradation)
## Rules
- Do not stop training on first sign of noise — some loss spikes are normal. Look at **trends over multiple checkpoints**.
- When stopping training, always save the WandB run URL and key metrics as evidence.
- If both WandB and log files are unreachable, report the connectivity issue and try again next interval. Do not assume training is broken.
- Gradually increase check interval when healthy (10 → 20 → 30 → 60 min). Reset to 10 min after any anomaly.
- This skill is meant to be automated via CronCreate — do not ask the user whether to set it up. Just set it.
## CronCreate Setup Example
```
After training is confirmed stable:
CronCreate (recurring, every 10 minutes initially):
"Run /training-check for wandb run <entity>/<project>/<run_id>"
```
As the check interval increases, delete the old CronCreate job and create a new one with the longer interval.
© wanshuiyin · MIT · wanshuiyin/Auto-claude-code-research-in-sleep