# Edit a Signals agent

> Change a Signals agent's audience, sources, rubric or schedule. Call it only when the user asked for this in the conversation; never on your own initiative.

`signals.update_agent` · write

- **MCP tool:** `signals_update_agent`. Catalog: reach it with `find_actions` and `run_write_action`, or turn on the full toolset.
- **REST:** `POST /v1/signals/update-agent`
- **CLI:** `xholic signals update-agent`
- **Scope:** `write`
- **Plan:** Pro plan or higher
- **Cost:** Free.
- **Rate limit bucket:** `write`

## Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `agentId` | string (uuid) | Yes |  |
| `changes` | object | Yes |  |
| `changes.name` | string ≤ 80 chars | No |  |
| `changes.productId` | string ≤ 160 chars or null | No |  |
| `changes.audienceDescription` | string ≤ 3000 chars | No |  |
| `changes.exclusions` | string ≤ 1500 chars or null | No |  |
| `changes.rubric` | object or null | No |  |
| `changes.rubric.who` | string ≤ 600 chars | Yes |  |
| `changes.rubric.needs` | array of string ≤ 200 chars (max 8) | No | Default: `[]`. |
| `changes.rubric.disqualifiers` | array of string ≤ 200 chars (max 8) | No | Default: `[]`. |
| `changes.rubric.exampleMatch` | string ≤ 600 chars or null | No | Default: `null`. |
| `changes.rubric.exampleNonMatch` | string ≤ 600 chars or null | No | Default: `null`. |
| `changes.strictness` | "HIGH_PRECISION" \\| "DISCOVERY" | No |  |
| `changes.dmPolicy` | "ANYONE" \\| "OPEN_DMS_ONLY" | No |  |
| `changes.baselineMode` | "FUTURE_ONLY" \\| "RECENT" | No |  |
| `changes.intervalHours` | integer 4–24 | No |  |
| `changes.sources` | array of object (min 1, max 15) | No | The agent's full list of sources after the change, kept ones included. |
| `changes.destinationListId` | string (uuid) | No |  |
| `changes.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. |
