Reusable assistants in Open WebUI: model presets and slash-command prompts
Stop pasting the same instructions into every chat: build Open WebUI model presets with fixed system prompts, and slash-command prompts that open a form.
· ranx.cloud

This is for anyone who keeps a text file of instructions they paste into a chat before the real question: "edit this but keep my voice", "review this diff for these things", "draft a reply in this tone". You end up with two assistants in Open WebUI's model picker, each with its own system prompt, base model and settings, plus a /reply command that opens a small form and turns your answers into a full prompt. Everything is set up in the Workspace pages of the web interface.
Settings below were checked against Open WebUI v0.13.0. Prices are list prices as of November 2026.
Presets and prompts: which is which
Open WebUI has two features for this, and they solve different problems:
| Model preset | Prompt | |
|---|---|---|
| Lives in | Workspace → Models | Workspace → Prompts |
| What it is | A named model in the picker, built on a base model, with a fixed system prompt, parameters and capabilities | A saved message you insert by typing /command |
| Applies to | Every turn of every chat that uses it | One message, the one you insert it into |
| Use it for | A role you stay in for a whole conversation | A task you start the same way each time |
A preset doesn't copy the model. It's a configuration on top of one of your connected models, and you pay that model's normal price.
Preset 1: an editor on a cheap model
Open Workspace in the sidebar, select the Models tab and click Create.
| Field | Value |
|---|---|
| Model Name | Editor |
| Model ID | editor (no spaces allowed) |
| Base Model (From) | gpt-6-luna, or any small model you've connected |
| Description | Tightens prose, keeps my voice |
System Prompt:
You edit text written by {{USER_NAME}}. Today is {{CURRENT_DATE}}.
Rules:
- Keep the author's voice, word choice and level of formality. Fix what is
wrong or unclear; do not rewrite what already works.
- Return the edited text first, with no preamble.
- Then a short list headed "Changes" with at most five items, each naming
one change and why. Skip trivial punctuation fixes in that list.
- If the text is fine, say "No changes needed" and stop.
- Never add facts, figures or claims that are not in the original.
{{USER_NAME}} and {{CURRENT_DATE}} are filled in by Open WebUI before each request. Write them without spaces inside the braces; {{ USER_NAME }} reaches the model as literal text.
Then the rows below the system prompt:
- Capabilities: switch off Web Search, Image Generation and Code Interpreter. An editor doesn't need them, and every tool the model is offered adds its definition to every request.
- Prompts: click Customize and add starter chips such as
Edit this email:andMake this shorter without losing anything:. They show when you open a new chat with this preset. - Advanced Params: leave at Default.
Click Save & Create. The arrow next to the model's name in the list opens it in a new chat; it's also in the main model picker now.
Preset 2: a code reviewer with a depth control
Create a second model:
| Field | Value |
|---|---|
| Model Name | Code reviewer |
| Model ID | code-reviewer |
| Base Model (From) | gpt-6.1-sol |
System Prompt:
You review code changes. The user pastes a diff or a file.
Report, in this order:
1. Bugs: incorrect behaviour, unhandled errors, race conditions, security
problems. Quote the line and say what breaks.
2. Risky changes: anything that changes public behaviour or data formats.
3. Simplifications that remove code. At most three.
Do not comment on formatting or naming unless it hides a bug.
If you are not sure something is a bug, say so and say what would confirm it.
If there are no bugs, say "No bugs found" before anything else.
Now the part a pasted prompt can't do. In the Model controls row, just below Advanced Params, click Add control:
| Field | Value |
|---|---|
| Name | Depth |
| Display | Menu |
| Options | Quick: parameter reasoning_effort, value low; Thorough: parameter reasoning_effort, value high |
| Default option | Quick |
Save the model. In a chat with Code reviewer, a knobs icon (Model controls) appears next to the model selector in the message box. Pick Thorough for a large refactor, Quick for a one-line fix. The choice is saved per model on your account and stays until you change it.
reasoning_effort is OpenAI's parameter for how long a reasoning model thinks before answering, and the thinking is billed as output tokens. Check which values your base model accepts in OpenAI's model documentation. Don't build this control on a Claude model: Anthropic's OpenAI-compatible endpoint, which Open WebUI uses for Claude, ignores reasoning_effort (Anthropic docs).
A slash-command prompt with a form
Open Workspace → Prompts and click Create.
- Prompt Name:
Reply to an email. The command is filled in from the name; change it toreply. Only letters, digits and hyphens are allowed. - Prompt Content:
Draft a reply to the email below.
My goal: {{goal | text:required}}
Tone: {{tone | select:options=["Friendly","Neutral","Firm"]:required}}
Length: {{length | select:options=["Two sentences","Short paragraph","Detailed"]}}
Things I must mention: {{must_mention | textarea:placeholder="Optional"}}
Write only the reply, ready to paste. Match the language of the email.
Email:
{{email | textarea:required}}
Save it. In any chat, type /reply and pick it from the list: a form opens with a text field, two dropdowns and two text areas. Fill it in and the assembled prompt lands in the message box, where you can still edit it before sending.
The form syntax only works in prompt content. Putting {{goal | text:required}} in a model's system prompt does nothing; the model sees it as literal text.
Prompts and presets combine well: open a chat with Editor, type /reply, and the draft comes back already edited in your voice.
Changing a preset later
Every save that changes a model or prompt is kept as a version. On a model, type a note in Describe this change next to Save & Update (for example "Reviewer: stop flagging naming"). The version picker next to Back at the top of the editor lists saved versions; open one and use Set as Production to roll back. Prompts have the same in their history menu, which starts on Live.
To keep a copy outside the instance, use Export in a model's ... menu in the Models list. It downloads the configuration as a .json file, which Import on the same page reads back. Daily backups on ranx.cloud are included on the Pro and Power plans; on the others, an occasional export is your backup of the presets.
What the presets cost
A system prompt is sent with every turn. The reviewer's prompt above is about 150 tokens; a long one with examples can reach 1,500. At 1,500 tokens, 30 turns a day on GPT-6.1 Sol ($2 per million input tokens, OpenAI pricing):
1,500 × 30 × 22 working days = 990,000 tokens/month
0.99M × $2/M ≈ $1.98/month, before caching
OpenAI caches a repeated prefix automatically, and a fixed system prompt is exactly that, so the cached part is billed at $0.10 per million instead of $2. The editor on GPT-6 Luna ($0.10 / $0.50) costs a fraction of a cent per edit: a 1,000-token text in, 1,200 tokens out is 1,000 × $0.10/M + 1,200 × $0.50/M = $0.0007.
What makes presets expensive is not the system prompt but the base model. Put light jobs on a light model.
What goes wrong
A Claude-based preset answers with a 400 error. A Temperature or top_p was set under Advanced Params. Claude 4.7 and later reject temperatures below 1 and any top_p other than the default through the compatible endpoint. Clear both on Claude presets.
The model ignores the system prompt's rules. Smaller models follow long rule lists less reliably. Keep rules short and concrete, put the most important one first, and try the same prompt on a stronger base model to see whether the model or the prompt is the problem. Files, web search results and memories are added to the context too and can crowd the instructions.
The preset vanished from the picker after a connection change. Its base model is no longer available, for example after you added a Prefix ID to that connection, which changes every model ID from it. Edit the preset and pick the base model again.
Saving a model fails with a whitespace error. Model IDs can't contain spaces. Recreate it with a hyphenated ID.
The Depth control shows an error after you edited it. If you remove an option that's currently selected, messages fail with "the selected option is no longer available" until you pick another option or Default in the knobs menu.
/reply doesn't appear when typing the slash. The prompt is disabled, or the command differs from what you typed. Check the toggle and the command in Workspace → Prompts.


