The promise of a “morning briefing” is simple: you wake up, you glance at one message, and you feel oriented.
The reality is usually the opposite. You open a briefing, it contains 42 items, and your day starts with the quiet sense that you’re already behind.
Most people don’t need more information in the morning. They need fewer decisions.
That’s why the only morning briefings that stick are aggressively small. They read like a competent assistant who knows you have eight minutes, not like a dashboard.
This post is a blueprint you can copy to build one. It’s intentionally not code-heavy. It’s about the defaults that matter, the output that fits on one screen, and the failure modes that will otherwise turn your “briefing” into a doomscroll feed.
The job of a morning briefing
A good morning briefing does three things:
It tells you what’s already scheduled. It tells you what’s blocking you. And it points at one thing you should keep an eye on.
It does not try to summarize the internet. It does not try to “optimize your productivity.” It does not try to turn your life into a queue.
If you want a one-sentence spec, use this:
In under 30 seconds, I should know what matters today.
Inputs: pick one source of truth, then enrich
You can build a morning briefing from dozens of data sources. You should not.
Pick one source of truth and make everything else optional.
For most people, the best primary input is the calendar. It has two properties you can rely on:
First, it’s already curated. If something is on the calendar, it has some chance of being real.
Second, it’s already time-bounded. You can build a briefing around time, not around volume.
After calendar, add one enrichment input. Not five.
A common choice is “yesterday’s open loops”—a short list of things you promised to do, or things you started and didn’t finish. If you don’t have a system for that yet, don’t fake it. Start with calendar-only and earn the right to add more.
The output template (one screen, every day)
The output format is the product.
If you change the format constantly, you can’t tell whether it’s working. If you keep it stable, you notice immediately when something is off.
Use three blocks:
Today: what’s scheduled.
Needs you: the smallest set of actions that unblock the day.
FYI: one watch item, max.
Here’s a concrete template (it looks trivial; it’s not):
Morning (Tue)
Today 10:30–11:00 1:1 with Alex (prep: decide on the timeline) 2:00–3:00 Customer call (goal: confirm next steps)
Needs you Reply to Sarah: confirm Thursday works Choose 3 time slots for next week
FYI You’ve got back-to-back meetings after lunch—don’t book more.
Notice what’s missing: a “news” section. You can add one later if you really want, but it should be opt-in, not in the default artifact.
Triggers: boring is good
A morning briefing fails when it relies on you remembering to request it.
So make it scheduled.
Pick a time you can actually tolerate, not an aspirational time. If you wake up at 7:45, don’t schedule it for 6:30. You’ll train yourself to ignore it.
If you’re experimenting, schedule it five minutes after your usual wake-up. You can always move it earlier later.
Defaults that keep it from becoming spam
This is where most people accidentally build doomscrolling.
You don’t need a “smart” model first. You need strict constraints.
Set a hard cap: one screen. If it can’t fit, it must compress.
Set a hard filter: only meetings that are today, and only actions that are actionable in the next 12 hours.
Set quiet hours: no messages during sleep. No “catch-up” messages if you miss a day. A missed briefing should not generate a backlog.
And set an approval boundary: the briefing agent can suggest actions, but it cannot reschedule meetings or send messages unless you ask.
Failure modes (and how to handle them)
A simple acceptance test (so you know it’s working)
The fastest way to tell whether your briefing is good is to test it like a product.
Tomorrow morning, read it once. Don’t open your calendar. Don’t check your inbox. Just read the briefing.
If you can answer these questions without looking anything up, your briefing is doing its job:
What are my fixed commitments today? What is the one thing I need to do before noon? What is the one constraint that might blow up my afternoon?
If you can’t answer those, the briefing is either missing the calendar, or it’s burying the calendar under “helpful” noise.
There’s a second test that matters more. After you read it, you should feel slightly calmer. Not motivated. Not hyped. Calmer.
If you feel more anxious, the agent is feeding you too much, or it’s framing everything as urgent. That’s not a model problem. That’s a spec problem.
What to do when it starts to drift
Briefings drift over time because you keep adding inputs.
A new notification source creeps in. A “news” section appears. The agent starts adding extra context “just in case.” Suddenly the artifact is twice as long, and you stop reading it.
When that happens, don’t rewrite prompts for an hour. Do the simplest thing: remove an input.
Start by removing any feed-like input (news, social, broad notifications). Then remove open-loop enrichment if it’s noisy. Go back to calendar-only for a week.
A calendar-only briefing is still valuable. It’s the foundation. Once you’re reading it every day again, reintroduce one enrichment input with a hard cap: one line, max.
If you want this to run every day, you need failure behavior that is simple and legible.
The main failure modes are boring:
Calendar access fails. The agent can’t reach your notes. The agent produces something too long. The agent “helpfully” invents tasks you never asked for.
When calendar access fails, the correct behavior is one sentence: “I couldn’t read your calendar this morning, so I’m skipping the briefing.” No guessing.
When enrichment inputs fail, the agent should fall back to calendar-only and keep going. The briefing should degrade gracefully.
When the output is too long, the agent should compress harder by dropping the FYI block first. Orientation beats trivia.
And if the agent starts hallucinating tasks—making up “urgent” items from thin air—you should remove the enrichment input entirely until you can trace where those items are coming from.
The upgrade path: add power slowly
Once calendar-only briefings are useful for two weeks, you can add exactly one new capability.
A good next step is “open loops.” Not a giant task manager, just a short list of the few things you already intended to do.
If you want an even safer upgrade: add “questions to ask today.” For example, before a meeting, surface one open question that will make the meeting go better. This is helpful and low-risk.
Avoid adding “news” as a default. News is sticky in the worst way. If you want it, make it a separate, opt-in artifact you request explicitly.
Closing
A morning briefing is infrastructure for your attention.
If you keep it small, stable, and calendar-first, it becomes a habit. If you let it become a feed, it becomes another tab you avoid.
Build the one-screen version first. Earn the right to add more.