From kids-camp-planner
This skill should be used when the user asks to "generate annual schedule", "update annual schedule", "create year schedule", "rebuild schedule", "refresh schedule from spreadsheet", "create full-year view", "build annual camp plan", "consolidate all camp days", "combine summer and PA days", or needs to produce a consolidated annual schedule covering summer, PA days, winter break, and March break from spreadsheet data and school calendar. Generates both markdown and Excel output.
npx claudepluginhub reggiechan74/cc-plugins --plugin kids-camp-plannerThis skill uses the workspace's default tool permissions.
**Locate research directory:** Read `.claude/kids-camp-planner.local.md` to get the `research_dir` path (default: `camp-research`). All user data paths below are relative to this directory. The family profile is at `<research_dir>/family-profile.md`.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Automates semantic versioning and release workflow for Claude Code plugins: bumps versions in package.json, marketplace.json, plugin.json; verifies builds; creates git tags, GitHub releases, changelogs.
Locate research directory: Read .claude/kids-camp-planner.local.md to get the research_dir path (default: camp-research). All user data paths below are relative to this directory. The family profile is at <research_dir>/family-profile.md.
Generate a consolidated annual camp schedule that combines all school-break periods into a single view. Reads summer assignments from the spreadsheet's Daily Schedule tab, looks up non-summer dates from the school calendar, applies provider assignments for PA days and breaks, and produces both a markdown schedule and an updated spreadsheet with an "Annual Schedule" tab.
Read the family profile from <research_dir>/family-profile.md for:
Locate the required files:
examples/sample-budget.xlsx) with Provider Comparison and Daily Schedule tabs${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/The summer schedule comes from the spreadsheet. For non-summer periods, confirm or accept defaults:
| Period | Default Provider | Override? |
|---|---|---|
| PA Days | City of Toronto | Ask user if different |
| Winter Break | YMCA Cedar Glen | Ask user if different |
| March Break | YMCA Cedar Glen | Ask user if different |
| Fall Break | Same as --break-provider | Ask user if different |
Ask the user: "For PA days I'll use City of Toronto ($62/day) and for winter/March/fall breaks I'll use YMCA Cedar Glen ($87/day). Want to change any of these?"
If children need different providers on specific days (e.g., Emma does Science Camp for a PA day while Liam does YMCA), create an overrides JSON file. Every day can have a different provider per child — see the --overrides argument below.
Check calendar staleness: Before running the script, read the calendar file header and check for staleness. Extract the school year from the ## YYYY-YYYY School Year header. Parse the end year (e.g., 2026 from "2025-2026"). If the current date is after September 1 of that end year, warn: "Calendar data for [board] is from [year]. The current year may have different PA days and breaks. Would you like to search for updated calendar data?" If the user says yes, run the 3-Tier School Calendar Lookup to find updated data before proceeding.
python3 ${CLAUDE_PLUGIN_ROOT}/skills/generate-annual-schedule/scripts/generate_annual_schedule.py \
--xlsx examples/sample-budget.xlsx \
--calendar ${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/public-boards/tcdsb.md \
--children "Emma,Liam" \
--pa-day-provider "City of Toronto" \
--break-provider "YMCA Cedar Glen" \
--output-md <research_dir>/annual-schedule-2025-2026.md \
--update-xlsx
For per-child, per-day provider assignments, add an overrides file:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/generate-annual-schedule/scripts/generate_annual_schedule.py \
--xlsx examples/sample-budget.xlsx \
--calendar ${CLAUDE_PLUGIN_ROOT}/skills/camp-planning/references/school-calendars/public-boards/tcdsb.md \
--children "Emma,Liam" \
--pa-day-provider "City of Toronto" \
--break-provider "YMCA Cedar Glen" \
--overrides <research_dir>/schedule-overrides.json \
--output-md <research_dir>/annual-schedule-2025-2026.md \
--update-xlsx
Arguments:
--xlsx: Path to the budget spreadsheet (reads Provider Comparison + Daily Schedule tabs)--calendar: Path to the school calendar markdown file--children: Comma-separated children's names (must match spreadsheet column headers)--pa-day-provider: Default provider for PA day coverage (must exist in Provider Comparison tab)--break-provider: Default provider for winter break and March break (must exist in Provider Comparison tab)--fall-break-provider: Default provider for fall break coverage (defaults to same as --break-provider; must exist in Provider Comparison tab)--overrides: Optional JSON file with per-child, per-date provider overrides (see below)--output-md: Path for the generated markdown file--update-xlsx: Flag to add/replace "Annual Schedule" tab in the spreadsheetOverrides JSON format:
The overrides file lets you assign different providers to each child on any date. Children not listed for a date fall back to the period default (--pa-day-provider or --break-provider). Summer dates can also be overridden (replacing the spreadsheet assignment for that child).
{
"2025-09-26": {"Emma": "Science Camp Toronto", "Liam": "YMCA Cedar Glen"},
"2025-10-10": {"Liam": "YMCA Cedar Glen"},
"2025-12-22": {"Emma": "City of Toronto"},
"2026-03-16": {"Emma": "Science Camp Toronto", "Liam": "City of Toronto"}
}
All provider names in the overrides file must exist in the Provider Comparison tab.
Multi-school families: If children attend different schools, pass per-child calendars:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/generate-annual-schedule/scripts/generate_annual_schedule.py \
--xlsx examples/sample-budget.xlsx \
--calendar "Emma:${CLAUDE_PLUGIN_ROOT}/.../tdsb.md" \
--calendar "Liam:${CLAUDE_PLUGIN_ROOT}/.../gist.md" \
--children "Emma,Liam" \
--pa-day-provider "City of Toronto" \
--break-provider "YMCA Cedar Glen" \
--output-md <research_dir>/annual-schedule-2025-2026.md \
--update-xlsx
On days where only some children are off school, the others show "In school" with $0 cost.
The script produces:
Markdown file with:
Updated spreadsheet with:
Show the user the annual summary:
Annual Schedule Generated:
- Summer 2025: 40 days
- PA Days: 7 days
- School Holidays: 5 days
- Winter Break: 7 days
- March Break: 5 days
- Total: 64 days
Files updated:
- <research_dir>/annual-schedule-2025-2026.md
- examples/sample-budget.xlsx (Annual Schedule tab added)
### PA Days - Elementary table)### Holidays & Breaks)Fall Break row in ### Holidays & Breaks)Christmas Break row in ### Holidays & Breaks)Mid-Winter Break (March Break) row)See ${CLAUDE_PLUGIN_ROOT}/examples/sample-annual-schedule.md for the complete output format.
scripts/generate_annual_schedule.py - Read spreadsheet + calendar, generate annual schedule markdown and xlsx tab. Supports --update-xlsx to add Annual Schedule tab to existing spreadsheet.