Skip to main content
skill CX Codex

fastf1 — Claude Code skill: what it does, how to install

Fetches Formula 1 telemetry, race results, lap times, and tire strategies via FastF1. Useful when analyzing Grand Prix weekends and driver pace in your agent chat.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add machina-sports/sports-skills --skill fastf1 -a claude-code
Open on GitHub

What fastf1 does

The skill gives your coding assistant access to Formula 1 timing and telemetry through the sports-skills package. The agent can pull race calendars, qualifying results, sector speeds, and stint breakdowns. It requires Python 3.10+ alongside the sports-skills library.

Under the hood, the skill runs CLI commands like sports-skills f1 get_race_results or imports sports_skills.f1. It strictly handles Formula 1. It will not return news, betting lines, or data for other series like NASCAR or MotoGP. Pit stop timing tracks total pit lane duration rather than stationary box time.

During January and February, the agent queries the previous championship year. This prevents empty responses before the season starts in March.

What it helps with

  • inspect lap times and sector pace for a specific driver
  • compare head-to-head qualifying telemetry between teammates
  • track tire compound degradation and stint lengths during a race
  • fetch full championship standings and season calendars

Example prompts for the agent

  • Show the race results for Monza and Verstappen's lap pace.
  • Compare Ferrari and McLaren qualifying sectors from the latest race.
  • What tire strategies were used during the British Grand Prix?

How to install fastf1

1Skills CLI (Vercel)

npx skills add machina-sports/sports-skills --skill fastf1 -a claude-code

2Manually: put the files in place

~/.claude/skills/fastf1/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/fastf1/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about fastf1

How do I install fastf1 in Claude Code?

Run npx skills add machina-sports/sports-skills --skill fastf1 -a claude-code in your terminal.

What does the fastf1 skill do?

It retrieves Formula 1 data including schedules, session classifications, lap telemetry, speed traps, and tire stints.

What are the system requirements for fastf1?

It requires Python 3.10 or newer. Install the base package with pip install sports-skills.

Source text

SKILL.md · MIT
---
name: fastf1
description: |
  Formula 1 data — race schedules, results, lap timing, driver and team info. Powered by the FastF1 library. Covers F1 sessions, qualifying, practice, race results, sector times, tire strategy.

  Use when: user asks about F1 race results, qualifying, lap times, driver stats, team info, the F1 calendar, or Formula 1 data.
  Don't use when: user asks about other motorsports (MotoGP, NASCAR, IndyCar, WEC, Formula E). Don't use for F1 betting odds or predictions — use kalshi or polymarket instead. Don't use for F1 news articles — use sports-news instead.
license: MIT
compatibility: "Requires Python 3.10+ (install with: pip install sports-skills)"
metadata:
  author: machina-sports
  version: "0.1.0"
---

# FastF1 — Formula 1 Data

Before writing queries, consult `references/api-reference.md` for endpoints, ID conventions, and data shapes.

## Quick Start

Prefer the CLI — it avoids Python import path issues:
```bash
sports-skills f1 get_race_schedule --year=2025
sports-skills f1 get_race_results --year=2025 --event=Monza
```

Python SDK (alternative):
```python
from sports_skills import f1

schedule = f1.get_race_schedule(year=2025)
results = f1.get_race_results(year=2025, event="Monza")
```

## CRITICAL: Before Any Query

CRITICAL: Before calling any data endpoint, verify:
- Year is derived from the system prompt's `currentDate` — never hardcoded.
- In January or February, use `year = current_year - 1` (pre-season; the new F1 season has not started yet).

## Choosing the Year

Derive the current year from the system prompt's date (e.g., `currentDate: 2026-02-16` → current year is 2026).

- **If the user specifies a year**, use it as-is.
- **If the user says "latest", "recent", "last season", or doesn't specify**: The F1 season runs roughly March–December. If the current month is January or February, use `year = current_year - 1`. From March onward, use the current year.

## Workflows

### Race Weekend Analysis
1. `get_race_schedule --year=<year>` — find the event name and date
2. `get_race_results --year=<year> --event=<name>` — final classification (positions, times, points)
3. `get_lap_data --year=<year> --event=<name> --session_type=R` — lap-by-lap pace analysis
4. `get_tire_analysis --year=<year> --event=<name>` — strategy breakdown (compounds, stint lengths, degradation)

