> ## Documentation Index
> Fetch the complete documentation index at: https://docs.machine0.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Prompts

> CLI reference for prompts — named text templates stored on a profile and served over its MCP endpoint as slash commands.

<Warning>
  Profiles are an **experimental** feature. The `prompts` commands are hidden by
  default — run `machine0 config set USE_EXPERIMENTAL_FEATURES=true` to enable
  them.
</Warning>

A prompt is a named text template stored on a [profile](/cli/profiles) and served over the profile's MCP endpoint. Claude Code surfaces MCP prompts as slash commands — `/mcp__<server>__<name>`, where `<server>` is whatever name you gave the connection (`machine0` on VMs, which wire the profile endpoint automatically). One `prompts new` makes a prompt available in every Claude surface connected to the profile — unlike machine-local `.claude/commands` files, the library follows the profile everywhere, and edits propagate without touching any machine.

```bash theme={"theme":"css-variables"}
machine0 prompts new work code-review --body @review.md
claude mcp add --transport http work https://app.machine0.io/profiles/work/mcp
# in Claude Code: type "/" → /mcp__work__code-review
```

Two propagation rules: **adds and removes** appear in a client on its next connect (Claude Code discovers prompts when it connects — reconnect the server or restart the session to pick up a new prompt); **body and description edits are live** on the next invocation, no reconnect needed.

Prompt names follow the same rules as integration names (letters, digits, and dashes; max 63 characters, unique per profile case-insensitively). Each profile holds up to 50 prompts, bodies up to 64KB, stored encrypted at rest. Prompts in v1 take no arguments — invoking the slash command inserts the body verbatim; argument templating is a planned follow-up.

***

## prompts ls

List a profile's prompts with their descriptions, sizes, and last-updated times.

```bash theme={"theme":"css-variables"}
machine0 prompts ls <profile>
machine0 prompts ls work --json
```

***

## prompts get

Show a prompt's metadata and full body.

```bash theme={"theme":"css-variables"}
machine0 prompts get <profile> <prompt>
machine0 prompts get work code-review --json
```

***

## prompts new

Add a prompt to a profile. Aliased as `prompts create` and `prompts add`. Takes a `--body` and an optional `--description`. Adding a name that already exists errors with a pointer at `prompts update`.

The `--body` flag takes three input modes (curl's `@` convention), and omitting it in a terminal opens `$EDITOR` like `git commit`:

```bash theme={"theme":"css-variables"}
machine0 prompts new work ship --body "Run /ship and fix anything that fails."
machine0 prompts new work code-review --body @./prompts/review.md
cat review.md | machine0 prompts new work code-review --body @-
machine0 prompts new work standup            # opens $EDITOR
machine0 prompts new work code-review --description "review SOP" --body @review.md
```

***

## prompts update

Update a prompt's body or description. Pass an empty string to clear the description. With no flags in a terminal, opens `$EDITOR` pre-filled with the current body.

```bash theme={"theme":"css-variables"}
machine0 prompts update work code-review --body @review-v2.md
machine0 prompts update work code-review     # $EDITOR pre-filled with the current body
```

***

## prompts rm

Remove a prompt from a profile. It disappears from connected clients on their next connect.

```bash theme={"theme":"css-variables"}
machine0 prompts rm <profile> <prompt>
machine0 prompts rm work code-review --yes   # skip the confirmation prompt
```
