New to Claude Skills? Learn how to install them →

wanshuiyin on GitHub

Training Check

Free

Automate health checks during model training.

Get this skill

Free · Opens the source repo

What Training Check does

Training Check is a skill designed for developers and data scientists who utilize WandB for tracking their machine learning experiments. This skill periodically reads metrics from WandB during training sessions, helping users to identify potential issues such as NaN values, loss divergence, or idle GPUs before training completes. By catching these problems early, it prevents wasting valuable GPU hours on runs that are unlikely to yield useful results.

The skill operates by polling WandB metrics at defined intervals, starting at 10 minutes and increasing to a maximum of 60 minutes if the training remains stable. It checks for critical signals such as loss trends, evaluation metrics, and any anomalies in the training process. If WandB is unreachable, the skill can fall back to reading training logs directly via SSH, ensuring that users can still monitor their training sessions effectively.

In cases where the metrics are ambiguous, the skill can escalate to Codex for further judgment, allowing for a more nuanced decision-making process. This two-tiered approach ensures that users can make informed decisions based on both automated checks and advanced AI reasoning.

Training Check is particularly useful for those who want to maintain high-quality training processes without constant manual oversight. By automating these checks, users can focus on refining their models while the skill takes care of monitoring their training health.

When to use it

Use this skill once you have confirmed that your training session is running and you want to automate health checks on your model's performance.

When not to use it

This skill is not suitable for initial training setups or for monitoring process health, which is handled by other tools like watchdog.py.

What you can build with it

Monitoring Long Training Sessions

Use Training Check to automatically check metrics during long training sessions, ensuring you catch issues without manual intervention.

Preventing Resource Waste

Set up this skill to avoid wasting GPU hours by identifying problems early in the training process.

Integrating with Existing Workflows

Combine Training Check with watchdog.py to create a comprehensive monitoring solution for both training quality and process health.

How to install Training Check

View source

1. Install with the skills CLI

npx skills add wanshuiyin/auto-claude-code-research-in-sleep/training-check --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by wanshuiyin

Training Check

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. 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-5.6-sol — 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's job.

Workflow

Step 1: Read WandB Metrics

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:

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

SignalJudgmentAction
NaN/Inf in lossClearly badStop training, investigate
Loss diverging (increasing for >N steps)Clearly badStop training, investigate
Eval metrics significantly worse than baselineClearly badStop training, investigate
Loss decreasing, metrics improvingClearly fineContinue, increase check interval
Loss flat but not divergingUnsure→ Step 3 (Codex judgment)
Metrics noisy, can't tell trendUnsure→ Step 3 (Codex judgment)
Slightly worse than baseline but still earlyUnsure→ 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.

mcp__codex__codex:
  model: gpt-5.6-sol
  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

DecisionAction
StopKill the training session. Save the WandB run URL, key metrics, and reason for stopping. Log to project notes for debugging.
ContinueDo nothing. Will be invoked again at next interval (increase interval if consistently healthy).
WaitDo nothing but keep the current short interval (don't increase).

Integration with Watchdog

Training-check and watchdog.py operate at different levels:

LayerToolWhat it checksFrequency
Process healthwatchdog.pySession alive? GPU active?Every 60s (continuous)
Training qualitytraining-checkLoss 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.

Frequently asked questions about Training Check

Similar skills