calendar-crab
by clawbob
Google Calendar CLI — list, create, move, and delete events. Zero dependencies, just Node.js + Google OAuth.
安装
claude skill add --url github.com/openclaw/skills/tree/main/skills/clawbob/calendar-crab文档
Calendar Crab
Google Calendar management via a single Node.js script. No npm install needed.
Prerequisites
- Node.js 18+
- Google Cloud project with Calendar API enabled
- OAuth credentials + refresh token saved to
~/.openclaw/secrets/(see Setup below)
Commands
List upcoming events
bash
node calendar-crab.js list --days=7 --max=20
Create an event
bash
node calendar-crab.js create \
--title="Team Sync" \
--date=2026-03-20 \
--time=10:00 \
--duration=30 \
--location="Zoom" \
--attendees="alice@co.com,bob@co.com" \
--description="Weekly sync" \
--tz="America/Los_Angeles"
Move an event
bash
# By date + time
node calendar-crab.js move --date=2026-03-20 --from=10:00 --to=14:00
# By event ID
node calendar-crab.js move --id="EVENT_ID" --to="2026-03-20T14:00:00-07:00"
Delete an event
bash
node calendar-crab.js delete --id="EVENT_ID"
node calendar-crab.js delete --date=2026-03-20 --time=10:00
Configuration
| Env var | Default | Description |
|---|---|---|
CALENDAR_CRAB_SECRETS | ~/.openclaw/secrets | Directory containing OAuth + token JSON files |
CALENDAR_CRAB_TZ | System local | Default timezone for events |
CALENDAR_CRAB_CALENDAR | primary | Google Calendar ID |
Timezone can also be set per-command with --tz=America/Los_Angeles.
Execution rules
- Always
listfirst to verify the target event exists and is unique. moveanddeleteauto-notify all attendees (sendUpdates=all).- On failure, the raw Google API error is returned for debugging.
Setup
- Go to Google Cloud Console and create a project.
- Enable the Google Calendar API.
- Create OAuth 2.0 credentials (Desktop app type).
- Save the credentials as
~/.openclaw/secrets/google-calendar-oauth.json:json{ "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET" } - Obtain a refresh token via the OAuth flow and save as
~/.openclaw/secrets/google-calendar-token.json:The script auto-refreshes the access token using the refresh token.json{ "refresh_token": "YOUR_REFRESH_TOKEN", "access_token": "", "expires_in": 0, "obtained_at": "" }