Calendar Hold Sync
Sync one or more source Google calendars into private Busy hold events in one or more target calenda
- Rating
- 4 (443 reviews)
- Downloads
- 2,566 downloads
- Version
- 1.0.0
Overview
Sync one or more source Google calendars into private Busy hold events in one or more target calendars using gog.
Complete Documentation
View Source →
Calendar Hold Sync
Implement hold mirroring from source Google calendars into target calendars to prevent double-booking.
Dependency
- Require
gogCLI inPATH. - Require user OAuth already configured for each account used in
mappings. - Do not hardcode account emails, calendar IDs, or event IDs in code.
gog is not configured, use this setup flow:
- Run
gog auth credentials /path/to/client_secret.json. - Run
gog auth add [email protected] --services calendar. - Verify with
gog auth list.
Official gog references:
- Homepage: https://gogcli.sh/
- Source: https://github.com/steipete/gogcli
Config Contract
Use a user-provided JSON config file with this shape:
mappings[]mappings[].namemappings[].targetAccountmappings[].targetCalendarId(defaultprimary)mappings[].sources[]with{ account, calendarId }mappings[].lookaheadDays(default30)mappings[].allDayMode:ignore|mirrormappings[].overlapPolicy:skip|allowhold.summary(defaultBusy)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, default20)safety.dryRunsafety.maxChangesPerRunsafety.excludeIfSummaryMatches[]safety.excludeIfDescriptionPrefix[]gog.listEventsCmd|createEventCmd|updateEventCmd|deleteEventCmd(optional template overrides)gog.allowCustomCommands(must betrueto enable anygog.*Cmdoverride)
Custom Command Template Safety
When custom commands are enabled:
- Only
gogcommand templates are accepted. - Templates are rendered by replacing placeholders like
{account}and{calendarId}. - Rendered commands are executed as argv tokens (no shell interpolation).
- Keep
gog.allowCustomCommands=falseunless you fully trust and audit the config file.
Metadata Encoding
Store source linkage in hold description as:
SYNCV1:
srcAccountsrcCalendareventIdstartendtitle
Behavior
For each mapping:
- Read source events in the active window.
- Build desired hold events (
private,busy, no reminders). - Detect existing managed holds by
SYNCV1:prefix. - Reconcile idempotently:
- Create missing holds.
- Update drifted holds.
- Delete stale holds.
- If overlap policy is
skip, do not create a hold when a non-managed target event overlaps. - Enforce
maxChangesPerRun. - Respect
dryRun.
Backfill
Backfill mode upgrades legacy hold events (matching expected hold signature but lacking SYNCV1) by attaching encoded metadata when a unique source match exists.
Command Surface
hold-sync validate-confighold-sync reconcile --mapping|--all [--dry-run] hold-sync backfill --mapping|--all [--dry-run] hold-sync status --mapping|--all hold-sync install-cron --mapping|--all hold-sync watch --mapping|--all [--dry-run] [--interval-seconds ]
Watch Cadence
Require watch cadence to be configurable from user config:
scheduling.watchIntervalSecondscontrols watch poll frequency.mappings[].lookaheadDayscontrols rolling watch/reconcile window.
watchIntervalSeconds: 900(15 minutes)lookaheadDays: 1(24 hours)
Working Model
- Use polling-based watch mode (
hold-sync watch) for fast updates. - Expect update latency approximately equal to
watchIntervalSeconds. - Treat this as self-hosted/operator-run automation.
Known Limits
- Do not assume webhook/push subscriptions are present; current fast sync path is polling.
- Keep periodic scheduled reconcile as fallback even when watch mode is enabled.
Required Tests
- metadata encode/decode round-trip
- overlap detection correctness
- idempotent reconcile upsert/delete behavior
gog setup flow adapted from:
- https://clawhub.ai/steipete/gog
- https://github.com/steipete/gogcli
- https://gogcli.sh/
Provider Notes (openclaw)
Use this variant when publishing to ClawHub/OpenClaw.
- Keep instructions implementation-focused and command-oriented.
- Keep dependency explicit:
gogmust be preconfigured by user. - Prefer deterministic script execution over speculative edits.
- Avoid provider-specific APIs; treat the CLI as the boundary.
Installation
openclaw install calendar-hold-sync
Tags
Quick Info
Ready to Install?
Get started with this skill in seconds
Related Skills
4claw
4claw — a moderated imageboard for AI agents.
Aap Passport
Agent Attestation Protocol - The Reverse Turing Test.
Acestep Lyrics Transcription
Transcribe audio to timestamped lyrics using OpenAI Whisper or ElevenLabs Scribe API.
Adaptive Suite
A continuously adaptive skill suite that empowers Clawdbot.