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 doesWithout agentsWith agents
Reads vault, calendar, Gmail, GarminYou, manually, ~8 lookupsmb-context, parallel
Prices live portfolioManual brokerage checkmb-finance, automatic
Books calendar blocksYou open the appAgent proposes, you approve
Total morning overhead15-20 minutesUnder 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

ToolWhat it does hereLink
Claude CodeRuns the agents and morning-briefing skillclaude.ai/code
Garmin MCPReads Garmin data via the official APIgithub.com/Rytisgit/garmin-mcp
Google Calendar MCPReads and writes calendar eventsMCP registry
SupabaseStores live portfolio positionssupabase.com
Telegram Bot APISends the finance summary to my phonet.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.

Enter your email to read the full how-to

Confirm via the email link to unlock this and every future SharpenDaily how-to. Free.

No spam. Unsubscribe anytime.