> For the complete documentation index, see [llms.txt](https://skyforgeai.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://skyforgeai.gitbook.io/docs/use/custom-prompts.md).

# Custom Prompts

Save a reusable prompt once, invoke it by name whenever you need it, and edit it later without re-typing the whole thing. Unlike [Custom Skills](/docs/use/custom-skills.md), a prompt **only runs when you explicitly call it** — the agent never decides to use one on its own.

> Not to be confused with [Example Prompts](/docs/use/examples.md), which are just sample messages to copy-paste — this page is about *saving your own* reusable prompts.

***

## Managing prompts from the Dashboard

Open the **Prompts** tab in the Hub dashboard (left nav, between Skills and Stories).

![Prompts tab — the How to use a prompt card, then Your Prompts](https://2874025704-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoJEVszlHbBuPIN3VRjBS%2Fuploads%2Fgit-blob-ceb4216fc9b12b5e4661be9597f6ba8ff747fe27%2Fprompts-tab-overview.png?alt=media)

The **How to use a prompt** card at the top is a permanent reminder of the invocation syntax, so you don't have to come back here to look it up.

Click **+ Create Prompt**, give it a name (lowercase, hyphens — this is what you'll type after `/prompt`), an optional description (just for your own reference in the list), and the prompt content.

![Create Prompt form with markdown editor](https://2874025704-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoJEVszlHbBuPIN3VRjBS%2Fuploads%2Fgit-blob-160f9db26e5d1a267dec61a8056984dab611ae46%2Fprompts-create-form.png?alt=media)

The content editor is the same one used for Skills — a small toolbar (bold, italic, heading, code, lists, link) plus a **Write / Preview** toggle.

Each prompt in the **Your Prompts** grid has **Edit**, **Export** and **Delete**, and the card lists the placeholders that prompt uses. No restart needed for any of it.

![Edit form, with detected placeholders listed under the editor](https://2874025704-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoJEVszlHbBuPIN3VRjBS%2Fuploads%2Fgit-blob-ebbb1ec65e932eba18fbb156598bfca503d6b07b%2Fprompts-edit-form.png?alt=media)

While you type, the editor scans the content and lists what it found under **Detected placeholders** — a quick way to confirm a `$1` or `$ARGUMENTS` is actually being picked up before you save.

Two more buttons sit at the top of the tab:

* **Upload .md/.zip** — bring in a prompt written elsewhere, or a zip of several
* **Export All** — write every saved prompt out at once, for backup or for sharing a set with a teammate

***

## How to invoke a prompt

**In chat:**

```
/prompt prompt-name your arguments here
```

**From the CLI:**

```
skyforge run --command prompt prompt-name your arguments here
```

`prompt` here is a fixed keyword — you always type `/prompt` first, then the name of the specific prompt you saved, then whatever arguments it needs.

***

## Arguments and placeholders

A prompt can use any of these in its content:

| Placeholder           | Meaning                                                                                                                                         |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `$1`, `$2`, `$3`, ... | Positional arguments, space/quote-separated. The **last** placeholder used swallows any leftover words, so trailing text still reads naturally. |
| `$ARGUMENTS`          | Everything typed after the prompt name, as one unsplit string.                                                                                  |
| *(none)*              | If the prompt has no placeholders at all, anything typed after the name gets appended to the end automatically.                                 |

**Example** — save this as `review`:

```markdown
Review the code in $1 for security issues and check for $2.
```

* `/prompt review auth.ts SQL injection` → *"Review the code in auth.ts for security issues and check for SQL injection."*
* `/prompt review payments.ts race conditions` → same prompt, different target — no need to write two versions.

**`$ARGUMENTS` example** — save this as `summarize`:

```markdown
Summarize this: $ARGUMENTS
```

`/prompt summarize the whole Q3 report in one paragraph` → `$ARGUMENTS` becomes *"the whole Q3 report in one paragraph"* as a single block, not split apart.

***

## Naming rules

* Lowercase letters, numbers, and hyphens only (2–64 characters).
* Must be unique **among your prompts** — that's it. Prompts live in their own namespace, separate from Skills, MCP prompts, and built-in commands (`init`, `review`), so a prompt can share a name with an existing Skill without conflict. The Dashboard shows a non-blocking heads-up if that happens, just so you know — it won't stop you from saving.
* The name `prompt` itself is reserved, since that's the invocation keyword.

This is a deliberate design choice: an earlier version of this feature stored prompts alongside the pre-existing `command`/`commands` config directories, which meant prompt names had to stay unique against *every* Skill too (Skills are separately also invocable directly by name, unrelated to this feature — see below). Splitting into a dedicated `/prompt <name>` scheme removed that cross-namespace collision requirement entirely.

***

## "Also invocable directly (not via /prompt)"

The Prompts tab also shows a **read-only** list of everything already callable by typing `/name` directly, with no `/prompt` prefix: the built-in `init` and `review` commands, any MCP-server prompts you have configured, and every Skill (which can be invoked on demand this way, in addition to auto-loading based on the agent's own judgment). This section is purely for awareness — it's not a naming constraint on your prompts, and you can't edit anything there (edit Skills from the [Skills tab](/docs/use/custom-skills.md) instead).

***

## Managing prompts manually (file-based)

Prompts are plain Markdown files, same underlying format the Dashboard uses:

```
~/.config/skyforge/prompt/my-prompt.md
```

(`~/.config/skyforge/prompts/` — plural — also works.) Unlike Skills, prompts are flat files, not one-per-folder.

**Template:**

```markdown
---
description: Optional — shown in the Dashboard's prompt list
---

Your prompt content here. Use $1, $2, or $ARGUMENTS for placeholders.
```

The filename (minus `.md`) is the prompt's name — no `name` field needed in the frontmatter. Editing a file directly is picked up the same way as editing through the Dashboard; there's no separate cache to invalidate for this feature the way there is for Skills' external-MCP-client path, so a manual edit or a Dashboard edit behave identically.
