Every morning used to start the same way: open Calendar, check Gmail, re-read my task list, look at my Garmin stats, check my portfolio. Fifteen separate lookups before I'd even decided what the day was for. I replaced all of it with two AI agents that run in parallel and hand me back 10 lines total.
Here's the exact setup — and the free files at the bottom.
How the morning briefing works
The orchestrator is a single skill called morning-briefing. When I run it, it fires two agents at the same time: mb-context and mb-finance. Each runs in its own context window, on its own model, reading only what it needs. They finish in parallel and report back.
The main AI — the one I'm actually talking to — never sees the raw data. It only gets the summaries. That's what keeps the whole thing fast and cheap.
Agent 1: Context (your day, your goals, your body)
mb-context pulls from four sources before it says a word.
From my Obsidian vault:
- Today's daily note — carry-over tasks I didn't finish yesterday
- This week's weekly note — the 3 goals I set on Sunday, so nothing drifts mid-week
From Google Calendar:
- Today's events, with times
- Any gaps where I could slot focused work
From Gmail:
- Flagged threads only — the ones I marked as needs action
- Everything else is filtered out before the agent even sees it
From Garmin (via the Garmin MCP — direct API, no scraping):
- sleep_score and hrv_weekly_average from last night
- body_battery_status — current charge, not just the morning reading
- training_readiness — Garmin's composite that weights sleep, load, and stress
The agent reads all of this and hands back five lines: a picture of the day, which goal is most at risk, what's physically realistic given my readiness score, and a suggested calendar plan. If I approve it, it books the blocks directly.
Agent 2: Finance (live portfolio, Telegram ping)
mb-finance does one thing: price my live holdings and tell me where I stand.
It reads my portfolio positions from Supabase — the database I use across all my projects — prices each holding using keyless market data, builds a P&L and allocation summary, and pings the result to my phone over Telegram. Before I've even opened a brokerage app.
No manual API keys for pricing. No refreshing. Just a number on my phone at 7am.
The mechanism that makes it work
This is the design decision worth stealing — not the specific tools.
Each agent runs in its own context window. mb-context reads my vault, calendar, Gmail, and Garmin. mb-finance reads my database and prices 10+ positions. If you let one AI do all of that in a single thread, you're feeding it thousands of tokens of raw data, it's slow, and you pay for every token every time.
Instead:
- Each agent reads only what it needs, inside its own context
- Both run at the same time — parallel, not sequential
- Each reports back roughly 5 lines to the main thread
- The main AI sees only the summaries, never the raw data
What was 15 manual lookups across 4 apps is now one command. Total output: 10 lines. Cost: negligible.
| What it does | Without agents | With agents |
|---|---|---|
| Reads vault, calendar, Gmail, Garmin | You, manually, ~8 lookups | mb-context, parallel |
| Prices live portfolio | Manual brokerage check | mb-finance, automatic |
| Books calendar blocks | You open the app | Agent proposes, you approve |
| Total morning overhead | 15-20 minutes | Under 60 seconds |
Get the free files
All three files are free: the mb-context agent definition, the mb-finance agent definition, and the morning-briefing orchestrator skill that fires them both.
On Instagram: comment AGENTS on the video and I'll DM you the link automatically.
On YouTube: link is in my bio.
Important: these are templates wired to my setup — my Obsidian vault paths, my Garmin account, my Supabase portfolio database, my Telegram bot. You'll need to swap those for your own. The architecture is the part worth copying. The specific connections are yours to wire.
Download all three files as a zip: morning-agents.zip
Tools used
| Tool | What it does here | Link |
|---|---|---|
| Claude Code | Runs the agents and morning-briefing skill | claude.ai/code |
| Garmin MCP | Reads Garmin data via the official API | github.com/Rytisgit/garmin-mcp |
| Google Calendar MCP | Reads and writes calendar events | MCP registry |
| Supabase | Stores live portfolio positions | supabase.com |
| Telegram Bot API | Sends the finance summary to my phone | t.me/BotFather |
What most people get wrong
They build one big agent that does everything. One context window. One thread. All the data funneled in.
That's the wrong architecture. It's slow because you're feeding it 10 times more tokens than you need. It's fragile because one broken data source stalls the whole run. And it gets expensive fast because the entire data dump runs through the model every morning.
The right move: one small agent per domain, each reading only what it owns, each reporting back a tight summary. The orchestrator is just a coordinator — it never touches the raw data. Keep the main context lean.
One step to take today
Pick one morning lookup you do manually every day. Calendar, Garmin, email, portfolio — doesn't matter. Write down exactly what signal you're looking for (not the whole app — the specific number or answer). That's your first agent's brief. One lookup. One agent. One less thing you do by hand.
