Help us improve
Share bugs, ideas, or general feedback.
From founder-os
Synthesizes multi-source data into a structured daily briefing Notion page. Activates when the user wants a morning summary, daily overview, today's briefing, or asks 'what's on my plate today?' Covers schedule, priority emails, tasks, Slack highlights, and quick stats — handles partial data gracefully when sources are unavailable.
npx claudepluginhub thecloudtips/founder-os --plugin founder-osHow this skill is triggered — by the user, by Claude, or both
Slash command
/founder-os:briefing-assemblyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Synthesize data from four parallel gatherers (calendar-agent, gmail-agent, notion-agent, slack-agent) into a unified daily briefing page in Notion. Each gatherer delivers a structured payload for its domain -- calendar provides today's events and prep notes, gmail provides priority unread emails, notion provides tasks due today, and slack provides overnight mentions. Merge these payloads into a...
Activate for: daily digest, morning briefing, what's happening today, start of day brief, week ahead, Monday brief, weekly digest, start of week, what do I need to know today, morning rundown, daily overview, what's due today, Friday close, end of week summary. NOT for: executive dashboard (use progress-tracker), meeting prep (use meeting-intelligence).
Guides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
Synthesize data from four parallel gatherers (calendar-agent, gmail-agent, notion-agent, slack-agent) into a unified daily briefing page in Notion. Each gatherer delivers a structured payload for its domain -- calendar provides today's events and prep notes, gmail provides priority unread emails, notion provides tasks due today, and slack provides overnight mentions. Merge these payloads into a single briefing page following the five-section structure below. Record briefing metadata in a tracking database. Handle partial data gracefully when gatherers fail or return empty results.
Assemble the briefing in this exact section order. Each section maps to one gatherer's output.
Present today's meetings in chronological order:
Present the highest-priority unread emails sorted by priority level (Q1 first, then Q2):
Present tasks grouped by project, sorted by priority within each group:
Present overnight mentions and important messages:
Compile a summary metrics block from the data above:
| Metric | Source |
|---|---|
| Meetings today | Schedule Overview count |
| Priority emails | Priority Emails count |
| Tasks due | Tasks Due Today total count |
| Overdue tasks | Tasks Due Today overdue count |
| Slack mentions | Slack Highlights count (omit row if Slack unavailable) |
Display as a compact inline summary, not a table. Example format: "4 meetings | 7 priority emails | 12 tasks due (3 overdue) | 5 Slack mentions".
Create the briefing as a Notion page with these formatting rules.
Apply these Notion block types for visual hierarchy and scannability:
Track each generated briefing in the consolidated Founder OS HQ Briefings database for historical reference and analytics.
The consolidated "[FOS] Briefings" database uses these properties:
| Property | Type | Description |
|---|---|---|
| Date | title | Briefing date in YYYY-MM-DD format -- primary lookup key |
| Type | select | Briefing type -- set to "Daily Briefing" for this plugin |
| Content | rich_text | Link to the generated briefing Notion page |
| Meeting Count | number | Total meetings for the day |
| Email Count | number | Priority emails surfaced |
| Task Count | number | Tasks due today |
| Overdue Tasks | number | Tasks past their due date |
| Sources Used | multi_select | Which gatherers contributed data (Calendar, Gmail, Notion, Slack) |
| Generated At | date | Timestamp of briefing generation |
Property mapping note: The old "Briefing" property maps to "Content" in the consolidated DB. The "Type" property must always be set to "Daily Briefing".
After publishing the briefing page, create a row in the database with all metrics populated. Always set Type to "Daily Briefing". Include only the sources that successfully returned data in the Sources Used field.
Before creating a new briefing, check for an existing row matching BOTH the target date (Date title) AND Type = "Daily Briefing". If a briefing already exists for today with that type, update the existing row and page rather than creating a duplicate. Append a note to the page: "Updated at [timestamp] -- replaces earlier briefing."
The team config requires a minimum of 2 of 4 gatherers to succeed (minimum_gatherers_required: 2). Handle partial results as follows:
Include the gatherer's section in the briefing as specified above. Add the source name to the Sources Used field.
When calendar-agent, gmail-agent, or notion-agent fails:
When slack-agent fails or is not configured:
When fewer than 2 gatherers return data, do not publish a briefing page. Instead:
Apply these standards to every briefing produced.
When all 4 gatherers fail, do not produce a briefing. Return an error and suggest verifying MCP server connectivity. See Minimum Threshold Failure above.
When totals exceed typical thresholds (meetings > 8, emails > 20, tasks > 15), add a "Today is unusually busy" callout at the top of the briefing before the first section. Suggest prioritizing Q1 items only and deferring Q2/Q3 to tomorrow.
When the calendar returns no events and the task list is light (< 3 items), adapt the briefing tone. Replace "Schedule Overview" header with "Weekend / Light Day" and omit meeting prep toggles. Focus the briefing on carry-over tasks and deferred emails.
When a gatherer returns data but the data appears stale (e.g., emails from yesterday with no new unread, calendar events from a previous day), include the data but prepend a notice: "Data may be stale -- last updated [timestamp]." Flag the source as potentially stale in the database row.
Use the user's local timezone for all time references. Retrieve timezone from calendar events or system settings. When displaying meeting times for cross-timezone meetings, show the local time with the original timezone in parentheses for reference.