К основному содержанию
скилл CX Codex

xctf-data — скилл для Claude Code: данные NCAA по кроссу и лёгкой

Тянет профили атлетов NCAA из TFRRS: личные рекорды, год допуска, школа и результаты по сезонам. Плюс новости The Stride Report.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add machina-sports/sports-skills --skill xctf-data -a claude-code
Открыть на GitHub

Что делает xctf-data

Скилл закрывает запросы про студенческий кросс и лёгкую атлетику в США. Он берёт данные со страниц TFRRS и ленты The Stride Report, ключи API не нужны. Внутри пять команд: search_athlete ищет атлета в текущем составе команды, get_athlete_profile отдаёт имя, школу, допуск, все личные рекорды и результаты по каждому сезону, get_team_roster — состав команды по кроссу или лёгкой атлетике, get_meet_results — протоколы забегов и командные очки, get_news — свежие статьи.

Для get_athlete_profile нужны три параметра, и все три должны совпадать с URL атлета на tfrrs.org: числовой athlete_id, слаг школы с подчёркиваниями вместо пробелов и слаг имени. Угадывать слаги не стоит — откройте страницу атлета и скопируйте адрес. Вот на этом чаще всего и спотыкаются: неверный регистр или пробел вместо подчёркивания, и профиль не найдётся.

Есть нюанс с выпускниками. search_athlete ищет только по текущим составам, поэтому для закончившего карьеру атлета совпадений не будет — понадобится прямая ссылка с tfrrs.org. Ещё TFRRS заводит отдельные профили для кросса и для лёгкой атлетики, так что для полной картины рекордов иногда нужно тянуть оба ID. Для кроссовых забегов в get_meet_results передавайте sport="xc": у кросса свой диапазон идентификаторов, и без этого флага вернётся чужой легкоатлетический протокол. Нужен Python 3.10+ и доступ в интернет.

Какие задачи решает

  • посмотреть личные рекорды атлета по всем дистанциям
  • собрать результаты кроссового сезона по датам и местам
  • выгрузить текущий состав команды по кроссу или лёгкой атлетике
  • получить протоколы и командные очки с конкретного турнира
  • найти свежие новости студенческой лёгкой атлетики

Примеры запросов агенту

  • Какие личные рекорды у Jane Hedengren?
  • Покажи результаты Jane Hedengren в кроссе за 2025 год
  • Выведи состав женской команды UC Davis по кроссу

Как установить xctf-data

1Через Skills CLI (Vercel)

npx skills add machina-sports/sports-skills --skill xctf-data -a claude-code

2Вручную: положить файлы

~/.claude/skills/xctf-data/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/xctf-data/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о xctf-data

Как установить xctf-data в Claude?

Выполните npx skills add machina-sports/sports-skills --skill xctf-data -a claude-code. Скилл встанет в ~/.claude/skills/xctf-data/SKILL.md.

Что делает xctf-data?

Достаёт профили атлетов NCAA из TFRRS: личные рекорды, год допуска, школу и результаты по сезонам. Отдельной командой отдаёт новости The Stride Report.

Почему не находится атлет, который уже выпустился?

search_athlete ищет только по текущим составам команд. Для выпускника или переведённого атлета нужна прямая ссылка на его страницу в TFRRS, из которой берутся athlete_id, школа и имя.

Исходный текст

SKILL.md · MIT
---
name: xctf-data
description: |
  NCAA cross country and track & field athlete data via TFRRS (tfrrs.org) and news via The Stride Report. Fetch athlete profiles including all personal records (PRs), eligibility year, school, full season-by-season results history, and XC/TF news. Zero config, no API keys.

  Use when: user asks about NCAA cross country, NCAA track and field, college running, TFRRS athlete profiles, personal records, PRs, XC or TF season results, individual athlete performance history, or XC/TF news.
  Don't use when: user asks about professional track, Diamond League, or other sports — use nfl-data, nba-data, wnba-data, nhl-data, mlb-data, golf-data, cricket-data, cfb-data, cbb-data, tennis-data, fastf1, or volleyball-data. For betting use polymarket or kalshi.
license: MIT
compatibility: Requires Python 3.10+ and internet access to tfrrs.org and thestridereport.com. No API keys required.
metadata:
  author: machina-sports
  version: "0.1.0"
---

# XC/TF Data (TFRRS — NCAA Cross Country & Track and Field)

Before writing queries, consult `references/api-reference.md` for parameters, URL conventions, and return shapes.

## Setup

Before first use, check if the CLI is available:
```bash
which sports-skills || pip install sports-skills
```
If `pip install` fails, install from GitHub:
```bash
pip install git+https://github.com/machina-sports/sports-skills.git
```
Requires Python 3.10+. No API keys required. All data comes from TFRRS public pages and The Stride Report RSS feed.

## Quick Start

