Find meeting times
find_timesFind three chronologically labeled slots; nothing is held yet. Refer to slots by label. Quote each rationale verbatim; starts_at/ends_at are opaque: never reformat or do timezone math. co_host_emails is workspace members only, never invitees (use invitee_timezone); relay dropped_co_hosts. Confirmed times are final: never call find_times again to validate, swap, commit or re-render them; 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. propose_meeting rechecks availability before placing holds. Modes: FRESH searches; SWAP (current_slots + propose_label) re-picks one slot and awaits a yes; COMMIT (current_slots only) finalizes labels. With a card, reply briefly without listing slots; otherwise list rationale bullets. Overrides, shortfalls and signed_in_as: capable://guide/scheduling.
When to use: Find candidate meeting times.
Example: Find three 30-minute morning slots next week.
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 committed slots with their labels, exactly as the previous call returned them — never reformat them. With propose_label swaps one; alone commits a previously accepted swap. | |
| propose_label | No | Which committed slot to re-pick (requires current_slots); narrow the window to the user's hint ("Friday morning" → that day 9–12). Not for committing — commit with current_slots alone. | |
| co_host_emails | No | Workspace members who also attend; every host's calendar is intersected. Never the external invitee — their availability is unknown by design; pass invitee_timezone instead. | |
| invitee_timezone | No | IANA timezone of the invitee (e.g. "Europe/Berlin"); candidates must then also fall inside 9–17 Mon–Fri there. Translate a city, country or offset the user names; 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 and propose_label). Checked against every constraint; on failure proposed_slot.new is null and target_failure_reason says why — it is never silently substituted. | |
| workday_end_hour | No | Latest hour of day in each host's own timezone. Omit to use the saved availability (default 17); pass only to narrow this search ("mornings only" → 12). | |
| workday_start_hour | No | Earliest hour of day in each host's own timezone. Omit to use each host's saved availability (default 9); pass only when the user narrows this search ("mornings only", "after 2pm" → 14). 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 | ||
| scheduling_constraints | No | ||
| cohost_blackout_intervals | No | ||
| calendar_context_available | No |