Solutions

Meetings & scheduling

Five minutes before the call, who they are and what is open.

@attest_tagdirect message4 tool calls

A weekday routine that reads today's calendar, picks out the events with a guest from outside the company, and DMs one card per meeting: who the guest is, the last thing they wrote, and the open deal. Every part of it is a read, so there is nothing to pre-approve.

attest_tag

Priya8:45 AM

every weekday at 8:45, brief me on today's external meetings

attest_tagApp8:46 AM

  • create_routine · weekdays 08:45 America/New_York · as Priya
  • http_request · GET www.googleapis.com/calendar/v3/…/events?timeMin=…&timeMax=… · 4 events
  • http_request · GET gmail.googleapis.com/gmail/v1/users/me/messages?q=from:… · 2 threads
  • hubspot_search · deals · associated contact · 1 open

Today — 2 external meetings.

  • 11:00 · Q4 pricing · Northwind — Dan Ellis, ops lead. Last wrote to you on 11 Sep asking whether the October invoice could be split across two POs; you have not replied. Open deal: £24k, Proposal, closes 30 Sep.
  • 15:30 · Intro · Harrow Freight — first contact, no mail history, created in the CRM yesterday by Dan.
  • Two internal meetings today are not briefed; there is nobody outside the company on them.

google/gemini-flash18k in720 out$0.0094Configure

Names, figures, repositories and customers are changed; token counts and cost are illustrative. The ask, and the shape of the answer, are as they were.

How the turn went

Everything here is a read, which is why it can run while you are asleep.

  1. 01

    Today, from your own calendar

    The events come from the asker’s own calendar between midnight and midnight in their timezone. A guest whose address is not on the company’s domain is what makes a meeting external; internal ones are left out rather than briefed thinly.

  2. 02

    The last thing they wrote, from your own mailbox

    One Gmail search per guest, in the asker’s own mailbox, for mail from that address. Nobody else’s mailbox is reachable — there is no shared token for one — so a brief is only ever assembled out of what the person receiving it can already see.

  3. 03

    The deal, from the CRM the channel is connected to

    The CRM is a channel connection with a private-app token, not a personal one, so it answers the same for everyone. A contact with no deal is said to have none rather than left blank.

  4. 04

    A routine with no writes

    Routines pre-approve their writes, because a card posted at a quarter to nine is nobody’s to press. This one has none to pre-approve: it reads four things and posts a message.

What it needs

The setup, in the console.

Connection
The Google Workspace preset: an OAuth client an admin registers once, with the parts you mean to use ticked — Gmail, Calendar, Drive, Contacts — attached to the channel.
Credential
Each person's own sign-in, from a Connect button the bot DMs them, held per user. No shared token exists for a channel to spend.
Connection
The HubSpot preset with a private-app token, read on contacts and deals. The brief runs without it, minus the deal line.
Routine
Cron, timezone and prompt, editable in the console, with every run and its cost listed against it.

What it will not do

Enforced outside the model.

  • It cannot read a colleague's mailbox to brief you on their thread with the guest; mail is per person, always.

  • A meeting with no external guest is not briefed rather than padded out with what little there is.

Try it

Say it in a channel it is in.

The sentence as it was typed. It works in any channel the bot has been invited to that carries the connection above — no command syntax, no form, and follow-ups in the thread need no mention.

every weekday at 8:45, brief me on today's external meetings

  • Google Calendar
  • Gmail
  • HubSpot
  • create_routine
  • http_request
  • hubspot_search

Bring the channel this would live in.

Sign up, connect the service above in one channel, and type this sentence yourself — or run the same binary on your own infrastructure.

All solutions