Install any skill in seconds. Free to start, no credit card required.
Get Started Free →gooseworks-ai/contact-cache
Track all identified/contacted people across strategies. CSV-backed contact database with dedup by LinkedIn URL or email. Prevents duplicate outreach when running strategies on a recurring cadence.
Passed 10 of 16 test cases with the skill, and 4 of 16 without it.
and 5 more in the full report
8 fixed6 passed either way8 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 8 test cases the skill fixed. Same model, same prompt, with and without the skill.
A prospect confirmed a demo call. I want to update https://linkedin.com/in/carol-davis's status. Should I set status to 'meeting_scheduled', 'booked', or 'meeting_booked'?
| Checked | Without skill | With skill |
|---|---|---|
| Identifies meeting_booked as the valid status string | Missed | Passed |
The instructions your model reads when the skill loads.
Track all identified/contacted people across strategies. CSV-backed contact database with dedup by LinkedIn URL or email. Prevents duplicate outreach when running strategies on a recurring cadence.
# Check if contacts are already cached
python3 skills/contact-cache/scripts/cache.py check --linkedin-urls "https://linkedin.com/in/person1,https://linkedin.com/in/person2"
python3 skills/contact-cache/scripts/cache.py check --emails "[email protected],[email protected]"
# Add a single contact
python3 skills/contact-cache/scripts/cache.py add --name "John Smith" --linkedin-url "https://linkedin.com/in/johnsmith" --email "[email protected]" --company "Acme Corp" --title "VP Finance" --strategy "2A-hiring-signal"
# Bulk import from CSV
python3 skills/contact-cache/scripts/cache.py add --csv /path/to/leads.csv --strategy "2A-hiring-signal"
# Update a contact's status
python3 skills/contact-cache/scripts/cache.py update --linkedin-url "https://linkedin.com/in/johnsmith" --status contacted --notes "Sent intro email 2026-02-24"
# Export the full cache
python3 skills/contact-cache/scripts/cache.py export --format csv
python3 skills/contact-cache/scripts/cache.py export --format json
python3 skills/contact-cache/scripts/cache.py export --status contacted
python3 skills/contact-cache/scripts/cache.py export --strategy "2A-hiring-signal"
# Print summary statistics
python3 skills/contact-cache/scripts/cache.py stats
Contacts are stored in skills/contact-cache/data/contacts.csv. The file is auto-created on first use.
Dedup is by LinkedIn URL (preferred) or email. Both are normalized and hashed (SHA256, first 16 chars) to produce a stable contact_id.
new, qualified, contacted, replied, meeting_booked, converted, not_interested
test cases passed, vs 4 / 16 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.