# Find School Calendar

> Find and save a school's academic year calendar. Searches the web for official calendar, formats key dates in markdown, and saves to user_docs/school/calendar/. Usage: /find-school-calendar [school name]

- Skill: `weizhengzhou/find-school-calendar` (Agent Skill)
- Install (CLI): `npx skillmds@latest add weizhengzhou/find-school-calendar`
- Raw SKILL.md: https://api.skillmd.com/api/skills/weizhengzhou/find-school-calendar/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: WeizhengZhou (https://skillmd.com/u/weizhengzhou)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/weizhengzhou/find-school-calendar

---


You are a school calendar assistant. Given a school name, find its official academic calendar, extract all key dates, and save a clean markdown file the parent can refer to later.

## Step 1: Resolve school name

If `school name` was passed as an argument, use it directly.

Otherwise, look for kid profiles in `user_docs/kid_profile/`:
```
Glob: user_docs/kid_profile/*.md
```
Read each profile's frontmatter for a `school:` field. If exactly one school is found, use it. If multiple, list them and ask which one.

If no profiles exist and no arg was given, ask:
> "Which school should I look up? (e.g. Sacred Heart School, Atherton CA)"

## Step 2: Determine the school year

Default to the current academic year (July–June spanning today's date).
Example: if today is 2026-03-31, the year is 2025-26.

## Step 3: Search for the calendar

Run a web search for the official calendar page:

Search queries to try in order:
1. `"[school name]" academic calendar [year] site:[school-domain-if-known]`
2. `"[school name]" "[year]-[year+1]" school year calendar`
3. `"[school name]" holiday schedule [year]`

Prefer results from:
- The school's own domain (`.org`, `.edu`, or known domain from kid profile)
- Results with "academic calendar", "school year calendar", or "2025-26" in the title

Avoid generic aggregator sites (niche.com, greatschools.org) — these rarely have day-by-day calendars.

## Step 4: Fetch and extract the calendar

Fetch the top 1–2 candidate URLs. Extract:

| Category | What to capture |
|----------|----------------|
| **School breaks / holidays** | Name, start date, end date, return date |
| **Early dismissals** | Date, dismissal time |
| **No-school days** | Date, reason (staff dev, holiday, etc.) |
| **Key events** | First/last day of school, report card dates, standardized testing windows |
| **Parent events** | Back-to-school night, open house, parent-teacher conferences |
| **Assemblies / spirit days** | If listed in the calendar |

If the calendar is only available as a PDF, use WebFetch on the PDF URL — Claude can read PDFs.

If multiple grade-level calendars exist (e.g., Lower School vs Middle School), focus on the grade matching the child's profile. Note if calendars differ.

## Step 5: Format the output

```markdown
---
school: [Full School Name]
school_year: [YYYY-YY]
source_url: [URL where calendar was found]
fetched: [YYYY-MM-DD]
grade_focus: [grade/division if filtered, e.g. "Lower School (K-5)"]
---

# [School Name] — Academic Calendar [YYYY-YY]

> Source: [URL] | Fetched [date]
> Note any caveats (e.g., "calendar may be updated — verify on school website")

---

## School Year Overview

| | Date |
|-|------|
| First day of school | [date] |
| Last day of school | [date] |
| Total school days | [N if listed] |

---

## Breaks & Holidays

| Break | From | To | Return |
|-------|------|----|--------|
| Fall Break | Oct 13 | Oct 17 | Oct 20 |
| Thanksgiving Break | Nov 25 | Nov 28 | Dec 1 |
| Winter Break | Dec 22 | Jan 2 | Jan 5 |
| MLK Day | Jan 19 | — | Jan 20 |
| Spring Break | Mar 30 | Apr 6 | Apr 7 |
| Memorial Day | May 25 | — | May 26 |

---

## Early Dismissal Days

| Date | Day | Time | Reason |
|------|-----|------|--------|
| Mar 27 | Fri | 11:45am | Half Day |
| ... | | | |

---

## No-School Days (Staff Development / Other)

| Date | Day | Reason |
|------|-----|--------|
| ... | | |

---

## Key Academic Dates

| Date | Event |
|------|-------|
| [date] | First day of school |
| [date] | Progress reports issued |
| [date] | Report cards issued |
| [date] | Standardized testing window |
| [date] | Last day of school |

---

## Parent & Community Events

| Date | Event | Notes |
|------|-------|-------|
| Apr 30 | Parent-Teacher Conferences | Sign-up opens Apr 13 |
| May 1 | Parent-Teacher Conferences | No school for students |
| May 8 | AAPI Cultural Festival | 4–6pm, Conway Court |

---

## Upcoming (next 30 days from fetch date)

Pull out and highlight events within 30 days of the fetch date for quick reference.

| Date | Event |
|------|-------|
| Apr 7 | Classes resume |
| Apr 8 | Easter Mass assembly — formal uniform required |
| Apr 10 | Gator Gear Day |
```

## Step 6: Save the file

Save to:
```
user_docs/school/calendar/YYYYMMDD_[school-slug]-[YYYY-YY].md
```

Where the date prefix is today's date (fetch date), and `school-slug` is the school name
lowercased with spaces replaced by hyphens:
- "Sacred Heart School" → `shs` (common abbreviation) or `sacred-heart-school`
- "Menlo Park City School District" → `menlo-park-csd`

Example: `user_docs/school/calendar/20260331_shs_calendar_2025-26.md`

Create the directory if it doesn't exist.

After saving, tell the user:
- The file path
- How many events were found
- Any caveats (e.g., calendar only goes through semester 1, or PDF was hard to parse)
- Whether any events in the next 30 days were flagged

## Step 7: Update kid profile (optional)

If a kid profile exists for this school, add or update a `calendar_file:` field in the frontmatter pointing to the saved file. This lets other skills (like `/weekly-digest`) find the calendar automatically.

```yaml
calendar_file: user_docs/school/calendar/20260331_shs_calendar_2025-26.md
```

---

## Failure handling

| Problem | Action |
|---------|--------|
| No calendar found via search | Ask user for the URL directly; paste it or provide the school portal login |
| Calendar is login-gated | Use `/browser-automate` to fetch after authentication, or ask user to paste the calendar text |
| Only a PDF exists | Fetch PDF with WebFetch; extract dates from text; note source is PDF in frontmatter |
| Calendar is partial (one semester) | Save what's available, note `partial: true` in frontmatter, list what's missing |

---

## Output path reference

```
user_docs/
└── school/
    ├── newsletter/               ← weekly newsletters (created by reading email)
    │   ├── 20260324_schoolwide.md
    │   └── 20260401_1stgrade.md
    └── calendar/                 ← annual calendars (created by this skill)
        └── 20260331_shs_calendar_2025-26.md
```

## File naming convention

All dated files in `user_docs/` follow `YYYYMMDD_<descriptive-name>.md`.
Config/living docs (profiles, config, READMEs) have no date prefix.

