experiment-tracking
Skill1 starsChanged 38 days agoMITView on GitHub
Sets up disciplined ML experiment tracking - run logging schemas, artifact versioning, naming conventions, and reproducibility standards - and produces the run-record template a team actually follows. Use when someone asks "how should we track our ML experiments", "why can't we reproduce this result", "how do I set up MLflow or W&B for the team", or is bootstrapping a new ML project. Do NOT use for analyzing product A/B tests - use ab-test-analyzer instead; for monitoring deployed models use data-drift-monitor; for judging whether a trained model is good enough to ship use model-evaluation-report.
5 other projects use a version of this.
Adopted by
Most recently taken up by
- kinhluan/skillstheir own version, first seen Nov 8, 2026
- gmanch94/claude-code-aidlc-templatetheir own version, first seen Jul 11, 2026
- zhimengj0326/claude-skillstheir own version, first seen Jun 3, 2026
- Hollis36/claude-skilltheir own version, first seen Apr 6, 2026
- JunMA98/Computer-science-claude-skillstheir own version, first seen Mar 11, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- kinhluan/skills★ 6same name
- JunMA98/Computer-science-claude-skills★ 3same name
- gmanch94/claude-code-aidlc-template★ 2same name
- Hollis36/claude-skill★ 1same name
- zhimengj0326/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository6 other files it gives its agents.
- data-drift-monitorSkill
- eda-playbookSkill
- feature-store-designSkill
- ml-feature-engineeringSkill
- model-card-writerSkill
- model-evaluation-reportSkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 7 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Follow the steps in order: the run schema (Step 2) must exist before naming conventions (Step 3) matter, and reproducibility standards …
- Very specific: line 44
Run name format: project/hypothesis/variant, for example churn/feature-selection/drop-low-variance.
- Distinctive: line 45
Never reuse a run name. Each run is immutable once logged.
- Distinctive: line 91
Do not log only the hyperparameters that changed - defaults drift between library versions and silently change results.
- Distinctive: line 92
Do not allow dirty-working-tree runs by default.
- Distinctive: line 93
Do not organize experiments by date or person.
- Distinctive: line 94
Do not choose the promotion metric after seeing the leaderboard.
- Distinctive: line 95
Do not store artifacts on a laptop.
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Experiment Tracking
An experiment no one can reproduce is a result no one can trust. Disciplined tracking is not overhead - it is the minimum viable scientific practice for ML, and the alternative is a promoted model whose provenance nobody can reconstruct when it misbehaves in production. This skill installs the logging schema, naming discipline, and promotion workflow that make every run auditable.
Operating procedure
Follow the steps in order: the run schema (Step 2) must exist before naming conventions (Step 3) matter, and reproducibility standards (Step 4) are unenforceable until the schema captures seeds and environments.
Step 1: Gather inputs
Collect these before touching tooling. Where the answer is unknown, record the default and label it a guess.
- Team size and collaboration need. Default: solo or small team.
- Existing tooling, if any (MLflow, Weights and Biases, homegrown spreadsheets).
- Where artifacts live today (local disk, S3, GCS) - shared object storage is required for teams.
- Model iteration style: iterative training with epochs (deep learning) or single-fit (trees, linear models). This decides whether per-epoch curves are logged.
- The promotion decision this tracking must serve: what metric, on what test set, decides whether a model ships.
Tooling default: MLflow for self-hosted setups; Weights and Biases when the team needs collaboration features. Both satisfy every requirement below. Use the tracking server, not local file logging, in any team setting, and point artifact storage at a shared location (S3 or GCS) from day one.
Step 2: Define the run logging schema
Inconsistent logging is as bad as no logging. Every run logs all of the following - automate the scaffold, because a run that requires manual logging steps will be logged inconsistently.
- Hyperparameters: every value, including defaults. Do not rely on code to reconstruct them.
- Dataset: name, version or content hash, split sizes, and any sampling applied.
- Code: git commit SHA. Fail the run if the working tree is dirty unless explicitly overridden.
- Environment: Python version and key library versions (framework, numpy, pandas at minimum). A Docker image SHA or conda lock file is the gold standard.
- Metrics: train, validation, and test values; per-epoch curves for iterative models.
- Random seeds for Python random, numpy, the framework RNG, and data shuffling.
- Artifacts: model checkpoint path, preprocessor path, and evaluation report path.
Step 3: Impose naming and organization
Naming is the index - garbage names make the tracker useless.
- Run name format: project/hypothesis/variant, for example churn/feature-selection/drop-low-variance.
- Never reuse a run name. Each run is immutable once logged; a "fixed" run is a new run.
- Group runs into experiments by hypothesis, never by date or author.
- Tag every run with dataset version, model family, and outcome: promoted, rejected, or inconclusive.
Step 4: Enforce the reproducibility standard
A run is reproducible only if re-executing it lands within metric tolerance. Set the tolerance explicitly - 0.5 percent relative difference on the primary metric is a reasonable default for seeded runs; anything looser than 2 percent means the run is effectively non-deterministic and the causes (unseeded ops, nondeterministic GPU kernels, unstable data ordering) must be found.
- Dataset splits must be deterministic. Prefer hash-based splitting (hash a stable ID into buckets) over random splits, because it survives dataset growth.
- Spot-check reproducibility by re-running the current top experiment from scratch at least quarterly. If it fails tolerance, treat it as an incident, not an inconvenience.
Step 5: Wire the comparison and promotion workflow
Tracking only has value if it drives decisions.
- Define the promotion criterion before any experiment starts - metric, test set, and threshold. Deciding after seeing results is p-hacking with extra steps.
- Compare runs only on the same held-out test set. Changing the test set resets every comparison to zero.
- Record why each run was rejected. Negative results are data; a tracker full of unexplained dead runs teaches nothing.
- Link every promoted model artifact back to the exact run that produced it, so production incidents trace to a commit, a dataset hash, and a seed in one click.
Worked artifact: run record template
Copy this into the tracker's run description or a RUNS.md. Replace FILL fields; the tags block feeds the tracker's tag API.
RUN: [FILL: project]/[FILL: hypothesis]/[FILL: variant]
COMMIT: [FILL: git SHA] DIRTY TREE: no (required)
DATASET: [FILL: name] @ [FILL: version or hash] SPLITS: [FILL: train/val/test sizes]
SEEDS: python=[FILL] numpy=[FILL] framework=[FILL] shuffle=[FILL]
ENV: python [FILL], [FILL: framework+version], image/lock: [FILL]
HYPERPARAMS: [FILL: full dict, defaults included]
METRICS: train=[FILL] val=[FILL] test=[FILL] (primary metric: [FILL])
ARTIFACTS: checkpoint=[FILL] preprocessor=[FILL] eval-report=[FILL]
TAGS: dataset=[FILL] model-family=[FILL] outcome=[promoted|rejected|inconclusive]
REJECTION REASON (if rejected): [FILL: one sentence]Bad run name: "final_model_v2_new_ACTUALLY_FINAL" - no hypothesis, no lineage, invites reuse. Good run name: "churn/feature-selection/drop-low-variance" - the tracker becomes browsable by question asked.
Deliverable
Produce a tracking setup document containing: the chosen tool and storage configuration, the run logging schema (the list in Step 2 as a checklist), the naming convention with one filled example, the reproducibility tolerance and quarterly spot-check owner, and the promotion criterion written down before the next experiment starts.
Do NOT
- Do not log only the hyperparameters that changed - defaults drift between library versions and silently change results.
- Do not allow dirty-working-tree runs by default; the commit SHA becomes a lie.
- Do not organize experiments by date or person; hypotheses are the unit of learning.
- Do not choose the promotion metric after seeing the leaderboard.
- Do not store artifacts on a laptop; the tracker outlives the machine.
Quality bar
A finished setup passes when: a new teammate can reproduce the top run to within stated tolerance using only tracker metadata; every run in the last month carries all Step 2 fields and an outcome tag; the promotion criterion predates the runs it judges; and the promoted production model links to exactly one run.
For evaluating whether a tracked model should ship, hand off to model-evaluation-report. For monitoring it after deployment, use data-drift-monitor.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

