Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
6d31dd3
Scheduling: reminders and timed webhooks
pumfleet Nov 4, 2026
7f7c1e3
Merge main into the reminders branch
pumfleet Nov 4, 2026
3f1c442
Address Codex review (round 1)
pumfleet Nov 4, 2026
6829446
Give bookings from before this their started and ended webhooks
pumfleet Nov 4, 2026
15deca7
Address Codex review (round 2)
pumfleet Nov 4, 2026
0807fa5
Merge main into the reminders branch
pumfleet Nov 4, 2026
bbced3a
Address Codex review (round 3)
pumfleet Nov 4, 2026
37535d0
Address Codex review (round 4)
pumfleet Nov 4, 2026
4233073
Address Codex review (round 5)
pumfleet Nov 4, 2026
ed3cf17
Address Codex review (round 6)
pumfleet Nov 4, 2026
4f4abf0
Address Codex review (round 7)
pumfleet Nov 4, 2026
578781c
Address Codex review (round 8)
pumfleet Nov 4, 2026
98e5d8e
Address Codex review (round 9)
pumfleet Nov 4, 2026
49132bb
Merge remote-tracking branch 'origin/main' into worktree-reminders
pumfleet Nov 4, 2026
9c83f1c
Address Codex review (round 10)
pumfleet Nov 4, 2026
1358f47
Merge main into the reminders branch
pumfleet Nov 4, 2026
798e8e2
Merge main, and address Codex review (round 12)
pumfleet Nov 4, 2026
4e43b38
Merge main, and address Codex review (round 13)
pumfleet Nov 4, 2026
45faf63
Address Codex review (round 14)
pumfleet Nov 4, 2026
b5198b5
Keep the reminder variable pattern linear
pumfleet Nov 4, 2026
4fa366b
Merge remote-tracking branch 'origin/main' into worktree-reminders
pumfleet Nov 4, 2026
7a00fab
Address Codex review (round 16)
pumfleet Nov 4, 2026
6844387
Address Codex review (round 17)
pumfleet Nov 4, 2026
c9dc2f6
Merge main into the reminders branch
pumfleet Nov 4, 2026
5367a80
Merge main into the reminders branch
pumfleet Nov 4, 2026
b9e3d45
Merge main into the reminders branch, with Codex review (round 20)
pumfleet Nov 4, 2026
feacf25
Address Codex review (round 21)
pumfleet Nov 4, 2026
36daaf7
Merge remote-tracking branch 'origin/main' into worktree-reminders
pumfleet Nov 4, 2026
53587e4
Merge remote-tracking branch 'origin/main' into worktree-reminders
pumfleet Nov 4, 2026
3d66cb1
Address Codex review (round 22)
pumfleet Nov 4, 2026
d7ad67a
Merge remote-tracking branch 'origin/main' into worktree-reminders
pumfleet Nov 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/scheduling-reminders.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"coss": minor
"coss-mcp": minor
"coss-cli": minor
---

