gooseworks-ai/meeting-brief
Daily meeting preparation system that checks your calendar each morning, deeply researches external attendees (LinkedIn, company info, GitHub, past notes), and sends you personalized briefs via email (1 per person). Use when you want automated preparation for upcoming meetings with context about each person you're meeting.
npx skills add https://github.com/gooseworks-ai/goose-skills --skill meeting-brief
Automated daily meeting preparation system that researches meeting attendees and sends you personalized briefs.
Every morning (configurable time):
Edit config.json to list your team members (these will be skipped):
{
"team_members": [
"[email protected]",
"[email protected]",
"[email protected]"
],
"team_domains": [
"@yourcompany.com"
],
"schedule": "0 7 * * *",
"timezone": "America/Los_Angeles",
"your_email": "[email protected]",
"brief_from": "Meeting Brief <[email protected]>",
"slack_webhook": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
"send_email": true,
"send_slack": true,
"include_calendar_details": true,
"research_depth": "standard"
}
Config options:
team_members: Emails to skip (exact match)team_domains: Domain patterns to skip (e.g., skip all @yourcompany.com)schedule: Cron expression for daily run (default: 7am)timezone: Timezone for scheduleyour_email: Where to send briefsbrief_from: From address for briefsslack_webhook: Slack incoming webhook URL (optional)send_email: Whether to send email briefs (default: true)send_slack: Whether to send Slack notifications (default: false)include_calendar_details: Include meeting time/location in briefresearch_depth: quick (web only), standard (web + GitHub), deep (web + GitHub + past notes)Run manually each morning:
cd skills/meeting-brief
./scripts/run_daily.sh
scripts/run_daily.sh)scripts/check_calendar.sh)scripts/research_person.js)scripts/generate_brief.js)send_email: true)send_slack: true, scripts/send_slack.sh)supernotes/people/)data/sent/YYYY-MM-DD.json)For each external attendee, the system researches:
research_depth is standard or deep)research_depth is deep)Research is structured as JSON:
{
"person": {
"name": "Jane Doe",
"email": "[email protected]",
"company": "Example Corp",
"title": "VP Engineering"
},
"linkedin": {
"url": "...",
"bio": "...",
"experience": [...]
},
"github": {
"username": "janedoe",
"profile_url": "...",
"recent_repos": [...]
},
"company": {
"name": "Example Corp",
"industry": "...",
"recent_news": [...]
},
"past_interactions": [
"Met at conference in 2024",
"Discussed partnership opportunity"
]
}
The AI-generated brief comes in two formats:
Deeper, narrative-driven brief with:
Example Brief:
Subject: Meeting Brief: Jane Doe - Product Partnership Discussion
Hi,
You're meeting with Jane Doe today at 2pm.
## Quick Overview
Jane is VP of Engineering at Example Corp, a B2B SaaS company in the dev tools space. She's been there for 3 years and previously worked at GitHub and Microsoft.
## Background
- Strong background in developer tooling and infrastructure
- Recently led Example Corp's API platform overhaul (launched Q4 2025)
- Active on GitHub (janedoe) - maintains several open-source CLI tools
- Technical blog focuses on API design and developer experience
## Conversation Starters
- Their new API platform (just launched, getting good traction)
- Recent blog post on GraphQL vs REST (published last week)
- Shared interest in developer experience (noted in her LinkedIn)
## Notes
- You met briefly at DevTools Summit 2024
- She mentioned interest in partnering on integration opportunities
---
Meeting: Product Partnership Discussion
Time: Today at 2:00 PM
Location: Zoom (link in calendar)
Run for a specific person:
# Research a person
node scripts/research_person.js "Jane Doe" "[email protected]" "Example Corp"
# Generate brief
node scripts/generate_brief.js research_output.json meeting_context.json
# Send brief
./scripts/send_brief.sh brief.html "Jane Doe"
Run for today's meetings:
./scripts/run_daily.sh
meeting-brief/
├── data/
│ ├── sent/ # Sent brief logs (by date)
│ │ └── 2026-02-21.json
│ ├── research/ # Research cache (by person)
│ │ └── jane-doe.json
│ └── meetings/ # Meeting data (by date)
│ └── 2026-02-21.json
└── logs/
└── run.log # Execution logs
DRY_RUN=true in run_daily.sh to preview without sendingquick, upgrade to standard or deep as neededNo briefs sent:
gcalcli agenda today tomorrow)logs/run.logBriefs missing information:
research_depth in config.jsondata/research/Duplicate briefs:
data/sent/ for already-sent trackinggh): For GitHub profile lookup (optional)data/research/Take gooseworks-ai/meeting-brief from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.