Calendar & SchedulingDocumentedScanned

meeting-prep

Meeting preparation and daily commit summaries.

Share:

Installation

npx clawhub@latest install meeting-prep

View the full skill documentation and source below.

Documentation

Meeting Prep

Automated meeting preparation and daily commit summaries for development teams.

Capabilities

  • Meeting Prep — Check Google Calendar for upcoming meetings with video links, notify user, generate commit-based updates

  • Daily Summary — End-of-day summary of all commits across all developers
  • Setup Requirements

    Google Calendar OAuth

    Create OAuth credentials in Google Cloud Console:

  • Enable Google Calendar API

  • Create OAuth 2.0 Desktop credentials

  • Store client_secret.json in credentials/

  • Authorize with scopes: 5. Store tokens in credentials/calendar_tokens.json For multiple accounts, store separate token files per account. ### GitHub Token Create a classic Personal Access Token with repo scope. Store at credentials/github_token. ## Workflows ### Meeting Prep Check Trigger: Cron every 15 minutes or heartbeat. 1. Query configured calendars for events in next 45 minutes 2. Filter for events with Google Meet links (hangoutLink or conferenceData`)

  • If meeting 30-45 min away and not yet notified:

  • - Ask user: "Meeting [title] in X min. When was your last update? Which repos should I check?"
    - Track in state file to avoid duplicates
  • If meeting 10-20 min away:

  • - Generate update from commits
    - Send formatted update

    Daily Commit Summary

    Trigger: Cron at end of day.

  • Fetch all commits from configured repos for current day

  • Include all developers

  • Group by repo and subdirectory

  • Format with author names

  • Send summary
  • API Reference

    Check Calendar

    NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
    LATER=$(date -u -d "+45 minutes" +%Y-%m-%dT%H:%M:%SZ)
    TOKEN=$(jq -r '.access_token' credentials/calendar_tokens.json)
    
    curl -s "" \
      -H "Authorization: Bearer $TOKEN" | \
      jq '[.items[] | select(.hangoutLink != null or .conferenceData != null)]'
    
    Refresh Token
    
    CLIENT_ID=$(jq -r '.installed.client_id' credentials/client_secret.json)
    CLIENT_SECRET=$(jq -r '.installed.client_secret' credentials/client_secret.json)
    REFRESH_TOKEN=$(jq -r '.refresh_token' credentials/calendar_tokens.json)
    
    curl -s -X POST  \
      -d "client_id=$CLIENT_ID" \
      -d "client_secret=$CLIENT_SECRET" \
      -d "refresh_token=$REFRESH_TOKEN" \
      -d "grant_type=refresh_token"
    
    Fetch Commits
    
    TOKEN=$(cat credentials/github_token)
    SINCE=$(date -u -d "-7 days" +%Y-%m-%dT%H:%M:%SZ)
    
    # List org repos
    curl -s -H "Authorization: Bearer $TOKEN" \
      ""
    
    # Get commits
    curl -s -H "Authorization: Bearer $TOKEN" \
      ""
    
    Output Format
    
    Plain text, no markdown, no emojis:
    
    Update - [DATE]
    
    [repo-name]
    
    [subdirectory]
    • Verbose description of change (Author)
    • Another change (Author)
    
    Today
    • [user input]
    
    Blockers
    • None
    
    Discussion
    • None
    
    Formatting Rules
    
    • Group by repo, then subdirectory
    • Summarize commits into meaningful descriptions
    • Include author names
    • Plain text only for easy copy-paste
    State Management
    
    Track state in data/meeting-prep-state.json:
    
    {
      "notified": {},
      "config": {
        "repoFilter": "org-name/*"
      }
    }