# Calendar Crab

> Google Calendar CLI — list, create, move, and delete events. Zero dependencies, just Node.js + Google OAuth.

- Skill: `lord1egypt/calendar-crab` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lord1egypt/calendar-crab`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lord1egypt/calendar-crab/raw
- Safety review: pending (external: skill-scanner PASS, skillspector CAUTION)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: Lord1Egypt (https://skillmd.com/u/lord1egypt)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/lord1egypt/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

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.

