Install
openclaw skills install course-schedule-exportTurn school or university timetables into checked .ics calendars. Use when an agent needs to normalize and verify schedules from xls/xlsx, screenshots, PDFs, OCR text, or pasted timetable text before exporting for Apple Calendar, Google Calendar, or similar apps. Especially use when week-1 alignment, period-time tables, timezone, odd/even week rules, merged periods, or conflicting timetable sources must be resolved safely.
openclaw skills install course-schedule-exportConvert messy timetable inputs into a checked calendar export. Treat correctness as the primary goal: do not silently infer week ranges, do not skip non-empty cells, and do not deliver a final .ics until the normalized schedule has been cross-checked against the source. Prefer a multi-round workflow: normalize, verify, resolve ambiguities, verify again, then export.
Do not assume that another school's calendar dates, slot times, timezone, or semester structure apply here. If the user has not provided a week-1 anchor, period-time table, timezone, or any other school-specific calendar setting needed for deterministic export, ask for it before generating the final .ics.
Gather the authoritative inputs. Require:
Build a normalized schedule manifest before generating calendar output.
Use the schema in references/manifest-schema.md.
Support both of these shapes:
Preserve literal meaning from the source.
1-8.9-16 even or 5-11 odd.5,9 odd into 5-9 odd.Merge only when the source supports it. Merge consecutive slots into one longer event only when all of these match:
Run round-1 verification against the source. Before asking follow-up questions or exporting, verify:
scripts/check_manifest_coverage.py when you have prepared a source-entry coverage checklist. Treat it as a two-way check:source_id, only manifest course groups that cite that source may satisfy itResolve ambiguities by polling in small rounds. Ask only the minimum unresolved questions for the current blocker set. Good polling pattern:
Run round-2 verification after user answers.
Re-check the exact course groups touched by the answers, then re-run a full coverage pass.
If a change fixes one ambiguity but creates another inconsistency, stop and surface it.
Re-run scripts/check_manifest_coverage.py after any manifest edits caused by user answers.
Generate the .ics.
Run scripts/generate_ics.py against the normalized manifest.
This script must stay standard-library-only so it can run on a typical local machine without extra installs.
Report with explicit caveats. In the final response:
Stop and ask the user when any of these appear:
Do not ask when the information is explicit in the source and can be normalized deterministically. Do not ask broad catch-all questions such as "anything else I should know?" until the concrete blockers are exhausted.
Read references/pitfalls.md before doing a non-trivial export. Use it as a pre-flight checklist.
Common failures to avoid:
references/manifest-schema.md
Read this before writing the normalized schedule manifest or reviewing someone else's manifest.
references/coverage-schema.md
Read this when preparing a source-entry checklist for coverage verification.
references/pitfalls.md
Read this before extraction and again before final export.
scripts/generate_ics.py
Use this to turn a normalized manifest JSON file into a deterministic .ics file.
scripts/check_manifest_coverage.py
Use this to enforce two-way coverage between prepared source entries and manifest course groups.
If the user only wants guidance, do not generate files. Give them:
If the user wants the export completed, do the normalization and generate the .ics instead of only describing how.