---
name: reinvent-plan
description: Start here for AWS re:Invent planning. Figures out which phase you are in (research vs booking), makes sure the catalog is synced and a profile exists, then routes to the right re:Invent skill. Use when someone says "help me plan re:Invent", "what sessions should I go to", "build my re:Invent agenda", "re:Invent is overwhelming", or names a re:Invent session code.
---

# Plan an AWS re:Invent week

2,200+ sessions, five days, one badge. This skill's job is to stop the user
drowning in the catalog and put them on the right next step.

## The one idea that matters

**Right now is a research phase, not a booking phase.** The catalog fills in
waves; times and reservations come later. Trying to build a calendar before AWS
publishes times is wasted work, and refusing to look at the catalog until
reservations open means the good interactive sessions are gone.

So: build a *ranked shortlist* now, favorite aggressively, and convert it to a
calendar the day reservations open.

## Step 1 — orient

> **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 sync          # refresh the local snapshot
python3 -m reinvent stats         # what is in the catalog, and is anything scheduled yet
```

**If `sync` fails**, this is not a dead end and you should not stop. Every other
command reads the cached snapshot on disk, so:

- Say the sync failed and why, in one line.
- Run `stats` anyway and read its `Fetched:` line out loud. A snapshot from this
  week is perfectly good for building a shortlist; one from a month ago means the
  user is missing content waves and should retry the sync before trusting counts.
- Carry on with the shortlist. Retry `sync` later.

Only stop if `stats` also fails with "No cached catalog" — that means there is no
snapshot at all and nothing downstream can work. The catalog is public, so there
is no login to fix; it is a network problem.

Read the `Scheduled with a time` line in the `stats` output. That single number
decides the phase:

| Scheduled sessions | Phase | Route to |
| --- | --- | --- |
| 0 | **Research** | `reinvent-shortlist` |
| some, most not | **Research + early booking** | `reinvent-shortlist`, then `reinvent-agenda` for the scheduled subset |
| most or all | **Booking** | `reinvent-agenda` |

State the phase out loud to the user before doing anything else. It reframes
the whole task and it is the single most useful thing you can tell them.

## Step 2 — make sure a profile exists

Everything downstream is scored against a profile. Check `profiles/` for one
belonging to this user — match it by name, and ignore the shipped
`example-*.json` files, which are templates, not people.

- **No profile for this user → load the `reinvent-profile` skill now and follow
  its interview before doing anything else.** That skill asks the user four or
  five questions and writes the JSON. Do not skip it and do not fill in a
  profile from their job title — a title does not tell you what they need from
  the week, and a guessed profile produces a confident, wrong shortlist.
- **Several profiles and it is unclear which is theirs** → ask which one, or run
  the interview to make a new one. Do not pick for them.
- Profile exists but predates a big change (new team, new mandate) → offer to
  revise it.

Validate before use:

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

## Step 3 — route

| The user wants | Skill |
| --- | --- |
| no profile yet, or "set up my profile" | `reinvent-profile` — load it first, everything else scores against its output |
| "which sessions should I care about" | `reinvent-shortlist` |
| "build my calendar", times are published | `reinvent-agenda` |
| "reservations are opening" | `reinvent-reserve` |
| "my team is going, split it up" | `reinvent-team` |
| "what got added since last week" | `reinvent-watch` |
| "when do I fly in / where do I stay / what do I pack" | `reinvent-trip` |
| "write up what we learned" | `reinvent-debrief` |
| "why did you rank this one so high" | `python3 -m reinvent explain <CODE> --profile <p>` |
| "what can I even filter on" | `python3 -m reinvent facets` |

## The rules behind the defaults

[`docs/playbook.md`](../../docs/playbook.md) is the distilled advice of people
who have attended for a decade. Four things from it shape every plan this repo
produces, and they are worth saying out loud to a first-timer:

- **Four sessions a day.** Five is a stretch. Six means absorbing none of them.
- **Anchor each day to one venue.** The campus is the better part of an hour end
  to end; you get one venue change a day, not four.
- **30 minutes between sessions minimum**, even in the same building. Ten of
  those minutes are the reserved-seat scan-in cutoff.
- **Favoriting is not reserving.** Reservations open on one morning in the fall
  and the small-room sessions go in minutes.

## Working efficiently

- **Batch independent commands.** Several local queries with no dependency
  between them go in one message. `sync` → `stats` is sequential; `facets` and
  `validate-profile` are not.
- **The local CLI is fast.** Every command runs in well under a second against a
  cached JSON file. Never wrap one in a subagent — it adds a round trip and a
  fresh context that cannot see what you already loaded.
- **Fan out for web research only.** Session-quality checks (speaker track
  record, repeat-of-prior-year, level honesty, sponsor pitches), per-attendee
  review on a team plan, and trip logistics are the cases that earn subagents.
  Cap at 4–6, disjoint slices, one message, a source URL per claim.
- **Never delegate the profile interview.** It needs the actual user.

Full discipline: [`docs/parallel-research.md`](../../docs/parallel-research.md).

## Step 4 — always close the loop

End every planning session by telling the user the next *dated* action, not a
vague suggestion. Good: "favorite these 9 codes in the catalog this week; re-run
`reinvent watch` after the next content drop." Bad: "let me know if you want
more options."

## Guardrails

- **Never invent a session.** Every code you mention must come out of the local
  snapshot. If the user names a code you cannot find, say so and offer
  `python3 -m reinvent sync`.
- **Don't promise seats.** This tool ranks and schedules; it cannot reserve.
  Reservations happen in AWS's own catalog, and popular interactive sessions
  fill within minutes of opening.
- **Respect a full calendar.** Managers and execs usually want *fewer*
  sessions with real gaps, not a packed grid. Check the profile's
  `max_sessions_per_day` and honor it.
- The catalog is read-only public data. Nothing here needs an AWS login.
