Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates original sports journalism articles by consuming real-time data from the sports-skills skills. Covers game previews, live reports, post-game, team analysis, and player profiles for all supported sports. Use when: the user asks to write, generate, create, or draft an article, preview, report, analysis, summary, or journalistic coverage about games, teams, players, scores, statistics, or sports results. Do not use when: the user only wants raw data without journalistic text — use the sp
.claude/skills/machina-sports-sports-reporter/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 95% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 162% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 111% | 0% |
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.
bashwhich sports-skills || pip install sports-skills
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.
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:
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.
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 MundoAtualizaçã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?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 MundoSituaçã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 2026Estatí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 LigaTodos 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| 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.
references/sport-mapping.md for the correct CLI module| 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 |
Triggers: "preview of game X vs Y", "pre-game analysis", "what to expect from the game", "tomorrow's games", "upcoming games"
bash# 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 only
See references/article-templates.md#preview
Triggers: "how is the game going", "live score", "what is happening in the game", "live update"
bash# 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=X
See references/article-templates.md#live
Triggers: "how did the game go", "yesterday's result", "match report", "summary of game X vs Y"
bash# 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=X
See references/article-templates.md#match-report
Triggers: "analysis of team]", "how is team] doing", "team]'s season", "team]'s situation"
bash# 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=X
See references/article-templates.md#team-analysis
Triggers: "stats for player]", "analysis of player]", "how is player] playing", "profile of player]"
bash# 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=X
See references/article-templates.md#player-profile
Triggers: "today's games", "all games", "daily sports roundup", "what's on today"
bash# 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 games
Use the system currentDate to determine which sports are in season before calling.
See references/article-templates.md#daily-roundup
If the user does not specify the sport:
references/sport-mapping.md for the correct module| 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 |
generate_article~~ — does not exist; you are the writerget_live_scores~~ — use get_scoreboard (all sports) or get_live_scoreboard (NBA)get_match~~ / ~~get_results~~ — use get_game_summary with event_idget_box_score~~ — use get_game_summaryget_odds~~ — use polymarket or kalshi skill if neededIf a command is not listed in references/api-reference.md, it does not exist.
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
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-14 | pass→pass | 20,918 | 10,433 | -50% | 1 | 1 | 0% | 2,851 | 4,382 | +54% | 0 | 0 | — |
case-01 | fail→pass | 31,527 | 12,205 | -61% | 1 | 1 | 0% | 4,564 | 4,845 | +6% | 0 | 0 | — |
case-02 | fail→fail | 18,859 | 24,027 | +27% | 1 | 1 | 0% | 2,535 | 3,740 | +48% | 0 | 0 | — |
case-03 | fail→fail | 21,656 | 17,087 | -21% | 1 | 1 | 0% | 2,599 | 3,618 | +39% | 0 | 0 | — |
case-04 | pass→fail | 26,835 | 22,123 | -18% | 1 | 1 | 0% | 2,198 | 3,739 | +70% | 0 | 0 | — |
case-05 | fail→pass | 17,839 | 10,969 | -39% | 1 | 1 | 0% | 2,304 | 4,496 | +95% | 0 | 0 | — |
case-06 | fail→fail | 15,714 | 31,726 | +102% | 1 | 1 | 0% | 1,755 | 3,666 | +109% | 0 | 0 | — |
case-07 | fail→pass | 15,382 | 12,658 | -18% | 1 | 1 | 0% | 1,753 | 4,594 | +162% | 0 | 0 | — |
case-15 | pass→pass | 13,436 | 21,043 | +57% | 1 | 1 | 0% | 1,309 | 6,827 | +422% | 0 | 0 | — |
case-08 | fail→fail | 17,995 | 16,370 | -9% | 1 | 1 | 0% | 2,028 | 3,600 | +78% | 0 | 0 | — |
case-09 | fail→fail | 19,228 | 24,380 | +27% | 1 | 1 | 0% | 2,958 | 5,115 | +73% | 0 | 0 | — |
case-10 | fail→pass | 23,599 | 11,387 | -52% | 1 | 1 | 0% | 3,438 | 4,522 | +32% | 0 | 0 | — |
case-11 | fail→pass | 17,837 | 12,357 | -31% | 1 | 1 | 0% | 2,282 | 4,826 | +111% | 0 | 0 | — |
case-12 | pass→pass | 19,810 | 10,188 | -49% | 1 | 1 | 0% | 2,453 | 4,354 | +77% | 0 | 0 | — |
case-13 | pass→pass | 19,507 | 9,383 | -52% | 1 | 1 | 0% | 2,545 | 4,384 | +72% | 0 | 0 | — |
case-16 | fail→pass | 14,246 | 12,148 | -15% | 1 | 1 | 0% | 1,616 | 4,557 | +182% | 0 | 0 | — |
case-17 | pass→pass | 21,239 | 12,779 | -40% | 1 | 1 | 0% | 2,421 | 4,737 | +96% | 0 | 0 | — |
case-18 | fail→pass | 20,396 | 8,132 | -60% | 1 | 1 | 0% | 2,283 | 3,842 | +68% | 0 | 0 | — |
case-19 | pass→fail | 14,874 | 18,204 | +22% | 1 | 1 | 0% | 1,801 | 3,693 | +105% | 0 | 0 | — |
case-20 | pass→pass | 19,334 | 19,092 | -1% | 1 | 1 | 0% | 2,486 | 5,714 | +130% | 0 | 0 | — |
case-21 | pass→fail | 21,800 | 17,448 | -20% | 1 | 1 | 0% | 2,509 | 3,841 | +53% | 0 | 0 | — |
case-22 | fail→pass | 11,913 | 6,975 | -41% | 1 | 1 | 0% | 1,258 | 3,669 | +192% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 15 counted toward the lift figure. The other 7 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 15 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.