CLI (preferred):
```bash
sports-skills xctf get_athlete_profile --athlete_id=9230145 --school=BYU --name=Jane_Hedengren
sports-skills xctf get_news --limit=5
```

Python SDK:
```python
from sports_skills import xctf

profile = xctf.get_athlete_profile(
    athlete_id="9230145",
    school="BYU",
    name="Jane_Hedengren",
)
```

## CRITICAL: Before Any Query

All three parameters are required and must match the athlete's TFRRS URL exactly:

```
https://www.tfrrs.org/athletes/{athlete_id}/{school}/{name}.html
```

- `athlete_id` — numeric ID (e.g. `9230145`)
- `school` — school slug with underscores, not spaces (e.g. `BYU`)
- `name` — athlete name slug (e.g. `Jane_Hedengren`)

Do NOT guess slugs. Find them by navigating to the athlete on tfrrs.org and copying the URL.

## Commands

| Command | Description |
|---|---|
| `search_athlete` | Search the current team roster by name; returns `athlete_id`, `school`, and `name` slugs for use with `get_athlete_profile`. Searches both genders automatically. Current athletes only — graduated athletes require a direct TFRRS URL |
| `get_athlete_profile` | Athlete name, school, eligibility, all PRs, and full season-by-season meet results |
| `get_team_roster` | Full XC and/or TF roster for a team |
| `get_meet_results` | All event results and team scores from a TFRRS meet |
| `get_news` | Recent XC/TF articles from The Stride Report (thestridereport.com) |

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

## Examples

Example 1: Look up a current athlete's PRs
User says: "What are Jane Hedengren's PRs?"
Actions:
1. Call `search_athlete(name="Jane Hedengren", school="UT_college_f_BYU")`
   Result: `data.matches` contains entries with `athlete_id`, `school`, `name` slugs
2. Call `get_athlete_profile(athlete_id="9230145", school="BYU", name="Jane_Hedengren")`
Result: `data.prs` contains all personal records by event (e.g. `{"1500": "4:10.24", "5000": "14:44.79", "6K (XC)": "18:29.6", ...}`)

Example 2: Get a runner's cross country season
User says: "Show me Jane Hedengren's 2025 XC season results"
Actions:
1. Call `search_athlete(name="Jane Hedengren", school="UT_college_f_BYU")`
2. Call `get_athlete_profile` with the matched athlete params
3. Filter `data.meets` for entries whose `date` falls in the fall of 2025 (Sep–Nov 2025)
Result: List of meets with dates, events, marks, and places

Example 3: Graduated or transferred athlete
User says: "What are Katelyn Vuong's PRs from UC Davis?"
Actions:
1. Call `search_athlete(name="Katelyn Vuong", school="CA_college_f_UC_Davis")`
   Result: `data.matches` is empty — athlete has graduated
2. Tell the user: "Katelyn Vuong is not on UC Davis's current roster. Please find her profile URL on tfrrs.org (e.g. search 'Katelyn Vuong UC Davis tfrrs') and share it."
3. User provides: `https://www.tfrrs.org/athletes/7899206/UC_Davis/Katelyn_Vuong.html`
4. Extract params from the URL and call `get_athlete_profile(athlete_id="7899206", school="UC_Davis", name="Katelyn_Vuong")`
Note: TFRRS creates separate profiles for XC and TF. If both exist, fetch both IDs for complete PRs.

Example 4: Get a team's current roster
User says: "Show me the UC Davis women's XC roster"
Actions:
1. Call `get_team_roster(school="CA_college_f_UC_Davis", sport="xc")`
Result: List of athletes with name, year, and profile slugs

Example 5: Get results from a meet
User says: "Show me the results from the Stanford Invitational"
Actions:
1. Find the meet on tfrrs.org and copy the meet_id and slug from the URL (e.g. tfrrs.org/results/95890/Stanford_Invitational)
2. Call `get_meet_results(meet_id="95890", slug="Stanford_Invitational")`
Result: All event results and team scores from the meet. Each result has `place`, `name`, `year`, `team`, `marks` (the recorded mark, e.g. `["9.72"]`, or `["DNF"]`) and `score` (team points, `null` at unscored meets); `wind`, `conversion` (imperial mark) and relay `athletes` appear when the event has them.

For a cross-country meet (URL like tfrrs.org/results/xc/28714/Gans_Creek_Classic) pass `sport="xc"`: `get_meet_results(meet_id="28714", slug="Gans_Creek_Classic", sport="xc")`. XC `team_scores` are keyed by race name. XC ids use a separate range, so an XC id without `sport="xc"` returns an unrelated track meet (flagged in `warnings`).

Example 6: Get the latest XC/TF news
User says: "What's the latest college track news?"
Actions:
1. Call `get_news(limit=10)`
Result: Recent articles from The Stride Report with title, date, summary, and link

## Commands that DO NOT exist — never call these

