sundial-org

apple-contacts

Look up contacts from macOS Contacts.app. Use when resolving phone numbers to names, finding contact info, or searching the address book.

sundial-org 651 94 Updated 7mo ago
GitHub

Install

npx skillscat add sundial-org/awesome-openclaw-skills/apple-contacts

Install via the SkillsCat registry.

About this skill

This skill queries macOS Contacts.app via AppleScript to look up contact information by phone number or name. It solves the problem of resolving phone numbers to names and retrieving contact details from the native address book. Developers should use it when building agents that need to access a user's macOS contact data for identification or information retrieval tasks.

SKILL.md

Apple Contacts

Query Contacts.app via AppleScript.

Quick Lookups

# By phone (name only)
osascript -e 'tell application "Contacts" to get name of every person whose value of phones contains "+1XXXXXXXXXX"'

# By name
osascript -e 'tell application "Contacts" to get name of every person whose name contains "John"'

# List all
osascript -e 'tell application "Contacts" to get name of every person'

Full Contact Info

⚠️ Don't use first person whose — buggy. Use this pattern:

# By phone
osascript -e 'tell application "Contacts"
  set matches to every person whose value of phones contains "+1XXXXXXXXXX"
  if length of matches > 0 then
    set p to item 1 of matches
    return {name of p, value of phones of p, value of emails of p}
  end if
end tell'

# By name
osascript -e 'tell application "Contacts"
  set matches to every person whose name contains "John"
  if length of matches > 0 then
    set p to item 1 of matches
    return {name of p, value of phones of p, value of emails of p}
  end if
end tell'

Phone Lookup

⚠️ Exact string match required — must match stored format exactly.

Stored Search Works?
+1XXXXXXXXXX +1XXXXXXXXXX
+1XXXXXXXXXX XXXXXXXXXX

Try with +1 prefix first. If fails, search by name instead.

Name Search

  • Case-insensitive
  • Partial match with contains
  • Exact match: use is instead of contains

Output

Returns comma-separated: name, phone1, [phone2...], email1, [email2...]

No match = empty output (not an error).