From sundial-org-awesome-openclaw-skills-4
Prepares for meetings by checking Google Calendar events and generating GitHub commit-based standup updates; sends daily summaries across repos.
npx claudepluginhub joshuarweaver/cascade-ai-ml-agents-misc-2 --plugin sundial-org-awesome-openclaw-skills-4This skill uses the workspace's default tool permissions.
Automated meeting preparation and daily commit summaries for development teams.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Automated meeting preparation and daily commit summaries for development teams.
Create OAuth credentials in Google Cloud Console:
client_secret.json in credentials/https://www.googleapis.com/auth/calendarcredentials/calendar_tokens.jsonFor multiple accounts, store separate token files per account.
Create a classic Personal Access Token with repo scope. Store at credentials/github_token.
Trigger: Cron every 15 minutes or heartbeat.
hangoutLink or conferenceData)Trigger: Cron at end of day.
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 "https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin=$NOW&timeMax=$LATER&singleEvents=true" \
-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 https://oauth2.googleapis.com/token \
-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" \
"https://api.github.com/orgs/ORG_NAME/repos?per_page=50&sort=pushed"
# Get commits
curl -s -H "Authorization: Bearer $TOKEN" \
"https://api.github.com/repos/ORG/REPO/commits?since=$SINCE&per_page=30"
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/*"
}
}