AI agents and developer architecture

    How to Build an AI Scheduling Agent That Actually Books Group Meetings

    By Tevye Krynski14 min read

    Most AI assistants can draft a polite scheduling email. That is not scheduling execution. A real AI scheduling agent has to preserve intent, coordinate required and optional people across companies, read the calendars it can reach, collect the availability it cannot, commit one slot once, and prove that every invitation landed. This guide turns that job into an implementation contract.

    The eight-part AI scheduling agent architecture

    Build the coordination path before you pick a model or calendar provider. The agent needs a durable meeting record, deterministic policy, provider adapters, participant messaging, and a commit boundary. Natural-language reasoning sits around that system. It should not replace it.

    1. 1

      Translate the instruction into a meeting-intent record

      Start with a typed record, not a prompt transcript. Store an organizer, duration, date window, preferred windows, excluded windows, meeting time zone, location or video requirement, booking deadline, and an explicit authorization mode. Split attendees into required and optional. Give the record a stable meeting_request_id before the first calendar call or participant message.
      • Reject an empty required-participant list.
      • Ask for clarification when duration, date window, or organizer authority is missing.
      • Preserve the original instruction for audit, but run the workflow from typed fields.
    2. 2

      Normalize identity, locale, and time zones

      Resolve each participant to an email address or approved conversational identity. Store an IANA time-zone name when known and keep API timestamps in an RFC 3339 form. Never treat a numeric UTC offset as a permanent time zone; daylight-saving transitions will eventually make the agent wrong. Mark unknown locale or working hours as missing data rather than inventing them.
      • Keep the organizer’s stated time zone separate from each participant’s display zone.
      • Record the source of every identity and time-zone value.
      • Recompute candidate slots when a participant corrects their zone or working hours.
    3. 3

      Resolve access and consent per participant

      For each person, decide whether the agent can read connected free/busy, must request availability, or must stop for approval. Ask only for the calendar permission needed by the job. Google Calendar exposes a free/busy query, and Microsoft Graph exposes getSchedule; neither requires copying private event titles into the scheduling record. Consent is a state transition, not a checkbox hidden in onboarding.
      • Keep private event details out of logs and model context.
      • Store access decisions separately for Google, Microsoft, and conversational fallback.
      • Give participants a path to decline, correct, or revoke access.
    4. 4

      Fetch connected free/busy through provider adapters

      Use one internal availability shape even though Google and Microsoft return different payloads. Convert busy intervals into a canonical time line, attach provider and retrieval time, and keep provider errors with the participant record. A partial provider response is not an empty calendar. It is incomplete evidence and must not create a false open slot.
      • Bound the query window and duration before calling providers.
      • Cache only inside a short, explicit freshness window.
      • Treat throttling, expired credentials, and permission denial as different recovery cases.
    5. 5

      Collect missing availability conversationally

      Calendar sync should improve the path, not become an admission ticket. If a participant is not connected, send a plain request that names the meeting, duration, date window, organizer, time zone, and response deadline. Parse replies into the same canonical availability shape used for API data. When an answer is ambiguous—‘Tuesday afternoon’ with no zone—the agent asks one narrow follow-up instead of guessing.
      • Use an approved channel and retain a consent record for outreach.
      • Cap reminders and expose an opt-out.
      • Escalate silence from a required participant; do not silently treat them as optional.
    6. 6

      Generate candidates with quorum and policy rules

      Intersect all required availability first. Then score candidates against optional attendance, organizer preferences, working hours, notice period, buffers, and the booking deadline. Keep the rejection reason for every discarded slot. That explanation is what lets an operator understand why the agent picked Wednesday at 2:00 rather than Tuesday at 11:00.
      • Never trade away a required participant to improve an optional-attendance score.
      • Apply policy before model preference.
      • Return no-overlap with the smallest useful constraint set for recovery.
    7. 7

      Commit once with an idempotency boundary

      Re-check fresh free/busy immediately before writing. Derive an idempotency key from the meeting request, selected slot, and booking revision. Write one organizer event, send updates through the calendar provider, and store provider event identifiers before acknowledging success. A retry after a timeout must read the prior commit result before attempting another insert.
      • Make repeated commit calls return the same booking result.
      • Use optimistic versioning when a reschedule races the original booking.
      • Keep soft holds separate from the final invitation record.
    8. 8

      Verify completion and expose recovery

      A successful HTTP response is not enough. Verify the canonical event identifiers, invitation state, required attendees, start and end timestamps, and the organizer’s calendar. Emit state changes such as availability_waiting, candidate_ready, commit_started, confirmed, and needs_review. Every terminal failure needs a reason, the last safe checkpoint, and a next action.
      • Trace provider calls and participant messages by meeting request ID.
      • Alert on stuck states and duplicate-commit attempts.
      • Keep a human approval lane for sensitive meetings and unresolved exceptions.

    Use a state machine, not one long agent turn

    Calendar work crosses slow external systems. A required participant may answer tomorrow. A Microsoft token may expire after the Google free/busy query succeeds. A webhook may arrive twice. One long model turn cannot hold those facts safely. Persist state after every side effect and let a worker resume from the last confirmed checkpoint.

    A practical state sequence is draft → needs_clarification → resolving_participants → collecting_availability → candidate_ready → awaiting_approval → committing → confirmed. Add explicit branches for declined, expired, no-overlap, provider-error, and needs-review. The names matter less than the rule: no state may imply a side effect that the system has not verified.

    • Commands request a change; events record what happened.
    • Provider adapters return typed errors rather than prose.
    • Participant replies update availability without rewriting the original instruction.
    • A reschedule creates a new revision under the same meeting request.

    A meeting-intent schema your agent can defend

    The smallest useful contract includes meeting_request_id, organizer, required_participants, optional_participants, duration_minutes, window_start, window_end, meeting_timezone, preferences, exclusions, booking_deadline, approval_mode, and revision. Add channel preferences and consent references when the agent may contact participants.

    Do not hide uncertainty inside strings. A participant time zone can be known, inferred_needs_confirmation, or unknown. Calendar access can be connected, outreach_allowed, outreach_blocked, or declined. A candidate slot can carry the exact required overlap, optional attendance score, preference score, and freshness timestamp used to select it.

    Scheduling execution is a different product boundary

    A booking link publishes host-side slots and asks a guest to choose. A poll collects votes and leaves someone to close the loop. A calendar-sync utility copies or exposes availability but does not own participant follow-up, candidate selection, and invitation verification. An AI assistant that drafts outreach reduces typing but hands the state machine back to a person.

    Scheduling execution owns the whole instruction-to-booking path. It knows who is required, gathers missing evidence, resolves conflicts, performs one controlled commit, and returns a confirmed result or a bounded exception. That boundary is harder. It is also the only boundary that lets an agent truthfully say, ‘The meeting is booked.’

    Where WonderCal fits in the architecture

    WonderCal’s product direction is the scheduling execution layer beneath an agent you already own. The agent keeps the conversation and user relationship. WonderCal is intended to handle the hard meeting record, cross-company participant coordination, connected Google and Microsoft free/busy, conversational fallback for missing calendars, overlap, invitations, and result reporting.

    That is a target architecture, not permission to skip due diligence. Before committing a production workflow, ask for the live API or MCP surface, supported participant channels, authorization model, idempotency behavior, webhook contract, error taxonomy, data-retention policy, observability fields, and proof of completed bookings across Google and Microsoft tenants. The answers should map directly to the eight steps above.

    Four approaches to agent-driven group scheduling

    The fastest demo is rarely the shortest path to a dependable booking. Compare approaches at the completion boundary, not at the first calendar query.

    Execution completion

    Calendar API calls

    Reads or writes calendars, but your application still owns participants, state, slot choice, invitations, and verification.

    Agent plus link or poll

    The agent can send the surface, but a participant or coordinator still drives selection and closure.

    WonderCal execution direction

    Intended to accept the meeting brief and return a confirmed booking or a bounded exception.

    Cross-company reach

    Calendar API calls

    Every tenant, provider, credential, and guest path becomes your adapter and support burden.

    Agent plus link or poll

    Works when everyone can open and act on the same link; external availability remains self-reported.

    WonderCal execution direction

    Designed for required and optional people across fragmented Google and Microsoft calendars and company lines.

    Optional-sync fallback

    Calendar API calls

    You must build outreach, reply parsing, reminders, consent, and ambiguity handling.

    Agent plus link or poll

    The link or poll is the fallback, but it also hands the work to participants and may stop the agent’s flow.

    WonderCal execution direction

    Product direction combines connected free/busy with conversational collection when a calendar is missing.

    Retries and observability

    Calendar API calls

    Full control, with full responsibility for idempotency, traces, stuck-state alerts, and recovery tooling.

    Agent plus link or poll

    You can observe delivery of the link, not the full meeting state across every participant and provider.

    WonderCal execution direction

    Evaluate the live release against meeting-level state, idempotent commit, provider errors, webhooks, and operator recovery.

    Consent and control

    Calendar API calls

    You design scopes, outreach permission, approvals, retention, and revocation from the ground up.

    Agent plus link or poll

    Participants control their own response, but the organizer often lacks one auditable execution record.

    WonderCal execution direction

    The target model keeps free/busy private, supports human review, and records connected versus conversational paths.

    Time to ship

    Calendar API calls

    A first API call is quick; a recoverable multi-provider coordination system becomes a separate product roadmap.

    Agent plus link or poll

    Fast to launch, but it does not meet a requirement for agent-owned completion.

    WonderCal execution direction

    The value case depends on the public release proving the hard coordination and recovery path you would otherwise build.

    Frequently asked questions

    What is an AI scheduling agent?

    An AI scheduling agent turns a meeting instruction into a completed or explicitly escalated result. It identifies required and optional participants, reads connected free/busy, collects missing availability, finds overlap, commits one event, sends invitations, and verifies the final state. An assistant that only drafts an email or sends a booking link is not completing that job.

    Can an AI scheduling agent work without every calendar connected?

    Yes, if the architecture includes a consent-safe conversational fallback. Connected calendars provide fresher free/busy evidence. An unconnected participant can instead share availability through an approved message or private response flow. Both paths must produce the same typed availability record, with source and freshness attached.

    Why does group scheduling need idempotency?

    Calendar providers, webhooks, workers, and networks can retry. Without an idempotency boundary, one timeout can produce two events or two rounds of invitations. Use a stable meeting request ID, a booking revision, and a commit key; read the prior result before repeating any calendar write.

    Should the language model choose the meeting time?

    The model can interpret preferences and explain tradeoffs. Deterministic code should enforce required attendance, working hours, buffers, consent, freshness, and commit rules. Policy first. Model judgment second. Human review remains available for sensitive exceptions.

    Is WonderCal’s AI scheduling API public now?

    WonderCal is targeting an agent-facing MCP/API release for September 1, 2026. Treat endpoint and tool details as future until they are documented and available. Check the WonderCal for AI agents page for the current access path and validate the live contract before making a production commitment.

    Primary sources

    Related WonderCal reading

    Give your agent a completion boundary

    Bring WonderCal the hard group-scheduling use case you need to ship. Evaluate the live agent-facing path against participants, optional calendar sync, recovery, observability, and the final confirmed invitation—not the first API call.

    Explore WonderCal for AI agents