Picking a contact in Claude Code

Claude Code lists RelayLink contacts under @ and offers send-to as a slash command. Both resolve the person on the server and stop at a draft. Neither is a send. The list is yours — not everyone else's correspondents.

2 min read

Claude Code is the host with a picker. Contacts appear under @. send-to is a slash command. Both exist so you name the person and the model is not the one guessing which Richard.

They are not a second send path.

Contacts as resources

Each accepted contact is relaylink://contacts/ plus their address. Attaching one to a message means the same as @relaylink plus their name: open a draft, preview, send only after you approve.

The list is built for the signed-in account, every time. A resource list that was one fixed catalogue for everybody would put someone else's correspondents in a stranger's @ menu. Reads of anyone who is not an accepted contact answer not-found — pending, blocked, a stranger, a URI outside that space, all identical.

The body of the resource is an instruction, not a card. A host that attaches it puts that text in front of the model, so what it should say is what to do next.

The send-to prompt

You pick the command and name the person — the name from list_contacts, or their address. Optionally, what it is about, in your words.

The server resolves the name. On a hit, the prompt the model sees already says who, and to call draft_package with that contact. On a miss or a tie, it carries the resolver's own message, so the model asks you rather than picks.

Then: brief them from this conversation, show the exact preview, wait for your approval or your own wording for the note, then confirm_send. The prompt says, in those words, not to send on the strength of the command.

If the contact has a private nickname, the prompt says so, and says to write the package in words they would recognise.

What this is not

It is not how Claude.ai works. That host has no @ for connectors. The shorthand still works there because the instructions teach it, not because a picker registered it.

It is not a send. Nothing in this shape delivers a package. The draft is still a draft. Twenty-four hours, then it expires.

If the name does not resolve, do not invent an address. Ask, or pass toEmail once you know.

Frequently asked questions

Does picking a contact send the message?
No. The resource and the send-to prompt are instructions that end at preview-and-approve. A prompt that said "send" would be the fastest path becoming the one that skipped the approval step.
Why don't I see someone I have not accepted yet?
Only accepted contacts are listed. A URI for anyone else — pending, a stranger, no pair — answers not-found, the same as a name that does not exist. Anything else would be a way to ask whether they have an account.
If I attach a contact, will the briefing use my nickname for them?
The prompt tells the model not to. The nickname is how you address them to the server. The package is written in words they would recognise, unless you have chosen to share that word.