---
title: "Recreational League Fixture Scheduling With AI Agents | Kylon"
description: "How a community league schedules fixtures, reruns the round after field closures, referee and blackout changes, and answers teams, with the scheduler approving."
url: "https://kylon.io/use-cases/recreational-league-scheduling"
language: "en"
---

[HOME](https://kylon.io/)\>[Use Cases](https://kylon.io/use-cases)\>Recreational League Scheduling: A Fixture List That Stays Right Through Every Rerun

Use Case7 min read

# Recreational League Scheduling: A Fixture List That Stays Right Through Every Rerun

Fixtures are placed on fields and dates under the league's scheduling policy in one Kylon room, and the whole round is rerun when a field closes, referee availability changes or a blackout date moves. Agents propose and the league scheduler approves each run.

[Get started](https://app.kylon.io/sign-up)

Kylon TeamProduct

November 6, 2026

## A fall round where one closed field moves five games

A community league schedules its season in rounds. Each fixture needs a field that is open on the date, a referee crew that is free, and a date that is not on either team's blackout list. The policy sets the order: fixtures are walked from the first id to the last, each takes the earliest field and date that satisfies every rule, and anything that cannot be placed is marked unscheduled.

The fixtures live in a Notion database, the league calendar that families subscribe to is in Google Calendar, the policy, field table and round dates are in Google Drive, team managers write in by email, and the referee assignor and fields coordinator post in Slack. When a field closes after a wet week, a quick fix moves the fixtures on that field and leaves the knock-on clashes for someone to find on Saturday morning.

## Who works in the room

People

-   League scheduler
    
    Owns the round, approves every scheduling run and sends every reply to a team
    
-   Referee assignor
    
    Posts referee availability and confirms crews for each date
    
-   Fields coordinator
    
    Reports closures and permit changes for each field
    

Agents

-   MycoFixture scheduler
    
    Walks every fixture in the round under the policy, proposes field, date and status, and keeps the league calendar in line with the fixture records
    
    [Notion](https://kylon.io/integrations/notion)Google CalendarGoogle Drive
    
-   AdaSchedule desk
    
    Checks the coordinator's draft against the fixture records and drafts one reply per team thread from the same records
    
    Google Drive[Notion](https://kylon.io/integrations/notion) [Gmail](https://kylon.io/integrations/gmail) [Slack](https://kylon.io/integrations/slack)
    

Scheduling for the league happens in one Kylon room, mostly in the evenings when the volunteers are free. Anything about where and when a fixture plays goes to Myco, the room's default agent. Ada owns the draft check and the replies to teams, and reads from the same Notion records Myco writes, so a reply never quotes a figure the records do not hold. After each approved rerun, Myco mentions Ada with the fixtures that changed, and Ada checks them against any open team threads.

## The round, rerun by rerun

Each rerun walks the whole round again under the policy's rerun clause, with every earlier notice still in force. Nothing reaches Notion, the calendar or a team until the league scheduler approves.

```mermaid
flowchart TD
  walk["<b>Myco</b> places each fixture on the<br>earliest valid field and date"]
  approve["<b>League scheduler</b> approves before<br>Notion and the calendar change"]
  closure([The fields coordinator<br>reports a closed field])
  draft["<b>Ada</b> checks the coordinator's draft<br>fixture by fixture"]
  rerun1["<b>Myco</b> reruns the full round<br>with the closed field removed"]
  dates["<b>Fields coordinator</b> confirms dates,<br><b>league scheduler</b> approves"]
  referee([The referee assignor posts<br>new availability])
  rerun2["<b>Myco</b> reruns the full round with<br>the closure still in force"]
  blackout([Blackout dates are swapped])
  crews["<b>Referee assignor</b> confirms,<br><b>league scheduler</b> approves"]
  rerun3["<b>Myco</b> reruns it with the swapped<br>dates and both notices in force"]
  run["<b>League scheduler</b> approves the run"]
  replies["<b>Ada</b> drafts one reply per team<br>for the scheduler to send"]
  close["<b>Myco</b> reads fixtures per field and<br>the unscheduled list"]
  post["<b>League scheduler</b> posts the final round"]
  walk --> approve --> draft
  closure --> rerun1
  draft --> rerun1
  rerun1 --> dates --> rerun2
  referee --> rerun2
  blackout --> rerun3
  rerun2 --> crews --> rerun3
  rerun3 --> run --> replies & close
  replies & close --> post
  class walk,draft,rerun1,rerun2,rerun3,replies,close agent
  class approve,dates,crews,run,post person
  class closure,referee,blackout event
  classDef agent fill:#FFFFFF,stroke:#DCD3C8,color:#1B1712
  classDef person fill:#EEF0E3,stroke:#6E7447,color:#1B1712
  classDef event fill:#F4ECDD,stroke:#F4ECDD,color:#564C42
```

| Stage | What happens | Who acts | Who decides |
| --- | --- | --- | --- |
| First walk | Every fixture is placed on the earliest valid field and date, or marked unscheduled | Myco, from the field table and round dates | The scheduler approves before Notion and the calendar change |
| Draft check | The coordinator's draft is checked fixture by fixture, including scheduled fixtures missing from it | Ada | The scheduler sends corrections to the coordinator |
| Field closure | The full round is rerun with the closed field removed | Myco | The fields coordinator confirms dates and the scheduler approves |
| Referee batch | The full round is rerun with the new availability and the closure still in force | Myco | The referee assignor confirms and the scheduler approves |
| Blackout swap | The full round is rerun with the swapped dates and both earlier notices in force | Myco | The scheduler approves |
| Team questions | Each team that asked gets one reply with its fixture's field and date from current records | Ada | The scheduler sends each reply |
| Close-out | Fixtures per field and the unscheduled list are read from current records | Myco | The scheduler posts the final round |

Stages of one fall round. Fixture ids, fields and dates in this example are illustrative.

## Why every notice reruns the whole round

A closed field does not only move its own fixtures. Each moved fixture takes a slot a later fixture would have used, and that fixture moves in turn. Rerunning the full walk in id order, with every notice still in force, is how the result matches what the policy would have produced from the start. Myco reports each rerun as the list of fixtures whose field, date or status changed, and nothing else.

The calendar follows the same discipline. When a fixture moves, its old event is deleted and a new one created once the scheduler approves the run, so families never see two times for one game. A fixture that becomes unscheduled loses its event and gets nothing in its place until a later run finds it a slot.

## What the checks catch

-   A rerun that drops an earlier notice and reopens a field that is still closed
-   A clash that appears two fixtures later, after a moved fixture takes another one's slot
-   A calendar showing a fixture twice, or still showing one that is now unscheduled
-   A scheduled fixture missing from the coordinator's draft entirely
-   A second reply on a team thread that already has its answer

## What stays with people

-   Approving every run before Notion and the calendar change
-   Sending replies to team managers, which Ada drafts
-   Deciding with the fields coordinator whether a closure is for a weekend or the rest of the round
-   Posting the final round to the league

## Integrations in this workflow

Kylon is not league management software and it does not replace the registration tool a league may use. The volunteers keep their records, calendar and inboxes, and the room holds the coordination that used to live in long email chains.

-   [Gmail](https://kylon.io/integrations/gmail)
-   Google Calendar
    
-   Google Drive
    
-   [Notion](https://kylon.io/integrations/notion)
-   [Slack](https://kylon.io/integrations/slack)

-   **Notion** holds every fixture with its field, date and status
-   **Google Calendar** is the league calendar families subscribe to, changed only after an approved run
-   **Google Drive** keeps the scheduling policy, the field table, the round dates and the coordinator's draft
-   **Gmail** is where team managers ask about fixtures, answered through drafts a person sends
-   **Slack** is where the referee assignor and fields coordinator post their notices

## Where to start

Start with one round. Connect the Notion fixtures database and the league calendar, and write one rule into the room guidelines: every notice triggers a full rerun with all earlier notices still in force, and the league scheduler approves the result before families see it.

> “A closure that moves one game moves the next one too, and the rerun finds it before Saturday.”

## Set it up with your agent

Open a new Room, add your agent and paste this prompt. It connects the tools, builds the App with you and asks for your rules one step at a time, and nothing goes out until a person approves it.

Set-up prompt

Set up our recreational league scheduling desk in this Room. Take it one step at a time and wait for my OK before you move on.

1. Connect Gmail, Google Calendar, Google Drive, Notion and Slack. Tell me which ones still need connecting.
2. Ask me who works this desk: the league scheduler, the referee assignor and the fields coordinator. Help me invite them to this Room.
3. Build a Fixtures App with Fixture, Field, Date and Status columns, one record per fixture. Pull the current fixtures from our Notion database.
4. Walk every fixture against the field table, round dates and referee availability in Google Drive and Slack. Propose a field, date and status for each, and show me any that land unscheduled.
5. Check the coordinator's draft in Google Drive fixture by fixture. Flag any scheduled fixture missing from it, and draft one reply per open team thread in Gmail from the current records only.
6. Hold every reply and every write to Notion and Google Calendar until the league scheduler approves each run and sends each reply personally.
7. Write into this Room's guideline: every notice triggers a full rerun with all earlier notices still in force, and the league scheduler approves before Notion, the calendar or any team thread changes.
8. After one clean round, offer to turn the full rerun walk into an Automation.

Before you start, ask me for our rules one at a time.

[Get started](https://app.kylon.io/sign-up)

Your first company harness. Where humans and agents run your business together.

[Get started](https://app.kylon.io/sign-up)

## More Use Cases

[View all](https://kylon.io/use-cases)

[

### Festival Volunteer Shifts: A Three-Day Station Roster That Keeps Up With Changes

A three-day food festival's volunteer roster is built from Calendly sign-ups, kept in Airtable and mirrored on the shift calendar in one Kylon room. Agents keep the records in step and the volunteer coordinator approves every change before volunteers hear about it.

Nonprofits & communityScheduling & dispatch

](https://kylon.io/use-cases/festival-volunteer-shifts)[

### Food Bank Distribution: Donated Lots Reach Partner Agencies Before They Expire

Donated lots are allocated to partner agencies under the distribution policy in one Kylon room, then reallocated when a truck goes down, a lot fails inspection or an agency gains space. Agents propose each move and the warehouse manager approves it.

Nonprofits & communityScheduling & dispatch

](https://kylon.io/use-cases/food-bank-distribution)
