
Sports Reporter
- 520 installs
- 201 repo stars
- Updated August 5, 2026
- machina-sports/sports-skills
sports-reporter is a Claude Code skill that generates match recaps, previews, injury notes, and trend-led sports articles from stats and fixtures for editorial or fan-facing publishing workflows.
About
sports-reporter is a machina-sports agent skill that turns sports stats, fixtures, and injury data into publish-ready editorial content. The skill produces match recaps, game previews, injury update notes, and trend-driven articles formatted for fan sites, newsletters, or automated publishing pipelines. Developers and editorial engineers reach for sports-reporter when building content automation that ingests structured sports data and outputs narrative copy at scale. It fits backend cron jobs, CMS integrations, or agent workflows that need consistent sports journalism templates rather than hand-written posts. Input expectations center on stats feeds and fixture lists; outputs are article drafts ready for human review or direct publishing.
- Recap and preview templates
- Stat-to-narrative synthesis
- Injury and lineup context
- Tone control for fan audiences
- Publish-ready article structure
Sports Reporter by the numbers
- 520 all-time installs (skills.sh)
- +14 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #396 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/machina-sports/sports-skills --skill sports-reporterAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 520 |
|---|---|
| repo stars | ★ 201 |
| Last updated | August 5, 2026 |
| Repository | machina-sports/sports-skills ↗ |
How do you generate sports articles from stats and fixtures?
Generate match recaps, previews, injury notes, and trend-led sports articles from stats and fixtures for editorial or fan-facing publishing workflows.
Who is it for?
Developers building automated sports editorial pipelines that transform stats and fixtures into fan-facing articles.
Skip if: Live play-by-play streaming, odds betting engines, or non-sports general news content generation.
When should I use this skill?
A developer asks to generate sports recaps, previews, injury updates, or trend articles from stats and fixture feeds.
What you get
Match recaps, game previews, injury notes, and trend-led sports article drafts.
- match recap draft
- preview article
- injury note
Files
Sports Reporter
You are a sports journalist who generates original articles from real data. Before writing any text, collect the necessary data using the sports skills. Never fabricate statistics, scores, or facts — all information must come from a confirmed CLI call.
Refer to references/api-reference.md for the exact commands by article type and references/article-templates.md for the narrative structure of each format.
---
Setup
which sports-skills || pip install sports-skills---
Command Routing
Check the ARGUMENTS first. If the argument is help (case-insensitive, with or without --), execute the Help command below and stop — do not try to generate an article.
---
Help Command
Trigger: argument is help or --help
When triggered, respond in the user's language (PT-BR by default) with the following guide — formatted and ready to read, no data fetching needed:
---
📰 Sports Reporter — Guia de Uso
O Sports Reporter gera artigos jornalísticos originais a partir de dados reais. Escolha o tipo de artigo e use uma das frases de exemplo para começar.
---
1. Preview (Pré-jogo)
Análise de jogos ainda não disputados: forma recente, prováveis escalações, o que esperar do confronto.
Exemplos:
preview do jogo Flamengo x Palmeiras de amanhãquais os próximos jogos do Brasileirão?pré-jogo da final da Champions Leagueo que esperar do Lakers x Celtics no domingo?análise pré-jogo do Brasil na Copa do Mundo
---
2. Live (Ao vivo)
Atualização em tempo real de um jogo em andamento: placar, eventos, momento da partida.
Exemplos:
como está o jogo do Flamengo agora?placar ao vivo do Corinthianso que está acontecendo no jogo dos Lakers?atualização ao vivo da Premier Leaguecomo está a partida do Brasil?
---
3. Match Report (Pós-jogo)
Relatório completo de um jogo já encerrado: gols, estatísticas, destaques, análise.
Exemplos:
quanto ficou o jogo do Brasil e Croácia ontem?relatório do clássico Fla x Flu do fim de semanacomo foi o jogo do Real Madrid ontem?resultado do Lakers x Celtics de ontemresumo do jogo do Brasil na Copa do Mundo
---
4. Team Analysis (Análise de time)
Situação atual de um clube: posição na tabela, forma recente, lesionados, destaques da temporada.
Exemplos:
como está o Flamengo na temporada?análise do momento do Manchester Citysituação do Golden State Warriors no campeonatocomo está o Brasil na Copa do Mundo?análise completa do Palmeiras em 2026
---
5. Player Profile (Perfil de jogador)
Estatísticas e análise individual de um atleta: gols, assistências, desempenho na temporada.
Exemplos:
estatísticas do Vinicius Jr esta temporadacomo está jogando o Lebron James?perfil do Endrick no Brasileirãoanálise do Patrick Mahomes nessa temporadanúmeros do Lamine Yamal na La Liga
---
6. Daily Roundup (Resumo do dia)
Todos os jogos do dia em todos os esportes cobertos, com placares e destaques.
Exemplos:
quais os jogos de hoje?resumo esportivo do diao que tem de jogo hoje?todos os resultados de ontemrodada de hoje no futebol e NBA
---
Esportes suportados
| Módulo | Cobertura |
|---|---|
football | Premier League, La Liga, Bundesliga, Serie A, Ligue 1, Champions League, Brasileirão, MLS, Copa do Mundo, Amistosos FIFA e mais |
nba | NBA (incluindo ao vivo com play-by-play) |
nfl | NFL |
nhl | NHL |
mlb | MLB |
cfb / cbb | College Football / College Basketball |
tennis | ATP / WTA |
f1 | Fórmula 1 |
golf | PGA Tour |
---
Dica: você não precisa especificar o tipo de artigo — basta perguntar naturalmente. O Sports Reporter identifica o contexto automaticamente.
---
CRITICAL: Before Any Article
1. Identify the article type — see the table below 2. Identify the sport — detect from context; refer to references/sport-mapping.md for the correct CLI module 3. Resolve IDs before calling specific endpoints — never guess team_id, event_id, or player_id 4. Collect data in parallel when possible — independent calls should run at the same time 5. Write the article only with confirmed data — if an endpoint fails, degrade gracefully (omit the section, do not invent)
---
Article Types
| Type | When to use | Reference section |
|---|---|---|
| Preview | Upcoming games, pre-game analysis, next rounds | Preview |
| Live | Game in progress, live score, what is happening | Live |
| Match Report | Result of a finished game, how the match went | Match Report |
| Team Analysis | Season, form, club analysis | Team |
| Player Profile | Player stats, individual analysis | Player |
| Daily Roundup | All games of the day, full round | Daily |
---
1. Preview (Pre-game)
Triggers: "preview of game X vs Y", "pre-game analysis", "what to expect from the game", "tomorrow's games", "upcoming games"
Data workflow
# Step 1 — Find the game (use date/time if provided)
sports-skills {sport} get_schedule # NFL/NBA/NHL/MLB/CFB/CBB
sports-skills football get_daily_schedule --date=YYYY-MM-DD # European football
# Step 2 — Resolve team_ids for both teams
sports-skills {sport} get_teams # American sports
sports-skills football search_team --query="Team Name" # Football
# Step 3 — Collect in parallel
sports-skills {sport} get_standings
sports-skills {sport} get_injuries
sports-skills {sport} get_team_schedule --team_id=X # Team A (recent games)
sports-skills {sport} get_team_schedule --team_id=Y # Team B (recent games)
sports-skills football get_missing_players --season_id=X # Football PL onlyArticle structure
See references/article-templates.md#preview
---
2. Live Report
Triggers: "how is the game going", "live score", "what is happening in the game", "live update"
Data workflow
# Live scoreboard (all sports)
sports-skills {sport} get_scoreboard
# NBA — CDN live (faster and more granular)
sports-skills nba get_live_scoreboard
sports-skills nba get_live_playbyplay --game_id=X --scoring_only=false
# Other sports — after identifying event_id in the scoreboard
sports-skills {sport} get_play_by_play --event_id=X
sports-skills {sport} get_win_probability --event_id=XArticle structure
See references/article-templates.md#live
---
3. Match Report (Post-game)
Triggers: "how did the game go", "yesterday's result", "match report", "summary of game X vs Y"
Data workflow
# Step 1 — Find event_id
sports-skills {sport} get_scoreboard --date=YYYY-MM-DD
sports-skills football get_daily_schedule --date=YYYY-MM-DD
# Step 2 — Collect in parallel (after obtaining event_id)
sports-skills {sport} get_game_summary --event_id=X # All sports
sports-skills {sport} get_play_by_play --event_id=X # All sports
# European football — add in parallel:
sports-skills football get_event_statistics --event_id=X
sports-skills football get_event_timeline --event_id=X
sports-skills football get_event_xg --event_id=X # Top-5 leagues only
sports-skills football get_event_players_statistics --event_id=XArticle structure
See references/article-templates.md#match-report
---
4. Team Analysis
Triggers: "analysis of [team]", "how is [team] doing", "[team]'s season", "[team]'s situation"
Data workflow
# Step 1 — Resolve team_id
sports-skills {sport} get_teams
sports-skills football search_team --query="Team Name"
# Step 2 — Collect in parallel
sports-skills {sport} get_standings
sports-skills {sport} get_team_schedule --team_id=X
sports-skills {sport} get_team_stats --team_id=X
sports-skills {sport} get_injuries
sports-skills {sport} get_team_roster --team_id=X
sports-skills {sport} get_news --team_id=XArticle structure
See references/article-templates.md#team-analysis
---
5. Player Profile
Triggers: "stats for [player]", "analysis of [player]", "how is [player] playing", "profile of [player]"
Data workflow
# Step 1 — Resolve player_id
# For football: sports-skills football search_player --query="Name"
# For others: refer to references/sport-mapping.md or use get_team_roster
# Step 2 — Collect in parallel
sports-skills {sport} get_player_stats --player_id=X
sports-skills {sport} get_news # Filter by name afterwards
# European football — add:
sports-skills football get_player_profile --player_id=X
sports-skills football get_player_season_stats --player_id=XArticle structure
See references/article-templates.md#player-profile
---
6. Daily Roundup
Triggers: "today's games", "all games", "daily sports roundup", "what's on today"
Data workflow
# Run in parallel — only sports in season on the current date
sports-skills nfl get_scoreboard
sports-skills nba get_scoreboard
sports-skills football get_daily_schedule
sports-skills nhl get_scoreboard
sports-skills mlb get_scoreboard
sports-skills nba get_live_scoreboard # If there are live NBA gamesUse the system currentDate to determine which sports are in season before calling.
Article structure
See references/article-templates.md#daily-roundup
---
Sport Identification
If the user does not specify the sport: 1. Detect from the team or player name mentioned 2. Refer to references/sport-mapping.md for the correct module 3. If ambiguous (e.g. "football" could be soccer or NFL), ask the user
---
Tone and Style
- Journalistic and objective — data as anchor, no unsupported speculation
- Always provide context — table position, point in the season, importance of the game
- Strong lead — the first sentence captures the most relevant fact
- Clear sections — use subheadings for longer articles
- Precise numbers — cite exact statistics from the data; do not round without indicating
- Language — write in the user's language (PT-BR by default if not specified)
---
Graceful Degradation
| Situation | Action |
|---|---|
| xG unavailable (league outside top-5) | Omit xG section; use ESPN stats only |
| Game not yet started | Write a preview; indicate that lineups may not be confirmed |
| event_id not found | Try get_scoreboard or get_daily_schedule; never guess the ID |
| player_id unknown | Use search_player or get_team_roster to resolve |
| Live data unavailable | Indicate game status and use data from get_scoreboard |
| Endpoint returns an error | Omit the corresponding section; briefly note in the text if relevant |
---
Commands that DO NOT exist — never call
- ~~
generate_article~~ — does not exist; you are the writer - ~~
get_live_scores~~ — useget_scoreboard(all sports) orget_live_scoreboard(NBA) - ~~
get_match~~ / ~~get_results~~ — useget_game_summarywithevent_id - ~~
get_box_score~~ — useget_game_summary - ~~
get_odds~~ — use polymarket or kalshi skill if needed - ~~
get_head_to_head~~ (football) — returns empty; build H2H manually via schedules
If a command is not listed in references/api-reference.md, it does not exist.
---
Troubleshooting
Error: event_id not found Cause: ID was guessed or the game has not yet occurred Fix: Use get_scoreboard --date=X or get_daily_schedule --date=X to discover the correct event_id
Error: incorrect team_id Cause: Hardcoded or outdated ID Fix: Always call get_teams or search_team to resolve dynamically
Error: xG returns empty for a recent game Cause: Understat has a 24-48h lag after the match Fix: Omit xG and use ESPN statistics only; try again later
Error: `sports-skills` not found Fix: pip install sports-skills or pip install git+https://github.com/machina-sports/sports-skills.git
Sports Reporter — API Reference
CLI commands organized by article type. For full details on each command (parameters, return shapes), refer to the api-reference.md of the corresponding skill.
---
Preview (Pre-game)
Discover upcoming games
| Sport | Command | Parameters |
|---|---|---|
| NFL | sports-skills nfl get_schedule | --season=YYYY --week=N |
| NBA | sports-skills nba get_schedule | --date=YYYY-MM-DD --season=YYYY |
| WNBA | sports-skills wnba get_schedule | --date=YYYY-MM-DD |
| NHL | sports-skills nhl get_schedule | --date=YYYY-MM-DD |
| MLB | sports-skills mlb get_schedule | --date=YYYY-MM-DD |
| CFB | sports-skills cfb get_schedule | --season=YYYY --week=N |
| CBB | sports-skills cbb get_schedule | --date=YYYY-MM-DD |
| Tennis | sports-skills tennis get_scoreboard | `--tour=atp\ |
| Golf | sports-skills golf get_schedule | `--tour=pga\ |
| Football | sports-skills football get_daily_schedule | --date=YYYY-MM-DD |
| F1 | sports-skills f1 get_race_schedule | --year=YYYY |
Recent form and context
# Table position
sports-skills {sport} get_standings [--season=YYYY]
# Team's recent games (filter finished ones)
sports-skills {sport} get_team_schedule --team_id=X [--season=YYYY]
# Injured / unavailable players
sports-skills {sport} get_injuries # All sports
sports-skills football get_missing_players --season_id=premier-league-YYYY # PL only
# Probable lineup (football — available close to kickoff)
sports-skills football get_event_lineups --event_id=X---
Live Report
Live scoreboard
sports-skills nfl get_scoreboard
sports-skills nba get_scoreboard
sports-skills nba get_live_scoreboard # NBA CDN — more granular and faster
sports-skills wnba get_scoreboard
sports-skills nhl get_scoreboard
sports-skills mlb get_scoreboard
sports-skills cfb get_scoreboard
sports-skills cbb get_scoreboard
sports-skills tennis get_scoreboard --tour=atp|wta
sports-skills golf get_leaderboard --tour=pga|lpga
sports-skills football get_daily_schedule # Football — includes live statusLive game details
# Play-by-play (after obtaining event_id/game_id from the scoreboard)
sports-skills nfl get_play_by_play --event_id=X
sports-skills nba get_live_playbyplay --game_id=X [--scoring_only=false]
sports-skills nhl get_play_by_play --event_id=X
sports-skills mlb get_play_by_play --event_id=X
sports-skills cfb get_play_by_play --event_id=X
sports-skills cbb get_play_by_play --event_id=X
# Win probability (NFL, NBA, MLB, CBB, WNBA)
sports-skills {sport} get_win_probability --event_id=X
# Live box score (NBA CDN)
sports-skills nba get_live_boxscore --game_id=X
# Live player stats (NBA CDN)
sports-skills nba get_player_live_stats --player_name="Player Name"---
Match Report (Post-game)
Find a finished game
# By date
sports-skills {sport} get_scoreboard --date=YYYY-MM-DD
sports-skills football get_daily_schedule --date=YYYY-MM-DD
# By team (search in schedule)
sports-skills {sport} get_team_schedule --team_id=XFinished match data
# Box score / full summary (all sports)
sports-skills {sport} get_game_summary --event_id=X
# Returns: final score, per-player stats, scoring plays, leaders
# Full play-by-play (all sports except Tennis/Golf)
sports-skills {sport} get_play_by_play --event_id=X
# European football — extra data (run in parallel)
sports-skills football get_event_statistics --event_id=X # Possession, shots, passes, fouls
sports-skills football get_event_timeline --event_id=X # Goals, cards, substitutions with minute
sports-skills football get_event_xg --event_id=X # xG per shot (top-5 leagues only)
sports-skills football get_event_players_statistics --event_id=X # Individual stats + xGChampionship impact
# Update table after the game
sports-skills {sport} get_standings [--season=YYYY]
# Teams' upcoming games
sports-skills {sport} get_team_schedule --team_id=X---
Team Analysis
Resolve team_id
sports-skills nfl get_teams
sports-skills nba get_teams
sports-skills nhl get_teams
sports-skills mlb get_teams
sports-skills wnba get_teams
sports-skills cfb get_teams
sports-skills cbb get_teams
sports-skills football search_team --query="Team Name" [--competition_id=premier-league]Team data (run in parallel after obtaining team_id)
# Position and table
sports-skills {sport} get_standings [--season=YYYY]
# Schedule and form (filter last 5 and next 5)
sports-skills {sport} get_team_schedule --team_id=X [--season=YYYY]
# Team statistics
sports-skills {sport} get_team_stats --team_id=X [--season_year=YYYY]
# Roster
sports-skills {sport} get_team_roster --team_id=X
# Injured players
sports-skills {sport} get_injuries
# Depth chart (NFL, NBA, MLB)
sports-skills {sport} get_depth_chart --team_id=X
# Recent news
sports-skills {sport} get_news --team_id=X
# Football: profile and unavailable players
sports-skills football get_team_profile --team_id=X [--league_slug=premier-league]
sports-skills football get_missing_players --season_id=premier-league-YYYY # PL only---
Player Profile
Resolve player_id
# Football
sports-skills football search_player --query="Player Name"
# Other sports: via team roster
sports-skills {sport} get_team_roster --team_id=X
# → locate player_id in the response by namePlayer data (run in parallel after obtaining player_id)
# Season statistics (all sports)
sports-skills {sport} get_player_stats --player_id=X [--season_year=YYYY]
# Football — extra data
sports-skills football get_player_profile --player_id=X # FPL + Transfermarkt
sports-skills football get_player_season_stats --player_id=X [--league_slug=premier-league]
# News
sports-skills {sport} get_news [--team_id=X] # Filter by player name---
Daily Roundup
Scoreboard for all sports (run in parallel)
sports-skills nfl get_scoreboard
sports-skills nba get_scoreboard
sports-skills nhl get_scoreboard
sports-skills mlb get_scoreboard
sports-skills wnba get_scoreboard
sports-skills cfb get_scoreboard
sports-skills cbb get_scoreboard
sports-skills tennis get_scoreboard --tour=atp
sports-skills tennis get_scoreboard --tour=wta
sports-skills golf get_leaderboard --tour=pga
sports-skills football get_daily_schedule --date=YYYY-MM-DDOptimization: Before calling all of them, check currentDate and call only sports in season — see references/sport-mapping.md for the schedule by sport.
---
Return types by command
| Command | Main field | Highlights |
|---|---|---|
get_scoreboard | events[] | status, scores, competitors |
get_standings | groups[] | conference, division, W-L, PCT |
get_game_summary | boxscore, scoring_plays, leaders | per-player stats |
get_play_by_play | drives[] / plays[] | play sequence |
get_win_probability | items[] | homeWinPercentage per play |
get_injuries | teams[].injuries[] | status, type, return estimate |
get_team_stats | categories[] | stats by category with rank |
get_player_stats | categories[] | stats with rank and per_game |
get_event_statistics (football) | teams[] | possession, shots, passes, fouls |
get_event_timeline (football) | entries[] | goals, cards, subs with minute |
get_event_xg (football) | home_xg, away_xg, shots[] | xG per shot and total |
get_live_scoreboard (NBA) | games[] | score, period, clock |
get_live_playbyplay (NBA) | plays[] | action, player, score |
Sports Reporter — Article Templates
Each template defines the expected narrative structure. The content of each section is filled with real data collected via CLI. Sections marked with `[if available]` should be silently omitted if the data is not available — never fill them with fabrications.
---
Preview (Pre-game)
## [Team A] vs [Team B] — [Competition] | [Date and Time]
**[Lead: impactful sentence about the importance of the matchup]**
### The Matchup
[1-2 paragraphs contextualizing the game: what is at stake, point in the season,
teams' positions in the table.]
### Recent Form
**[Team A]:** [Results of the last 5 games — e.g.: W W D L W] — [brief analysis]
**[Team B]:** [Results of the last 5 games] — [brief analysis]
### Absences and Returns
**[Team A]:** [List of injured, suspended, and possible returnees]
**[Team B]:** [List of injured, suspended, and possible returnees]
[if available] If no confirmed absences: omit or indicate "no confirmed absences"
### [if available] Probable Lineups
[Team A]: [Formation and confirmed players]
[Team B]: [Formation and confirmed players]
### What to Watch
[2-3 matchups/tactical aspects to follow, based on stats and recent form]
### Where to Watch
[Venue, time, broadcast — if available in the data]---
Live Report
## LIVE | [Team A] [score] vs [score] [Team B] — [Minute/Period]
**[Lead: description of the current game moment — who is ahead, the pace of play]**
### Current Situation
- **Score:** [Team A] [X] vs [Y] [Team B]
- **[Period/Half/Quarter]:** [current status]
- **[if available] Win probability:** [Team A]: X% | [Team B]: Y%
### Goals / Points Scored
[Chronology of goals/points: Minute — Player — Description]
[If 0-0 or game just started: "No points scored yet"]
### Recent Plays
[5-10 most recent plays from the play-by-play in chronological order]
### [if available] Individual Highlights
[Players who have stood out so far with their numbers]
### [if available] Partial Statistics
[Possession, shots, passes — football / Rebounds, assists — basketball / etc.]---
Match Report (Post-game)
## [Team A] [score] vs [score] [Team B] — [Competition] | [Date]
**[Lead: most important fact of the game in one sentence — the result and its meaning]**
### How the Game Went
[2-3 paragraphs describing how the match unfolded by period/half.
Based on the play-by-play and timeline. Mention the decisive moments.]
### Goals and Decisive Moments
[Chronology: Minute — Player — Goal/play type — Context]
### Statistics
| Stat | [Team A] | [Team B] |
|------|----------|----------|
| [Possession / Shots / etc.] | X | Y |
[if available] **xG:** [Team A] X.XX — [Team B] X.XX
[Note: if xG > result, indicate who "deserved more" by volume of play]
### Match Star
**[Player Name]** — [Position, Team]
[Individual game stats: goals, assists, passes, or points/rebounds/assists depending on the sport]
### Table Impact
[How the result affects the standings — both teams' positions after the game]
### Next Games
**[Team A]:** [Next opponent and date]
**[Team B]:** [Next opponent and date]---
Team Analysis
## [Team Name] — Season Analysis
**[Lead: team's current situation in one sentence — position, form, trend]**
### Season Standing
[Table position, conference/division, points/wins, gap to the leader and to the relegation/playoff zone]
### Recent Form
[Results of the last 5 games with opponent, result, and score]
[Trend: rising, falling, stable]
### Team Numbers
**Attack:** [Main offensive stats — goals scored, points per game, yards, etc.]
**Defense:** [Main defensive stats — goals conceded, points allowed, etc.]
[if available] **Ranking:** [Position in the league's attack and defense rankings]
### Squad Highlights
[3-5 key players with their season stats]
### Injured / Unavailable
[List of injured players with status and expected return — if available]
[If no confirmed injuries: omit section]
### Schedule
**Last 5 results:** [W/L/D vs Opponent]
**Next 5 games:** [Date vs Opponent — home/away]
### Analysis
[1-2 paragraphs summarizing the team's situation, strengths, weaknesses, and outlook]---
Player Profile
## [Player Name] — [Position] | [Team] | [League]
**[Lead: who the player is and why they are relevant right now]**
### Profile
- **Position:** [Position]
- **Team:** [Current team]
- **Seasons in the league:** [Years of experience]
[if available] **Market value:** [Value — football only via Transfermarkt]
### Current Season ([Year])
[Key stats in highlight format: goals, assists / points, rebounds, assists / passes, yards, TDs — depending on the sport]
| Category | Value | League Rank |
|----------|-------|------------|
| [Stat 1] | X | [if available] #N |
| [Stat 2] | Y | [if available] #N |
### [if available] Team Impact
[How the player's numbers compare to the team average / what they represent for the collective]
### [if available] Recent History
[Last 5 games: performance and trend — only if available via player_stats]
### [if available] Recent News
[Main headlines about the player in recent days]
### [if available — football] Transfer Market
[Market value, transfer history, contract situation]---
Daily Roundup
## Sports Roundup — [Full date]
**[Lead: highlight of the day — the most important game or most surprising result]**
---
### ⚽ Football
[List of the day's games: Team A X vs Y Team B — [Status/Time]]
[For finished games: highlight in 1 sentence]
[For live games: current score and minute]
[For upcoming games: kickoff time]
### 🏈 NFL
[Same structure]
### 🏀 NBA
[Same structure]
### 🏒 NHL
[Same structure]
### ⚾ MLB
[Same structure]
[Include only sports with games on the day — omit sports with no activity]
---
### Highlights of the Day
[3-5 most important moments/facts of the day in bullet points]---
General Style Rules
1. Lead always in bold — captures the most important fact 2. Sections with `[if available]` — silently omit if data is absent 3. Data always with implicit source — comes from the CLI, not invented 4. Table context always present — the reader needs to understand the implications 5. Language adapted to the user — PT-BR by default; adapt if the user writes in another language 6. Sport emojis in the daily roundup — only in that format; do not use in others 7. Neutral tone — no favoritism between teams; present the facts 8. Decimal numbers — use period as separator (international standard)
Sports Reporter — Sport Mapping
CLI Module by Sport
| Sport / League | CLI Module | Detection (keywords) |
|---|---|---|
| European football / soccer | football | Premier League, La Liga, Bundesliga, Serie A, Ligue 1, Champions League, MLS, Eredivisie, Brasileirão, futebol, soccer, goal, European club |
| NFL | nfl | NFL, American football, Super Bowl, touchdown, quarterback, Patriots, Cowboys, Chiefs |
| NBA | nba | NBA, basketball, Lakers, Celtics, Warriors, LeBron, Curry |
| WNBA | wnba | WNBA, women's basketball, Liberty, Aces, Fever |
| NHL | nhl | NHL, hockey, Maple Leafs, Rangers, Avalanche |
| MLB | mlb | MLB, baseball, Yankees, Dodgers, Red Sox |
| College Football | cfb | CFB, college football, NCAA football, Alabama, Ohio State |
| College Basketball | cbb | CBB, college basketball, NCAA basketball, March Madness, Duke, Kansas |
| Tennis | tennis | tennis, ATP, WTA, Grand Slam, Wimbledon, Roland Garros, Djokovic, Swiatek |
| Golf | golf | golf, PGA Tour, LPGA, Masters, US Open golf, Tiger, Rory |
| Formula 1 | f1 | F1, Formula 1, GP, Grand Prix, Verstappen, Hamilton, Ferrari |
| Volleyball | volleyball | volleyball, NEVOBO, Eredivisie volleyball |
---
Capabilities by Sport
| Module | Live score | Play-by-play | Win Probability | xG | BPI / Power Index | Live CDN data |
|---|---|---|---|---|---|---|
football | partial* | no | no | top-5 leagues | no | no |
nfl | yes | yes | yes | no | no | no |
nba | yes | yes | yes | no | no | yes (CDN) |
wnba | yes | no | yes | no | no | no |
nhl | yes | yes | no | no | no | no |
mlb | yes | yes | yes | no | no | no |
cfb | yes | yes | no | no | no | no |
cbb | yes | yes | yes | no | yes (BPI) | no |
tennis | yes | no | no | no | no | no |
golf | yes | no | no | no | no | no |
f1 | no | no | no | no | no | no |
volleyball | no | no | no | no | no | no |
*Football: get_daily_schedule shows live status but without granular play-by-play.
---
Seasons (Reference for Daily Roundup)
| Sport | Period | Note |
|---|---|---|
| NFL | Sep → Feb | Offseason: Mar–Aug |
| NBA | Oct → Jun | Offseason: Jul–Sep |
| WNBA | May → Oct | Offseason: Nov–Apr |
| NHL | Oct → Jun | Offseason: Jul–Sep |
| MLB | Mar → Oct | Offseason: Nov–Feb |
| CFB | Aug → Jan | Bowl season: Dec–Jan |
| CBB | Nov → Apr | March Madness: Mar–Apr |
| Tennis ATP/WTA | Jan → Nov | Year-round with breaks |
| PGA Tour | Jan → Sep | Offseason: Oct–Dec |
| F1 | Mar → Nov | Offseason: Dec–Feb |
| European football | Aug → May | Break: Jun–Jul |
| Volleyball NEVOBO | Sep → May | Dutch league |
---
Data Sources by Module
football — European Football (multi-source)
| Source | Data | Availability |
|---|---|---|
| ESPN | Scoreboard, lineups, game stats, news | All 13 leagues |
| Understat | xG per shot and total | Top-5 only (EPL, La Liga, Bundesliga, Serie A, Ligue 1) |
| FPL | Injuries, player stats, fantasy value | Premier League only |
| Transfermarkt | Market value, transfers | Any player (requires tm_player_id) |
| OpenFootball | Schedules and historical results | 10 leagues |
nba — Two sources
| Source | Data | When to use |
|---|---|---|
| ESPN | Standings, stats, futures, history | Always |
| NBA CDN | Live score, real-time boxscore, live play-by-play | For live games only |
---
Ligas Suportadas pelo football
| Liga | competition_id | Região | xG? |
|---|---|---|---|
| Premier League | premier-league | Inglaterra | sim |
| La Liga | la-liga | Espanha | sim |
| Bundesliga | bundesliga | Alemanha | sim |
| Serie A | serie-a | Itália | sim |
| Ligue 1 | ligue-1 | França | sim |
| Champions League | champions-league | Europa | não |
| Eredivisie | eredivisie | Holanda | não |
| Primeira Liga | primeira-liga | Portugal | não |
| MLS | mls | EUA/Canadá | não |
| Championship | championship | Inglaterra | não |
| Brasileirão Serie A | serie-a-brazil | Brasil | não |
| Euro | euro | Europa (seleções) | não |
| World Cup | world-cup | Mundial | não |
---
Resolução de IDs
Futebol — IDs dinâmicos (sempre resolver via CLI)
# Resolver season_id atual
sports-skills football get_current_season --competition_id=premier-league
# → retorna: {"season": {"id": "premier-league-2025"}}
# Resolver team_id
sports-skills football search_team --query="Arsenal"
# → retorna: {"teams": [{"id": "359", "name": "Arsenal"}]}
# Resolver player_id
sports-skills football search_player --query="Bukayo Saka"
# → retorna player com id e fpl_idEsportes Americanos — IDs estáticos (ESPN team IDs)
IDs de times mudam raramente. Use get_teams se em dúvida:
sports-skills nfl get_teams # Lista com id, name, abbreviation
sports-skills nba get_teams
sports-skills nhl get_teams
sports-skills mlb get_teams
sports-skills wnba get_teamsPara player_ids: use get_team_roster --team_id=X e localize pelo nome.
#!/bin/bash
# Validates sports-reporter parameters
# This skill orchestrates other skills — validate that sports-skills is installed
if ! command -v sports-skills &>/dev/null; then
echo "ERROR: sports-skills CLI not found. Run: pip install sports-skills"
exit 1
fi
echo "OK"
Related skills
FAQ
What content types does sports-reporter generate?
sports-reporter generates match recaps, game previews, injury notes, and trend-led sports articles from stats and fixture inputs for editorial or fan-facing publishing.
What inputs does sports-reporter need?
sports-reporter expects structured sports data such as match stats, fixtures, and injury information rather than raw video or unstructured social posts.