---
name: reinvent-agenda
description: Turn a shortlist into a conflict-free day-by-day calendar once AWS publishes session times, accounting for Las Vegas walking and shuttle time between venues. Use when the user says "build my schedule", "does my agenda have conflicts", "can I make it from X to Y", or reservations are about to open.
---

# Build the day-by-day agenda

Two sessions that do not overlap on the clock can still be impossible: the
Venetian to MGM Grand is a real 35 minutes with a shuttle. This skill plans
against that.

## First, check there is anything to schedule

> **Where to run these.** Every command below needs the planner repo on the
> Python path. If there is no `reinvent/` directory in the current working
> directory, you are not in it — resolve this skill's own base directory (printed
> when the skill loaded, and usually a symlink), then go two levels up: that is
> the repo root. `cd` there first, or call `<repo>/bin/reinvent <command>` by
> absolute path, which works from anywhere. Do not tell the user to install
> anything; there are no dependencies.

```bash
python3 -m reinvent stats | head -12
```

If `Scheduled with a time: 0`, stop. There is no calendar to build yet — go to
`reinvent-shortlist` and tell the user plainly that times are not out. Building
a fake calendar now is worse than no calendar.

## Run it

```bash
python3 -m reinvent sync
python3 -m reinvent agenda --profile profiles/<name>.json --out agendas/<name>.md
```

| Flag | Why |
| --- | --- |
| `--pool 80` | How many ranked sessions get considered for placement. Raise it if days come back sparse |
| `--per-topic-cap 6` | Looser than the shortlist default, because a day needs filling |
| `--min-score` | Raise it to keep marginal sessions off the calendar entirely |

The planner maximizes total score per day subject to: no overlaps, enough
travel time between venues, the profile's `max_sessions_per_day`, and its
`no_before` / `no_after` window. A session offered at several times is placed at
whichever occurrence fits best, and only once per day.

## What the planner enforces for you

These are veteran rules, not arbitrary numbers — see
[`docs/playbook.md`](../../docs/playbook.md):

- **30 minutes between sessions, minimum, even in the same building.** Ten of
  those minutes are the reserved-seat scan-in cutoff and the rest is finding a
  room in a resort the size of an airport. Cross-venue hops add measured travel
  time on top, landing switches at 50–65 minutes.
- **Days prefer one venue.** Each venue switch costs score, so the planner only
  crosses the campus when the gain is real. Indoor-connected pairs — Venetian ↔
  Caesars Forum through the Expo, Venetian ↔ Wynn/Encore — are penalized half as
  much, because those hops are genuinely cheap.
- **Lunch is protected.** 45 free minutes inside 11:00–13:00, and the report says
  which session it dropped to get them. Meals are served 11:00–13:00 Mon–Thu.
- **Four sessions a day** by default.

## Read the output like a human would

Each day is headed with the venue it is based at and flags when it crosses more
than one. Three things to check yourself:

- **The venue line.** If a day still crosses two or three venues, look at whether
  the hops are indoor. If not, consider dropping the outlier — or tell the user
  that day is a commitment to travelling.
- **The lunch note.** If it says it could *not* free a gap, that day has no meal
  break and someone should drop a session by hand.
- **The `Backups this day` block** matters more than the plan. Sessions fill up;
  this is what the user needs when they get turned away at the door.

## Then build the reservation plan

The agenda is not the deliverable — the reservation plan is. Hand off to
`reinvent-reserve`, or run it directly:

```bash
python3 -m reinvent reservation-plan --profile profiles/<name>.json
```

That orders the same sessions by what you cannot get any other way, attaches a
same-venue backup to each, and lists the laptop-required ones.

## Reservations, honestly

- This tool cannot reserve seats. Reservations happen in AWS's own catalog, and
  **favoriting is not reserving**.
- Interactive formats — workshops, builders' sessions, chalk talks, code talks,
  labs — have small caps and go within minutes of reservations opening. Those are
  the ones to book first.
- A breakout session is usually recorded. Missing one costs you a YouTube video
  in January, not the content.
- **You must be scanned in 10 minutes before start** or the seat is released to
  the walk-up line. Build the walk time in. See
  [`docs/logistics.md`](../../docs/logistics.md) for what AWS actually commits to.

## When the user pushes back

| They say | Do |
| --- | --- |
| "Tuesday is empty" | Raise `--pool`, or lower `--min-score`; the pool may be too small |
| "I can't make that walk" | Raise `same_venue_buffer_minutes` in the profile constraints — it is the pad added to every hop — and re-run |
| "stop moving me around" | Raise `venue_switch_penalty` (default 2.0); 5+ effectively pins each day to one venue |
| "I don't need a lunch break" | Set `protect_lunch: false`, or lower `lunch_minutes` |
| "I want to keep session X" | Put it in the profile's `keywords.boost` or re-run with `--code` to force it into the pool, then check what it displaced |
| "too packed" | Lower `max_sessions_per_day`. Three good sessions beat five rushed ones |
| "what about the keynote?" | Keynotes and re:Play are not always in the session catalog — check `docs/logistics.md` and block them manually |

## The close

Give the user two artifacts: the agenda file, and a short list of the
**reservation-priority codes** (interactive formats first, in day order). That
second list is what they will actually use the morning reservations open.
