Find conflict-free time and place one or more events — the easiest way to book work without computing slots yourself. (If you already know both an exact start AND end, use write_events create instead.) YOU resolve any relative phrasing ("tomorrow", "next monday", "this afternoon") into the structured fields; this tool does no date parsing. Pass `requests`, each with a `name`, an integer `durationMinutes` (e.g. 90), and EITHER an exact `start` (local "YYYY-MM-DDTHH:MM") to place there, OR an `earliest` + `latest` window (local datetimes, at most 24 hours; it may cross midnight) to search within (map "tomorrow afternoon" → earliest "<date>T13:00", latest "<date>T18:00"; "tomorrow" → "<date>T08:00" to "<date>T22:00"). A request with both `start` and a window is rejected. For each request: a free exact `start` is created immediately (the row `result` has the `event`). A window request returns ranked `options` (each a `start`/`end` span, also when only one fits) and a `commitToken` that expires at `expiresAt` — call confirm_schedule to pick one. Only `autoCommitBest: true` on a window request books the top pick in one shot and skips that round-trip. Requests are placed in order and kept off each other's committed slots. Each request may carry a `requestId` so retries don't double-book. Areas and activity types are attached by id only. If the user has a Google Calendar connected with a default sync calendar, a scheduled event is also pushed to Google, the same as a dial create. The response reports per-request `results` (each with its 0-based `index`) and, when something was booked, one `undoToken` that reverts it.
ConnectorOAuth