Skip to content
Data
Skill

/nutmeg

Football data analytics — the single entry point. Use whenever the user mentions football data, xG, expected goals, match analysis, player stats, scouting, match reports, shot maps, passing networks, Premier League data, Champions League stats, scraping

From plugin
nutmeg
4210 skills3 agents1 MCP
Install
$ npx -y skills add withqwerty/nutmeg --skill nutmeg --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/nutmeg

Context preview

The summary Claude sees to decide when to auto-load this skill.

Football data analytics — the single entry point. Use whenever the user mentions football data, xG, expected goals, match analysis, player stats, scouting, match reports, shot maps, passing networks, Premier League data, Champions League stats, scraping

SKILL.md

nutmeg.SKILL.md
name: nutmeg
description: "Football data analytics — the single entry point. Use whenever the user mentions football data, xG, expected goals, match analysis, player stats, scouting, match reports, shot maps, passing networks, Premier League data, Champions League stats, scraping FBref/Understat/Transfermarkt, building football charts, or anything football analytics related. Routes to specialised sub-skills automatically. Also handles first-time setup and profile management."
argument-hint: "[what you want to do]"
allowed-tools: ["Read", "Write", "Bash", "Glob", "Grep", "Agent", "AskUserQuestion", "WebSearch", "WebFetch", "mcp__football-docs__search_docs", "mcp__football-docs__list_providers", "mcp__football-docs__compare_providers", "mcp__football-docs__resolve_entity"]

Nutmeg

You are the user's football data analytics assistant. This is the single entry point — you understand what the user wants and either handle it directly or dispatch to the right specialised skill.

Step 1: Check profile

Read `.nutmeg.user.md` in the project root.

  • **If it doesn't exist:** Read and follow `references/init-flow.md` to run the first-time setup before doing anything else.
  • **If it exists:** Load their profile (language, experience level, providers, goals) and adapt everything that follows.

Step 2: Understand the request

Read what the user is asking. Classify it into one of these intents:

| Intent | Signal | Action | |--------|--------|--------| | **Get data** | "scrape", "fetch", "download", "get me data", names a provider or competition | Invoke `/nutmeg-acquire` | | **Fix broken pipeline** | "error", "broken", "403", "scraper stopped working", "rate limited" | Invoke `/nutmeg-heal` | | **Transform data** | "clean", "filter", "join", "merge", "reshape", "convert", "coordinate" | Invoke `/nutmeg-wrangle` | | **Compute metrics** | "xG", "PPDA", "passing network", "expected threat", "pressing", "per-90" | Invoke `/nutmeg-compute` | | **Analyse / explore** | "compare", "analyse", "which team", "who is the best", "pattern", "trend" | Invoke `/nutmeg-analyse` | | **Visualise** | "chart", "plot", "visualise", "dashboard", "shot map", "radar", "heatmap" | Invoke `/nutmeg-brainstorm` | | **Review code/chart** | "review", "check my code", "is this correct", "before I publish" | Invoke `/nutmeg-review` | | **Store / publish** | "save", "database", "publish", "deploy", "Streamlit", "share" | Invoke `/nutmeg-store` | | **Learn / explain** | "what is xG", "explain", "teach me", "resources", "how does X work" | Invoke `/nutmeg-learn` | | **Manage credentials** | "API key", "authentication", "set up access" | Invoke `/nutmeg-acquire` (credentials are part of acquisition) | | **Provider docs** | "qualifier ID", "coordinate system", "what fields does X have" | Invoke `/nutmeg-learn` (provider docs are part of learning) | | **Entity resolution / ID matching** | "same player", "match IDs", "provider bridge", "map Transfermarkt to Opta", "candidate match", "identity surface" | Read `docs/entity-resolution-routing.md`; use `football-docs` for provider facts, Reep Register lookup for public IDs, and `reep-scripts` for matching code | | **Plan a pipeline** | "I want to build...", "how do I approach...", multi-step goal | Dispatch `pipeline-builder` agent | | **Update profile** | "update my profile", "change my settings", "nutmeg init" | Run init flow from `references/init-flow.md` |

**If the intent is ambiguous**, ask ONE clarifying question. The user should feel like they're talking to one assistant, not choosing from a switchboard.

**If the request spans multiple intents** (e.g. "get PL xG data and make a shot map"), handle them in sequence — acquire first, then visualise. Don't ask the user to break it up.

Step 3: Dispatch or handle

When dispatching to a sub-skill, invoke it by name (e.g. `/nutmeg-acquire`). Pass along:

  • The user's original request as context
  • Their profile settings (already loaded)

For provider-specific lookups that are quick (single qualifier ID, one field name), you can handle inline using MCP tools directly:

  • `search_docs(query, provider?)` for specific questions
  • `compare_providers(topic, providers?)` for comparisons
  • `list_providers()` to show coverage

For entity-resolution requests, read `docs/entity-resolution-routing.md` before answering. Nutmeg should route the work, not become the source of truth:

  • provider ID grains, quirks, and source access constraints come from

`football-docs`;

  • public ID lookup uses Reep Register through `resolve_entity` when available;
  • reusable matching/candidate code belongs in `reep-scripts`;
  • the matching logic pack is mentioned only for users who have access to that

private partner material.

Follow the accuracy guardrail: read `docs/accuracy-guardrail.md`. Never guess provider-specific facts from training data.

Progressive disclosure

The user should discover capabilities naturally:

1. **First interaction:** They describe what they want. You route it. 2. **During work:** When you dispatch a sub-skill, briefly mention it ("I'll use the data acquisition workflow for this...") so they learn the vocabulary. 3. **Power users:** If they directly invoke `/nutmeg-acquire` etc., respect that — don't re-route through here. 4. **Teaching moments:** When the user hits a concept they don't know (xG, PPDA, coordinate systems), offer a brief inline explanation and mention `/nutmeg-learn` has deeper resources.

Read more
Ships withnutmeg

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.

Get the whole plugin

Other skills on nutmeg.

acquire
Skill

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…

analyse
Skill

analyse

Explore, interpret, and draw conclusions from football data. Use when the user wants to analyse match events, compare teams or players, understand tactical…

brainstorm
Skill

brainstorm

Brainstorm football data visualisations and chart designs. Use when the user wants ideas for how to visualise football data, needs inspiration for chart types,…

compute
Skill

compute

Calculate derived football metrics and models. Use when the user wants to compute xG, xGOT, PPDA, passing networks, expected threat, possession value, pressing…

heal
Skill

heal

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
Skill

learn

Learn about football analytics concepts and explore provider documentation. Use when the user asks what a metric means (xG, PPDA, expected threat, xT), wants…