### Driver/Team Comparison
1. `get_championship_standings --year=<year>` — championship context (points, wins, podiums)
2. `get_team_comparison --year=<year> --team1=<t1> --team2=<t2>` OR `get_driver_comparison --year=<year> --driver1=<d1> --driver2=<d2>`
3. `get_season_stats --year=<year>` — aggregate performance (fastest laps, top speeds)

### Season Overview
1. `get_race_schedule --year=<year>` — full calendar with dates and circuits
2. `get_championship_standings --year=<year>` — driver and constructor standings
3. `get_season_stats --year=<year>` — season-wide fastest laps, top speeds, points leaders
4. `get_driver_info --year=<year>` — current grid (driver numbers, teams, nationalities)

## Commands

| Command | Description |
|---|---|
| `get_race_schedule` | Full season calendar with dates and circuits |
| `get_race_results` | Final race classification (positions, times, points) |
| `get_session_data` | Raw session info (Q, FP1, FP2, FP3, R) |
| `get_driver_info` | Driver details from the grid |
| `get_team_info` | Team info with driver lineup |
| `get_lap_data` | Lap-by-lap timing with sectors and tire data |
| `get_pit_stops` | Pit stops with pit-lane time (not stationary time) and team averages |
| `get_speed_data` | Speed trap and intermediate speed data |
| `get_championship_standings` | Driver and constructor championship standings (`--round=N` for standings after round N) |
| `get_season_stats` | Aggregate season performance |
| `get_team_comparison` | Team head-to-head: qualifying, race pace, sectors |
| `get_driver_comparison` | Driver head-to-head: qualifying H2H, race H2H, pace delta |
| `get_tire_analysis` | Tire strategy, stint lengths, degradation rates |

See `references/api-reference.md` for full parameter lists and return shapes.

## Examples

Example 1: F1 calendar
User says: "Show me the F1 calendar"
Actions:
1. Derive year from `currentDate`
2. Call `get_race_schedule(year=<derived_year>)`
Result: Full calendar with event names, dates, and circuits

Example 2: Driver race performance
User says: "How did Verstappen do at Monza?"
Actions:
1. Derive year from `currentDate` (or from context)
2. Call `get_race_results(year=<year>, event="Monza")` for final classification
3. Call `get_lap_data(year=<year>, event="Monza", session_type="R", driver="VER")` for lap times
Result: Finishing position, gap to leader, fastest lap, and tire strategy

Example 3: Latest results queried in pre-season
User says: "What were the latest F1 results?" (asked in February 2026)
Actions:
1. Current month is February → season not yet started → use `year = 2025`
2. Call `get_race_schedule(year=2025)` to find the last event of that season
3. Call `get_race_results(year=2025, event=<last_event>)` for the final race results
Result: Results of the final 2025 race

## Commands that DO NOT exist — never call these

- ~~`get_qualifying`~~ / ~~`get_practice`~~ — does not exist. Use `get_session_data` with `session_type="Q"` for qualifying or `session_type="FP1"`/`"FP2"`/`"FP3"` for practice.
- ~~`get_standings`~~ — does not exist. Use `get_championship_standings` instead.
- ~~`get_results`~~ — does not exist. Use `get_race_results` instead.
- ~~`get_calendar`~~ — does not exist. Use `get_race_schedule` instead.

If a command is not listed in the Commands table above, it does not exist.

## Troubleshooting

Error: Event name not found
Cause: Event name spelling does not match FastF1's internal naming
Solution: Call `get_race_schedule(year=<year>)` first to get the exact event names, then retry with the correct name

Error: Session data is empty
Cause: The session has not happened yet
Solution: FastF1 only returns data for completed sessions. Check `get_race_schedule` for when the session is scheduled

Error: `get_race_results` returns no `fastest_lap_time`
Cause: FastF1 has no lap data for that race (`fastest_lap_time` is computed from the laps)
Solution: Use `get_lap_data(session_type="R")` and find the minimum `lap_time` across all drivers

Error: Querying the current year in January or February returns no data
Cause: The new F1 season has not started yet
Solution: Use `year = current_year - 1` for any pre-March query; do not query the current year before March

© machina-sports · MIT · machina-sports/sports-skills

Similar skills

All skills for Data and databases →

From the same set22

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor