Jane Doe <jane@acmecap.com>
Tuesday · 9:14 AM ET
How it works
Here’s exactly what happens between forwarding a scheduling email and Nicole sending the calendar invite. Every step is recorded in your audit log, exactly as shown.
A scheduling request lands at your handle's address. Resend ingest verifies the signature and posts to our webhook.
Jane Doe <jane@acmecap.com>
Tuesday · 9:14 AM ET
09:14:01.117 inbound_received thread_id="t_abc123" message_id="<...@acmecap.com>"The recipient address ("morgan@schedule.nicoleassist.com") is parsed; the handle "morgan" maps to a tenant id. From here every operation runs inside that tenant’s isolation context.
jane@acmecap.com → morgan@schedule.nicoleassist.com
↓
handle="morgan"
↓
tenant_id="t_d4cf..."
↓
withTenantContext(t_d4cf...)09:14:01.122 tenant_resolved handle="morgan" tenant_id="t_d4cf..."A small Haiku model classifies the inbound — new request, reply to proposal, reschedule, cancel, OOO, etc. — and emits a calibrated confidence. Anything below 0.8 escalates to you.
Classification
“Jane is requesting a 30-min meeting with Morgan next week. Mid-week preference stated. No prior thread context.”
09:14:01.834 classified category="new_meeting_request" confidence=0.94getFreeBusy reads each calendar marked for availability, applies the date range, and returns busy windows. The agent's per-tenant Graph budget is 100 calls; this step uses a handful.
Free across every calendarBusy
09:14:02.246 availability_checked calendars=3 busy_windows=11 elapsed=412ms09:14:02.260 candidate_slots_generated count=5 duration=30Working hours, buffers, blackouts, focus blocks — the rules engine filters and ranks the candidate slots. One slot eliminated by the Tue/Thu 9–11 focus block; four ranked by buffer fit and time-of-day preferences.
5 candidates from availability ↓ Tue 09:00–09:30 ✗ focus_block "Tue/Thu 9–11" Tue 13:00–13:30 ✓ Wed 14:00–14:30 ✓ +30m buffer after external Thu 09:30–10:00 ✓ Fri 10:00–10:30 ✓ ↓ 4 candidates ranked ↓ top: Tue 13:00–13:30 (score=0.86)
09:14:02.295 rules_applied eliminated=1 ranked=4 top_score=0.86An Opus call generates the reply email, signed in your assistant’s name. The draft persists with kind="email" and approved=false; in dry-run, it stops here.
Nicole <morgan@schedule.nicoleassist.com>
Awaiting your approval
09:14:06.012 draft_created kind=email slots=3 awaiting_approval=trueOne click in the dashboard. Resend delivers the reply with proper threading; once Jane picks a slot, Microsoft Graph creates the event with attendees and a Teams link if you’ve set Teams as your default conferencing.
Tue, Apr 28 · 1:00 PM ET (30 min)
Morgan Reed, Jane Doe · Microsoft Teams
09:30:11.205 draft_approved by=user:morgan09:30:11.640 email_sent provider_id=re_...09:46:02.880 event_created graph_event_id=AAMk... start=2026-04-28T17:00ZHuman in the loop
Every new tenant ships in dry-run. Nicole drafts everything but sends nothing until you approve. Flip the switch on the Settings page when you’re ready.
Anything ambiguous, low-confidence, or rule-violating gets routed to you with a clean explanation of why Nicole stopped. You decide.
One click and Nicole hands the thread back. She watches but doesn’t act — useful when a delicate human exchange is in motion.