{
  "schemaVersion": "1.0",
  "item": {
    "slug": "icloud-findmy",
    "name": "iCloud Find My",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/liamnichols/icloud-findmy",
    "canonicalUrl": "https://clawhub.ai/liamnichols/icloud-findmy",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/icloud-findmy",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=icloud-findmy",
    "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-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/icloud-findmy"
    },
    "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/icloud-findmy",
    "agentPageUrl": "https://openagent3.xyz/skills/icloud-findmy/agent",
    "manifestUrl": "https://openagent3.xyz/skills/icloud-findmy/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/icloud-findmy/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": "iCloud Find My",
        "body": "Access Find My device locations and battery status via the iCloud CLI (pyicloud)."
      },
      {
        "title": "Setup",
        "body": "Install pyicloud:\n\nbrew install pipx\npipx install pyicloud\n\nAuthenticate (one-time):\n\nAsk the user for their Apple ID, then run:\n\nicloud --username their.email@example.com --with-family --list\n\nThey'll need to enter their password and complete 2FA. The session will be saved and lasts 1-2 months.\n\nStore Apple ID:\n\nAdd the Apple ID to your TOOLS.md or workspace config so you remember it for future queries:\n\n## iCloud Find My\nApple ID: their.email@example.com"
      },
      {
        "title": "List all devices",
        "body": "icloud --username APPLE_ID --with-family --list\n\nOutput format:\n\n------------------------------\nName           - Liam's iPhone\nDisplay Name   - iPhone 15 Pro\nLocation       - {'latitude': 52.248, 'longitude': 0.761, 'timeStamp': 1767810759054, ...}\nBattery Level  - 0.72\nBattery Status - NotCharging\nDevice Class   - iPhone\n------------------------------\n\nParsing tips:\n\nDevices are separated by ------------------------------\nLocation is a Python dict (use eval() or parse with regex)\nBattery Level is 0.0-1.0 (multiply by 100 for percentage)\nBattery Status: \"Charging\" or \"NotCharging\"\nLocation fields: latitude, longitude, timeStamp (milliseconds), horizontalAccuracy"
      },
      {
        "title": "Get specific device",
        "body": "Find a specific device by grepping the output:\n\nicloud --username APPLE_ID --with-family --list | grep -A 10 \"iPhone\""
      },
      {
        "title": "Parse location",
        "body": "Extract and format location data:\n\nicloud --username APPLE_ID --with-family --list | \\\n  grep -A 10 \"Device Name\" | \\\n  grep \"Location\" | \\\n  sed \"s/Location.*- //\"\n\nThen parse the Python dict string with Python or extract coordinates with regex."
      },
      {
        "title": "Parse battery",
        "body": "icloud --username APPLE_ID --with-family --list | \\\n  grep -A 10 \"Device Name\" | \\\n  grep \"Battery Level\""
      },
      {
        "title": "Device Names",
        "body": "Device names come from iCloud and may include:\n\nFancy Unicode apostrophes (U+2019 ') instead of ASCII '\nNo apostrophes at all (e.g., \"Lindas iPhone\")\n\nUse case-insensitive matching and normalize apostrophes if needed."
      },
      {
        "title": "Session Management",
        "body": "Sessions last 1-2 months\nStored in user's home directory\nWhen expired, re-run the authentication step\nPyiCloud validates automatically on each request"
      },
      {
        "title": "Common Patterns",
        "body": "Check battery before going out:\n\n# Get battery for specific device\nicloud --username ID --with-family --list | \\\n  grep -B 2 -A 5 \"iPhone\" | \\\n  grep \"Battery Level\"\n\nGet current location:\n\n# Extract location dict and parse coordinates\nicloud --username ID --with-family --list | \\\n  grep -A 10 \"iPhone\" | \\\n  grep \"Location\" | \\\n  sed \"s/.*- //\" | \\\n  python3 -c \"import sys; loc = eval(sys.stdin.read()); print(f\\\"{loc['latitude']}, {loc['longitude']}\\\")\"\n\nCheck if device is charging:\n\nicloud --username ID --with-family --list | \\\n  grep -A 10 \"iPhone\" | \\\n  grep \"Battery Status\""
      },
      {
        "title": "Proactive Use Cases",
        "body": "Battery warnings: Check battery levels before calendar events (going out)\nLocation context: Answer \"near me\" queries by checking user's current location\nHome/away detection: Check if user is at home based on coordinates\nLow battery alerts: Warn if battery <30% and not charging"
      },
      {
        "title": "Troubleshooting",
        "body": "Authentication errors:\n\nSession expired - re-authenticate\nWrong Apple ID - check stored ID\n2FA required - complete 2FA flow\n\nNo location available:\n\nDevice offline\nFind My disabled\nLocation Services off\n\nDevice not found:\n\nCheck exact device name with --list\nNames are case-sensitive\nMay have Unicode apostrophes"
      },
      {
        "title": "Notes",
        "body": "Requires macOS (iCloud API quirks)\nFamily Sharing must be enabled to see family devices\nLocation updates every ~1-5 minutes when device is active\nBattery readings may be cached (check timestamp)"
      }
    ],
    "body": "iCloud Find My\n\nAccess Find My device locations and battery status via the iCloud CLI (pyicloud).\n\nSetup\nInstall pyicloud:\nbrew install pipx\npipx install pyicloud\n\nAuthenticate (one-time):\n\nAsk the user for their Apple ID, then run:\n\nicloud --username their.email@example.com --with-family --list\n\n\nThey'll need to enter their password and complete 2FA. The session will be saved and lasts 1-2 months.\n\nStore Apple ID:\n\nAdd the Apple ID to your TOOLS.md or workspace config so you remember it for future queries:\n\n## iCloud Find My\nApple ID: their.email@example.com\n\nUsage\nList all devices\nicloud --username APPLE_ID --with-family --list\n\n\nOutput format:\n\n------------------------------\nName           - Liam's iPhone\nDisplay Name   - iPhone 15 Pro\nLocation       - {'latitude': 52.248, 'longitude': 0.761, 'timeStamp': 1767810759054, ...}\nBattery Level  - 0.72\nBattery Status - NotCharging\nDevice Class   - iPhone\n------------------------------\n\n\nParsing tips:\n\nDevices are separated by ------------------------------\nLocation is a Python dict (use eval() or parse with regex)\nBattery Level is 0.0-1.0 (multiply by 100 for percentage)\nBattery Status: \"Charging\" or \"NotCharging\"\nLocation fields: latitude, longitude, timeStamp (milliseconds), horizontalAccuracy\nGet specific device\n\nFind a specific device by grepping the output:\n\nicloud --username APPLE_ID --with-family --list | grep -A 10 \"iPhone\"\n\nParse location\n\nExtract and format location data:\n\nicloud --username APPLE_ID --with-family --list | \\\n  grep -A 10 \"Device Name\" | \\\n  grep \"Location\" | \\\n  sed \"s/Location.*- //\"\n\n\nThen parse the Python dict string with Python or extract coordinates with regex.\n\nParse battery\nicloud --username APPLE_ID --with-family --list | \\\n  grep -A 10 \"Device Name\" | \\\n  grep \"Battery Level\"\n\nDevice Names\n\nDevice names come from iCloud and may include:\n\nFancy Unicode apostrophes (U+2019 ') instead of ASCII '\nNo apostrophes at all (e.g., \"Lindas iPhone\")\n\nUse case-insensitive matching and normalize apostrophes if needed.\n\nSession Management\nSessions last 1-2 months\nStored in user's home directory\nWhen expired, re-run the authentication step\nPyiCloud validates automatically on each request\nCommon Patterns\n\nCheck battery before going out:\n\n# Get battery for specific device\nicloud --username ID --with-family --list | \\\n  grep -B 2 -A 5 \"iPhone\" | \\\n  grep \"Battery Level\"\n\n\nGet current location:\n\n# Extract location dict and parse coordinates\nicloud --username ID --with-family --list | \\\n  grep -A 10 \"iPhone\" | \\\n  grep \"Location\" | \\\n  sed \"s/.*- //\" | \\\n  python3 -c \"import sys; loc = eval(sys.stdin.read()); print(f\\\"{loc['latitude']}, {loc['longitude']}\\\")\"\n\n\nCheck if device is charging:\n\nicloud --username ID --with-family --list | \\\n  grep -A 10 \"iPhone\" | \\\n  grep \"Battery Status\"\n\nProactive Use Cases\nBattery warnings: Check battery levels before calendar events (going out)\nLocation context: Answer \"near me\" queries by checking user's current location\nHome/away detection: Check if user is at home based on coordinates\nLow battery alerts: Warn if battery <30% and not charging\nTroubleshooting\n\nAuthentication errors:\n\nSession expired - re-authenticate\nWrong Apple ID - check stored ID\n2FA required - complete 2FA flow\n\nNo location available:\n\nDevice offline\nFind My disabled\nLocation Services off\n\nDevice not found:\n\nCheck exact device name with --list\nNames are case-sensitive\nMay have Unicode apostrophes\nNotes\nRequires macOS (iCloud API quirks)\nFamily Sharing must be enabled to see family devices\nLocation updates every ~1-5 minutes when device is active\nBattery readings may be cached (check timestamp)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/liamnichols/icloud-findmy",
    "publisherUrl": "https://clawhub.ai/liamnichols/icloud-findmy",
    "owner": "liamnichols",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/icloud-findmy",
    "downloadUrl": "https://openagent3.xyz/downloads/icloud-findmy",
    "agentUrl": "https://openagent3.xyz/skills/icloud-findmy/agent",
    "manifestUrl": "https://openagent3.xyz/skills/icloud-findmy/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/icloud-findmy/agent.md"
  }
}