{
  "schemaVersion": "1.0",
  "item": {
    "slug": "gcalcli-calendar",
    "name": "Google Calendar (via gcalcli)",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/lstpsche/gcalcli-calendar",
    "canonicalUrl": "https://clawhub.ai/lstpsche/gcalcli-calendar",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/gcalcli-calendar",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=gcalcli-calendar",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/gcalcli-calendar"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/gcalcli-calendar",
    "agentPageUrl": "https://openagent3.xyz/skills/gcalcli-calendar/agent",
    "manifestUrl": "https://openagent3.xyz/skills/gcalcli-calendar/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/gcalcli-calendar/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "gcalcli-calendar",
        "body": "Use gcalcli to read/search/manage Google Calendar with minimal tool calls and minimal output."
      },
      {
        "title": "CLI flag placement (critical)",
        "body": "Global flags (--nocolor, --calendar) go BEFORE the subcommand.\nSubcommand-specific flags go AFTER the subcommand name.\nExample: gcalcli --nocolor delete --iamaexpert \"query\" start end — NOT gcalcli --nocolor --iamaexpert delete ....\nThis applies to ALL subcommand flags: --iamaexpert (delete), --noprompt/--allday (add), --use-legacy-import (import), etc."
      },
      {
        "title": "Output & language",
        "body": "Don't print CLI commands/flags/tool details unless the user explicitly asks (e.g. \"show commands used\", \"/debug\", \"/commands\").\nIf asked for commands: print ALL executed commands in order (including retries) and nothing else.\nDon't mix languages within one reply.\nBe concise. No scope unless nothing found."
      },
      {
        "title": "Dates & formatting",
        "body": "Human-friendly dates by default. ISO only if explicitly requested.\nDon't quote event titles unless needed to disambiguate."
      },
      {
        "title": "Calendar scope",
        "body": "Trust gcalcli config (default/ignore calendars). Don't broaden scope unless user asks \"across all calendars\" or results are clearly wrong."
      },
      {
        "title": "Agenda (today-only by default)",
        "body": "If user asks \"agenda\" without a period, return today only.\nExpand only if explicitly asked (tomorrow / next N days / date range)."
      },
      {
        "title": "Weekday requests (no mental math)",
        "body": "If user says \"on Monday/Tuesday/...\" without a date:\n\nfetch next 14 days agenda once,\npick matching day/event from tool output,\nproceed (or disambiguate if multiple)."
      },
      {
        "title": "Finding events: prefer deterministic agenda scan (meaning-first)",
        "body": "When locating events to cancel/delete/edit:\n\nPrefer agenda over search.\nUse a bounded window and match events by meaning (semantic match) rather than exact text.\nDefault locate windows:\n\nIf user gives an exact date: scan that day only.\nIf user gives a weekday: scan next 14 days.\nIf user gives only meaning words (\"train\", \"lecture\", etc.) with no date: scan next 30 days first.\nIf still not found: expand to 180 days and say so only if still empty.\n\nUse gcalcli search only as a fallback when:\n\nthe time window would be too large to scan via agenda (token-heavy), or\nthe user explicitly asked to \"search\"."
      },
      {
        "title": "Search (bounded)",
        "body": "Default search window: next ~180 days (unless user specified otherwise).\nIf no matches: say \"No matches in next ~6 months (<from>-><to>)\" and offer to expand.\nShow scope only when nothing is found."
      },
      {
        "title": "Tool efficiency",
        "body": "Default: use --nocolor to reduce formatting noise and tokens.\nUse --tsv only if you must parse/dedupe/sort."
      },
      {
        "title": "Actions policy (optimized for conversational speed)",
        "body": "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."
      },
      {
        "title": "Unambiguous actions: execute immediately",
        "body": "For cancel/delete/edit actions, skip confirmation when ALL of these hold:\n\nThe user explicitly requested the action (e.g. \"delete my dentist appointment\").\nExactly one event matches in a tight time window.\nThe match is unambiguous (single clear result on an exact date, or user specified date+time)."
      },
      {
        "title": "Ambiguous actions: always ask first",
        "body": "If multiple candidates match, or the match is uncertain:\n\nAsk a short disambiguation question listing the candidates (1-3 lines) and wait for the user's choice."
      },
      {
        "title": "Create events: overlap check MUST be cross-calendar (non-ignored scope)",
        "body": "When creating an event:\n\nAlways run a best-effort overlap check across ALL non-ignored calendars by scanning agenda WITHOUT --calendar.\n\nThis ensures overlaps are detected even if the new event is created into a specific calendar.\n\n\nIf overlap exists with busy events:\n\nAsk for confirmation before creating.\n\n\nIf no overlap:\n\nCreate immediately."
      },
      {
        "title": "Choose the right create method",
        "body": "add — default for one-off events. Supports --allday, --reminder, --noprompt. Does NOT support recurrence or free/busy (transparency).\nimport 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).\nquick — avoid unless user explicitly asks for natural-language add. Less deterministic."
      },
      {
        "title": "Deletes must be verified",
        "body": "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.\nAlways verify via agenda in the same tight window after deletion.\nIf verification still shows the event, do one retry with --refresh.\nNever claim success unless verification confirms the event is gone."
      },
      {
        "title": "Agenda (deterministic listing)",
        "body": "Today: gcalcli --nocolor agenda today tomorrow\nNext 14d (weekday resolution): gcalcli --nocolor agenda today +14d\nNext 30d (meaning-first locate): gcalcli --nocolor agenda today +30d\nCustom: gcalcli --nocolor agenda <start> <end>"
      },
      {
        "title": "Search (fallback / explicit request)",
        "body": "Default (~6 months): gcalcli --nocolor search \"<query>\" today +180d\nCustom: gcalcli --nocolor search \"<query>\" <start> <end>"
      },
      {
        "title": "Create — add (one-off events)",
        "body": "Overlap preflight (tight, cross-calendar):\n\ngcalcli --nocolor agenda <start> <end>\nIMPORTANT: do NOT add --calendar here; overlaps must be checked across all non-ignored calendars.\n\n\nTimed event:\n\ngcalcli --nocolor --calendar \"<Cal>\" add --noprompt --title \"<Title>\" --when \"<Start>\" --duration <minutes>\n\n\nAll-day event:\n\ngcalcli --nocolor --calendar \"<Cal>\" add --noprompt --allday --title \"<Title>\" --when \"<Date>\"\n\n\nWith reminders (repeatable flag):\n\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\nTime unit suffixes: w (weeks), d (days), h (hours), m (minutes). No suffix = minutes.\nMethod: popup (default), email, sms."
      },
      {
        "title": "Create — import via stdin (recurrence / free/busy)",
        "body": "Use 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\nDTSTART;VALUE=DATE:YYYYMMDD for all-day; DTSTART:YYYYMMDDTHHmmSS for timed.\nRRULE:FREQ=YEARLY — yearly recurrence. Also: DAILY, WEEKLY, MONTHLY.\nTRANSP:TRANSPARENT — free; TRANSP:OPAQUE — busy (default).\nOne import call = one event (one VEVENT block). For multiple events, run separate piped imports.\nAdd --reminder \"TIME\" flag(s) to set reminders (overrides any VALARM in ICS).\nAll import-specific flags (--use-legacy-import, --verbose, etc.) go AFTER import."
      },
      {
        "title": "Delete (with post-delete verification)",
        "body": "Locate via agenda (preferred):\n\ngcalcli --nocolor agenda <dayStart> <dayEnd> (exact date)\ngcalcli --nocolor agenda today +14d (weekday)\ngcalcli --nocolor agenda today +30d (meaning only)\n\n\nDelete (non-interactive, bounded):\n\ngcalcli --nocolor delete --iamaexpert \"<query>\" <start> <end>\n\n\nVerify (same window):\n\ngcalcli --nocolor agenda <dayStart> <dayEnd>\n\n\nOptional one retry if still present:\n\ngcalcli --nocolor --refresh agenda <dayStart> <dayEnd>"
      },
      {
        "title": "Edit / Modify existing events",
        "body": "gcalcli edit is interactive — cannot be used in non-interactive exec.\nTo change properties not editable in-place: delete + recreate the event.\n\nLocate → delete (with --iamaexpert) → create with updated properties → verify.\n\n\nFor bulk property changes (e.g. setting all events to free): iterate delete+recreate per event."
      }
    ],
    "body": "gcalcli-calendar\n\nUse gcalcli to read/search/manage Google Calendar with minimal tool calls and minimal output.\n\nRules\nCLI flag placement (critical)\nGlobal flags (--nocolor, --calendar) go BEFORE the subcommand.\nSubcommand-specific flags go AFTER the subcommand name.\nExample: gcalcli --nocolor delete --iamaexpert \"query\" start end — NOT gcalcli --nocolor --iamaexpert delete ....\nThis applies to ALL subcommand flags: --iamaexpert (delete), --noprompt/--allday (add), --use-legacy-import (import), etc.\nOutput & language\nDon't print CLI commands/flags/tool details unless the user explicitly asks (e.g. \"show commands used\", \"/debug\", \"/commands\").\nIf asked for commands: print ALL executed commands in order (including retries) and nothing else.\nDon't mix languages within one reply.\nBe concise. No scope unless nothing found.\nDates & formatting\nHuman-friendly dates by default. ISO only if explicitly requested.\nDon't quote event titles unless needed to disambiguate.\nCalendar scope\nTrust gcalcli config (default/ignore calendars). Don't broaden scope unless user asks \"across all calendars\" or results are clearly wrong.\nAgenda (today-only by default)\nIf user asks \"agenda\" without a period, return today only.\nExpand only if explicitly asked (tomorrow / next N days / date range).\nWeekday requests (no mental math)\n\nIf user says \"on Monday/Tuesday/...\" without a date:\n\nfetch next 14 days agenda once,\npick matching day/event from tool output,\nproceed (or disambiguate if multiple).\nFinding events: prefer deterministic agenda scan (meaning-first)\n\nWhen locating events to cancel/delete/edit:\n\nPrefer agenda over search.\nUse a bounded window and match events by meaning (semantic match) rather than exact text.\nDefault locate windows:\nIf user gives an exact date: scan that day only.\nIf user gives a weekday: scan next 14 days.\nIf user gives only meaning words (\"train\", \"lecture\", etc.) with no date: scan next 30 days first.\nIf still not found: expand to 180 days and say so only if still empty.\n\nUse gcalcli search only as a fallback when:\n\nthe time window would be too large to scan via agenda (token-heavy), or\nthe user explicitly asked to \"search\".\nSearch (bounded)\nDefault search window: next ~180 days (unless user specified otherwise).\nIf no matches: say \"No matches in next ~6 months (<from>-><to>)\" and offer to expand.\nShow scope only when nothing is found.\nTool efficiency\nDefault: use --nocolor to reduce formatting noise and tokens.\nUse --tsv only if you must parse/dedupe/sort.\nActions 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\nUnambiguous actions: execute immediately\n\nFor cancel/delete/edit actions, skip confirmation when ALL of these hold:\n\nThe user explicitly requested the action (e.g. \"delete my dentist appointment\").\nExactly one event matches in a tight time window.\nThe match is unambiguous (single clear result on an exact date, or user specified date+time).\nAmbiguous actions: always ask first\n\nIf multiple candidates match, or the match is uncertain:\n\nAsk a short disambiguation question listing the candidates (1-3 lines) and wait for the user's choice.\nCreate events: overlap check MUST be cross-calendar (non-ignored scope)\n\nWhen creating an event:\n\nAlways run a best-effort overlap check across ALL non-ignored calendars by scanning agenda WITHOUT --calendar.\nThis ensures overlaps are detected even if the new event is created into a specific calendar.\nIf overlap exists with busy events:\nAsk for confirmation before creating.\nIf no overlap:\nCreate immediately.\nChoose the right create method\nadd — default for one-off events. Supports --allday, --reminder, --noprompt. Does NOT support recurrence or free/busy (transparency).\nimport 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).\nquick — avoid unless user explicitly asks for natural-language add. Less deterministic.\nDeletes must be verified\nUse non-interactive delete with --iamaexpert (a delete subcommand flag — goes AFTER delete). This is gcalcli's built-in flag for non-interactive/scripted deletion.\nAlways verify via agenda in the same tight window after deletion.\nIf verification still shows the event, do one retry with --refresh.\nNever claim success unless verification confirms the event is gone.\nCanonical commands\nAgenda (deterministic listing)\nToday: gcalcli --nocolor agenda today tomorrow\nNext 14d (weekday resolution): gcalcli --nocolor agenda today +14d\nNext 30d (meaning-first locate): gcalcli --nocolor agenda today +30d\nCustom: gcalcli --nocolor agenda <start> <end>\nSearch (fallback / explicit request)\nDefault (~6 months): gcalcli --nocolor search \"<query>\" today +180d\nCustom: gcalcli --nocolor search \"<query>\" <start> <end>\nCreate — add (one-off events)\nOverlap preflight (tight, cross-calendar):\ngcalcli --nocolor agenda <start> <end>\nIMPORTANT: do NOT add --calendar here; overlaps must be checked across all non-ignored calendars.\nTimed event:\ngcalcli --nocolor --calendar \"<Cal>\" add --noprompt --title \"<Title>\" --when \"<Start>\" --duration <minutes>\nAll-day event:\ngcalcli --nocolor --calendar \"<Cal>\" add --noprompt --allday --title \"<Title>\" --when \"<Date>\"\nWith 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\nTime unit suffixes: w (weeks), d (days), h (hours), m (minutes). No suffix = minutes.\nMethod: popup (default), email, sms.\nCreate — import via stdin (recurrence / free/busy)\n\nUse ONLY when add can't cover the need (recurring events, TRANSP, etc.). Pipe 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\nDTSTART;VALUE=DATE:YYYYMMDD for all-day; DTSTART:YYYYMMDDTHHmmSS for timed.\nRRULE:FREQ=YEARLY — yearly recurrence. Also: DAILY, WEEKLY, MONTHLY.\nTRANSP:TRANSPARENT — free; TRANSP:OPAQUE — busy (default).\nOne import call = one event (one VEVENT block). For multiple events, run separate piped imports.\nAdd --reminder \"TIME\" flag(s) to set reminders (overrides any VALARM in ICS).\nAll import-specific flags (--use-legacy-import, --verbose, etc.) go AFTER import.\nDelete (with post-delete verification)\nLocate via agenda (preferred):\ngcalcli --nocolor agenda <dayStart> <dayEnd> (exact date)\ngcalcli --nocolor agenda today +14d (weekday)\ngcalcli --nocolor agenda today +30d (meaning only)\nDelete (non-interactive, bounded):\ngcalcli --nocolor delete --iamaexpert \"<query>\" <start> <end>\nVerify (same window):\ngcalcli --nocolor agenda <dayStart> <dayEnd>\nOptional one retry if still present:\ngcalcli --nocolor --refresh agenda <dayStart> <dayEnd>\nEdit / Modify existing events\ngcalcli edit is interactive — cannot be used in non-interactive exec.\nTo change properties not editable in-place: delete + recreate the event.\nLocate → delete (with --iamaexpert) → create with updated properties → verify.\nFor bulk property changes (e.g. setting all events to free): iterate delete+recreate per event."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/lstpsche/gcalcli-calendar",
    "publisherUrl": "https://clawhub.ai/lstpsche/gcalcli-calendar",
    "owner": "lstpsche",
    "version": "3.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/gcalcli-calendar",
    "downloadUrl": "https://openagent3.xyz/downloads/gcalcli-calendar",
    "agentUrl": "https://openagent3.xyz/skills/gcalcli-calendar/agent",
    "manifestUrl": "https://openagent3.xyz/skills/gcalcli-calendar/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/gcalcli-calendar/agent.md"
  }
}