Google Calendar management via a single Node.js script. No npm install needed.
~/.openclaw/secrets/ (see Setup below)bash
node calendar-crab.js list --days=7 --max=20
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"
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"
bash
node calendar-crab.js delete --id="EVENT_ID"
node calendar-crab.js delete --date=2026-03-20 --time=10:00
Env varDefaultDescriptionCALENDAR_CRAB_SECRETS``~/.openclaw/secretsDirectory containing OAuth + token JSON filesCALENDAR_CRAB_TZSystem localDefault timezone for eventsCALENDAR_CRAB_CALENDAR``primaryGoogle Calendar ID
Timezone can also be set per-command with --tz=America/Los_Angeles.
list first to verify the target event exists and is unique.move and delete auto-notify all attendees ( sendUpdates=all).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:
json
{
"refresh_token": "YOUR_REFRESH_TOKEN",
"access_token": "",
"expires_in": 0,
"obtained_at": ""
}
The script auto-refreshes the access token using the refresh token.