Find meeting times
find_timesFind three meeting times on the host's calendar. Returns 3 slots labeled "1"/"2"/"3" chronologically, each with a pre-formatted rationale; nothing is held yet — propose_meeting places the holds. co_host_emails is for WORKSPACE MEMBERS only, never the invitee (use invitee_timezone); a non-member matching a known contact is dropped (dropped_co_hosts) — relay it. starts_at/ends_at are OPAQUE identifiers: never convert them or do timezone math; quote the rationale verbatim and refer to slots by label. Confirmed times are final: never call find_times again to validate, swap, commit or re-render them (propose_meeting rechecks availability before placing holds); search again only if the user asks for different times or a real conflict is returned. Once times are chosen, confirm topic and agenda once, then call propose_meeting. Modes: FRESH (duration + window); SWAP (current_slots + propose_label) re-picks ONE slot — wait for a yes; COMMIT (current_slots only) finalizes labels. On hosts that render cards reply in one or two sentences, don't list the slots; without a card, list them as bullets from each rationale. Busy overrides, shortfalls, card wording, signed_in_as: capable://guide/scheduling.
When to use: First step of booking a meeting: three labeled candidate slots with pre-formatted local times, nothing held yet. Narrow per call ("mornings only"); swap or commit slots with the same tool.
Example: Find three times for a 30-minute call with Sara next week — mornings only.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| window_end | Yes | ISO 8601 end of the search window. | |
| duration_min | Yes | Meeting duration in minutes (30, 45, 60, or 90). | |
| window_start | Yes | ISO 8601 start of the search window. | |
| current_slots | No | The 3 currently-committed slots with their labels. Pass with propose_label to swap one, or ALONE to commit a previously-accepted swap. Use the exact starts_at/ends_at values the previous call returned — never reformat them. | |
| propose_label | No | Which committed slot to re-pick (requires current_slots). Narrow window_start/window_end to the user's hint ("Friday morning" → that day 9–12). Do NOT use this to commit — committing is a separate call with current_slots only. | |
| co_host_emails | No | Emails of WORKSPACE MEMBERS who should also attend — everyone's calendars are intersected so the returned slots work for all hosts. WORKSPACE MEMBERS ONLY — never the external invitee: the invitee's availability is unknown by design (that's why you propose three times). If you know the invitee's timezone, pass invitee_timezone instead. | |
| invitee_timezone | No | IANA timezone of the invitee (e.g. "Europe/Berlin"). When set, every candidate must also fall inside 9–17 Mon–Fri in the invitee's local time. Translate from whatever the user says — a city ("Berlin" → "Europe/Berlin"), a country, an offset — and never infer it from an email domain. Omit when it doesn't matter. | |
| target_starts_at | No | Exact ISO start for the swap's new candidate (requires current_slots + propose_label). Validated against every constraint; on failure proposed_slot.new is null and target_failure_reason names why — it is never silently substituted. | |
| workday_end_hour | No | Latest acceptable hour of day, interpreted in each host's own timezone. When omitted, every host's saved availability end hour applies (default 17). Same rule as workday_start_hour: only for momentary narrowing ("mornings only" → 12). | |
| workday_start_hour | No | Earliest acceptable hour of day, interpreted in each host's own timezone. When omitted, every host's saved availability start hour applies (default 9). Pass explicitly ONLY when the user narrows the moment ("book mornings only", "after 2pm" → 14) — it overrides the saved hours for THIS search only and is never persisted. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| note | No | ||
| hosts | No | ||
| slots | No | ||
| events | No | ||
| shortfall | No | ||
| timed_out | No | ||
| duration_min | No | ||
| signed_in_as | No | ||
| host_timezone | No | ||
| proposed_slot | No | ||
| co_host_notice | No | ||
| dropped_co_hosts | No | ||
| invitee_timezone | No | ||
| workday_end_hour | No | ||
| workday_start_hour | No | ||
| visualization_weeks | No | ||
| cohost_busy_intervals | No | ||
| availability_blackouts | No | ||
| display_offset_minutes | No | ||
| cohost_blackout_intervals | No |