- ~~`get_team_rankings`~~ — does not exist. Use `get_athlete_profile` for individual data.
- ~~`search_athletes`~~ — does not exist. The correct command is `search_athlete` (no trailing 's').
- ~~`fetch_news`~~ — does not exist. The correct command is `get_news`.

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

## Error Handling

When a command fails, **do not surface raw errors to the user**. Instead:
1. For `get_athlete_profile`: confirm `athlete_id`, `school`, and `name` match the TFRRS URL exactly (case-sensitive)
2. For `search_athlete`: verify the team slug is correct by checking the team's TFRRS page URL
3. For `get_meet_results`: verify the `meet_id` and `slug` match the meet's TFRRS URL exactly
4. For `get_team_roster`: verify the school slug is correct
5. For `get_news`: if the feed fails, inform the user that The Stride Report may be temporarily unavailable
6. Report failure with a clean message only after exhausting alternatives

## Troubleshooting

**`sports-skills` command not found**
Run `pip install sports-skills` or install from GitHub (see Setup above).

**HTTP 404 on athlete profile**
The `school` or `name` slug does not match the TFRRS URL exactly. Slugs are case-sensitive and use underscores. Copy directly from tfrrs.org.

**`prs` returns empty dict**
The athlete's profile page may be very new or structured differently. Check the URL directly on tfrrs.org.

**`search_athlete` returns empty matches**
The athlete is likely graduated or transferred. See Example 3 above for how to handle this.

**`get_meet_results` returns no events**
The `meet_id` or `slug` may be incorrect. Copy both directly from the meet's TFRRS URL. If the URL contains `/results/xc/`, pass `sport="xc"`.

**`get_news` fails or returns no articles**
The Stride Report RSS feed may be temporarily unavailable. Try again later.

**Connection errors or timeouts**
TFRRS may be temporarily unavailable. Requests are throttled to 1 per second automatically — wait a moment and retry.

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

Похожие скиллы

Все скиллы по теме «Данные и базы» →
yfinance-data himself65 Скилл загружает котировки, финансовые отчёты, опционы, дивиденды и данные по держателям акций через библиотеку yfinance (Yahoo Finance). CX Codex +1 3 900установок data-visualization официальный anthropics Подбирает подходящие типы графиков под структуру данных и генерирует код на Python с matplotlib, seaborn и plotly. Пригодится при подготовке отчётов. CX Codex +1 13 800установок google-analytics-data-api-basics официальный google Скилл подключает работу с отчётными данными Google Analytics через Data API v1beta. Нужен для запросов метрик, измерений и проверки доступа к API. CX Codex 7 364установок data-scraper-agent affaan-m Скилл собирает данные с публичных сайтов и API, обогащает их через Gemini Flash и складывает в Notion, Sheets или Supabase. Пригодится, когда нужен регулярный мониторинг без платного хостинга. CX Codex +1 4 600установок data-designer NVIDIA Создаёт синтетические наборы данных и Python-конвейеры генерации. Пригодится, когда нужно описать структуру данных и получить скрипт для Data Designer. CX Codex +1 2 500установок data-engineering-study-material reason-machines Скилл-справочник по дата-инженерии: объясняет концепции, показывает примеры пайплайнов и готовит к собеседованиям. CX Codex +1 2 000установок

Из того же набора22

cbb-data Скилл вытаскивает счёта, таблицы, ростеры и сетку March Madness из публичных эндпоинтов ESPN и NCAA. Ключи не нужны. CX Codex +1 670установок world-cup Скилл находит данные по матчам чемпионатов мира и связывает агента с каталогом Machina ZeroClick. Пригодится для получения турнирной статистики, прогнозов и готовых отчётов. CX Codex +1 667установок wnba-data Скилл открывает доступ к статистике WNBA через эндпоинты ESPN без API-ключей. Пригодится, чтобы узнавать счёт матчей, составы и показатели игроков прямо в чате. CX Codex +1 665установок volleyball-data Тянет таблицы, расписания, результаты, клубы и новости Dutch volleyball через открытый API Nevobo. Без ключей и настройки. CX Codex +1 578установок metadata Тянет логотипы клубов, фото игроков и данные о стадионах через бесплатный API TheSportsDB. Пригодится, когда ответ нужно дополнить картинкой или визуальным идентификатором. CX Codex +1 490установок fastf1 Загружает телеметрию, результаты гонок, тайминг кругов и стратегию шин Формулы-1 через библиотеку FastF1. Пригодится для анализа заездов и статистики пилотов прямо в чате. CX Codex +1 480установок machina Подключает агента к платному контуру Machina Sports: живые коэффициенты, потоки телеметрии и готовые шаблоны спортивных ботов. CX Codex +1 429установок cricket-data Скилл отдаёт текущий счёт матчей, новости серий и историческую статистику крикета без API-ключей. Пригодится для разбора игр IPL, BBL или международных туров. CX Codex +1 406установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой