← All runbooks
gooseworks-ai / composites-meeting-brief

Meeting Brief

Prepare daily meeting briefs by checking the operator's calendar, filtering out internal attendees, researching each external participant, and generating concise context for upcoming conversations. This runbook converts the original Meeting Brief skill into a Jetty programmatic w

agent codexmodel gpt-5.5snapshot python312-uveval programmatic8 stepsv1.0.0

Deploy Meeting Brief to your jetty.io

One-click installs this runbook into a collection on your Jetty account. You can run it from the Spot dashboard, schedule it, or pipe inputs in via the API.

The shape of the run

8 steps · start to finish.

  1. 1
    Step 1

    Environment Setup

    1. Create /app/results and ensure it is writable.
    2. Confirm config.json exists in the skill directory; if it does not, copy config.json.example and fill in team filters, timezone, destination email, and delivery preferences.
    3. Verify calendar access with gcalcli agenda today tomorrow.
    4. Verify optional integrations only when enabled: gh auth status for GitHub lookup, Gmail sender credentials for email, and slack_webhook for Slack.
    5. Write a setup stage to /app/results/validation_report.json.
  2. 2
    Step 2

    Load Configuration

    Read `config.json` and validate `team_members`, `team_domains`, `schedule`, `timezone`, `your_email`, `send_email`, `send_slack`, `include_calendar_details`, and `research_depth`. Fail fast if both `send_email` and `send_slack` are false and no file-output mode is configured. Nor

  3. 3
    Step 3

    Fetch Today's Meetings

    Run `scripts/check_calendar.sh` or the equivalent `gcalcli` command for today's agenda in the configured timezone. Parse meeting title, time, location, description, and attendees into JSON. Store the normalized meeting data under the skill data directory and include a count in `/

  4. 4
    Step 4

    Filter External Attendees

    For each attendee, skip exact matches from `team_members` and any email ending in a configured `team_domains` entry. De-duplicate attendees across meetings and check `data/sent/YYYY-MM-DD.json` so the run does not resend a brief for a person already handled today.

  5. 5
    Step 5

    Research Each Person

    For every remaining external attendee, run `node scripts/research_person.js "<name>" "<email>" "<company>"`. Use web search for LinkedIn, company information, recent news, and professional background. If `research_depth` is `standard` or `deep`, use GitHub lookup for likely engin

  6. 6
    Step 6

    Generate and Deliver Briefs

    Run `node scripts/generate_brief.js research_output.json meeting_context.json` for each researched attendee. Produce email-style concise bullets and Slack-style narrative context. When enabled, send email via the Gmail skill and Slack via `scripts/send_slack.sh`; otherwise retain

  7. 7
    Step 7

    Iterate on Errors (max 3 rounds)

    If calendar fetch, research, generation, or delivery fails, retry the failing stage with a targeted fix for max 3 rounds. Common fixes include refreshing `gcalcli` authentication, lowering `research_depth` from `deep` to `standard`, disabling a failed delivery channel, or re-runn

  8. 8
    Step 8

    Persist Logs and Personal CRM Entries

    Save each researched person to `supernotes/people/` with research data, meeting context, and run date. Update `data/sent/YYYY-MM-DD.json` only after a brief is generated and the selected delivery path succeeds or a file-only brief is intentionally retained. Copy the de-duplicatio