Install
openclaw skills install porteden-calendarSecured Calendar management - Google Calendar, Microsoft Outlook & Exchange - list, search, create, update, delete, and respond to calendar events across multiple accounts (gog-cli secure alternative).
openclaw skills install porteden-calendarUse porteden for calendar management across multiple accounts. Use -jc flags for AI-optimized output.
If porteden is not installed: brew install porteden/tap/porteden (or go install github.com/porteden/cli/cmd/porteden@latest).
Setup (once)
porteden auth login — opens browser, credentials stored in system keyringporteden auth login --token <key> — stored in system keyringporteden auth statusPE_API_KEY is set in the environment, the CLI uses it automatically (no login needed).Common commands
porteden calendar calendars -jcporteden calendar events --today -jcporteden calendar events --from 2026-02-01 --to 2026-02-07 -jcporteden calendar events --week --all -jcporteden calendar events -q "meeting" --today -jcporteden calendar by-contact "user@example.com" -jc (or --name "John Smith")porteden calendar event <eventId> -jcporteden calendar create --calendar <id> --summary "Meeting" --from "..." --to "..." --location "Room A" --attendees "a@b.com,c@d.com"porteden calendar update <eventId> --summary "New Title" (also: --from, --to, --location)porteden calendar update <eventId> --add-attendees "new@example.com" (or --remove-attendees; add --notify to send notifications)porteden calendar delete <eventId> (add --no-notify to skip attendee notifications)porteden calendar respond <eventId> accepted (or: declined, tentative)Event Status Values
confirmed - Accepted/scheduledtentative - Maybe attendingneedsAction - Requires response from usercancelled - Event was cancelledTime Formats
2026-02-01T10:00:00Z--all-day flagstartUtc, endUtc, durationMinutes fieldsNotes
PE_PROFILE=work to avoid repeating --profile.-jc is shorthand for --json --compact: filters noise, truncates descriptions, limits attendees, reduces tokens.--all to auto-fetch all pages; check meta.hasMore and meta.totalCount in JSON output.--limit 100 --offset 0, then --offset 100, etc.by-contact supports partial matching: "@acme.com" for email domain, --name "Smith" for name.porteden calendar calendars -jc.PE_API_KEY, PE_PROFILE, PE_TIMEZONE, PE_FORMAT, PE_COLOR, PE_VERBOSE.