# Create a Signals agent

> Create an always-on agent that finds leads on X from sources and an audience description. Call it only when the user asked for this in the conversation; never on your own initiative.

`signals.create_agent` · write

- **MCP tool:** `create_signal_agent`. Loaded by default in MCP clients.
- **REST:** `POST /v1/signals/create-agent`
- **CLI:** `xholic signals create-agent`
- **Scope:** `write`
- **Plan:** Pro plan or higher
- **Cost:** Free.
- **Rate limit bucket:** `write`

## Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string ≤ 80 chars | Yes |  |
| `productId` | string ≤ 160 chars or null | No |  |
| `audienceDescription` | string ≤ 3000 chars | Yes |  |
| `exclusions` | string ≤ 1500 chars or null | No |  |
| `rubric` | object or null | No |  |
| `rubric.who` | string ≤ 600 chars | Yes |  |
| `rubric.needs` | array of string ≤ 200 chars (max 8) | No | Default: `[]`. |
| `rubric.disqualifiers` | array of string ≤ 200 chars (max 8) | No | Default: `[]`. |
| `rubric.exampleMatch` | string ≤ 600 chars or null | No | Default: `null`. |
| `rubric.exampleNonMatch` | string ≤ 600 chars or null | No | Default: `null`. |
| `strictness` | "HIGH_PRECISION" \\| "DISCOVERY" | No | Default: `"HIGH_PRECISION"`. |
| `dmPolicy` | "ANYONE" \\| "OPEN_DMS_ONLY" | No | Default: `"ANYONE"`. |
| `destinationListId` | string (uuid) | No |  |
| `baselineMode` | "FUTURE_ONLY" \\| "RECENT" | No | Default: `"FUTURE_ONLY"`. |
| `intervalHours` | integer 4–24 | No | Default: `6`. |
| `status` | "ACTIVE" \\| "PAUSED" | No | Default: `"ACTIVE"`. |
| `sources` | array of object (min 1, max 15) | Yes |  |
| `newListName` | string ≤ 80 chars | No | A name for a new contact list to save leads to. |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |
