{"skill":{"slug":"gcalcli-calendar","displayName":"Google Calendar (via gcalcli)","summary":"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.","description":"---\nname: gcalcli-calendar\ndescription: \"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.\"\nmetadata: {\"openclaw\":{\"emoji\":\"📅\",\"requires\":{\"bins\":[\"gcalcli\"]}}}\n---\n\n# gcalcli-calendar\n\nUse `gcalcli` to read/search/manage Google Calendar with minimal tool calls and minimal output.\n\n## Rules\n\n### CLI flag placement (critical)\n- Global flags (`--nocolor`, `--calendar`) go BEFORE the subcommand.\n- Subcommand-specific flags go AFTER the subcommand name.\n- Example: `gcalcli --nocolor delete --iamaexpert \"query\" start end` — NOT `gcalcli --nocolor --iamaexpert delete ...`.\n- This applies to ALL subcommand flags: `--iamaexpert` (delete), `--noprompt`/`--allday` (add), `--use-legacy-import` (import), etc.\n\n### Output & language\n- Don't print CLI commands/flags/tool details unless the user explicitly asks (e.g. \"show commands used\", \"/debug\", \"/commands\").\n- If asked for commands: print ALL executed commands in order (including retries) and nothing else.\n- Don't mix languages within one reply.\n- Be concise. No scope unless nothing found.\n\n### Dates & formatting\n- Human-friendly dates by default. ISO only if explicitly requested.\n- Don't quote event titles unless needed to disambiguate.\n\n### Calendar scope\n- Trust gcalcli config (default/ignore calendars). Don't broaden scope unless user asks \"across all calendars\" or results are clearly wrong.\n\n### Agenda (today-only by default)\n- If user asks \"agenda\" without a period, return today only.\n- Expand only if explicitly asked (tomorrow / next N days / date range).\n\n### Weekday requests (no mental math)\nIf user says \"on Monday/Tuesday/...\" without a date:\n1) fetch next 14 days agenda once,\n2) pick matching day/event from tool output,\n3) proceed (or disambiguate if multiple).\n\n### Finding events: prefer deterministic agenda scan (meaning-first)\nWhen locating events to cancel/delete/edit:\n- Prefer `agenda` over `search`.\n- Use a bounded window and match events by meaning (semantic match) rather than exact text.\n- Default locate windows:\n  - If user gives an exact date: scan that day only.\n  - If user gives a weekday: scan next 14 days.\n  - If user gives only meaning words (\"train\", \"lecture\", etc.) with no date: scan next 30 days first.\n  - If still not found: expand to 180 days and say so only if still empty.\n\nUse gcalcli `search` only as a fallback when:\n- the time window would be too large to scan via agenda (token-heavy), or\n- the user explicitly asked to \"search\".\n\n### Search (bounded)\n- Default search window: next ~180 days (unless user specified otherwise).\n- If no matches: say \"No matches in next ~6 months (<from>-><to>)\" and offer to expand.\n- Show scope only when nothing is found.\n\n### Tool efficiency\n- Default: use `--nocolor` to reduce formatting noise and tokens.\n- Use `--tsv` only if you must parse/dedupe/sort.\n\n## Actions policy (optimized for conversational speed)\n\nThis 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.\n\n### Unambiguous actions: execute immediately\nFor cancel/delete/edit actions, skip confirmation when ALL of these hold:\n- The user explicitly requested the action (e.g. \"delete my dentist appointment\").\n- Exactly one event matches in a tight time window.\n- The match is unambiguous (single clear result on an exact date, or user specified date+time).\n\n### Ambiguous actions: always ask first\nIf multiple candidates match, or the match is uncertain:\n- Ask a short disambiguation question listing the candidates (1-3 lines) and wait for the user's choice.\n\n### Create events: overlap check MUST be cross-calendar (non-ignored scope)\nWhen creating an event:\n- Always run a best-effort overlap check across ALL non-ignored calendars by scanning agenda WITHOUT `--calendar`.\n  - This ensures overlaps are detected even if the new event is created into a specific calendar.\n- If overlap exists with busy events:\n  - Ask for confirmation before creating.\n- If no overlap:\n  - Create immediately.\n\n### Choose the right create method\n- **`add`** — default for one-off events. Supports `--allday`, `--reminder`, `--noprompt`. Does NOT support recurrence or free/busy (transparency).\n- **`import` 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).\n- **`quick`** — avoid unless user explicitly asks for natural-language add. Less deterministic.\n\n### Deletes must be verified\n- Use non-interactive delete with `--iamaexpert` (a `delete` subcommand flag — goes AFTER `delete`). This is gcalcli's built-in flag for non-interactive/scripted deletion.\n- Always verify via agenda in the same tight window after deletion.\n- If verification still shows the event, do one retry with `--refresh`.\n- Never claim success unless verification confirms the event is gone.\n\n## Canonical commands\n\n### Agenda (deterministic listing)\n- Today: `gcalcli --nocolor agenda today tomorrow`\n- Next 14d (weekday resolution): `gcalcli --nocolor agenda today +14d`\n- Next 30d (meaning-first locate): `gcalcli --nocolor agenda today +30d`\n- Custom: `gcalcli --nocolor agenda <start> <end>`\n\n### Search (fallback / explicit request)\n- Default (~6 months): `gcalcli --nocolor search \"<query>\" today +180d`\n- Custom: `gcalcli --nocolor search \"<query>\" <start> <end>`\n\n### Create — `add` (one-off events)\n- Overlap preflight (tight, cross-calendar):\n  - `gcalcli --nocolor agenda <start> <end>`\n  - IMPORTANT: do NOT add `--calendar` here; overlaps must be checked across all non-ignored calendars.\n- Timed event:\n  - `gcalcli --nocolor --calendar \"<Cal>\" add --noprompt --title \"<Title>\" --when \"<Start>\" --duration <minutes>`\n- All-day event:\n  - `gcalcli --nocolor --calendar \"<Cal>\" add --noprompt --allday --title \"<Title>\" --when \"<Date>\"`\n- With reminders (repeatable flag):\n  - `--reminder \"20160 popup\"` → 14 days before (20160 = 14×24×60)\n  - `--reminder \"10080 popup\"` → 7 days before\n  - `--reminder \"0 popup\"` → at event start\n  - Time unit suffixes: `w` (weeks), `d` (days), `h` (hours), `m` (minutes). No suffix = minutes.\n  - Method: `popup` (default), `email`, `sms`.\n\n### Create — `import` via stdin (recurrence / free/busy)\nUse ONLY when `add` can't cover the need (recurring events, TRANSP, etc.).\nPipe ICS directly via stdin — never write temp files.\n```\necho 'BEGIN:VCALENDAR\nVERSION:2.0\nBEGIN:VEVENT\nDTSTART;VALUE=DATE:20260308\nSUMMARY:Event Title\nRRULE:FREQ=YEARLY\nTRANSP:TRANSPARENT\nEND:VEVENT\nEND:VCALENDAR' | gcalcli import --calendar \"<Cal>\"\n```\n- `DTSTART;VALUE=DATE:YYYYMMDD` for all-day; `DTSTART:YYYYMMDDTHHmmSS` for timed.\n- `RRULE:FREQ=YEARLY` — yearly recurrence. Also: `DAILY`, `WEEKLY`, `MONTHLY`.\n- `TRANSP:TRANSPARENT` — free; `TRANSP:OPAQUE` — busy (default).\n- One import call = one event (one VEVENT block). For multiple events, run separate piped imports.\n- Add `--reminder \"TIME\"` flag(s) to set reminders (overrides any VALARM in ICS).\n- All import-specific flags (`--use-legacy-import`, `--verbose`, etc.) go AFTER `import`.\n\n### Delete (with post-delete verification)\n- Locate via agenda (preferred):\n  - `gcalcli --nocolor agenda <dayStart> <dayEnd>` (exact date)\n  - `gcalcli --nocolor agenda today +14d` (weekday)\n  - `gcalcli --nocolor agenda today +30d` (meaning only)\n- Delete (non-interactive, bounded):\n  - `gcalcli --nocolor delete --iamaexpert \"<query>\" <start> <end>`\n- Verify (same window):\n  - `gcalcli --nocolor agenda <dayStart> <dayEnd>`\n- Optional one retry if still present:\n  - `gcalcli --nocolor --refresh agenda <dayStart> <dayEnd>`\n\n### Edit / Modify existing events\n- `gcalcli edit` is interactive — cannot be used in non-interactive exec.\n- To change properties not editable in-place: **delete + recreate** the event.\n  - Locate → delete (with `--iamaexpert`) → create with updated properties → verify.\n- For bulk property changes (e.g. setting all events to free): iterate delete+recreate per event.\n","tags":{"agenda":"3.0.0","calendar":"3.0.0","events":"3.0.0","gcalcli":"3.0.0","google-calendar":"3.0.0","latest":"3.0.0","productivity":"3.0.0","schedule":"3.0.0","token-efficient":"3.0.0"},"stats":{"comments":0,"downloads":16342,"installsAllTime":115,"installsCurrent":114,"stars":10,"versions":11},"createdAt":1770329342455,"updatedAt":1778486032634},"latestVersion":{"version":"3.0.0","createdAt":1770939510320,"changelog":"- Added a README.md file with rationale and safety notes.\n- Clarified action confirmation policy: unambiguous destructive actions (delete/edit) are run immediately, ambiguous ones always require user confirmation.\n- Updated action policy section to emphasize conversational speed and personal assistant use case.\n- Renamed/delete section now explicitly describes post-delete verification and the use of `--iamaexpert`.\n- No behavior changes to commands, but documentation is clearer about UX intent and safeguards.","license":null},"metadata":{"setup":[],"os":null,"systems":null},"owner":{"handle":"lstpsche","userId":"s17e65zsnrnq4cpfyghybrn4p985gcav","displayName":"Nikita Shkoda","image":"https://avatars.githubusercontent.com/u/40822400?v=4"},"moderation":null}