Calendar & SchedulingDocumentedScanned
meeting-prep
Meeting preparation and daily commit summaries.
Share:
Installation
npx clawhub@latest install meeting-prepView the full skill documentation and source below.
Documentation
Meeting Prep
Automated meeting preparation and daily commit summaries for development teams.
Capabilities
Setup Requirements
Google Calendar OAuth
Create OAuth credentials in Google Cloud Console:
client_secret.json in credentials/
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`)- Ask user: "Meeting [title] in X min. When was your last update? Which repos should I check?"
- Track in state file to avoid duplicates
- Generate update from commits
- Send formatted update
Daily Commit Summary
Trigger: Cron at end of day.
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/*"
}
}