Calendar Markdown + Google Sync Skill
Use this skill to query/update the local markdown-backed calendar safely and sync it with Google Calendar.
Source of Truth
- File:
calendar.md - Authoritative section:
## Event Records(fencedeventYAML blocks) - Human summary section:
## Event Checklist
Event Identity Rules
id: local identifierexternalId: stable cross-system identifier used for dedupegoogleEventIds: per-calendar Google event mappingupdatedAt: event-level timestamp for conflict resolution
Do not remove externalId from existing records.
Preferred Interface
Use CLI from repo root:
npm run cli -- <command>
Safe Query Flow
- Run
npm run cli -- summary. - If raw markdown is needed, run
npm run cli -- export.
Safe Update Flow
- Add (preferred for new events):
npm run cli -- add --title "..." --start "<ISO>" --end "<ISO>" --category <id> [--shift-to-next|--allow-overlap] - Update:
npm run cli -- update --id <event_id> [fields...]If changing--startor--end, include--shift-to-nextor--allow-overlapin non-interactive runs. - Check/uncheck:
npm run cli -- check --id <event_id>or--undone - Delete:
npm run cli -- delete --id <event_id> - Add category:
npm run cli -- category-add --id <id> --label "Label" --color "#9ca3af" --description "..." - Remove category:
npm run cli -- category-remove --id <id> --reassign <id>
Conflict handling:
addand time-changingupdatedetect overlaps with existing events.- Interactive runs can choose accept overlap, shift to next available slot, or provide a custom time.
- Non-interactive runs:
--shift-to-nextto auto-resolve to the next open window.--allow-overlapto keep the requested overlapping time.
Agent snapshot output:
- Every mutating CLI command writes a rolling markdown snapshot.
- Default path:
./agent-snapshot.md - Override with
CALENDAR_AGENT_SNAPSHOT. - Recent window defaults to 14 days and is configurable with
CALENDAR_AGENT_DAYS. - Snapshot also includes upcoming 7 days when events exist.
UI Constraints
- UI does not provide add-event form/button.
- Events are created via CLI agents only.
- UI still supports drag/drop, resize, and check-off.
Google Sync Flow
- In UI, sign in with Google.
- Select target calendar via calendar selector controls.
- Click Sync Now for two-way merge.
Sync state file:
.calendar-google-sync-state.json
Import/Export
- Export:
npm run cli -- export --out backup-calendar.md - Import:
npm run cli -- import --in backup-calendar.md
Notes for Agents
- Keep datetimes in ISO format.
- Prefer CLI operations over manual markdown edits.
- If categories are changed manually in frontmatter, keep
id,label, andcolorfields valid.
Environment Variables
This skill uses the following environment variables (defined in .env):
-
Google Calendar Sync (Optional)
GOOGLE_CLIENT_ID: Google OAuth Client IDGOOGLE_CLIENT_SECRET: Google OAuth Client SecretGOOGLE_REDIRECT_URI: Should behttp://localhost:<PORT>/api/google/auth/callback
-
Agent Configuration (Optional)
CALENDAR_AGENT_SNAPSHOT: Custom absolute or relative path to write the Markdown snapshot. Defaults to./agent-snapshot.md.CALENDAR_AGENT_DAYS: Number of historical days to include in the snapshot (defaults to 14).PORT: API server port (defaults to 8787).APP_BASE_URL: Base URL for the frontend UI.