{"slug": "agentic-scheduling-apple-calendar-apple-reminders-claude-agent", "title": "Agentic Scheduling = Apple Calendar + Apple Reminders + Claude Agent", "summary": "Agentic Scheduling, a self-hostable scheduling platform from developer hunterZh37, integrates Apple Calendar, Apple Reminders, and a Claude agent to sync Google and Outlook calendars, offer a booking page with only open slots, and allow control via web or WhatsApp. The system merges free/busy from multiple accounts, revalidates availability at booking time, and sends reminders via email and WhatsApp, with a Chrome extension overlaying real availability on Calendly pages.", "body_md": "**Your calendar, run by an AI agent you can text.**\n\nA self-hostable, single-owner scheduling platform. It syncs your Google and Outlook calendars, gives visitors a booking page that shows only your open slots, and puts a Claude agent in charge, controllable from the web or WhatsApp.\n\n*Demo: a visitor asks the assistant for open times, then the Chrome extension overlays\nyour own free/busy on someone else's Calendly page.\n( full-quality video)*\n\n*The public booking page. Visitors pick a length and a day.*\n\n*Picking a day opens the open times. Every slot shown is genuinely free across all\nconnected calendars.*\n\n*The same page, agent mode. Visitors ask in plain language and the assistant answers\nfrom live availability. It can also book the chosen slot.*\n\n*The Chrome extension on someone else's Calendly page (Calendly's public demo). Every\nslot is badged with your own free/busy, pulled live from your deployment, so you never\nbook yourself into a conflict.*\n\n*The same booking flow on a phone.*\n\n*Reminders on both channels. Left: the confirmation and reminder email an attendee\nreceives. Right: the WhatsApp messages the owner receives, a booking alert the moment\nsomeone books and a reminder before the meeting. Rendered from the real templates with\nsample data.*\n\nConnect any number of Google and Outlook accounts (seven calendars, one place). The availability engine merges their free/busy into one view, the booking page offers only real openings, and confirmed bookings are written back to the calendar you choose.\n\n```\n%%{init: {\"themeVariables\": {\"fontSize\": \"12px\"}}}%%\nflowchart TB\n    subgraph cal[\"Your calendars, any number\"]\n        direction LR\n        G1[\"Google 1\"]\n        G2[\"Google 2\"]\n        G3[\"Google N\"]\n        O1[\"Outlook 1\"]\n        O2[\"Outlook N\"]\n    end\n    cal --> AGG[\"Free/busy aggregation<br>merged in UTC\"]\n    AGG --> AV[\"Availability engine<br>open slots, revalidated at booking time\"]\n    AV --> BP[\"Public booking page\"]\n    AV --> AG[\"Claude agent\"]\n    AG --> WA[\"WhatsApp<br>control, alerts, reminders\"]\n    AG --> EM[\"Email<br>confirmations, reminders\"]\n    BP --> DEST[\"Destination calendar<br>event and invite written back\"]\n```\n\n**Calendar sync across providers.** Aggregates free/busy from any number of Google and Microsoft (Outlook) accounts, each connected by OAuth. Bookings are written to the calendar you designate.**A booking page that only offers real openings.** An agent continuously checks your merged calendars for open slots. Availability is revalidated at booking time, so a slot that was just taken cannot be double-booked.**WhatsApp direct communication.** Text the agent to create, move, or cancel events, check availability, or set reminders. New bookings, cancellations, and reschedules are pushed to you on WhatsApp and email the moment they happen.**Reminder emails and WhatsApp reminders.** Attendees and the owner get meeting reminders over email and approved WhatsApp templates. A claim/dead-letter worker retries failed sends instead of dropping them.**Ask-the-assistant on the booking page.** Visitors can chat with a public agent to find a time. It is handed exactly two scope-fenced tools. The private tools are never constructed for it, so safety comes from architecture, not from prompts.**Daily morning brief.** A DST-safe WhatsApp summary of the day's meetings and tasks.**Self-serve reschedule and cancel.** Every confirmation carries a signed link the attendee can use without an account.**Chrome extension.** Overlays your real availability on other people's Calendly pages.\n\nBooking, agents, reminders, and calendar extras (personal blocks, birthdays,\nfollow-ups) are plain JSON APIs under `src/app/api/`\n\n, so you can reuse them from any\nclient.\n\n**Agent-to-agent scheduling.** A visitor's agent and your agent negotiate a meeting time over a shared protocol and book the result.\n\n```\ngit clone https://github.com/hunterZh37/agentic-scheduling.git && cd agentic-scheduling\nnpm install\ncp .env.example .env        # defaults work out of the box\ndocker compose up -d        # local Postgres\nnpx prisma migrate dev && npx prisma db seed\nnpm run dev                 # http://localhost:3000\n```\n\nThe app boots fully on placeholder config, so you can click through the UI before\nconnecting anything real. When you are ready to go live,\n[docs/SETUP.md](/hunterZh37/agentic-scheduling/blob/main/docs/SETUP.md) walks through each credential (Google, Microsoft,\nAnthropic, Twilio, Resend) one at a time, in any order.\n\nAll identity comes from environment variables: owner name, email, timezone, phone\nnumbers, and calendar credentials (see [ .env.example](/hunterZh37/agentic-scheduling/blob/main/.env.example)). The one file\nwith brand defaults baked in is\n\n[(practice name, domain, consulting areas, research link). Edit it when deploying your own instance.](/hunterZh37/agentic-scheduling/blob/main/src/lib/booking/publicConfig.ts)\n\n`src/lib/booking/publicConfig.ts`\n\nEverything is environment variables (see [ .env.example](/hunterZh37/agentic-scheduling/blob/main/.env.example)). No personal\ndata is hardcoded.\n\n[docs/SETUP.md](/hunterZh37/agentic-scheduling/blob/main/docs/SETUP.md): credentials, mapped to each env var[docs/DEPLOY.md](/hunterZh37/agentic-scheduling/blob/main/docs/DEPLOY.md): deploying to Vercel[docs/SMS.md](/hunterZh37/agentic-scheduling/blob/main/docs/SMS.md): the WhatsApp/SMS control channel[docs/MORNING_BRIEF.md](/hunterZh37/agentic-scheduling/blob/main/docs/MORNING_BRIEF.md): the daily WhatsApp brief\n\nNext.js (App Router), React 19, and TypeScript on Vercel. Postgres via Prisma. Claude tool-calling for the agents. Twilio for SMS/WhatsApp, Resend for email, VAPID for web push. Luxon and rrule for time and recurrence. Vitest for tests.\n\nIssues and PRs welcome. Run `npm test`\n\nand `npm run lint`\n\nbefore submitting.\n\n[MIT](/hunterZh37/agentic-scheduling/blob/main/LICENSE) © Ze Dong (Hunter) Zhang", "url": "https://wpnews.pro/news/agentic-scheduling-apple-calendar-apple-reminders-claude-agent", "canonical_source": "https://github.com/hunterZh37/agentic-scheduling", "published_at": "2026-08-13 22:00:59+00:00", "updated_at": "2026-08-13 22:12:20.915960+00:00", "lang": "en", "topics": ["ai-agents", "ai-products", "ai-tools"], "entities": ["Apple Calendar", "Apple Reminders", "Claude", "Google", "Outlook", "WhatsApp", "Calendly", "hunterZh37"], "alternates": {"html": "https://wpnews.pro/news/agentic-scheduling-apple-calendar-apple-reminders-claude-agent", "markdown": "https://wpnews.pro/news/agentic-scheduling-apple-calendar-apple-reminders-claude-agent.md", "text": "https://wpnews.pro/news/agentic-scheduling-apple-calendar-apple-reminders-claude-agent.txt", "jsonld": "https://wpnews.pro/news/agentic-scheduling-apple-calendar-apple-reminders-claude-agent.jsonld"}}