c-contacts — Claude Code skill: what it does, how to install
This skill queries macOS Contacts through AppleScript to find people, list entries, and retrieve email or phone details. Use it when an agent needs address-book access.
npx skills add daxaur/openpaw --skill c-contacts -a claude-codeWhat c-contacts does
c-contacts connects an agent to the macOS Contacts app through AppleScript, so it does not rely on a separate CLI utility. It can search by part of a person’s name or email, list contact names, retrieve email addresses and phone numbers, count entries, and read details for a specific person.
When a search returns several people, the skill is intended to show every match and let the user choose. Contact data should not be written to memory files. The Contacts app may be closed; AppleScript can still address it on macOS.
What it helps with
- search contacts by a partial name
- retrieve one person’s email address
- look up a phone number
- list every contact name
- match records by part of an email
Example prompts for the agent
- Search macOS Contacts for everyone whose name contains “John”, then show each email and phone number.
- Look up the email addresses for “John Smith” in macOS Contacts.
- Count all people in macOS Contacts.
How to install c-contacts
1Skills CLI (Vercel)
npx skills add daxaur/openpaw --skill c-contacts -a claude-code2Manually: put the files in place
~/.claude/skills/c-contacts/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/c-contacts/
1Skills CLI (Vercel)
npx skills add daxaur/openpaw --skill c-contacts -a codex2Manually: put the files in place
.agents/skills/c-contacts/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add daxaur/openpaw --skill c-contacts -a cursor2Manually: put the files in place
.cursor/skills/c-contacts/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install daxaur/openpaw c-contacts2Manually: put the files in place
.github/skills/c-contacts/SKILL.md1Skills CLI (Vercel)
npx skills add daxaur/openpaw --skill c-contacts -a gemini-cli2Platform CLI
gemini skills install https://github.com/daxaur/openpaw --path skills/c-contactsManually: put the files in place
.devin/skills/c-contacts/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add daxaur/openpaw --skill c-contacts -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about c-contacts
How do I install c-contacts in Claude Code?
Run npx skills add daxaur/openpaw --skill c-contacts -a claude-code, then check ~/.claude/skills/c-contacts/SKILL.md.
What does c-contacts do?
It lets an agent query macOS Contacts with AppleScript. The skill can search by name or email, retrieve phone and email details, list names, and count entries.
Does Contacts need to be open first?
No. AppleScript can access the Contacts app while it is closed.
Source text
SKILL.md · MIT
---
name: c-contacts
description: macOS Contacts — search, list, and look up contact details via AppleScript.
tags: [contacts, address-book, people, phone]
---
# Contacts — Address Book
Access macOS Contacts app via AppleScript. No CLI tool needed.
## Commands
```bash
# Search for a contact by name
osascript -e 'tell application "Contacts"
set results to (every person whose name contains "John")
set output to ""
repeat with p in results
set output to output & name of p & linefeed
repeat with e in emails of p
set output to output & " Email: " & value of e & linefeed
end repeat
repeat with ph in phones of p
set output to output & " Phone: " & value of ph & linefeed
end repeat
set output to output & linefeed
end repeat
return output
end tell'
# Get all contact names
osascript -e 'tell application "Contacts" to get name of every person'
# Get a specific contact's email
osascript -e 'tell application "Contacts"
set p to first person whose name is "John Smith"
get value of every email of p
end tell'
# Get a specific contact's phone
osascript -e 'tell application "Contacts"
set p to first person whose name is "John Smith"
get value of every phone of p
end tell'
# Count contacts
osascript -e 'tell application "Contacts" to count every person'
# Search by email
osascript -e 'tell application "Contacts"
set results to (every person whose value of emails contains "john@")
get name of results
end tell'
```
## Guidelines
- Always search by partial name (uses `contains`) to be flexible
- Return name, email, and phone by default
- If multiple matches, list all and let the user pick
- Contacts app does not need to be running — AppleScript handles it
- Never store contact details in memory files for privacy
- If asked "what's [name]'s number?", search contacts first, then memory
© daxaur · MIT · daxaur/openpaw