This skill should be used when the user asks about "open swim", "swim schedule", "pool schedule", "when can I swim", "YMCA swim times", "open swim hours", "pool hours", or mentions West Carrollton or Coffman YMCA swimming schedules. Fetches live Open Swim schedules from the Dayton YMCA website.
Fetch and display Open Swim schedules from the Dayton YMCA's West Carrollton and Coffman branch websites. Data is pulled live from the schedule pages.
When presenting results, follow the unified Discord schedule display spec in
docs/schedule-display.md.
The schedule data is server-rendered as static JSON in the HTML of each
branch's schedule page (inside ygdScheduler._initialState). It is NOT loaded
dynamically via JavaScript — the full dataset is present in the initial HTML
response and can be read by any HTTP client or web fetcher. Open Swim events
are identified by category set to "Open Swim".
| Branch | URL |
|---|---|
| West Carrollton | https://www.daytonymca.org/west-carrollton-schedule |
| Coffman | https://www.daytonymca.org/coffman-schedule |
Use whichever method is available in your environment. You must actually attempt to fetch the data — do not assume it will fail.
The schedule JSON is embedded as static data in the page HTML, so WebFetch can read it directly. This is confirmed to work — do not skip this method.
Fetch each branch URL with this prompt (substitute the target date in MM/DD/YYYY format, or omit the date clause to get all events):
Find ALL schedule entries where the category is "Open Swim" in the embedded ygdScheduler._initialState JSON data. Only include events with date "MM/DD/YYYY". For each entry, return these fields: name, category, beginningAt, endingAt, date, weekdays, areaName, branchName, duration, canceled, isCancelled, description. Return as a JSON array. Include every matching entry — do not truncate or summarize.
Use these URLs:
https://www.daytonymca.org/west-carrollton-schedulehttps://www.daytonymca.org/coffman-scheduleFetch both branches in parallel when the user asks for all branches.
Important notes for WebFetch method:
Run the bundled fetch script to retrieve live data. ${SKILL_DIR} resolves
to the directory containing this SKILL.md file.
# Today's events across all branches (default)
python3 ${SKILL_DIR}/scripts/fetch_open_swim.py
# Tomorrow's events
python3 ${SKILL_DIR}/scripts/fetch_open_swim.py --date tomorrow
# Full schedule, all dates
python3 ${SKILL_DIR}/scripts/fetch_open_swim.py --date all
# Specific date
python3 ${SKILL_DIR}/scripts/fetch_open_swim.py --date 03/15/2026
# Single branch
python3 ${SKILL_DIR}/scripts/fetch_open_swim.py --branch west-carrollton
python3 ${SKILL_DIR}/scripts/fetch_open_swim.py --branch coffman
# Normalized JSON output for shared rendering
python3 ${SKILL_DIR}/scripts/fetch_open_swim.py --format json
| Flag | Values | Default | Description |
|---|---|---|---|
--branch | west-carrollton, coffman, all | all | Which branch to fetch |
--date | today, tomorrow, all, MM/DD/YYYY | today | Date filter |
--format | table, json | table | Output format |
The script uses only Python standard library modules (no pip dependencies).
When using --format json, the output follows the shared schedule response shape:
{
"title": "Open Swim Today",
"mode": "availability",
"timezone": "America/New_York",
"items": [
{
"source": "West Carrollton YMCA",
"category": "open-swim",
"title": "Open Swim",
"status": "normal",
"start": "2026-03-18T10:00:00-04:00",
"end": "2026-03-18T15:45:00-04:00",
"area": "Lap Pool",
"timeLabel": "10:00 AM–3:45 PM"
}
],
"links": [
{
"label": "West Carrollton YMCA schedule",
"url": "https://www.daytonymca.org/west-carrollton-schedule"
}
],
"metadata": {
"sourceSummary": ["West Carrollton YMCA", "Coffman YMCA"],
"distinctTypes": ["Adult Swim", "Open Swim", "Pool Closed"],
"total": 11
}
}
Each item may include fields like:
sourcecategorytitlestatusstartendareadescriptionnotetagsdateLabeltimeLabelurlFilter on category === "Open Swim" (the Type filter). Do NOT filter by
the event name field — the Class dropdown contains individual event names
but is not the correct filter for identifying Open Swim events.
Events under the Open Swim category include varied name values:
canceled and isCancelled are separate boolean fields; check bothdays is an array of full day names; weekdays is comma-separated abbreviationsDefault to the unified schedule spec's availability style.
--format json when using the Python script so you can normalize and
render the results yourselfrender_schedule tool is available, pass the normalized JSON response
to it instead of hand-formatting long schedule output yourselfNormalize event names into these statuses before rendering:
Open Swim → normalAdult Swim → limitedOpen Swim - 3 Lanes / Open Swim - Deep End Only → limitedWater Walking / Water Volleyball → usually limitedPool Closed → blockedcanceled or isCancelled → cancelled- 10:00 AM–3:45 PM · Open Swim · Lap Pool - Adults 18+ onlyPool Closed rows dominate the main listFacility notes section when possibleAlways include direct schedule links as a fallback:
references/data-structure.md — Complete field-by-field documentation of
the ygdScheduler._initialState JSON schema and all known event types../../../docs/schedule-display.md — Unified schedule display spec for Discordscripts/fetch_open_swim.py — Standalone Python script to fetch, parse,
and filter Open Swim events from both branch schedule pages