Calendar Crab
name: calendar-crab
by clawbob · published 2026-03-22
$ claw add gh:clawbob/clawbob-calendar-crab---
name: calendar-crab
description: Google Calendar CLI — list, create, move, and delete events. Zero dependencies, just Node.js + Google OAuth.
---
# Calendar Crab
Google Calendar management via a single Node.js script. No npm install needed.
Prerequisites
Commands
List upcoming events
node calendar-crab.js list --days=7 --max=20Create an event
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
# 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
node calendar-crab.js delete --id="EVENT_ID"
node calendar-crab.js delete --date=2026-03-20 --time=10:00Configuration
| 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
1. Always `list` first to verify the target event exists and is unique.
2. `move` and `delete` auto-notify all attendees (`sendUpdates=all`).
3. On failure, the raw Google API error is returned for debugging.
Setup
1. Go to [Google Cloud Console](https://console.cloud.google.com/) and create a project.
2. Enable the **Google Calendar API**.
3. Create OAuth 2.0 credentials (Desktop app type).
4. Save the credentials as `~/.openclaw/secrets/google-calendar-oauth.json`:
```json
{
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
}
```
5. 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.
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...