morning-briefing
Skill10 starsChanged 7 months agoMITView on GitHub
Automated daily digest for small business owners. Combines email triage, calendar agenda, open tasks, and business KPIs into a single morning briefing. Composable — works with whatever data sources are available. Urgent emails require body inspection and explicit escalation signals — never classified from sender/timing metadata alone.
We split this skill into the rules it gives an agent
8 rules. 0 are common, 5 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 14 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 36
If not found: Stop. Route to google-workspace skill and ask the user to complete the install step.
- Very specific: line 42
If not authenticated: Stop. Route to google-workspace skill — its setup walkthrough handles the OAuth flow.
- Very specific: line 48
If either scope is missing: Run gws auth login -s gmail,calendar and re-check.
- Distinctive: line 106
Run these in parallel (all are read-only):
- Distinctive: line 119
If additional data sources are available:
- Distinctive: line 306
Start simple (calendar + email) and enable more sections as you connect more tools
- Distinctive: line 387
Start with just email + calendar — add more data sources over time
- Distinctive: line 390
Run it at the same time every day for consistency
“Common” is measured: kept by at least 6 in 10 of the 14 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Morning Briefing
Wake up to everything you need to know about your business in one place.
This is the "killer app" for AI agents — a composable daily digest that pulls from every connected data source and gives you a single, prioritized briefing before your day starts.
Triggers
- "morning briefing"
- "daily digest"
- "what do I need to know today"
- "brief me"
- "standup"
- First interaction of the day with the agent
Setup Verification
Run this before composing the briefing. If any required check fails, route the user to the google-workspace skill to complete setup, then come back to this skill. Do not silently proceed with a partial briefing on the first run — the user should know what's missing.
Required checks (must pass to run the briefing)
gwsCLI is installed.
If not found: Stop. Route towhich gws && gws --versiongoogle-workspaceskill and ask the user to complete the install step. Do not try to installgwsfrom inside this skill.gwsis authenticated.
If not authenticated: Stop. Route togws auth statusgoogle-workspaceskill — its setup walkthrough handles the OAuth flow.- At minimum, Gmail + Calendar scopes are present.
If either scope is missing: Rungws auth status | grep -E "(gmail|calendar)"gws auth login -s gmail,calendarand re-check. If that still fails, route togoogle-workspace.
Recommended checks (warn but don't block)
- Tasks scope (for the Open Tasks section):
If missing: Note in the briefing that "Tasks scope not authorized — rungws auth status | grep tasksgws auth login -s tasksto enable the Open Tasks section." Continue with the rest of the briefing. Do not block on this. - Drive scope (for the Recent Activity section):
If missing: Skip the Recent Activity section silently. It's optional.gws auth status | grep drive
Cache the result
Once verification has passed for a given session, don't re-check on subsequent runs in the same session — it adds latency for no value. The agent should re-run verification only at the start of a fresh session, after a known auth change, or if a gws command returns PERMISSION_DENIED mid-run.
Prerequisites
gwsCLI installed and authenticated — verified by the Setup Verification step above- At minimum: Gmail + Calendar scopes
- More data sources = better briefing (Tasks, Drive, Chat, Sheets, etc.)
What Gets Included
The briefing is composable — it includes whatever data sources are available. Not everything is required.
Always included (if available):
| Section | Source | What It Shows |
| Calendar | gws calendar +agenda | Today's meetings, who you're meeting with, prep needed |
gws gmail +triage | Unread count, urgent messages, key senders | |
| Tasks | gws workflow +standup-report | Open tasks, overdue items |
Included if connected:
| Section | Source | What It Shows |
| Business KPIs | Google Sheets, BigQuery, or POS system | Yesterday's revenue, vs forecast, trends |
| Drive Activity | gws drive | Recently shared or modified documents needing attention |
| Chat | gws chat | Unread messages in key spaces |
Included if relevant skills are installed:
| Section | Source | What It Shows |
| Forecast | revenue-forecaster (weekly mode) | This week's point estimate, confidence range, component breakdown |
| Ads Performance | Google Ads skill | Spend, ROAS, anomalies |
| Alerts | Health monitor / anomaly detection | Anything that needs immediate attention |
The Briefing Flow
Step 1: Gather data
Run these in parallel (all are read-only):
# Calendar — today's events
gws calendar +agenda --format json
# Email — unread inbox summary
gws gmail +triage --max 15 --format json
# Tasks — open items
gws workflow +standup-report --format jsonIf additional data sources are available:
# Weekly digest context
gws workflow +weekly-digest --format json
# Recent Drive activity
gws drive files list --params '{"pageSize": 5, "orderBy": "modifiedTime desc"}' --format jsonStep 2: Analyze and prioritize
Process the gathered data into priority buckets.
Urgent (handle before anything else):
- Calendar conflicts or meetings starting within 1 hour
- Overdue tasks
- Anomalous business metrics (revenue down 30%+, ad spend spike, etc.)
- Emails — only after the body has been read AND it contains an explicit escalation signal (see below)
Important (handle today):
- Meetings that need prep
- Unread emails from known contacts that don't escalate to "urgent"
- Tasks due today
- Business metrics outside normal range
- Vendor invoices and statements (route to AP)
Informational (know but don't act yet):
- Email volume and categories
- This week's calendar overview
- Business metric trends
- Recently shared documents
Email urgency rules — read the body, don't guess from metadata
Sender + timing metadata is not enough to classify an email as urgent. A vendor replying on a thread, a key contact sending a routine status update, or two replies on one thread within an hour are all common patterns that look urgent from the outside but are usually not. The agent must open the message body before flagging anything as urgent and look for an actual escalation signal.
How to read the body
# Read a single message body (plain text, no HTML noise)
gws gmail +read --id <MESSAGE_ID>
# Read with headers included
gws gmail +read --id <MESSAGE_ID> --headers
# JSON output for programmatic checking
gws gmail +read --id <MESSAGE_ID> --format jsonThe gws gmail +read helper handles HTML→text conversion, base64 decoding, and multipart messages automatically. Use it on any candidate-urgent email before classifying.
Required escalation signals
Promote an email to Urgent ONLY if its body contains at least one of:
| Signal | What it looks like |
| Direct address | The recipient's first name in a salutation or mid-sentence ask: "Hey Sam...", "Sam, can you...", "@sam" |
| Explicit ask pointed at the recipient | A direct question or request the recipient is the only one who can answer |
| Deadline language | "by EOD", "before tomorrow", "needs to ship today", "by Friday", a date that's < 24 hours away |
| Problem requiring a decision | "we're stuck on...", "I need your call on...", "blocked on...", "can you approve..." |
| Escalation language | "urgent", "ASAP", "second time asking", "still no response", "this is blocking us" |
| Money or risk on the line | Stated dollar amount + a decision needed, account at risk, contract expiring, customer threatening to leave |
If none of those signals are in the body, the email is Important (route to AP, log for follow-up, or surface in the Email section) — not Urgent. The same applies to emails from "key contacts": being from the boss or a top customer doesn't automatically make a message urgent. The body decides.
The false-urgency failure mode
The most common briefing bug is flagging an email as urgent because of the pattern (key sender, recent reply, active thread) rather than the content. This produces noisy briefings that the user learns to distrust. Examples of patterns that look urgent but usually aren't:
- A vendor sending a routine status update or "thanks, will look at this" reply
- Two participants on one thread replying within an hour of each other (normal business pace)
- A monthly statement from a vendor that's been monthly for years
- A "FYI" or "no action needed" that uses an urgent-sounding subject line
- An automated system message with the word "Important" in the subject (CC of a boilerplate notice — e.g., utility "you have a new letter" notifications)
- A thread between two other people that doesn't address or @-mention the user — it's their conversation, not the user's
- A CI / build / deploy failure where the actual deploy step succeeded. Modern pipelines run non-blocking audit, security-scan, and customer-install jobs alongside the main build. A failure in one of those with
Deploy: succeededin the same run means the release went out — this is a code-quality follow-up, not a production incident. Only flag as urgent if the failed job is on the critical path (the build itself, the deploy itself, or a job marked as required for merge). Read the body for the per-job status before classifying.
When in doubt, the agent should demote the item from Urgent to Important. Important items still appear in the briefing — they just don't claim the user's attention before everything else. A briefing with no Urgent items and 6 Important items is more useful than a briefing with 6 false-urgent items the user has to triage themselves.
Calendar and metric urgency rules (unchanged)
Calendar events and business metrics don't have a body to read, so the urgency rule for those is mechanical:
- Calendar event starting within 60 minutes → Urgent
- Calendar event in next 4 hours that needs prep → Important
- Business metric outside its normal range (e.g., revenue down >30% vs forecast, ROAS halved, error rate spiked) → Urgent
- Business metric trending in the wrong direction but still in range → Important
Step 3: Compose the briefing
Present in this structure. Urgent items must include sub-bullets with context AND a link to the source content (the actual email, calendar event, task, etc.) so the user can click straight through to act on it. A bare one-line urgent item is not acceptable — the briefing's job is to make action one click away.
# Morning Briefing — [Day, Month Date, Year]
## Urgent
**[Bold one-line headline of the urgent item]** — [link to source]
- [Sub-bullet: who, when, what context — the "why this is urgent"]
- [Sub-bullet: the specific action needed and any deadline]
- [Sub-bullet: anything else the user needs to decide before acting]
**[Next urgent headline]** — [link to source]
- [Same sub-bullet structure]
If nothing is urgent: "Nothing urgent — clear to focus."
## Today's Schedule
| Time | Event | Prep Needed |
|------|-------|-------------|
| 9:00 AM | Team standup | None |
| 11:00 AM | Vendor meeting — Acme Corp | Review latest invoice |
| 2:00 PM | Customer call — Smith Co | Pull order history |
## Email (X unread)
- **From [key contact]:** [subject] — [needs response / FYI] — [link]
- **From [vendor]:** [subject] — [action needed / informational] — [link]
- [X other unread messages in categories: Y vendors, Z promotions]
## Open Tasks (X items)
- [ ] [Task 1] — due [date]
- [ ] [Task 2] — due [date]
- [X overdue items need attention]
## Business Snapshot (if available)
- Yesterday's revenue: $X,XXX (vs forecast: $X,XXX)
- [Trend: up/down X% vs same day last week]
- [Any anomalies or alerts]
## This Week
- [Key meetings or deadlines coming up]
- [X emails to process]
- [Any scheduled reports or deliverables]How to build the source links
The agent should produce real URLs the user can click. Use the underlying Google IDs already in the gws JSON output:
| Source | URL pattern | Example |
| Gmail message | https://mail.google.com/mail/u/0/#inbox/{message_id} | https://mail.google.com/mail/u/0/#inbox/19d6d6ef3590984d |
| Gmail thread | https://mail.google.com/mail/u/0/#inbox/{thread_id} | (use the threadId from gmail JSON if available) |
| Calendar event | https://calendar.google.com/calendar/event?eid={base64url(event_id + " " + calendar_id)} | Or just link to https://calendar.google.com/calendar/u/0/r/day/{YYYY}/{MM}/{DD} for the day view if you don't want to compute the eid |
| Drive file | https://drive.google.com/file/d/{file_id}/view | From gws drive files list JSON |
| Google Doc / Sheet / Slide | The webViewLink field returned by gws drive files list | Use it directly |
| Tasks | https://tasks.google.com/embed/list/{task_list_id} | (Tasks doesn't have per-task deep links) |
| External (Bill.com, Stripe, etc.) | Use the link from the email body if you parsed it | Or skip if there's no canonical URL |
For email links specifically, the message ID from gws gmail +triage --format json (the id field) plugs directly into the Gmail web URL. No transformation needed.
Step 4: Deliver
Options for delivery:
- Direct response — Display in the current conversation
- Google Chat — Post to a dedicated #briefing space
- Email — Send as a digest email to yourself
- Slack — Post to a channel (if using
slack-directoryskill)
Setting Up Automated Daily Briefing
As a cron job
Set up a cron that runs the briefing every morning:
# Run at 7:30 AM every weekday
# The cron should:
# 1. Gather all data sources
# 2. Compose the briefing
# 3. Post to your preferred channelThe agent should use whatever cron mechanism is available (Claude Code cron, system crontab, Cloud Scheduler, etc.).
Manual invocation
Just say "morning briefing" or "brief me" to get an on-demand briefing at any time.
Configuration Template
A starter config is provided at templates/briefing-config.yaml. Copy it to your agent's workspace and customize:
- Toggle sections on/off based on what data sources you have connected
- Set delivery method (console, Slack, Google Chat, email)
- Configure schedule, key contacts, and alert thresholds
- Start simple (calendar + email) and enable more sections as you connect more tools
The agent reads this config to know what to gather and how to format the output.
Customization
The briefing should adapt to the business over time:
- Key contacts: Learn which senders are highest priority (boss, top customers, critical vendors)
- Business hours: Adjust meeting prep timing based on when you start your day
- Quiet days: On slower days (e.g., Sunday for retail), reduce the briefing to essentials
- Season: During busy seasons, add more detail on inventory/order status
Example Briefing
# Morning Briefing — Wednesday, January 15, 2026
## Urgent
**Customer complaint from Sarah Miller** — [Open in Gmail](https://mail.google.com/mail/u/0/#inbox/19d6d6ef3590984d)
- Sent 11:14pm last night, subject: "Issue with my order #4521"
- Order shipped Tuesday, arrived damaged. Sarah is one of our top-10 customers (12 orders YTD).
- Action: Reply with refund + replacement before 11am vendor call so it doesn't slip.
**Cooler #2 temperature alert** — [Open in Sensor Dashboard](https://sensors.example.com/cooler-2)
- Tripped at 3:42am, current reading 38°F (target 34°F).
- Auto-acknowledged but not resolved. Could be a door left open or compressor.
- Action: Have a staff member check before opening; flag for service if still warm by 9am.
## Today's Schedule
| Time | Event | Prep Needed |
|------|-------|-------------|
| 9:00 AM | Team standup (30 min) | None |
| 11:00 AM | Vendor call — Fresh Farms (30 min) | Review Q1 pricing sheet in Drive |
| 2:30 PM | Staff 1:1 with Mike (30 min) | Check his task completions |
## Email (23 unread)
- **Sarah Miller:** "Issue with my order" — needs response — [Open](https://mail.google.com/mail/u/0/#inbox/19d6d6ef3590984d)
- **Fresh Farms:** "Updated price list for Q1" — review before 11am call — [Open](https://mail.google.com/mail/u/0/#inbox/19d6c39a56a7094f)
- **Square:** Daily sales summary — FYI — [Open](https://mail.google.com/mail/u/0/#inbox/19d6b9d9b14196ea)
- 20 others: 8 vendor, 5 newsletter, 7 promotions
## Open Tasks (6 items)
- [ ] Submit quarterly tax docs — due Jan 17 ⚠️
- [ ] Update employee schedule for next week — due Jan 16
- [ ] Order packaging supplies — due Jan 18
- [ ] Follow up with landlord re: lease renewal — overdue ⚠️
- 2 other items due this week
## Business Snapshot
- Yesterday: $2,450 revenue (forecast: $2,200) — +11% vs forecast ✅
- Week-to-date: $4,890 (tracking 8% above weekly target)
- Google Ads: $40 spent, 12 clicks, 2 conversions — ROAS 2.8x
## This Week
- Thursday: Payroll deadline
- Friday: Vendor delivery — Fresh Farms
- 3 more meetings scheduledNotice how every urgent item has:
- A bold one-line headline
- A clickable link to the source so the user can act in one click
- 2-3 sub-bullets explaining the why, the action, and any deadline
A bare urgent line ("Customer complaint — needs response") forces the user to go hunt for the email. The structured version puts the action one click away.
Integration with Other Skills
gmail— Email triage datagoogle-calendar— Calendar agendagoogle-tasks— Open task listgoogle-drive— Recently shared documentsgoogle-sheets— Business KPI dataautoresearch— Report overnight experiment resultsgoogle-ads— Ad performance snapshotplaybook-discovery— Surface new automation opportunities
Tips
- Start with just email + calendar — add more data sources over time
- The briefing should take 2 minutes to read, not 20
- Focus on what needs ACTION, not just information
- Run it at the same time every day for consistency
- The agent should learn your priorities over time and adjust accordingly
Related Skills
google-workspace— Required setup (install and auth)gmail— Email data sourcegoogle-calendar— Calendar data sourcegoogle-tasks— Task data sourceautoresearch— Overnight experiment results
Know your day before it starts. The best operators don't react — they anticipate.
Other versions16 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 16
- sonichi/sutando★ 396same name
- Hassaan146/claude-skills★ 18same name
- broomva/skills★ 4same name
- atomicpapa/claude-obsidian-setup★ 2same name
- Peter-Swain-Inc/psi-skills★ 2same name
- fabio-baumgartner/unternehmer-skills★ 1same name
- GopalGB/claude-code-toolkit★ 1same name
- seco/declaw★ 1same name
- fivebarn/studio★ 0same name
- jjs04/dailypulse★ 0same name
6 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository23 other files it gives its agents.
- data-lake-starterSkill
- google-workspaceSkill
- mcp-guideSkill
- secrets-managerSkill
- semantic-layer-auditSkill
- gmailSkill
- google-calendarSkill
- google-chatSkill
- slack-directorySkill
- slackSkill
- google-docsSkill
- google-driveSkill
- google-sheetsSkill
- google-tasksSkill
- brand-identitySkill
- creative-matrixSkill
- google-adsSkill
- nano-bananaSkill
- autoresearchSkill
- long-running-agentSkill
- playbook-discoverySkill
- revenue-forecasterSkill
- patent-figureSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

