Most "AI scheduling assistant" demos cheat. They show a model that already knows the time, calls "create event" once, and takes a bow. That's not scheduling — that's data entry with a chat wrapper. Real scheduling is a negotiation: someone asks "are you free Tuesday?", you check, you counter with "Tuesday's full, how about Wednesday at 2?", they push back, and eventually two humans (or an agent and a human) converge on a slot nobody hates. It's a multi-turn conversation that happens to end in a calendar event.

I already wrote about giving your agent a calendar — provisioning a real mailbox, hosting events, RSVPing to invites. That post stops at the single create call. This one is about everything before that call: the back-and-forth where the time gets decided. The create event is the last line of the story, not the whole plot.

The vehicle is a Nylas Agent Account. It's a grant with its own email address and its own calendar, so it can be an actual participant in the negotiation instead of a bot reading over a human's shoulder. I work on the Nylas CLI, so the terminal commands below are the exact ones I reach for when I'm prototyping one of these loops.

One thing I'll call out up front, because it's the most common wrong turn: Scheduler is not available for Agent Accounts. No availability-configuration API, no booking pages, no /v3/scheduling/*. That's documented in Supported endpoints. So if your instinct is "just point it at Scheduler," stop — that door is locked for this provider. What you do have is the grant's own free/busy plus the Events API, and that's enough to build the whole negotiation yourself. This post shows how.