xiaohongshu
xiaohongshu
contacts
Manage Google Contacts with full CRUD operations via Ruby scripts. This skill should be used when searching, viewing, creating, updating, or deleting contacts in Google Contacts. Supports contact lookup, batch operations, and comprehensive contact field management including names, emails, phones,...
Full skill instructions
Provide comprehensive Google Contacts management capabilities through Ruby-based scripts with shared authentication. Enable full CRUD operations (Create, Read, Update, Delete) on Google Contacts with support for all standard contact fields.
Use this skill for ANY Google Contacts operations:
This skill shares authentication with the calendar skill via ~/.claude/.google/token.json. Both skills use the same OAuth token with scopes:
https://www.googleapis.com/auth/calendar (Calendar access)https://www.googleapis.com/auth/contacts (Contacts read/write access)When either skill refreshes the token, both skills benefit from the updated authentication.
If not already configured:
~/.claude/.google/client_secret.json exists with OAuth credentialsSince the contacts scope has been updated from readonly to full access, you'll need to re-authorize once:
# Delete the existing token to force re-authorization
rm ~/.claude/.google/token.json
# Run any contacts operation to trigger OAuth flow
~/.claude/skills/contacts/scripts/contacts_manager.rb --list
Follow the authorization URL and enter the code when prompted.
Location: scripts/contacts_manager.rb
Comprehensive Ruby script providing all Google Contacts operations through the People API v1.
Find contacts by name or other search criteria:
# Search by name
contacts_manager.rb --search "John Smith"
# Search by partial name
contacts_manager.rb --search "John"
Returns JSON with matching contacts including all available fields.
Retrieve complete information for a specific contact:
# Get by resource name (from search results)
contacts_manager.rb --get "people/c1234567890"
Returns full contact details including names, emails, phones, addresses, birthdays, organizations, notes, and URLs.
Browse contacts with pagination support:
# List first 100 contacts
contacts_manager.rb --list
# List with custom page size
contacts_manager.rb --list --page-size 50
# Get next page using token from previous response
contacts_manager.rb --list --page-token "NEXT_PAGE_TOKEN"
Returns array of contacts with next_page_token for pagination.
Add a new contact with any combination of fields:
# Minimal contact (name and email)
contacts_manager.rb --create '{
"name": {
"given_name": "John",
"family_name": "Doe",
"display_name": "John Doe"
},
"emails": [
{"value": "[email protected]", "type": "home"}
]
}'
# Complete contact with all fields
contacts_manager.rb --create '{
"name": {
"given_name": "Jane",
"family_name": "Smith",
"display_name": "Jane Smith"
},
"emails": [
{"value": "[email protected]", "type": "work"},
{"value": "[email protected]", "type": "home"}
],
"phones": [
{"value": "555-1234", "type": "mobile"},
{"value": "555-5678", "type": "work"}
],
"organization": {
"name": "Acme Corp",
"title": "Senior Engineer"
},
"birthday": {
"year": 1990,
"month": 5,
"day": 15
},
"addresses": [
{
"street": "123 Main St",
"city": "Springfield",
"state": "IL",
"zip": "62701",
"country": "US",
"type": "home"
}
],
"notes": "Met at conference 2024"
}'
Modify contact information using resource name:
# Update phone number
contacts_manager.rb --update "people/c1234567890" \
--update-data '{"phones":[{"value":"555-9999","type":"mobile"}]}' \
--update-mask "phoneNumbers"
# Update email addresses
contacts_manager.rb --update "people/c1234567890" \
--update-data '{"emails":[{"value":"[email protected]","type":"work"}]}' \
--update-mask "emailAddresses"
# Update multiple fields
contacts_manager.rb --update "people/c1234567890" \
--update-data '{
"phones":[{"value":"555-1111","type":"mobile"}],
"organization":{"name":"New Company","title":"Director"}
}' \
--update-mask "phoneNumbers,organizations"
Update Mask Fields: Specify which fields to update (comma-separated):
names - Name fieldsemailAddresses - Email addressesphoneNumbers - Phone numbersorganizations - Organization/company infobirthdays - Birthday informationaddresses - Physical addressesbiographies - Notes/biographyRemove a contact permanently:
contacts_manager.rb --delete "people/c1234567890"
Warning: This permanently deletes the contact. There is no undo.
See references/contact_fields.md for comprehensive documentation of all available contact fields and their data structures.
given_name, family_name, display_namevalue, type (home, work, other)value, type (mobile, home, work, other)name, titleyear, month, daystreet, city, state, zip, country, type# 1. Search for contact
SEARCH_RESULT=$(contacts_manager.rb --search "John Smith")
# 2. Extract resource name from results
RESOURCE_NAME=$(echo $SEARCH_RESULT | jq -r '.contacts[0].resource_name')
# 3. Get full details
contacts_manager.rb --get "$RESOURCE_NAME"
When user provides just a name, create minimal contact:
contacts_manager.rb --create '{
"name": {
"given_name": "FirstName",
"family_name": "LastName",
"display_name": "FirstName LastName"
}
}'
Then update with additional information as provided.
For updating multiple contacts, search first, then update each:
# Find all contacts at company
contacts_manager.rb --search "Acme Corp" > contacts.json
# Process each contact (example in shell)
cat contacts.json | jq -r '.contacts[].resource_name' | while read resource; do
contacts_manager.rb --update "$resource" \
--update-data '{"organization":{"name":"Acme Corporation"}}' \
--update-mask "organizations"
done
Since both skills share authentication, they work seamlessly together:
# Use calendar skill to find meeting attendees
calendar_manager.rb --list-events
# Add attendee to contacts
contacts_manager.rb --create '{"name":{...}, "emails":[...]}'
# Update contact with meeting notes
contacts_manager.rb --update "people/c123" \
--update-data '{"notes":"Met at Q1 planning meeting"}' \
--update-mask "biographies"
The script returns JSON with status and error details:
{
"status": "error",
"code": "AUTH_ERROR|API_ERROR|INVALID_ARGS",
"message": "Detailed error message"
}
Exit Codes:
0 - Success1 - Operation failed2 - Authentication error3 - API error4 - Invalid argumentsThe contacts skill complements the email skill by providing contact lookup:
# Find contact email
EMAIL=$(contacts_manager.rb --search "Rob" | jq -r '.contacts[0].emails[0].value')
# Use with email skill
~/.claude/skills/email/SKILL.md "Send Rob a message about the project"
# List all contacts
contacts_manager.rb --list > all_contacts.json
# Process to find duplicates (requires custom logic)
# Then delete duplicates
contacts_manager.rb --delete "people/c123"
# Search contacts with birthdays
contacts_manager.rb --list | jq '.contacts[] | select(.birthday != null)'
# Add birthday to contact
contacts_manager.rb --update "people/c123" \
--update-data '{"birthday":{"month":5,"day":15}}' \
--update-mask "birthdays"
# Re-authorize if token invalid
rm ~/.claude/.google/token.json
contacts_manager.rb --list
If you see scope-related errors, ensure the token has the full contacts scope:
# Check current scopes
cat ~/.claude/.google/token.json | jq -r '.default' | jq -r '.scope'
# Should include: https://www.googleapis.com/auth/contacts
Google Contacts API has rate limits. If you hit quota:
Current version: 1.0.0
Run contacts_manager.rb --version to check installed version.
xiaohongshu
technical spec
product ux expert
database patterns
Conduct multi-agent task orchestration and workflow coordination.
Initialize project with Conductor artifacts (product definition,
Expert in web animations, transitions, and motion design using Framer Motion and CSS
Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...
PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.
Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...
Display project status, active tracks, and next actions
Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience