The problem
The client is a solo founder who runs an AI consulting practice and lives in a coastal town with a busy co-working and family community. His day was spread across too many places:
- Two calendars of his own, plus a community hub calendar he doesn’t control.
- Community events announced in Slack, often only there, with registration links buried in threads.
- Client and personal conversations in WhatsApp, where a missed reply costs trust.
- Several email accounts, most of them noise.
- A handful of live websites he’s responsible for, where “is anything down?” was a question he only asked after a client did.
Every morning started with opening app after app and scrolling. Important items still slipped: a community workshop he’d have wanted to attend, a client message that sat for a day, a kids’ activity that had been cancelled.
He didn’t want another dashboard. He wanted one short message, on his phone, that told him what matters today and what’s waiting on him.
What we built
A scheduled agent that runs every morning at 7:00 and sends one message to Telegram. It has two parts, and keeping them separate is what makes it reliable.
1. A deterministic collector. A small script gathers the raw facts from every source and outputs them as structured data:
- Calendar: every event in the next 7 days from his own calendars and the community hub calendar, converted to local time.
- Community Slack: recent posts from the announcement channels, so events that were only announced in Slack still show up.
- WhatsApp: activity in the last 24 hours, read locally and read-only on his own machine. Nothing is sent to a third party and nothing is written back.
- Email: only mail from real people or operationally important senders. Promotions, bulk mail and muted senders are dropped by rule before the AI ever sees them.
- Infrastructure: health checks on each client website, with retries so a single slow response isn’t reported as an outage.
- Errors: every source reports its own failures, so a broken connection shows up as a warning and never looks like a quiet day.
2. A writing agent. An LLM turns that data into a short, consistent briefing, following strict rules:
- It may not invent events, numbers or messages. If it isn’t in the collected data, it isn’t in the briefing.
- Warnings come first. An empty section says so plainly (“Nothing needs you.”).
- It never quotes private messages at length and never shows phone numbers.
Anything that has to be exactly right is decided in code, not in the prompt: time zones, which events to skip, which senders to mute, which items are cancelled. When those rules lived only in the prompt, they drifted whenever the wording changed. Moving them into the collector made them stick.
What the briefing looks like
One message, always in the same order:
- Schedule: one merged, chronological list for the week. His own meetings are starred with the join link underneath. Community events get their own marker and a registration link when there is one. Cancelled items are struck through, not hidden, so he can see they were considered.
- WhatsApp: one line per active conversation, with chats waiting on his reply flagged first. Eight lines at most.
- Needs a reply: the few emails that actually need him.
- Infrastructure: site status, only shouting when something is really down.
- Suggestions: a short list of things worth doing today.
Illustrative mock, not real data:
Today
⭐ 10:00 Client kickoff
meet.google.com/...
🌊 3:30 Kids: Music, Cooking
🌊 6:00 Community sunset meetup (new)
Register: https://...
Tomorrow
⭐ 9:30 Weekly planning
❌ 4:00 Surf lesson (cancelled)
💬 ⚠️ Client A: asked about the timeline, waiting on you
💬 Neighbourhood group: dinner moved to Friday
Infrastructure: all sites up.
Result
- Mornings start with one message instead of a tour through calendars, Slack, WhatsApp and inbox.
- Community events that were only announced in Slack now arrive with registration links, so he stops finding out about them afterwards.
- Chats waiting on his reply are flagged first every day, so client replies don’t sit overnight.
- Site problems show up in the morning briefing instead of in a client’s message, and brief network hiccups don’t cause false alarms.
- When a source breaks (an expired login, a revoked permission) the briefing says so right away instead of quietly leaving things out.
- The format was tuned with the client in the first days of use. Each preference (merged schedule, markers, what to mute) became a fixed rule rather than something he has to keep repeating.
Why it works
- Facts come from code; the AI only writes. That’s the main reason it can be trusted: it can’t make up a meeting.
- Private data stays private. Messages are read locally and read-only, only short summaries are produced, and no message content or contact details are stored or shared.
- It fits how the client already works. One Telegram message, no new app, no dashboard to remember.
- It’s easy to extend. Adding a source means adding one collector function; the briefing format stays the same.
Could this work for you?
If your day is spread across a calendar, a team chat, WhatsApp, an inbox and a few systems you’re responsible for, the same pattern fits: a morning briefing built around your sources and your rules, delivered wherever you already read messages (Telegram, WhatsApp, Slack or email).
We build this as the Daily Ops Briefing Agent: $1,500 fixed, one week, with an optional Care Plan from $400/month to keep sources connected and rules up to date.
Facts come from code. The AI only writes.