---
title: "Skills & Agent Signup"
description: "Install the Primitive email skills, or create a standalone agent account with its own inbox."
canonical: "https://docs.primitive.dev/docs/skills"
last-updated: "2026-05-17T00:00:00.000Z"
---

# Skills & Agent Signup

Primitive ships skills for coding agents (Claude Code, Codex, Cursor, and 50+ compatible agents) so that emailing — sending and receiving — is one verb away, with no SMTP credentials and no API setup in the agent's context. Install the bundle with:


```
npx skills add primitivedotdev/skills
```


In Claude Code, the same repository installs as a plugin that carries the skills together with Primitive's hosted [MCP server](/docs/connectors):


```
claude plugin marketplace add primitivedotdev/skills
claude plugin install primitive@primitive
```


Use one or the other, not both, so each skill is installed once.

The chat and inbox skills below are browsable at [skills.sh/primitivedotdev/skills](https://skills.sh/primitivedotdev/skills).

## primitive-chat — send and wait for the reply

`primitive-chat` is for when your agent needs to contact someone (a person or another agent) and get the answer back. It sends your outbound message and waits for the threaded reply in one step:


```
primitive chat help@vendor.example "how do I install the prose skill?"
```


Continue the same thread, or get machine-readable output:


```
primitive chat reply "one more thing"
primitive chat help@vendor.example "..." --json
```


Reach for it whenever you would open a `mailto:`, ask the user for SMTP credentials, or want to ask a help/dev/support agent the same way you would grep its docs.

## primitive-inbox — receive mail and act on it

`primitive-inbox` gives your agent a managed `*.primitive.email` address that receives mail — useful for verification codes, confirmations, replies, or any inbound workflow. Read and wait for mail:


```
primitive emails latest
primitive emails wait
```


To run code on every inbound message, deploy a hosted [Function](/docs/functions) and then bind your inbound mail to it (deploying alone does not route mail to the function):


```
primitive functions deploy --name my-handler --file ./dist/handler.js
# bind inbound mail to the function (use the function id from the deploy output)
primitive functions route-set --id <function-id> --fallback
```


## Standalone agent signup

An agent can create a separate Primitive account and managed inbox without an API key
or manual review. A human who controls the signup email must provide one verification
code. This path does not add the agent to an existing organization's app or agent
network. To connect a coding session to your organization, create a new agent in the
Primitive app and give that session its single-use setup instruction.

Start signup with an email the user controls:


```
primitive agent start-agent-signup --email you@example.com --terms-accepted
```


Use an external email address that you control. Email-code signup refuses addresses on domains Primitive currently hosts, even if the domain's ownership verification has lapsed.

Primitive emails a 6-digit verification code to that address, and the command's output includes a `signup_token` (a session handle, not a credential). Complete signup with both:


```
primitive agent verify-agent-signup --verification-code "$CODE" --signup-token "$SIGNUP_TOKEN"
```


On success the CLI stores OAuth credentials locally and your agent has a managed `<name>.primitive.email` address. Confirm with:


```
primitive whoami
primitive domains list
```


If the code never arrives and the signup session is still pending and unexpired, request another code with the same `signup_token`:


```
primitive agent resend-agent-signup-verification --signup-token "$SIGNUP_TOKEN"
```


If the session expires, start signup again to get a new `signup_token`. If the email address becomes hosted by Primitive before a resend or verification, use a different external address and start again.

If the email has no Primitive account yet, this signup creates a full account tied to it. If it already has one, you are signed in to that account instead. Either way there is no upgrade step to run afterwards.

See [Authentication & API Keys](/docs/auth) for how the resulting credentials work, and [Which onboarding fits?](/docs/which-onboarding) to decide between the agent-side and product-side paths.

## Related Pages

- [Quickstart](/docs/quickstart): sign up, deploy a Function, send and receive mail.

- [CLI](/docs/cli): the full `primitive` command surface.

- [Sending Mail](/docs/sending) and [Receiving Mail](/docs/receiving): the underlying send and receive model.

- [Authentication & API Keys](/docs/auth): credentials and OAuth.

Maintained by the [primitive.dev team](/about) · [Trust & security](/trust)Last updated: May 17, 2026
