From robin
Manage Robin contacts (customers) and tags. Use for any task involving finding, creating, updating, or tagging contacts — including bulk imports from CSV exports, spreadsheets, or ticketing platforms. Also use when assigning or removing tags, auditing a contact's scheduled messages, or cleaning up tags.
How this skill is triggered — by the user, by Claude, or both
Slash command
/robin:robin-contacts-managementThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create, update, tag, and import contacts for a Robin agent. Covers individual workflows and bulk imports.
Create, update, tag, and import contacts for a Robin agent. Covers individual workflows and bulk imports.
The CLI says
customerseverywhere. Speak to users about contacts — that's the brand term.
Robin CLI installed and authenticated. If not:
npm install -g @robinai/cli
robin auth login
robin config set default-agent <agentId>
Confirm the default Robin is set before running any contact commands — contacts and tags are agent-scoped:
robin config get default-agent
# List contacts — with optional filters
robin customers list --json
robin customers list --name "Jane" --json
robin customers list --phone "+15551234567" --json
robin customers list --tag-id tag_abc --json
robin customers list --page-size 50 --cursor <nextCursor> --json
# Sort
robin customers list --sort-by name --sort-order asc --json
# Get a single contact
robin customers get <customerId> --json
# See what announcements a contact will receive
robin customers announcements <customerId> --json
# List tags
robin tags list --json
robin tags list --limit 50 --cursor <cursor> --json
# Get a single tag
robin tags get <tagId> --json
--agent <agentId> overrides the default Robin on any of the above.
robin customers create \
--name "Jane Smith" \
--phone "+15551234567"
Optional flags:
| Flag | Description |
|---|---|
--opted-in | Mark as opted in to announcements at creation time |
--notes <text> | Internal notes about the contact |
--welcome-message <msg> | Message Robin sends when this contact first texts in |
--agent <agentId> | Override default Robin |
Opt-in is a compliance gate. Only set
--opted-inafter asking the user to name the consent mechanism (e.g. ticket purchase opt-in, venue sign-up form). If they can't confirm, omit the flag — contacts default to opted out and can join by texting START.
robin tags create --name "VIP"
Optional flags:
| Flag | Description |
|---|---|
--description <text> | What this tag is for |
--visibility <value> | PRIVATE (default), CONTEXTUAL, or PUBLIC |
--additional-keywords <kw...> | Extra SMS keywords contacts can text to join (PUBLIC tags only) |
--welcome-message <msg> | Message sent when a contact subscribes via keyword |
--agent <agentId> | Override default Robin |
Always ask the user about
--visibilitybefore creating.PUBLICexposes subscribe keywords to opt-in via SMS — confirm this is intentional before setting it.
robin customers update <customerId> \
--name "Jane Smith" \
--notes "Upgraded to VIP at the door" \
--opted-in true
Supported fields: --name, --notes, --opted-in true|false
robin tags update <tagId> \
--description "Premium ticket holders" \
--visibility PRIVATE
Supported fields: --description, --visibility, --additional-keywords, --welcome-message
robin tags assign <customerId> --tag <tagId>
# tagCustomerId is the join-record ID returned by the assign response or contacts list
robin tags unassign <customerId> <tagCustomerId>
When tagging or untagging more than ~10 contacts at once, prefer the bulk-import flow with
--tag-idsinstead of individualtags assigncalls.
robin tags delete <tagId>
Never pass
--yesto a tag delete without explicit user confirmation. Deleting a tag removes it from every contact assigned to it — this cannot be undone.
For importing more than a handful of contacts at once. See WORKFLOW.md for the full procedure.
Quick reference:
robin customers bulk-import \
--agent "$AGENT_ID" \
--file contacts.json \
--tag-ids tag_1 tag_2
The --file must be a JSON array. The CLI does not accept CSV directly:
[
{ "name": "Jane Smith", "phone": "+15551234567", "optedIn": false },
{ "name": "Bob Jones", "phone": "+15559876543", "notes": "Vendor", "optedIn": false }
]
curl or direct HTTP calls are not acceptable substitutes.customers.+15551234567). Validate before submitting — fix locally rather than letting the API reject the whole batch.robin config get default-agent or pass --agent explicitly.PUBLIC tag visibility exposes SMS keywords. Confirm intent before creating or updating to PUBLIC.optedIn: true on any contact — individually or in bulk — ask the user to name the consent mechanism (ticket purchase form, venue sign-up, web opt-in, etc.). If they cannot confirm clearly, set optedIn: false and let contacts join via START. See WORKFLOW.md Phase 2, step 2 for the mandatory confirmation script.bulk-import --tag-ids instead of looping tags assign.robin-announcement-builder.WORKFLOW.mdnpx claudepluginhub robin-guide/robin-cli --plugin robinCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.