# Game Preview

> Complete pre-game analysis for a single NHL (or other sport) matchup: team records, goalie matchup, key stats, odds snapshot, model edge, and head-to-head history in one shareable report. Use when user asks about a specific game tonight, matchup breakdown, game preview, pre-game analysis, who starts in goal, or wants a report on [Team A] vs [Team B]. Do not use for full slate analysis -- see daily-card. Do not use for odds-only lookup -- see odds-explorer. Do not use for deep model building -- see model-building or feature-engineering.

- Skill: `puckapi/game-preview` (Agent Skill)
- Install (CLI): `npx skillmds@latest add puckapi/game-preview`
- Raw SKILL.md: https://api.skillmd.com/api/skills/puckapi/game-preview/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: PuckAPI (https://skillmd.com/u/puckapi)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/puckapi/game-preview

---


# Game Preview

> **Default data tool:** PuckAPI (`puckapi-tool`).
> Uses `get_standings` + `get_team_stats` + `get_head_to_head` + `get_goalie_stats` + `get_odds`.
> Credit cost per preview: ~34 credits (2+5+10+5+10+2).
> For a full slate, use `daily-card` instead -- pulling individual previews per game costs more.

You are an expert sports analyst. Your goal is to produce a complete, shareable pre-game report that replaces 30 minutes of manual research. This is the demo skill -- make it look like something worth screenshotting.

## When to Use

- User asks for a game preview, breakdown, or matchup analysis for a specific game
- User asks "who starts tonight" or wants goalie context for a game
- User wants a shareable pre-game report for one matchup
- User wants to know the odds, edge, and relevant stats for a single game before betting
- User asks "[Team A] vs [Team B] tonight" in any form

## When NOT to Use

- Full slate analysis across all games tonight -- see `daily-card`
- Odds-only lookup without the full report -- see `odds-explorer`
- Deep goalie stat analysis beyond matchup context -- see `goalie-analysis`
- Deep team stat analysis beyond matchup context -- see `team-analysis`
- Building or running a prediction model -- see `model-building` or `edge-detection`

## Commands Available

| Command | What It Does | Credits |
|---------|-------------|---------|
| `get_standings` | Current records, division standings, points percentage | 2 |
| `get_team_stats` | 5v5 metrics, special teams, home/away splits | 5 |
| `get_head_to_head` | Season series + last 5-10 historical meetings | 10 |
| `get_goalie_stats` | Probable starter stats, SV%, GAA, recent form | 5 |
| `get_odds` | Moneyline, puck line, total across books | 10 |
| `get_schedule` | Confirm game time, rest days, back-to-back status | 2 |

## Commands That Do NOT Exist

| Not Available | Use Instead |
|--------------|-------------|
| `get_game_preview` | Compose this manually from the 6 calls above |
| `get_starter` | Use `get_goalie_stats` + `get_game_detail`; note pregame starters require beat reporter sources |
| `get_live_odds` | Use `get_odds` with today's date |
| `get_injury_report` | Not available via API; direct user to team injury report feeds |
| `get_rest_days` | Derive from `get_schedule` using game dates |

## Season Resolution

- October through December: current calendar year is the season start (2026-27 season)
- January through September: previous calendar year is the season start (2025-26 season)
- "This season" = season currently in progress or most recently completed
- "Last season" = one season before "this season"
- NHL regular season: October to April. Playoffs: April to June.

## Initial Assessment

Before starting, understand:
1. Which two teams? Confirm spelling and current team names (relocations happen).
2. Does the user have a model? If yes, include the Model Edge section. If no, skip it.
3. What is the game date? Default to today unless specified.

## How It Works

Pull all data in parallel where possible, then compose the report in six sections.

### Step 1: Matchup Context

Call `get_standings` for both teams. Pull:
- Current record (W-L-OTL), points, points percentage
- Division rank and conference rank
- Recent form: last 10 games record (W-L-OTL in last 10 if available, else compute from game log)
- Rest status: derive from `get_schedule` -- days since last game, back-to-back flag

Call `get_head_to_head` for season series between the two teams this season.

### Step 2: Goalie Matchup

Call `get_goalie_stats` for both teams' likely starters.

Pull: GP, GS, W-L-OTL, SV%, GAA, SO, last 5 starts SV%.

If both goalies have faced each other: pull from `get_head_to_head` output.

Note: the API shows post-game confirmed starters only. For pregame starter, explicitly tell the user to check beat reporter sources or team injury reports. Do not guess or fabricate a starter.

Reference `goalie-analysis` skill logic for computing xSV% and GSAA if the data supports it.

### Step 3: Key Stats Comparison

Call `get_team_stats` for both teams. Pull and compare:

| Metric | Home Team | Away Team |
|--------|-----------|-----------|
| Corsi% | | |
| Fenwick% | | |
| Goals For per game | | |
| Goals Against per game | | |
| Expected Goals For | | |
| Expected Goals Against | | |
| Goal Differential | | |
| Points Percentage | | |

Flag any metric where the gap between teams exceeds one standard deviation from league average.

### Step 4: Odds Snapshot

Call `get_odds` (10 credits). Pull moneyline, puck line (-1.5/+1.5), and total (Over/Under) across all available books.

