{
  "schemaVersion": "1.0",
  "item": {
    "slug": "pear-apple",
    "name": "Pear Apple",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/AshtonAU/pear-apple",
    "canonicalUrl": "https://clawhub.ai/AshtonAU/pear-apple",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/pear-apple",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=pear-apple",
    "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",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.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/pear-apple"
    },
    "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/pear-apple",
    "agentPageUrl": "https://openagent3.xyz/skills/pear-apple/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pear-apple/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pear-apple/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": "Pear — iCloud Integration",
        "body": "Pear provides read/write access to iCloud Calendar, Reminders, and Contacts through 27 MCP tools. All tools are prefixed with pear_ and communicate with iCloud via CalDAV/CardDAV protocols."
      },
      {
        "title": "When to Use",
        "body": "Activate this skill when the user wants to:\n\nCheck their schedule, upcoming events, or daily agenda\nCreate, update, or delete calendar events\nManage reminders or to-do lists\nLook up, create, or update contacts\nFind free time slots or schedule meetings\nGet a daily briefing of events and tasks\nCheck availability for a specific time\nWork with contact groups\nPerform bulk operations on events, reminders, or contacts\n\nActivation triggers:\n\n\"What's on my calendar\", \"my schedule\", \"upcoming events\"\n\"Remind me to\", \"add a reminder\", \"my tasks\", \"to-do\"\n\"Find contact\", \"add a contact\", \"phone number for\"\n\"Schedule a meeting\", \"find a time\", \"when am I free\"\n\"Daily briefing\", \"what's today look like\"\n\"Birthday\", \"anniversaries\"\n\nDo NOT activate for:\n\nApple Notes (not supported — CalDAV only)\nApple Mail or iMessage\niCloud Drive or file storage\nApple Music, Photos, or other non-PIM services\nLocal macOS Calendar.app scripting (Pear works cross-platform via API)"
      },
      {
        "title": "Prerequisites",
        "body": "Required Environment Variable:\n\nPEAR_API_KEY — Your Pear API key (format: pear_sk_...)\n\nSign up at pearmcp.com\nGenerate an API key from the dashboard\nConnect your iCloud account (requires an app-specific password)\n\nOptional:\n\nPEAR_MCP_URL — Custom endpoint URL (defaults to https://pearmcp.com/api/mcp)"
      },
      {
        "title": "Events (8 tools)",
        "body": "ToolDescriptionpear_list_calendarsList all iCloud calendars (including read-only subscriptions)pear_list_eventsList events in a time range, with pagination and calendar filteringpear_search_eventsSearch events by title or description within a date rangepear_create_eventCreate an event with optional recurrence, alarms, attendees, and locationpear_update_eventUpdate an existing event's propertiespear_delete_eventDelete an event by filenamepear_find_free_slotsFind available time slots of a given durationpear_check_availabilityCheck if a specific time slot is free, returns conflicts"
      },
      {
        "title": "Reminders (4 tools)",
        "body": "ToolDescriptionpear_list_remindersList reminders with optional list filtering, includes completed togglepear_create_reminderCreate a reminder with optional due date, priority (1=high, 5=med, 9=low), and notespear_update_reminderUpdate a reminder's propertiespear_complete_reminderMark a reminder as completed"
      },
      {
        "title": "Contacts (9 tools)",
        "body": "ToolDescriptionpear_list_contactsList all contacts with full vCard data (phones, emails, addresses, birthdays)pear_search_contactsSearch by name, email, phone, or organizationpear_create_contactCreate a contact with full vCard support including photopear_update_contactUpdate contact fields (merges with existing data)pear_delete_contactDelete a contactpear_list_contact_groupsList all contact groups with member countspear_create_contact_groupCreate a new contact grouppear_add_contact_to_groupAdd a contact to a group by name or emailpear_update_contact_photoUpdate a contact's photo (Base64, data URI, or external URL)"
      },
      {
        "title": "Briefing (1 tool)",
        "body": "ToolDescriptionpear_get_daily_briefingGet today's events and pending reminders in one call. Enriches attendees with contact data."
      },
      {
        "title": "Scheduling (1 tool)",
        "body": "ToolDescriptionpear_find_best_timeAI-scored optimal meeting slots. Considers work hours, time-of-day preference, day-of-week preference, buffer time, and reminder deadlines."
      },
      {
        "title": "Batch Operations (4 tools)",
        "body": "ToolDescriptionpear_create_events_batchCreate up to 50 events in one callpear_create_reminders_batchCreate up to 50 reminders in one callpear_create_contacts_batchCreate up to 50 contacts in one callpear_delete_contacts_batchDelete up to 50 contacts in one call"
      },
      {
        "title": "Dates and Times",
        "body": "Always use ISO 8601 format: 2025-06-15T14:30:00Z or 2025-06-15T14:30:00+10:00\nTimezone parameter: Pass timezone (IANA format like America/New_York or Australia/Sydney) for user-friendly display times\nAll-day events: Set isAllDay: true and use date-only format 2025-06-15\nDate ranges: pear_list_events requires a timeRange object: { start: \"...\", end: \"...\" }"
      },
      {
        "title": "Creating Events",
        "body": "When creating events, follow this pattern:\n\nIf the user doesn't specify a calendar, omit calendarName — Pear auto-selects the default\nFor recurring events, use the recurrence object: { frequency: \"WEEKLY\", interval: 1, count: 10 }\nFor attendees, you can pass names — Pear resolves them against the user's contacts automatically\nUse idempotencyKey when retrying to prevent duplicate events\nAlarms use minutes before: { action: \"display\", trigger: 15 } for a 15-minute reminder"
      },
      {
        "title": "Finding Meeting Times",
        "body": "For scheduling, prefer pear_find_best_time over pear_find_free_slots:\n\npear_find_best_time returns AI-scored slots considering work hours, preferences, and existing commitments\nPass preferences to customize: { timeOfDay: \"morning\", focusTime: true, workHoursStart: 9, workHoursEnd: 17 }\npear_find_free_slots is simpler — just returns raw available slots without scoring"
      },
      {
        "title": "Reminders",
        "body": "Reminders are accessed via CalDAV (VTODO protocol) — basic operations work well (title, due date, priority, notes, completion). Modern Apple Reminders features like subtasks, tags, smart lists, and location-based reminders are not available via CalDAV.\nPriority values: 1 = high, 5 = medium, 9 = low, 0 = none\nTo list only incomplete reminders, use includeCompleted: false (default)\nReminder lists are auto-created if they don't exist when using listName"
      },
      {
        "title": "Contacts",
        "body": "pear_update_contact merges fields — it won't erase data you don't include in the update\nBirthday format: YYYY-MM-DD for full date, --MM-DD for year-unknown\nPhone/email can be a single string or an array for multiple entries\nContact photos accept Base64 or data URI format"
      },
      {
        "title": "Virtual Birthdays",
        "body": "Pear generates all-day birthday events from contact birthday fields. These appear as events on a \"Birthdays\" calendar when listing events. This is a synthesized feature — Apple's native Birthdays calendar is not exposed via CalDAV."
      },
      {
        "title": "Daily Briefing",
        "body": "pear_get_daily_briefing is the most efficient way to give the user an overview:\n\nReturns today's events + pending reminders in a single call\nAutomatically enriches event attendees with contact details (name, email, phone)\nPass timezone for correct day boundaries\nPass date to get a briefing for a different day"
      },
      {
        "title": "Actions Requiring Care",
        "body": "ActionRiskGuidancepear_delete_eventRemoves event permanentlyConfirm event title and date with user before deletingpear_delete_contactRemoves contact permanentlyAlways confirm — show contact name firstpear_delete_contacts_batchBulk delete up to 50 contactsRequire explicit user confirmation with countpear_update_eventOverwrites event fieldsSummarize changes before applyingpear_complete_reminderMarks as doneSafe — can be undone by updating completed: falseBatch create operationsCreates up to 50 itemsConfirm count and summarize before executing"
      },
      {
        "title": "Data Safety",
        "body": "Read operations are always safe — listing, searching, and briefings have no side effects\nUpdates merge, not replace — pear_update_contact preserves fields you don't mention\nBatch operations are rate-limited — chunks of 5 with 200ms delays, no need to throttle manually\nNever expose the user's PEAR_API_KEY — treat it as a secret"
      },
      {
        "title": "Error Handling",
        "body": "Error CodeMeaningWhat to Do-32001Missing or invalid API keyCheck PEAR_API_KEY is set correctly-32602Invalid parametersCheck parameter names and types against tool reference-32603Server errorRetry once, then report to user404 on event/reminderItem not foundThe filename may have changed — re-list to get current filenamesCalendar is read-onlyCannot modify subscription calendarsList calendars first to check which are writable"
      },
      {
        "title": "Error Recovery (Idempotency)",
        "body": "Event creation failed mid-request or timed out:\n→ Retry pear_create_event with the same idempotencyKey\n→ Pear deduplicates — no double-booking even if the first request succeeded silently"
      },
      {
        "title": "Morning Briefing",
        "body": "User: \"What's on my plate today?\"\n→ Call pear_get_daily_briefing with timezone\n→ Summarize events chronologically, then pending reminders"
      },
      {
        "title": "Schedule a Meeting",
        "body": "User: \"Find time for a 1-hour meeting this week\"\n→ Call pear_find_best_time with durationMinutes: 60 and this week's range\n→ Present top 3 options with scores\n→ On user selection, call pear_create_event"
      },
      {
        "title": "Quick Reminder",
        "body": "User: \"Remind me to call the dentist tomorrow\"\n→ Call pear_create_reminder with title and dueDate set to tomorrow"
      },
      {
        "title": "Contact Lookup",
        "body": "User: \"What's Sarah's phone number?\"\n→ Call pear_search_contacts with query: \"Sarah\"\n→ Return matching contacts with phone numbers"
      },
      {
        "title": "Bulk Event Creation",
        "body": "User: \"Add these 5 meetings to my calendar\"\n→ Call pear_create_events_batch with all events in one request\n→ Summarize results (created count, any failures)"
      },
      {
        "title": "References",
        "body": "Pear Documentation\nApple App-Specific Passwords\nCalDAV Protocol (RFC 4791)\nCardDAV Protocol (RFC 6352)\nIANA Timezone Database"
      }
    ],
    "body": "Pear — iCloud Integration\n\nPear provides read/write access to iCloud Calendar, Reminders, and Contacts through 27 MCP tools. All tools are prefixed with pear_ and communicate with iCloud via CalDAV/CardDAV protocols.\n\nWhen to Use\n\nActivate this skill when the user wants to:\n\nCheck their schedule, upcoming events, or daily agenda\nCreate, update, or delete calendar events\nManage reminders or to-do lists\nLook up, create, or update contacts\nFind free time slots or schedule meetings\nGet a daily briefing of events and tasks\nCheck availability for a specific time\nWork with contact groups\nPerform bulk operations on events, reminders, or contacts\n\nActivation triggers:\n\n\"What's on my calendar\", \"my schedule\", \"upcoming events\"\n\"Remind me to\", \"add a reminder\", \"my tasks\", \"to-do\"\n\"Find contact\", \"add a contact\", \"phone number for\"\n\"Schedule a meeting\", \"find a time\", \"when am I free\"\n\"Daily briefing\", \"what's today look like\"\n\"Birthday\", \"anniversaries\"\n\nDo NOT activate for:\n\nApple Notes (not supported — CalDAV only)\nApple Mail or iMessage\niCloud Drive or file storage\nApple Music, Photos, or other non-PIM services\nLocal macOS Calendar.app scripting (Pear works cross-platform via API)\nPrerequisites\n\nRequired Environment Variable:\n\nPEAR_API_KEY — Your Pear API key (format: pear_sk_...)\nSign up at pearmcp.com\nGenerate an API key from the dashboard\nConnect your iCloud account (requires an app-specific password)\n\nOptional:\n\nPEAR_MCP_URL — Custom endpoint URL (defaults to https://pearmcp.com/api/mcp)\nTool Reference\nEvents (8 tools)\nTool\tDescription\npear_list_calendars\tList all iCloud calendars (including read-only subscriptions)\npear_list_events\tList events in a time range, with pagination and calendar filtering\npear_search_events\tSearch events by title or description within a date range\npear_create_event\tCreate an event with optional recurrence, alarms, attendees, and location\npear_update_event\tUpdate an existing event's properties\npear_delete_event\tDelete an event by filename\npear_find_free_slots\tFind available time slots of a given duration\npear_check_availability\tCheck if a specific time slot is free, returns conflicts\nReminders (4 tools)\nTool\tDescription\npear_list_reminders\tList reminders with optional list filtering, includes completed toggle\npear_create_reminder\tCreate a reminder with optional due date, priority (1=high, 5=med, 9=low), and notes\npear_update_reminder\tUpdate a reminder's properties\npear_complete_reminder\tMark a reminder as completed\nContacts (9 tools)\nTool\tDescription\npear_list_contacts\tList all contacts with full vCard data (phones, emails, addresses, birthdays)\npear_search_contacts\tSearch by name, email, phone, or organization\npear_create_contact\tCreate a contact with full vCard support including photo\npear_update_contact\tUpdate contact fields (merges with existing data)\npear_delete_contact\tDelete a contact\npear_list_contact_groups\tList all contact groups with member counts\npear_create_contact_group\tCreate a new contact group\npear_add_contact_to_group\tAdd a contact to a group by name or email\npear_update_contact_photo\tUpdate a contact's photo (Base64, data URI, or external URL)\nBriefing (1 tool)\nTool\tDescription\npear_get_daily_briefing\tGet today's events and pending reminders in one call. Enriches attendees with contact data.\nScheduling (1 tool)\nTool\tDescription\npear_find_best_time\tAI-scored optimal meeting slots. Considers work hours, time-of-day preference, day-of-week preference, buffer time, and reminder deadlines.\nBatch Operations (4 tools)\nTool\tDescription\npear_create_events_batch\tCreate up to 50 events in one call\npear_create_reminders_batch\tCreate up to 50 reminders in one call\npear_create_contacts_batch\tCreate up to 50 contacts in one call\npear_delete_contacts_batch\tDelete up to 50 contacts in one call\nWorkflow Guidelines\nDates and Times\nAlways use ISO 8601 format: 2025-06-15T14:30:00Z or 2025-06-15T14:30:00+10:00\nTimezone parameter: Pass timezone (IANA format like America/New_York or Australia/Sydney) for user-friendly display times\nAll-day events: Set isAllDay: true and use date-only format 2025-06-15\nDate ranges: pear_list_events requires a timeRange object: { start: \"...\", end: \"...\" }\nCreating Events\n\nWhen creating events, follow this pattern:\n\nIf the user doesn't specify a calendar, omit calendarName — Pear auto-selects the default\nFor recurring events, use the recurrence object: { frequency: \"WEEKLY\", interval: 1, count: 10 }\nFor attendees, you can pass names — Pear resolves them against the user's contacts automatically\nUse idempotencyKey when retrying to prevent duplicate events\nAlarms use minutes before: { action: \"display\", trigger: 15 } for a 15-minute reminder\nFinding Meeting Times\n\nFor scheduling, prefer pear_find_best_time over pear_find_free_slots:\n\npear_find_best_time returns AI-scored slots considering work hours, preferences, and existing commitments\nPass preferences to customize: { timeOfDay: \"morning\", focusTime: true, workHoursStart: 9, workHoursEnd: 17 }\npear_find_free_slots is simpler — just returns raw available slots without scoring\nReminders\nReminders are accessed via CalDAV (VTODO protocol) — basic operations work well (title, due date, priority, notes, completion). Modern Apple Reminders features like subtasks, tags, smart lists, and location-based reminders are not available via CalDAV.\nPriority values: 1 = high, 5 = medium, 9 = low, 0 = none\nTo list only incomplete reminders, use includeCompleted: false (default)\nReminder lists are auto-created if they don't exist when using listName\nContacts\npear_update_contact merges fields — it won't erase data you don't include in the update\nBirthday format: YYYY-MM-DD for full date, --MM-DD for year-unknown\nPhone/email can be a single string or an array for multiple entries\nContact photos accept Base64 or data URI format\nVirtual Birthdays\n\nPear generates all-day birthday events from contact birthday fields. These appear as events on a \"Birthdays\" calendar when listing events. This is a synthesized feature — Apple's native Birthdays calendar is not exposed via CalDAV.\n\nDaily Briefing\n\npear_get_daily_briefing is the most efficient way to give the user an overview:\n\nReturns today's events + pending reminders in a single call\nAutomatically enriches event attendees with contact details (name, email, phone)\nPass timezone for correct day boundaries\nPass date to get a briefing for a different day\nSafety & Confirmation\nActions Requiring Care\nAction\tRisk\tGuidance\npear_delete_event\tRemoves event permanently\tConfirm event title and date with user before deleting\npear_delete_contact\tRemoves contact permanently\tAlways confirm — show contact name first\npear_delete_contacts_batch\tBulk delete up to 50 contacts\tRequire explicit user confirmation with count\npear_update_event\tOverwrites event fields\tSummarize changes before applying\npear_complete_reminder\tMarks as done\tSafe — can be undone by updating completed: false\nBatch create operations\tCreates up to 50 items\tConfirm count and summarize before executing\nData Safety\nRead operations are always safe — listing, searching, and briefings have no side effects\nUpdates merge, not replace — pear_update_contact preserves fields you don't mention\nBatch operations are rate-limited — chunks of 5 with 200ms delays, no need to throttle manually\nNever expose the user's PEAR_API_KEY — treat it as a secret\nError Handling\nError Code\tMeaning\tWhat to Do\n-32001\tMissing or invalid API key\tCheck PEAR_API_KEY is set correctly\n-32602\tInvalid parameters\tCheck parameter names and types against tool reference\n-32603\tServer error\tRetry once, then report to user\n404 on event/reminder\tItem not found\tThe filename may have changed — re-list to get current filenames\nCalendar is read-only\tCannot modify subscription calendars\tList calendars first to check which are writable\nCommon Patterns\nError Recovery (Idempotency)\nEvent creation failed mid-request or timed out:\n→ Retry pear_create_event with the same idempotencyKey\n→ Pear deduplicates — no double-booking even if the first request succeeded silently\n\nMorning Briefing\nUser: \"What's on my plate today?\"\n→ Call pear_get_daily_briefing with timezone\n→ Summarize events chronologically, then pending reminders\n\nSchedule a Meeting\nUser: \"Find time for a 1-hour meeting this week\"\n→ Call pear_find_best_time with durationMinutes: 60 and this week's range\n→ Present top 3 options with scores\n→ On user selection, call pear_create_event\n\nQuick Reminder\nUser: \"Remind me to call the dentist tomorrow\"\n→ Call pear_create_reminder with title and dueDate set to tomorrow\n\nContact Lookup\nUser: \"What's Sarah's phone number?\"\n→ Call pear_search_contacts with query: \"Sarah\"\n→ Return matching contacts with phone numbers\n\nBulk Event Creation\nUser: \"Add these 5 meetings to my calendar\"\n→ Call pear_create_events_batch with all events in one request\n→ Summarize results (created count, any failures)\n\nReferences\nPear Documentation\nApple App-Specific Passwords\nCalDAV Protocol (RFC 4791)\nCardDAV Protocol (RFC 6352)\nIANA Timezone Database"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/AshtonAU/pear-apple",
    "publisherUrl": "https://clawhub.ai/AshtonAU/pear-apple",
    "owner": "AshtonAU",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/pear-apple",
    "downloadUrl": "https://openagent3.xyz/downloads/pear-apple",
    "agentUrl": "https://openagent3.xyz/skills/pear-apple/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pear-apple/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pear-apple/agent.md"
  }
}