{
  "schemaVersion": "1.0",
  "item": {
    "slug": "apple-calendar-cli",
    "name": "Apple Calendar CLI",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/sichengchen/apple-calendar-cli",
    "canonicalUrl": "https://clawhub.ai/sichengchen/apple-calendar-cli",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/apple-calendar-cli",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=apple-calendar-cli",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "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. 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. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "apple-calendar-cli",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-29T03:22:32.958Z",
      "expiresAt": "2026-05-06T03:22:32.958Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=apple-calendar-cli",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=apple-calendar-cli",
        "contentDisposition": "attachment; filename=\"apple-calendar-cli-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "apple-calendar-cli"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/apple-calendar-cli"
    },
    "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/apple-calendar-cli",
    "agentPageUrl": "https://openagent3.xyz/skills/apple-calendar-cli/agent",
    "manifestUrl": "https://openagent3.xyz/skills/apple-calendar-cli/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/apple-calendar-cli/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. 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. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Apple Calendar CLI — Agent Skill",
        "body": "You have access to apple-calendar-cli, a command-line tool for managing Apple Calendar events via EventKit on macOS."
      },
      {
        "title": "Prerequisites",
        "body": "macOS 14+ required\nInstall: brew install sichengchen/tap/apple-calendar-cli\nCalendar access permission must be granted (System Settings > Privacy & Security > Calendars)"
      },
      {
        "title": "Date Format",
        "body": "All dates use ISO 8601 format:\n\nDate only: YYYY-MM-DD (interpreted as start of day in local timezone)\nDate and time: YYYY-MM-DDTHH:MM:SS (local timezone)\nFull ISO 8601: YYYY-MM-DDTHH:MM:SSZ or with offset"
      },
      {
        "title": "Global Options",
        "body": "--json — Output results as structured JSON (available on all commands)\n--version — Show version\n--help / -h — Show help\n\nAlways use --json when calling from an agent for reliable parsing."
      },
      {
        "title": "list-calendars",
        "body": "List all available calendars.\n\napple-calendar-cli list-calendars --json\n\nJSON output — array of objects:\n\n[\n  {\n    \"identifier\": \"CALENDAR-ID\",\n    \"title\": \"Work\",\n    \"type\": \"calDAV\",\n    \"source\": \"iCloud\",\n    \"color\": \"#1BADF8\",\n    \"isImmutable\": false\n  }\n]\n\nUse identifier to filter events or target a specific calendar when creating events."
      },
      {
        "title": "list-events",
        "body": "List events within a date range.\n\napple-calendar-cli list-events --json\napple-calendar-cli list-events --from 2026-02-22 --to 2026-02-28 --json\napple-calendar-cli list-events --from 2026-02-22 --to 2026-02-28 --calendar CALENDAR-ID --json\n\nOptions:\n\n--from — Start date (default: today)\n--to — End date (default: 7 days from start)\n--calendar — Filter by calendar identifier\n\nJSON output — array of event objects:\n\n[\n  {\n    \"identifier\": \"EVENT-ID\",\n    \"title\": \"Team standup\",\n    \"startDate\": \"2026-02-22T10:00:00-08:00\",\n    \"endDate\": \"2026-02-22T10:30:00-08:00\",\n    \"isAllDay\": false,\n    \"location\": \"Conference Room A\",\n    \"notes\": null,\n    \"calendarTitle\": \"Work\",\n    \"calendarIdentifier\": \"CALENDAR-ID\",\n    \"url\": null,\n    \"hasRecurrenceRules\": true\n  }\n]"
      },
      {
        "title": "get-event",
        "body": "Get full details of a single event.\n\napple-calendar-cli get-event EVENT-ID --json\n\nJSON output — single event object (same schema as list-events items)."
      },
      {
        "title": "create-event",
        "body": "Create a new calendar event.\n\napple-calendar-cli create-event \\\n  --title \"Meeting with Alice\" \\\n  --start \"2026-02-23T14:00:00\" \\\n  --end \"2026-02-23T15:00:00\" \\\n  --json\n\napple-calendar-cli create-event \\\n  --title \"All-day conference\" \\\n  --start \"2026-03-01\" \\\n  --end \"2026-03-02\" \\\n  --all-day \\\n  --calendar CALENDAR-ID \\\n  --location \"Convention Center\" \\\n  --notes \"Bring laptop\" \\\n  --url \"https://example.com/conf\" \\\n  --json\n\nRequired options:\n\n--title — Event title\n--start — Start date/time\n--end — End date/time (must be after start)\n\nOptional options:\n\n--calendar — Calendar identifier (default: system default calendar)\n--notes — Event notes\n--location — Event location\n--all-day — Mark as all-day event\n--url — Event URL\n--recurrence — Recurrence rule: daily, weekly, monthly, yearly\n--recurrence-end — End date for recurrence\n--recurrence-count — Number of occurrences\n--attendees — Comma-separated email addresses\n--alert — Alert offset (e.g., 15m, 1h, 1d)\n\nJSON output — the created event object with its new identifier."
      },
      {
        "title": "update-event",
        "body": "Update an existing event (partial update — only specified fields change).\n\napple-calendar-cli update-event EVENT-ID --title \"New title\" --json\napple-calendar-cli update-event EVENT-ID \\\n  --start \"2026-02-23T15:00:00\" \\\n  --end \"2026-02-23T16:00:00\" \\\n  --location \"Room B\" \\\n  --json\n\nRequired argument:\n\n<id> — Event identifier\n\nOptional options:\n\n--title — New title\n--start — New start date/time\n--end — New end date/time\n--calendar — Move to different calendar (by identifier)\n--notes — New notes\n--location — New location\n--url — New URL\n\nJSON output — the updated event object."
      },
      {
        "title": "delete-event",
        "body": "Delete a calendar event.\n\napple-calendar-cli delete-event EVENT-ID --json\n\nJSON output:\n\n{\n  \"deleted\": true,\n  \"event\": { ... }\n}"
      },
      {
        "title": "Find and reschedule an event",
        "body": "# 1. List events to find the one to reschedule\napple-calendar-cli list-events --from 2026-02-22 --to 2026-02-28 --json\n\n# 2. Get full details\napple-calendar-cli get-event EVENT-ID --json\n\n# 3. Update the time\napple-calendar-cli update-event EVENT-ID \\\n  --start \"2026-02-24T14:00:00\" \\\n  --end \"2026-02-24T15:00:00\" \\\n  --json"
      },
      {
        "title": "Create an event on a specific calendar",
        "body": "# 1. List calendars to find the right one\napple-calendar-cli list-calendars --json\n\n# 2. Create the event on that calendar\napple-calendar-cli create-event \\\n  --title \"Dentist\" \\\n  --start \"2026-02-25T09:00:00\" \\\n  --end \"2026-02-25T10:00:00\" \\\n  --calendar CALENDAR-ID \\\n  --json"
      },
      {
        "title": "Check today's schedule",
        "body": "Date-only values resolve to midnight (00:00:00), so --to must be the next day to cover the full day:\n\n# Correct: covers 2026-02-22 00:00 to 2026-02-23 00:00\napple-calendar-cli list-events --from 2026-02-22 --to 2026-02-23 --json"
      },
      {
        "title": "Error Handling",
        "body": "Calendar access denied: User needs to grant access in System Settings > Privacy & Security > Calendars\nEvent not found: The event ID may be stale — list events again to get current IDs\nInvalid date format: Use ISO 8601 (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)\nEnd before start: Ensure the end date/time is after the start date/time"
      }
    ],
    "body": "Apple Calendar CLI — Agent Skill\n\nYou have access to apple-calendar-cli, a command-line tool for managing Apple Calendar events via EventKit on macOS.\n\nPrerequisites\nmacOS 14+ required\nInstall: brew install sichengchen/tap/apple-calendar-cli\nCalendar access permission must be granted (System Settings > Privacy & Security > Calendars)\nDate Format\n\nAll dates use ISO 8601 format:\n\nDate only: YYYY-MM-DD (interpreted as start of day in local timezone)\nDate and time: YYYY-MM-DDTHH:MM:SS (local timezone)\nFull ISO 8601: YYYY-MM-DDTHH:MM:SSZ or with offset\nGlobal Options\n--json — Output results as structured JSON (available on all commands)\n--version — Show version\n--help / -h — Show help\n\nAlways use --json when calling from an agent for reliable parsing.\n\nCommands\nlist-calendars\n\nList all available calendars.\n\napple-calendar-cli list-calendars --json\n\n\nJSON output — array of objects:\n\n[\n  {\n    \"identifier\": \"CALENDAR-ID\",\n    \"title\": \"Work\",\n    \"type\": \"calDAV\",\n    \"source\": \"iCloud\",\n    \"color\": \"#1BADF8\",\n    \"isImmutable\": false\n  }\n]\n\n\nUse identifier to filter events or target a specific calendar when creating events.\n\nlist-events\n\nList events within a date range.\n\napple-calendar-cli list-events --json\napple-calendar-cli list-events --from 2026-02-22 --to 2026-02-28 --json\napple-calendar-cli list-events --from 2026-02-22 --to 2026-02-28 --calendar CALENDAR-ID --json\n\n\nOptions:\n\n--from — Start date (default: today)\n--to — End date (default: 7 days from start)\n--calendar — Filter by calendar identifier\n\nJSON output — array of event objects:\n\n[\n  {\n    \"identifier\": \"EVENT-ID\",\n    \"title\": \"Team standup\",\n    \"startDate\": \"2026-02-22T10:00:00-08:00\",\n    \"endDate\": \"2026-02-22T10:30:00-08:00\",\n    \"isAllDay\": false,\n    \"location\": \"Conference Room A\",\n    \"notes\": null,\n    \"calendarTitle\": \"Work\",\n    \"calendarIdentifier\": \"CALENDAR-ID\",\n    \"url\": null,\n    \"hasRecurrenceRules\": true\n  }\n]\n\nget-event\n\nGet full details of a single event.\n\napple-calendar-cli get-event EVENT-ID --json\n\n\nJSON output — single event object (same schema as list-events items).\n\ncreate-event\n\nCreate a new calendar event.\n\napple-calendar-cli create-event \\\n  --title \"Meeting with Alice\" \\\n  --start \"2026-02-23T14:00:00\" \\\n  --end \"2026-02-23T15:00:00\" \\\n  --json\n\napple-calendar-cli create-event \\\n  --title \"All-day conference\" \\\n  --start \"2026-03-01\" \\\n  --end \"2026-03-02\" \\\n  --all-day \\\n  --calendar CALENDAR-ID \\\n  --location \"Convention Center\" \\\n  --notes \"Bring laptop\" \\\n  --url \"https://example.com/conf\" \\\n  --json\n\n\nRequired options:\n\n--title — Event title\n--start — Start date/time\n--end — End date/time (must be after start)\n\nOptional options:\n\n--calendar — Calendar identifier (default: system default calendar)\n--notes — Event notes\n--location — Event location\n--all-day — Mark as all-day event\n--url — Event URL\n--recurrence — Recurrence rule: daily, weekly, monthly, yearly\n--recurrence-end — End date for recurrence\n--recurrence-count — Number of occurrences\n--attendees — Comma-separated email addresses\n--alert — Alert offset (e.g., 15m, 1h, 1d)\n\nJSON output — the created event object with its new identifier.\n\nupdate-event\n\nUpdate an existing event (partial update — only specified fields change).\n\napple-calendar-cli update-event EVENT-ID --title \"New title\" --json\napple-calendar-cli update-event EVENT-ID \\\n  --start \"2026-02-23T15:00:00\" \\\n  --end \"2026-02-23T16:00:00\" \\\n  --location \"Room B\" \\\n  --json\n\n\nRequired argument:\n\n<id> — Event identifier\n\nOptional options:\n\n--title — New title\n--start — New start date/time\n--end — New end date/time\n--calendar — Move to different calendar (by identifier)\n--notes — New notes\n--location — New location\n--url — New URL\n\nJSON output — the updated event object.\n\ndelete-event\n\nDelete a calendar event.\n\napple-calendar-cli delete-event EVENT-ID --json\n\n\nJSON output:\n\n{\n  \"deleted\": true,\n  \"event\": { ... }\n}\n\nCommon Agent Workflows\nFind and reschedule an event\n# 1. List events to find the one to reschedule\napple-calendar-cli list-events --from 2026-02-22 --to 2026-02-28 --json\n\n# 2. Get full details\napple-calendar-cli get-event EVENT-ID --json\n\n# 3. Update the time\napple-calendar-cli update-event EVENT-ID \\\n  --start \"2026-02-24T14:00:00\" \\\n  --end \"2026-02-24T15:00:00\" \\\n  --json\n\nCreate an event on a specific calendar\n# 1. List calendars to find the right one\napple-calendar-cli list-calendars --json\n\n# 2. Create the event on that calendar\napple-calendar-cli create-event \\\n  --title \"Dentist\" \\\n  --start \"2026-02-25T09:00:00\" \\\n  --end \"2026-02-25T10:00:00\" \\\n  --calendar CALENDAR-ID \\\n  --json\n\nCheck today's schedule\n\nDate-only values resolve to midnight (00:00:00), so --to must be the next day to cover the full day:\n\n# Correct: covers 2026-02-22 00:00 to 2026-02-23 00:00\napple-calendar-cli list-events --from 2026-02-22 --to 2026-02-23 --json\n\nError Handling\nCalendar access denied: User needs to grant access in System Settings > Privacy & Security > Calendars\nEvent not found: The event ID may be stale — list events again to get current IDs\nInvalid date format: Use ISO 8601 (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)\nEnd before start: Ensure the end date/time is after the start date/time"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/sichengchen/apple-calendar-cli",
    "publisherUrl": "https://clawhub.ai/sichengchen/apple-calendar-cli",
    "owner": "sichengchen",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/apple-calendar-cli",
    "downloadUrl": "https://openagent3.xyz/downloads/apple-calendar-cli",
    "agentUrl": "https://openagent3.xyz/skills/apple-calendar-cli/agent",
    "manifestUrl": "https://openagent3.xyz/skills/apple-calendar-cli/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/apple-calendar-cli/agent.md"
  }
}