Openclaw-master-skills gcalcli-calendar
Google Calendar via gcalcli: today-only agenda by default, bounded meaning-first lookup via agenda scans, and fast create/delete with verification--optimized for low tool calls and minimal output.
install
source · Clone the upstream repo
git clone https://github.com/LeoYeAI/openclaw-master-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/LeoYeAI/openclaw-master-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/gcalcli-calendar" ~/.claude/skills/leoyeai-openclaw-master-skills-gcalcli-calendar && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/LeoYeAI/openclaw-master-skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/gcalcli-calendar" ~/.openclaw/skills/leoyeai-openclaw-master-skills-gcalcli-calendar && rm -rf "$T"
manifest:
skills/gcalcli-calendar/SKILL.mdsource content
gcalcli-calendar
Use
gcalcli to read/search/manage Google Calendar with minimal tool calls and minimal output.
Rules
CLI flag placement (critical)
- Global flags (
,--nocolor
) go BEFORE the subcommand.--calendar - Subcommand-specific flags go AFTER the subcommand name.
- Example:
— NOTgcalcli --nocolor delete --iamaexpert "query" start end
.gcalcli --nocolor --iamaexpert delete ... - This applies to ALL subcommand flags:
(delete),--iamaexpert
/--noprompt
(add),--allday
(import), etc.--use-legacy-import
Output & language
- Don't print CLI commands/flags/tool details unless the user explicitly asks (e.g. "show commands used", "/debug", "/commands").
- If asked for commands: print ALL executed commands in order (including retries) and nothing else.
- Don't mix languages within one reply.
- Be concise. No scope unless nothing found.
Dates & formatting
- Human-friendly dates by default. ISO only if explicitly requested.
- Don't quote event titles unless needed to disambiguate.
Calendar scope
- Trust gcalcli config (default/ignore calendars). Don't broaden scope unless user asks "across all calendars" or results are clearly wrong.
Agenda (today-only by default)
- If user asks "agenda" without a period, return today only.
- Expand only if explicitly asked (tomorrow / next N days / date range).
Weekday requests (no mental math)
If user says "on Monday/Tuesday/..." without a date:
- fetch next 14 days agenda once,
- pick matching day/event from tool output,
- proceed (or disambiguate if multiple).
Finding events: prefer deterministic agenda scan (meaning-first)
When locating events to cancel/delete/edit:
- Prefer
overagenda
.search - Use a bounded window and match events by meaning (semantic match) rather than exact text.
- Default locate windows:
- If user gives an exact date: scan that day only.
- If user gives a weekday: scan next 14 days.
- If user gives only meaning words ("train", "lecture", etc.) with no date: scan next 30 days first.
- If still not found: expand to 180 days and say so only if still empty.
Use gcalcli
search only as a fallback when:
- the time window would be too large to scan via agenda (token-heavy), or
- the user explicitly asked to "search".
Search (bounded)
- Default search window: next ~180 days (unless user specified otherwise).
- If no matches: say "No matches in next ~6 months (<from>-><to>)" and offer to expand.
- Show scope only when nothing is found.
Tool efficiency
- Default: use
to reduce formatting noise and tokens.--nocolor - Use
only if you must parse/dedupe/sort.--tsv
Actions policy (optimized for conversational speed)
This skill is designed for personal assistant use where the user expects fast, low-friction calendar management. The confirmation policy below is an intentional UX choice — see README.md for rationale and safety guards.
Unambiguous actions: execute immediately
For cancel/delete/edit actions, skip confirmation when ALL of these hold:
- The user explicitly requested the action (e.g. "delete my dentist appointment").
- Exactly one event matches in a tight time window.
- The match is unambiguous (single clear result on an exact date, or user specified date+time).
Ambiguous actions: always ask first
If multiple candidates match, or the match is uncertain:
- Ask a short disambiguation question listing the candidates (1-3 lines) and wait for the user's choice.
Create events: overlap check MUST be cross-calendar (non-ignored scope)
When creating an event:
- Always run a best-effort overlap check across ALL non-ignored calendars by scanning agenda WITHOUT
.--calendar- This ensures overlaps are detected even if the new event is created into a specific calendar.
- If overlap exists with busy events:
- Ask for confirmation before creating.
- If no overlap:
- Create immediately.
Choose the right create method
— default for one-off events. Supportsadd
,--allday
,--reminder
. Does NOT support recurrence or free/busy (transparency).--noprompt
via stdin — use ONLY when you need recurrence (RRULE) or free/busy (TRANSP:TRANSPARENT). Pipe ICS content via stdin; NEVER write temp .ics files (working directory is unreliable in exec sandbox).import
— avoid unless user explicitly asks for natural-language add. Less deterministic.quick
Deletes must be verified
- Use non-interactive delete with
(a--iamaexpert
subcommand flag — goes AFTERdelete
). This is gcalcli's built-in flag for non-interactive/scripted deletion.delete - Always verify via agenda in the same tight window after deletion.
- If verification still shows the event, do one retry with
.--refresh - Never claim success unless verification confirms the event is gone.
Canonical commands
Agenda (deterministic listing)
- Today:
gcalcli --nocolor agenda today tomorrow - Next 14d (weekday resolution):
gcalcli --nocolor agenda today +14d - Next 30d (meaning-first locate):
gcalcli --nocolor agenda today +30d - Custom:
gcalcli --nocolor agenda <start> <end>
Search (fallback / explicit request)
- Default (~6 months):
gcalcli --nocolor search "<query>" today +180d - Custom:
gcalcli --nocolor search "<query>" <start> <end>
Create — add
(one-off events)
add- Overlap preflight (tight, cross-calendar):
gcalcli --nocolor agenda <start> <end>- IMPORTANT: do NOT add
here; overlaps must be checked across all non-ignored calendars.--calendar
- Timed event:
gcalcli --nocolor --calendar "<Cal>" add --noprompt --title "<Title>" --when "<Start>" --duration <minutes>
- All-day event:
gcalcli --nocolor --calendar "<Cal>" add --noprompt --allday --title "<Title>" --when "<Date>"
- With reminders (repeatable flag):
→ 14 days before (20160 = 14×24×60)--reminder "20160 popup"
→ 7 days before--reminder "10080 popup"
→ at event start--reminder "0 popup"- Time unit suffixes:
(weeks),w
(days),d
(hours),h
(minutes). No suffix = minutes.m - Method:
(default),popup
,email
.sms
Create — import
via stdin (recurrence / free/busy)
importUse ONLY when
add can't cover the need (recurring events, TRANSP, etc.).
Pipe ICS directly via stdin — never write temp files.
echo 'BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT DTSTART;VALUE=DATE:20260308 SUMMARY:Event Title RRULE:FREQ=YEARLY TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR' | gcalcli import --calendar "<Cal>"
for all-day;DTSTART;VALUE=DATE:YYYYMMDD
for timed.DTSTART:YYYYMMDDTHHmmSS
— yearly recurrence. Also:RRULE:FREQ=YEARLY
,DAILY
,WEEKLY
.MONTHLY
— free;TRANSP:TRANSPARENT
— busy (default).TRANSP:OPAQUE- One import call = one event (one VEVENT block). For multiple events, run separate piped imports.
- Add
flag(s) to set reminders (overrides any VALARM in ICS).--reminder "TIME" - All import-specific flags (
,--use-legacy-import
, etc.) go AFTER--verbose
.import
Delete (with post-delete verification)
- Locate via agenda (preferred):
(exact date)gcalcli --nocolor agenda <dayStart> <dayEnd>
(weekday)gcalcli --nocolor agenda today +14d
(meaning only)gcalcli --nocolor agenda today +30d
- Delete (non-interactive, bounded):
gcalcli --nocolor delete --iamaexpert "<query>" <start> <end>
- Verify (same window):
gcalcli --nocolor agenda <dayStart> <dayEnd>
- Optional one retry if still present:
gcalcli --nocolor --refresh agenda <dayStart> <dayEnd>
Edit / Modify existing events
is interactive — cannot be used in non-interactive exec.gcalcli edit- To change properties not editable in-place: delete + recreate the event.
- Locate → delete (with
) → create with updated properties → verify.--iamaexpert
- Locate → delete (with
- For bulk property changes (e.g. setting all events to free): iterate delete+recreate per event.