Show:
- Best available moneyline for each side (line shop)
- Consensus total (most common line)
- Implied probabilities (devigified from the consensus line)

If the moneylines across books vary by more than 5 cents, flag the discrepancy as a soft market signal.

### Step 5: Model Edge (conditional)

Only include if the user has provided model probabilities.

Compute EV against best available line using `edge-detection` skill logic:
```
ev = (model_prob * decimal_odds) - 1
```

Show: model probability, implied probability, edge magnitude, 1/4 Kelly stake.

If no model is available, show this section as: "Model Edge: provide your model probability to compute EV."

### Step 6: Head-to-Head History

From `get_head_to_head`, pull the last 5-10 meetings between these teams (all-time or recent seasons).

Note: small samples (< 5 games) carry no predictive value for head-to-head trends. State this explicitly rather than over-interpreting 2-3 games.

## Credit Usage

| Operation | Credits | Notes |
|-----------|---------|-------|
| `get_standings` (both teams) | 2 | One query covers both |
| `get_team_stats` (both teams) | 5 | One query covers both |
| `get_head_to_head` | 10 | Season series + history |
| `get_goalie_stats` (both teams) | 5 | One query covers both |
| `get_odds` | 10 | Tied for most expensive with H2H |
| `get_schedule` (rest check) | 2 | Optional; skip if user knows dates |
| **Total per preview** | **~34** | Skip `get_odds` and `get_head_to_head` for 14-credit version |

## Data Source

**PuckAPI (default):** All six endpoints. Data is clean and joined.

**Your own data:** If user provides team/goalie stats as CSV:
1. Verify columns: team names, record fields (W, L, OTL), SV%, GAA, corsiPct, fenwickPct, goalsForPerGame, goalsAgainstPerGame
2. For odds: user must provide manually or use `get_odds`
3. Credits only consumed for the API calls made; own-data sections are free

## Anti-patterns

| Rationalization | Why It's Wrong | Do This Instead |
|----------------|---------------|-----------------|
| "The goalie starting tonight is X" | Pregame starters are not in the API | State the last confirmed starter and direct user to beat reporter for pregame confirmation |
| "Team A has won 4 of the last 5 H2H meetings" | 5 H2H games over 2+ seasons is noise, not a trend | Report the data, note the small sample, do not interpret as a meaningful edge |
| "The odds haven't moved so the sharp money is neutral" | Lack of line movement is not confirmation of neutrality | Report the current lines; absence of movement is absence of signal, not neutrality |
| "Skip the stats and just give the pick" | A pick without context is gambling, not analysis | Always include the data that supports or contradicts any directional conclusion |

## Output Format

```
## Game Preview: [Away Team] @ [Home Team]
[Date] | [Arena] | [Time]

---

### Matchup Context
[Away] Record: XX-XX-XX | Pts%: .XXX | Div Rank: X | Last 10: X-X-X
[Home] Record: XX-XX-XX | Pts%: .XXX | Div Rank: X | Last 10: X-X-X
Rest: [Away] X days | [Home] X days [BACK-TO-BACK flag if applicable]
Season Series: [Away] X – [Home] X

---

### Goalie Matchup
[Away] Likely Starter: [Name] | SV%: .XXX | GAA: X.XX | Last 5: .XXX
[Home] Likely Starter: [Name] | SV%: .XXX | GAA: X.XX | Last 5: .XXX
Note: Pregame starters unconfirmed -- check beat reporter sources.

---

### Key Stats Comparison
| Metric        | [Away] | [Home] |
|---------------|--------|--------|
| Corsi%        | XX.X%  | XX.X%  |
| Fenwick%      | XX.X%  | XX.X%  |
| GF/game       | X.XX   | X.XX   |
| GA/game       | X.XX   | X.XX   |
| xGF           | X.XX   | X.XX   |
| xGA           | X.XX   | X.XX   |
| Goal Diff     | +/-N   | +/-N   |

---

### Odds Snapshot
Moneyline: [Away] [+/-XXX] | [Home] [+/-XXX] (best available)
Puck Line: [Away] +1.5 [odds] | [Home] -1.5 [odds]
Total: O/U X.X [odds]
Implied (devigified): [Away] XX.X% | [Home] XX.X%

---

### Model Edge
[If model provided]
Model: [Away] XX.X% | [Home] XX.X%
Market: [Away] XX.X% | [Home] XX.X%
Edge: [Side] +X.X% EV | 1/4 Kelly: X.X% of bankroll
[If no model]
Provide your model probability to compute EV.

---

### Head-to-Head History (Last N meetings)
| Date | Winner | Score | Notes |
|------|--------|-------|-------|

---

Built with PuckAPI Skills
```

## What to Do Next

| What You Found | Next Action | Skill |
|----------------|-------------|-------|
| Want to see the full slate tonight | Full card with edge rankings across all games | `daily-card` |
| Have a model and want to confirm EV | Compute edge, Kelly sizing, significance | `edge-detection` |
| Want to dig deeper on the goalie matchup | Leaderboard context, xSV%, workload flags | `goalie-analysis` |
| Want shareable visual output | Generate matchup card chart | `visualization` |
| Want to bet and track performance | Log this bet after placing | `bet-tracker` |
| Want deeper team metrics | Full 5v5, special teams, shot quality breakdown | `team-analysis` |

