Solutions

Daily operations

A morning brief from the CRM, researched.

#sales-opspublic channel4 tool calls

A routine with a longer prompt: every morning it searches the CRM for the contacts created yesterday, reads each company's site, drafts the outreach, and posts one brief in a fresh thread. Its writes run pre-approved, because a card posted at six is nobody's to press — and the person asking can have them held instead.

sales-ops

Dan6:00 AM

@attest_tag every day at 6am ET, find the leads created in HubSpot yesterday, research each one, and post a brief here

attest_tagApp6:04 AM

  • hubspot_search · contacts · createdate ≥ yesterday · 4 contacts
  • fetch_url · 4 company sites
  • web_search · 2 companies · funding, headcount
  • http_request · PATCH api.hubapi.com/crm/v3/objects/contacts/… · pre-approved by routine

Morning brief — 4 new leads since yesterday 06:00 ET:

  • Northwind Logistics (ops lead, 200–500 people) — freight forwarder, recent SOC 2 announcement. Draft: the invoice-processing angle, two lines below.
  • Two further leads with company notes and drafts; one address bounced on lookup — flagged, not drafted.

Each contact’s lead status is set to “Brief posted” in HubSpot (pre-approved by this routine); the drafts are in this thread.

google/gemini-flash41k in2.3k out$0.021Configure

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

A prompt with a job in it, the proxy everywhere, and writes at six in the morning.

  1. 01

    A prompt with a job in it

    The routine’s prompt is the brief: what to find, how to research it, what to post. It runs on cron in the scope’s timezone, in a fresh thread, as the person who created it.

  2. 02

    Named tools where they exist, the proxy everywhere

    hubspot_search from the HubSpot pack for the contacts; fetch_url and web_search for the research, through the SSRF guard; http_request for the status update, through the proxy with the token injected.

  3. 03

    Writes at six in the morning

    A routine’s writes are pre-approved by default: a held write would only expire. The person creating it can ask for them held; writes that need an approver still go to one.

  4. 04

    What it costs

    The longest turns in the audit table are routines like this one. Each run’s tokens and cost are recorded, and the channel budget pauses it at the ceiling.

What it needs

The setup, in the console.

Connection
The HubSpot preset with a private-app token, attached to the channel; web search and fetch need nothing.
Credential
A HubSpot private app with read on contacts and companies, and write on contacts if the routine updates them.
Routine
Cron, timezone, the prompt, and whether its writes are pre-approved — all editable in the console, with each run and its cost listed.

What it will not do

Enforced outside the model.

  • The drafts are posted in the thread, not sent; sending was never in the brief.

  • Fetching the web goes through the SSRF guard: no private, loopback or link-local hosts, no non-HTTP schemes.

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.

@attest_tag every day at 6am ET, find the leads created in HubSpot yesterday, research each one, and post a brief here

  • HubSpot
  • Slack
  • create_routine
  • hubspot_search
  • web_search
  • fetch_url

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