# Edit an Ask skill

> Replace a custom Ask skill's title, description, prompt and model. Send every field: this is a full replace. Call it only when the user asked for this in the conversation; never on your own initiative.

`ask.update_skill` · write

- **MCP tool:** `ask_update_skill`. Catalog: reach it with `find_actions` and `run_write_action`, or turn on the full toolset.
- **REST:** `POST /v1/ask/update-skill`
- **CLI:** `xholic ask update-skill`
- **Scope:** `write`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

## Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `skillId` | string (uuid) | Yes | Custom skill id from ask.catalog. |
| `title` | string ≤ 80 chars | Yes |  |
| `description` | string ≤ 200 chars or null | No |  |
| `prompt` | string ≤ 4000 chars | Yes | What Ask should do when the skill runs, in the user's words. |
| `model` | "luna" \\| "sol" \\| "sonnet" \\| "opus" \\| "astra" \\| "fable" or null | No | Ask model the skill runs on; leave out for the user's default. |
| `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. |