Scheduling reminders: `reminders` on `coss.scheduling.settings` and event types say what goes out around a booking, timed from its start, end or any change to it, to attendees, hosts, fixed addresses or a webhook, in your own words if you like. `coss.scheduling.bookings.notifications()` lists what was queued and why anything wasn't sent. New webhooks: `scheduling.booking.started`, `scheduling.booking.ended` and `scheduling.booking.reminder`. Hosts take a `phone`, event types take `notifications`, and settings take `email_reply_to`. The MCP server gets `get_scheduling_reminders`, `save_scheduling_reminders`, `list_scheduling_booking_notifications` and `mark_scheduling_no_show`, and the CLI `coss scheduling reminders`, `notifications` and `no-show`.
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -532,7 +532,7 @@ notification emails) and, if there is useful advice, to `ADVICE` (`packages/repu
across orgs like `authorizeLiveSender`), `receiveEmail`/`routeRecipients` (receiving; from the envelope recipients), `recordSmsEvent`/`ingestSmsEvents` (from the `sms_id` of the callback URL), `receiveSms` (from the receiving number), `handleStatusCallback`/`handleInboundCallback` (from the callback's subaccount), `authorizeLiveSmsSender`, `ingestDmarcReports` (from the report address's token), `reencryptWebhookSecrets`, `reencryptSchedulingData` (operator scripts), `authenticateHookPortalSession` (from the session), `ingestSupportEmails` (one environment, across senders) and the rest of `@coss/support`'s worker functions, `submitForm`/`getHostedForm` (from the form id of `/f/:id`), `confirmFormSubmission`/`findConfirmation` (from the verification token), and the worker scans `runDueWebhookDeliveries`, `runDueLogDrainDeliveries`, `runDueHookDeliveries`, `parkHeldHookDeliveries`, `runDueHookRecoveries`, the Hooks purges, `recheckDueDomains`,
`recheckDueTrackingDomains`, `recheckDueReceivingDomains`, `reconcileDedicatedIpPools`, `sweepStaleClaims`, `sweepUnclaimedEmails`, `runDueReputationEvaluations`, `runDueSubaccountEvaluations`, `runDueOrganizationDeletions`, `runDueOrganizationLogos`, `runDueSubaccountDeletions`, `runDueDmarcNotifications`, `runDueMigrations`, `EmailService.dispatchDue`,
`unclaimedEmailBacklog`, `unclaimedSmsBacklog` (the `dispatch-backlog` loop: counts only), `SmsService.dispatchDue`, `sweepStaleSmsClaims`, `sweepUnclaimedSms`, `advanceDueSmsRegistrations`, `chargeDueSmsFees`, `chargeDueInboxFees`, `chargeDueHostFees`, `recordDueVerifySmsUsage` (bills each organization for its codes from coss.com's shared numbers, reading coss.com's messages),
`authenticateSchedulingSession` (from the token), `handleCalendarPush`, `completeCalendarAuthorization` (from the push's channel and the consent's state), `runDueCalendarDelegations`, `handleZoomDeauthorization` (from Zoom's signed event), `refreshIdleZoomConnections`, `runDueCalendarSyncs`, `runDueCalendarWrites`, `renewDueCalendarChannels`, `checkHostEditedEvents`, `runDueSchedulingNotifications`, `expireDueBookings`,
`authenticateSchedulingSession` (from the token), `handleCalendarPush`, `completeCalendarAuthorization` (from the push's channel and the consent's state), `runDueCalendarDelegations`, `handleZoomDeauthorization` (from Zoom's signed event), `refreshIdleZoomConnections`, `runDueCalendarSyncs`, `runDueCalendarWrites`, `renewDueCalendarChannels`, `checkHostEditedEvents`, `runDueSchedulingNotifications`, `runDueReminderSyncs`, `expireDueBookings`,
`runDueFormDeliveries`, `runDueFormStoreCleanup`
(and the dispatch jobs, from the job's `organizationId`); `@coss/sms/admin` is platform-level like `@coss/email/admin`. Server actions take only slugs +
target ids and derive the org from `requireOrgPermission`; every Better Auth organization call passes `organizationId`
Expand Down Expand Up @@ -796,7 +796,7 @@ notification emails) and, if there is useful advice, to `ADVICE` (`packages/repu

**Not built yet** (don't assume these exist; delete a line when it ships): OAuth for the hosted MCP server (it takes an API key in a header) and `COSS_MCP_TOOLSETS` there,
these parts of Support: on-call paging (so 24x7 can't be sold yet), a holiday calendar, automatic SLA credits, a support role narrower than platform admin, satisfaction ratings, AI drafts, presence, iOS screens, a public API, MCP and CLI tools,
these parts of Scheduling: public booking pages, built-in payments, customers' own OAuth apps, routing forms, a workflow builder, waitlists, travel schedules, imports from Cal.com Platform,
these parts of Scheduling: public booking pages, built-in payments, customers' own OAuth apps, routing forms, a workflow builder, waitlists, travel schedules, imports from Cal.com Platform, reminders at a local time of day, reminder copy per locale, quiet hours, a built-in rating page, fixed SMS numbers as reminder recipients, sending a test reminder, undoing a no-show, a per-attendee opt-out of reminder emails, reminders in the iOS app,
these parts of calendar delegation: automatic Microsoft secret rotation, coss.com-owned or keyless (`signJwt`) service accounts, certificate credentials, account-level Zoom, excluding one host while `match_host_email` is on, and delegation in the iOS app, MCP and CLI,
customers granting staff temporary access in HIPAA mode,
Verify's voice and WhatsApp channels, locales other than English, custom message templates,
Expand Down
Loading
Loading