- name
- findmy-icloud-cli
- description
- Query Apple Find My device and family-device locations through the pyicloud iCloud CLI, using a locally stored Apple ID username in a deterministic state file instead of hardcoding it. Use when the user wants current locations, battery status, or device lookups for their own Apple devices or family-shared devices, and when a reliable CLI path is preferred over flaky Find My UI automation.
Find My iCloud CLI
Use this skill for Apple Find My lookups via the icloud CLI (pyicloud 2.5.0+). This is the reliable path for device and family-device location on this Mac.
Run scripts from:
cd /Users/rolandk/.openclaw/workspace/skills/findmy-icloud-cliState and setup
Do not hardcode the user's Apple ID in the skill. Store it once in this deterministic state file:
~/.local/state/icloud-findmy-cli/account.envFormat:
ICLOUD_FINDMY_USERNAME="their.email@example.com"Use:
./scripts/findmy.sh set-username their.email@example.com
./scripts/findmy.sh show-usernameIf the username is missing, stop and ask the user once for their Apple ID email. After that, persist it via findmy.sh set-username and reuse the state file.
Auth flow
Check current auth:
./scripts/findmy.sh auth-statusIf not logged in:
./scripts/findmy.sh auth-loginThat opens the current pyicloud auth flow using the stored username. The user may need to enter password and 2FA.
Core commands
Resolve a person to the best device automatically
When the user asks for a person's location in natural language, do not force them to name a device. Use scripts/person-find.py first.
Do not hardcode real family names into the skill. Store person aliases in a local state file instead:
~/.local/state/icloud-findmy-cli/people-aliases.jsonSet aliases with neutral labels such as me, partner, kid, or any user-chosen nickname:
./scripts/findmy.sh set-person-alias me "Roland"
./scripts/findmy.sh set-person-alias partner "Gabriella"
./scripts/findmy.sh show-person-aliasesDefault resolution order:
- Match the person's iPhone
- If no matching iPhone with location is available, match their Apple Watch
- If neither is available, fall back to another matching device
- If nothing matches, say so clearly
Examples:
./scripts/person-find.py "partner"
./scripts/person-find.py "me"
./scripts/person-find.py "kid"List all devices with live location
./scripts/findmy.sh listThis runs:
icloud devices list --username "$USERNAME" --with-family --locate --format jsonShow one device in detail
./scripts/findmy.sh show "Roland’s iPhone 14 Pro"Find devices by fuzzy name match
./scripts/device-find.py "Gabriella"
./scripts/device-find.py "iPhone 14"Output shape
The main command returns JSON list entries with fields like:
idnamedisplay_namedevice_classdevice_modelbattery_levelbattery_statuslocation.latitudelocation.longitudelocation.timeStamplocation.horizontalAccuracy
Prefer JSON parsing over text scraping.
Working rules
- Use this skill for Apple devices and family-shared devices, not shared-person Find My contacts.
- If the user asks for a person like "where is my partner?", use
scripts/person-find.pyinstead of asking for a device name. - Prefer user-defined aliases from
people-aliases.json, not hardcoded real names in the skill. - Prefer iPhone first, then Apple Watch, then other matching devices.
- Prefer
findmy.sh listfirst when broad inspection is needed. - Use
findmy.sh showwhen the exact device name is already known. - If auth breaks after an upgrade, re-check with
icloud --help, then re-runfindmy.sh auth-login. - Do not ask for the Apple ID again if the state file already has it.
- Do not store passwords in the state file.
Limits
- This skill does not track shared people from the Find My People tab.
- Some accessories may return
location: nullor stale data. - Family device visibility depends on Find My / Family Sharing state.
Scripts
scripts/findmy.shis the main wrapper for username storage, auth, device list, and device showscripts/state.shhandles deterministic local state storagescripts/device-find.pyfilters devices by case-insensitive substring matchscripts/person-find.pyresolves a person alias/name to the best matching device, preferring iPhone then Watch