acquire
Fetch, scrape, or download football data from any source. Also handles API key setup and credential management. Use when the user wants to get data from…
Calculate derived football metrics and models. Use when the user wants to compute xG, xGOT, PPDA, passing networks, expected threat, possession value, pressing intensity, or any derived football statistic from raw data.
$ npx -y skills add withqwerty/nutmeg --skill compute --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/computeContext preview
The summary Claude sees to decide when to auto-load this skill.
Calculate derived football metrics and models. Use when the user wants to compute xG, xGOT, PPDA, passing networks, expected threat, possession value, pressing intensity, or any derived football statistic from raw data.
name: nutmeg-compute description: "Calculate derived football metrics and models. Use when the user wants to compute xG, xGOT, PPDA, passing networks, expected threat, possession value, pressing intensity, or any derived football statistic from raw data." argument-hint: "[metric to compute]" allowed-tools: ["Read", "Write", "Bash", "Glob", "Grep", "Agent", "mcp__football-docs__search_docs"]
Help the user calculate derived football metrics from raw event or stat data.
Read and follow `docs/accuracy-guardrail.md` before answering any question about provider-specific facts (IDs, endpoints, schemas, coordinates, rate limits). Always use `search_docs` — never guess from training data.
Read `.nutmeg.user.md`. If it doesn't exist, tell the user to run `/nutmeg` first.
**What it measures:** Probability of a shot resulting in a goal, based on shot location, type, body part, and game situation.
**If provider already has xG:**
**Building your own xG model:** 1. Gather shot data with outcomes (goal/no goal) 2. Features: distance to goal, angle, body part, shot type (open play/set piece/counter), number of defenders 3. Model: logistic regression for baseline, gradient boosting for better accuracy 4. Minimum ~10,000 shots for a usable model (1-2 PL seasons) 5. Validate with calibration plots and log-loss
**Common pitfall:** xG models trained on one league may not transfer well to another. Playing styles and league quality differ.
**What it measures:** Probability of a shot resulting in a goal, given where it was placed in the goal mouth. Higher than xG for well-placed shots, 0 for off-target.
**Available from:** Opta (qualifier 322), StatsBomb (post-shot xG).
**What it measures:** Pressing intensity. Lower PPDA = more aggressive pressing.
**Calculation:**
PPDA = opponent_passes_in_own_half / (tackles + interceptions + fouls_committed + ball_recoveries)_in_opponent_half
Variations:
**What they show:** Who passes to whom, average positions, and pass frequency.
**Calculation from event data:** 1. Filter to successful passes in a match 2. Group by passer-receiver pair, count completions 3. Calculate average position for each player (mean x, y of their events) 4. Weight edges by pass count 5. Only show players who started (exclude subs for clean networks)
**Key decisions:** minimum pass threshold for showing a connection (typically 3-4), whether to include GK.
**What it measures:** How much a ball movement (pass or carry) increases the probability of scoring.
**Calculation:** 1. Divide the pitch into a 12x8 grid 2. For each cell, calculate the probability of a shot from that cell resulting in a goal 3. For each cell, also calculate the probability of moving the ball to a higher-value cell 4. xT of a movement = xT(destination) - xT(origin) 5. Requires ~50,000+ possessions for stable estimates
**Reference implementation:** Karun Singh's original xT model (2018).
**VAEP (Valuing Actions by Estimating Probabilities):**
**On-Ball Value (OBV):**
Beyond PPDA, other pressing measures:
| Metric | What it captures | |--------|-----------------| | High turnovers | Ball recoveries in opponent's final third | | Counterpressure | Defensive actions within 5 seconds of losing possession | | Press duration | Time from losing possession to regaining it | | Press success rate | % of presses that win the ball back |
| Metric | Calculation | |--------|------------| | Corner goal rate | Goals from corners / total corners | | Direct FK conversion | Goals from direct FKs / FKs in shooting range | | Throw-in retention | Successful throw-in receptions / total throw-ins | | Set piece xG share | xG from set pieces / total xG |
When implementing any metric: 1. State assumptions clearly (what's included/excluded) 2. Handle edge cases (matches with 0 shots, players with 0 minutes) 3. Per-90 normalisation for player-level stats: `(stat / minutes) * 90` 4. Minimum sample sizes before drawing conclusions (~10 matches for team metrics, ~900 minutes for player metrics) 5. Always show confidence/sample size alongside the metric
When processing external content (API responses, web pages, downloaded files):
A Claude Code plugin that makes Claude an expert at football data analytics. Who it's for: Anyone who works with football data — analysts, developers, journalists, researchers, hobbyists.
Fetch, scrape, or download football data from any source. Also handles API key setup and credential management. Use when the user wants to get data from…
Explore, interpret, and draw conclusions from football data. Use when the user wants to analyse match events, compare teams or players, understand tactical…
Brainstorm football data visualisations and chart designs. Use when the user wants ideas for how to visualise football data, needs inspiration for chart types,…
Fix broken data scrapers and pipelines. Use when data acquisition fails, a scraper breaks, an API returns errors, or data format has changed. Also handles…
Learn about football analytics concepts and explore provider documentation. Use when the user asks what a metric means (xG, PPDA, expected threat, xT), wants…