Install
openclaw skills install calendar-hold-syncSync one or more source Google calendars into private Busy hold events in one or more target calendars using gog. Use when users need idempotent double-booking prevention, backfill of legacy holds, drift reconcile, or safe scheduled sync.
openclaw skills install calendar-hold-syncImplement hold mirroring from source Google calendars into target calendars to prevent double-booking.
gog CLI in PATH.mappings.If gog is not configured, use this setup flow:
gog auth credentials /path/to/client_secret.json.gog auth add you@gmail.com --services calendar.gog auth list.Only add additional Google services if you explicitly need them for another workflow.
Official gog references:
Use a user-provided JSON config file with this shape:
mappings[]mappings[].namemappings[].targetAccountmappings[].targetCalendarId (default primary)mappings[].sources[] with { account, calendarId }mappings[].lookaheadDays (default 30)mappings[].allDayMode: ignore|mirrormappings[].overlapPolicy: skip|allowhold.summary (default Busy)hold.visibility (private)hold.transparency (busy)hold.notifications (none)hold.reminders (none)metadata.format (SYNCV1)metadata.encoding (base64url(json))metadata.fields: srcAccount,srcCalendar,eventId,start,end,titlescheduling.reconcileCronscheduling.daytimeCron (optional)scheduling.driftWindowDays (optional)scheduling.watchIntervalSeconds (optional, default 20)safety.dryRunsafety.maxChangesPerRunsafety.excludeIfSummaryMatches[]safety.excludeIfDescriptionPrefix[]gog.listEventsCmd|createEventCmd|updateEventCmd|deleteEventCmd (optional template overrides)gog.allowCustomCommands (must be true to enable any gog.*Cmd override)When custom commands are enabled:
gog command templates are accepted.{account} and {calendarId}.gog.allowCustomCommands=false unless you fully trust and audit the config file.Store source linkage in hold description as:
SYNCV1:<base64url(JSON)>JSON fields:
srcAccountsrcCalendareventIdstartendtitleFor each mapping:
private, busy, no reminders).SYNCV1: prefix.skip, do not create a hold when a non-managed target event overlaps.maxChangesPerRun.dryRun.Backfill mode upgrades legacy hold events (matching expected hold signature but lacking SYNCV1) by attaching encoded metadata when a unique source match exists.
hold-sync validate-confighold-sync reconcile --mapping <name>|--all [--dry-run]hold-sync backfill --mapping <name>|--all [--dry-run]hold-sync status --mapping <name>|--allhold-sync install-cron --mapping <name>|--allhold-sync watch --mapping <name>|--all [--dry-run] [--interval-seconds <n>]Require watch cadence to be configurable from user config:
scheduling.watchIntervalSeconds controls watch poll frequency.mappings[].lookaheadDays controls rolling watch/reconcile window.Recommend baseline values:
watchIntervalSeconds: 900 (15 minutes)lookaheadDays: 1 (24 hours)hold-sync watch) for fast updates.watchIntervalSeconds.Attribution: gog setup flow adapted from:
Use this variant when publishing to ClawHub/OpenClaw.
gog must be preconfigured by user.