Install
openclaw skills install meeting-coordinatorExecutive scheduling assistant for meeting coordination (email, calendar, venues, confirmations).
openclaw skills install meeting-coordinatorOperate as a high-precision executive assistant for scheduling.
Use this skill when the human asks to:
Minimize scheduling friction while protecting the human's time and reputation:
USER.md must provideAmerica/New_York)SOUL.md or IDENTITY.md must providegog CLI with calendar and Gmail accessgoplaces CLI for venue lookupscripts/check-availability.pyscripts/find-venue.pyIf required context is missing, ask concise clarification questions before taking action.
This skill relies on local CLI authentication and local config state.
gog, goplaces, python3GOG_ACCOUNT: agent Gmail account identity used by gogGOOGLE_PLACES_API_KEY: API key used by goplaces$HOME/.config/gog$HOME/.config/goplacesGOG_ACCOUNT or GOOGLE_PLACES_API_KEY is unset, stop and ask the human to configure credentials before continuing.Credential handling expectations:
gog uses OAuth credentials/tokens tied to the account selected by GOG_ACCOUNT.goplaces uses GOOGLE_PLACES_API_KEY.Preflight checks (required before first mutation in a session):
echo "$GOG_ACCOUNT" and confirm it matches the intended agent Gmail account.gog auth state: gog auth list.goplaces key is present: test -n "$GOOGLE_PLACES_API_KEY".primary calendar unless the human explicitly instructs it.--location.--meet to auto-generate a Google Meet link and leave --location unset.--transparency busy flag in the gog CLI.SOUL.md/IDENTITY.md.gog gmail send --body-html.ET, CT, MT, PT) instead of IANA timezone IDs.3:00 PM ET / 12:00 PM PT).Tracking file: memory/scheduling/in-progress.md
Archive file: memory/scheduling/archive.md
Create one entry per meeting and update on every state change.
Never delete active entries from in-progress.md.
Required fields:
meeting_id (stable local identifier)counterparty_namecounterparty_emailmeeting_type (virtual | coffee | lunch | dinner | other)purposetimezonestatusproposed_optionsselected_optioncalendar_event_ids_active:
tentativemaintravel_tobuffer_posttravel_homecalendar_event_ids_deleted (list of {event_id, deleted_at, reason})venue (name + full address, if in-person)reservation (none | details/confirmation code | phone-needed | walk-in)thread_context (subject + message/thread identifiers when available)created_atupdated_atactivity_log (append-only)Status lifecycle:
intake -> awaiting-human-approval -> awaiting-counterparty -> confirmed -> completed
Alternative terminal states: cancelled, closed-no-response
Allowed transitions:
intake -> awaiting-human-approval | cancelledawaiting-human-approval -> awaiting-counterparty | cancelledawaiting-counterparty -> confirmed | awaiting-human-approval | closed-no-response | cancelledconfirmed -> completed | awaiting-human-approval | cancelledcompleted | cancelled | closed-no-response -> eligible for archive move after retention windowUse this structure for each meeting entry:
## <meeting_id> — <counterparty_name>
- meeting_id: <meeting_id>
- counterparty_name: <name>
- counterparty_email: <email>
- meeting_type: <virtual|coffee|lunch|dinner|other>
- purpose: <short text>
- timezone: <IANA timezone>
- status: <status>
- proposed_options: <list or none>
- selected_option: <option or none>
- calendar_event_ids_active:
- tentative: []
- main: []
- travel_to: []
- buffer_post: []
- travel_home: []
- calendar_event_ids_deleted: []
- venue: <name + full address or none>
- reservation: <none|details>
- thread_context: <subject + ids or none>
- created_at: <ISO 8601 timestamp with offset>
- updated_at: <ISO 8601 timestamp with offset>
### Activity Log
- <timestamp> Entry created.
meeting_id. If missing, create a new entry.updated_at and append a one-line Activity Log entry.calendar_event_ids_active to calendar_event_ids_deleted with timestamp and reason.in-progress.md until retention rules permit archival.Retention is based on updated_at.
in-progress.md when BOTH conditions are true:
completed | cancelled | closed-no-responseupdated_at is at least 14 days oldmemory/scheduling/archive.md.USER.md only when the human has not specified values.USER.md defaults).python3 scripts/check-availability.py \
--calendar <calendar_id> \
--date YYYY-MM-DD \
--duration <minutes> \
--start-hour <0-23> \
--end-hour <1-24> \
--tz <iana_timezone>
python3 scripts/find-venue.py \
--location "Neighborhood, City" \
--type coffee|lunch|dinner \
--min-rating <optional>
Present a concise options table including:
ET, CT, MT, PT)3:00 PM ET / 12:00 PM PT)Do not contact the counterparty until the human approves.
8 for tentative.gog calendar create <calendar_id> \
--summary "HOLD: <Counterparty Name> (<Option Label>)" \
--from "YYYY-MM-DDTHH:MM:SS<offset>" \
--to "YYYY-MM-DDTHH:MM:SS<offset>" \
--event-color 8
references/email-templates.md.--body-html when sending email.accepted: move to confirmation workflow.counter-proposed: re-run availability and return to human for approval.declined without alternatives: ask human whether to close or send fresh options.gog calendar delete <calendar_id> <event_id> --force
Record each deleted hold in calendar_event_ids_deleted with timestamp and reason.
Do not delete the meeting entry.
In-person:
gog calendar create <calendar_id> \
--summary "<Human Name> // <Counterparty Name>" \
--from "YYYY-MM-DDTHH:MM:SS<offset>" \
--to "YYYY-MM-DDTHH:MM:SS<offset>" \
--location "<Venue Name>, <Full Street Address>" \
--description "" \
--attendees <counterparty_email>
Virtual:
gog calendar create <calendar_id> \
--summary "<Human Name> // <Counterparty Name>" \
--from "YYYY-MM-DDTHH:MM:SS<offset>" \
--to "YYYY-MM-DDTHH:MM:SS<offset>" \
--attendees <counterparty_email> \
--meet
gog calendar create <calendar_id> \
--summary "Travel: Home -> <Venue>" \
--from "<start minus travel>" \
--to "<start>" \
--event-color 10
gog calendar create <calendar_id> \
--summary "Buffer: Post-meeting" \
--from "<meeting end>" \
--to "<meeting end plus buffer>" \
--event-color 10
gog calendar create <calendar_id> \
--summary "Travel: <Venue> -> Home" \
--from "<buffer end>" \
--to "<buffer end plus travel>" \
--event-color 10
confirmed.calendar_event_ids_deleted.in-progress.md.cancelled with reason and timestamp.in-progress.md until 14-day retention threshold is met, then archive it.For in-person or high-stakes meetings:
-05:00, -08:00, etc.).ET/CT/MT/PT labels in outbound email copy.Use references/email-templates.md for:
Before finishing any scheduling task, verify:
in-progress.md