CLI
Playground
Try any Melious model on your own input from the terminal UI — decisions, chat, transcription, rerank, embeddings, and images — and copy the CLI command that does the same thing.
The Playground is a screen in the terminal UI where you pick a model, give it your own input, and see the answer without writing a request by hand.
It covers six model types: chat, decisions, transcription, rerank, embeddings, and images. Every pane can show the CLI command that sends the same request, so what you try here moves into a script without retyping it. We built it because the fastest way to learn what a decision model does with your ticket is to hand it your ticket.
Open the Playground
Run melious with no command and choose 2 Playground on the home menu, or press 2. The home menu and its other screens are on the Terminal UI page.
1 Launch a coding tool start an agent with Melious
› 2 Playground try any model on your own input
3 Default models choose models for every tool or one tool
4 Settings account, defaults, trusted foldersThe Playground opens on the model picker. From a pane, m goes back to the picker, and so does esc once no text field has the focus. From the picker, esc goes back to the home menu.
Model picker
The picker shows the six model types as a row of tabs, each with the number of models your API key can use. The selected type sits in ‹ ›. Below the tabs is the model list for that type. The picker opens on Chat; here it's one → along, on Decisions:
Melious → Playground
Chat 36 ‹ Decisions 2 › Transcription 3 Rerank 1 Embeddings 7 Images 4
────────────────────────────────────────────────────────────────────────────
› clef 32 q · 255 opt · €0.20 / 1M input
clef-flash 32 q · 255 opt · €0.03 / 1M input
←→ type · ↑↓ move · / filter · enter open · esc backThe counts, models and prices are the ones our key saw on the day we captured this; your list depends on your account. Each row says what the catalog knows about the model: for a decision model, its limits (questions and choice options) and its input price; for chat, rerank, and embeddings models, the context length and the input price; for transcription, the price per audio minute; for images, the price per image. A value the catalog doesn't have is left out.
| Key | Action |
|---|---|
← → | Change the model type |
↑ ↓ | Move through the list |
/ | Filter the list by model ID. enter keeps the filter, esc clears it. |
enter | Open the pane for the selected model |
esc | Clear a kept filter, or go back to the home menu. While a filter is kept, the legend says esc clear filter. |
The picker shows Loading models… while it fetches the model catalog. If Melious can't reach the API, it says Could not reach Melious. Press r to try again. A type with no models for your key shows No <type> models are available for your API key. instead of an empty list.
The Playground leaves guardrail models out. Their API has no documentation yet, and we'd rather not put a model in front of you that we can't explain.
Keys in every pane
All six panes share these keys. The legend at the bottom of each pane lists the ones that work right now. The screens on this page are captures from our own account at 80×32, so the models, answers, and request IDs in them are what we got on the day.
| Key | Action |
|---|---|
ctrl+r | Run the request |
tab | Move the focus to the next field |
m | Back to the model picker |
c | Show the equivalent CLI command in a box. Any key closes it. |
esc | Leave the text field that has the focus. With no field focused, go back to the model picker. |
While a text field has focus, the letter keys type into the field, and the legend says esc leave field. Leave the field with esc to use m, c, or a pane's own letter keys.
m keeps the pane. Open the same model again and it's as you left it, input and result included. Pick another model of the same type and the pane keeps your input too, which makes comparing two models one keystroke and a run.
The result appears below the input and stays there while you change the input, so you can compare. The next run replaces it. After each run, the result heading shows the tokens (when the API reports them), the duration, and the first 8 characters of the request ID.
Requests run in the background, so the screen stays responsive while a slow model thinks. While one runs, the legend shows only esc stop, and every other key waits. esc cancels the request, and the result area says Stopped. The request was cancelled.
When a run fails, the result area says why and moves the focus to the field at fault. A problem the pane finds before sending says Not sent. Here, the Language field holds a word instead of a two-letter code:
Melious → Playground → whisper-large-v3-turbo
File weekly-sync.wav
› Language english
Result
✗ Not sent
field language
Use a two-letter language code, for example en or de. Leave it empty to
detect the language.
ctrl+r run · tab next field · esc leave fieldAn error from the API has the same shape: the HTTP status and error code in place of Not sent, the field when the API names one, the message, and the full request ID on the last line.
Decisions
The Decisions pane sends a context and a set of typed questions to a decision model through System One. It has two parts: Context, a multi-line field with the text or JSON the questions are about, and Questions, the list of questions to answer. tab switches between them. (The API and the decide command call the context the state.)
The pane opens with the focus in Context, where the list says No questions yet. Press tab, then a to add one or e for an example. After tab, the list shows the keys to start with:
Melious → Playground → clef
Context ──────────────────────────────────────────────────────────────────
│ The text or JSON the questions are about
│
│
────────────────────────────────────────────────────────────────────── 0 B
› Questions 0 of 32
No questions yet.
a add a question
l load a saved spec
e load an example
a add · e example · tab context · ? more keyse loads the example: a refund ticket and three questions, one of each answer type. It keeps a context you've already written.
Add a question
a opens the question editor. It has three fields, and a fourth line for the key:
- Question is what you ask the model, such as
Which team should handle this?. It's required. - Answer is the answer type.
←→switch between Pick one, Rate on a scale, and Yes or no. - The last field depends on the answer type:
- Options, for Pick one: one option per line. A meaning can follow a colon, as in
logistics: the order is lost or late. - Levels, for Rate on a scale: one level per line, lowest first.
shift+↑andshift+↓move the current line. - Yes means and No means, for Yes or no: what each answer stands for. Write both or leave both empty.
- Options, for Pick one: one option per line. A meaning can follow a colon, as in
tab moves to the next field, and in Options and Levels enter starts a new line. ctrl+s keeps the question and esc drops it. A question with its options written:
Melious → Playground → clef → New question
Question Which team should handle this?
Answer ‹ Pick one › Rate on a scale Yes or no
› Options billing
logistics: the order is lost or late
support
one per line · a meaning can follow a colon
key which-team-should-handle-this
used in scripts and --pick · ctrl+k to rename
enter next line · tab next field · ctrl+s done · esc cancelThe editor checks the question while you type. Once you've changed or left a field, a problem shows under it with a ✗: write the question, add at least 2 options, or a limit of the model, such as at most 255 options. ctrl+s doesn't keep a question that still has a problem. It shows every problem, moves the focus to the first, and says Not done yet: <PROBLEM>.
Because the questions are checked against the model's limits before anything is sent, a choice with one option fails on your screen, not on your bill.
Keys and --pick
Each question also has a key, the name it's sent under. The editor makes it from the question: lower case, the words joined by hyphens, everything but the letters a to z, digits, dots, and underscores left out, and at most 40 characters. A question with nothing left gets q1, q2, and so on, and a key another question already has gets -2, -3.
The key follows the question as you type until you rename it. ctrl+k opens the key for editing; enter keeps the new key and esc leaves the old one. A question that's already in the list keeps its key when you change its text, because a script may use it.
The screen shows your questions by their text, but scripts use the keys: the c command, a saved spec, the batch output, and --pick. For the question above, this prints only the team:
melious decide "<STATE>" --spec <NAME> --pick which-team-should-handle-thisThe question list
The legend shows the keys you need most: ctrl+r ask, a add, enter edit, x delete, and ? more keys. ? opens the help, which lists every key of the pane under DECISIONS. In a 32-row terminal the help is taller than the screen, so it scrolls under its heading with ↑ ↓.
| Key | Action |
|---|---|
ctrl+r | Ask the questions. Works from Context too. |
↑ ↓ | Move through the questions |
enter | Edit the selected question |
a | Add a question, up to the model's limit |
x | Delete the selected question. The pane asks Delete '<QUESTION>'? y/n under it: y deletes, any other key keeps it. |
e | Load the example, while there are no questions |
ctrl+s | Save the questions as a spec |
l | Load a saved spec. When the list has questions you haven't saved, the pane first asks Load a spec in place of the unsaved questions?: y opens the saved specs, any other key keeps the questions. |
pgup pgdn | Scroll the answers |
esc | From Context, move to the questions. From the list, go back to the model picker. |
Read the answers
ctrl+r checks the request first. A problem stops it there, and the result area says Not sent and names Context or the question, such as Question 2 · How urgent is this?. Otherwise the answers appear under Answers, numbered like the questions. The example, asked:
Melious → Playground → clef
Context ──────────────────────────────────────────────────────────────────
│ Ticket #4128: customer requests a refund 11 days after purchase;
│ the order has shipped.
│
───────────────────────────────────────────────────────────────────── 87 B
Questions 3 of 32
› 1 Which resolution matches policy? pick one · refund, credit, deny
2 How urgent is this? scale · routine → immediate
3 Should a human review this? yes or no
Answers · 326 input tokens · 0.48 s · req 842b2d92
1 deny 63% sure
deny ██████████████████████████████████████░░░░░░░░░░░░ 75%
refund █████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 17%
credit ████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 8%
2 routine (1.2 of 3: routine → immediate) 76% sure
3 No · 0.48 ██████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░
ctrl+r ask · a add · enter edit · x delete · ? more keysHow to read each answer type:
- Pick one: the option the model picked and
NN% sure, then a bar for each option with its probability, highest first.NN% sureis the model's confidence in its answer, not the bar of the picked option, so the two numbers can differ. - Rate on a scale: the level nearest to the score and
NN% sure. In between,(1.2 of 3: routine → immediate)places the score on the scale: level 1 of 3, a fifth of the way to level 2. - Yes or no:
Yesfrom 0.5 up andNobelow, the value, and a bar. When the question has Yes means and No means, the text for the answer shows below it.
In a terminal 110 columns or wider, each answer starts with its question's text.
Save and load specs
A spec is the set of questions, saved under a name so you can reuse it. ctrl+s in the list asks for a name and saves the spec to ~/.melious/decisions/<NAME>.json, together with the ID of the model you're using. Names use letters, digits, dots, underscores, and hyphens, up to 64 characters. If a spec with that name exists, in any letter case, the pane says A spec named <NAME> exists. Press enter again to replace it. A second enter replaces it, and esc cancels.
The spec's name shows in the top-right corner, followed by (unsaved) once you change a question. l lists the saved specs and loads the one you pick. Loading doesn't change the model: when the spec names another one, the pane says so and keeps the model you opened.
The same file works with melious decide --spec, which is the point: build the questions here, then run them from a script. Because the spec records the model, decide --spec <NAME> uses that model unless you pass --model.
Chat
Two fields: System (one line, optional) and Message (multi-line). The answer streams in as the model writes it, ↑ ↓ scroll it once you've left the fields, and the result heading shows the prompt and completion tokens.
Melious → Playground → gemma-4-31b
System Answer in one sentence.
Message ──────────────────────────────────────────────────────────────────
│ What does a decision model do?
│
│
│
──────────────────────────────────────────────────────────────────────────
Result · 28 prompt tokens · 284 completion tokens · 2.93 s · req 73098d7b
A decision model provides a structured representation of the logic, rules,
and data used to transform inputs into a specific choice or outcome.
ctrl+r run · tab focus · ↑↓ scroll · c command · m model
esc backEach run is a new conversation. The pane keeps no history — for a back-and-forth, launch an agent or use melious run in a loop.
Transcription
Two fields: File, the path to an audio file (tab completes the path), and Language, an optional two-letter ISO-639-1 code such as de. Leave Language empty and the model detects it. The transcript appears in an area you can scroll with ↑ ↓, and when the model reports the language it heard, the result heading names it.
Melious → Playground → whisper-large-v3-turbo
File weekly-sync.wav
Language auto-detect
Result · 0.82 s · req 32a219f2
Hello and welcome to the weekly Sync. The build is green and we ship on
Thursday.
ctrl+r run · tab focus · ↑↓ scroll · c command · m model
esc backThe tab lists only audio models that turn speech into text. Models that produce audio aren't in it.
Rerank
Two fields: Query (one line) and Documents (multi-line, one document per line, with the count under it). The result is a ranked table with the score, a bar for it, the document's position in your list, and the document.
Melious → Playground → qwen3-reranker-4b
Query capital of Germany
Documents ────────────────────────────────────────────────────────────────
│ Paris is the capital of France.
│ Berlin is the capital of Germany and its largest city by population.
│ The Rhine flows through six countries.
────────────────────────────────────────────────────────────── 3 documents
Result · 0.26 s · req d7adc269
RANK SCORE # DOCUMENT
1 0.981 ████████████ 2 Berlin is the capital of Germany and its l…
2 0.000 ░░░░░░░░░░░░ 3 The Rhine flows through six countries.
3 0.000 ░░░░░░░░░░░░ 1 Paris is the capital of France.
ctrl+r run · tab focus · ↑↓ scroll · c command · m model
esc backEmbeddings
Two to six lines of text. Move through them with ↑ ↓, edit one with enter, add one with a, and delete one with x. While you edit a line, enter or esc finishes it and tab moves on to the next. The result is the number of vectors, their dimensions, the token count, and a cosine-similarity matrix between the lines.
Melious → Playground → bge-m3
› Texts 3 of 6
1 The cat sat on the mat.
2 A kitten slept on the rug by the door.
› 3 Quarterly revenue grew by four percent.
Result · 35 tokens · 0.40 s · req 223b9a1b
3 vectors · 1024 dimensions
Cosine similarity
1 2 3
1 The cat sat on the mat. 1.00 0.64 0.36
2 A kitten slept on the rug b… 0.64 1.00 0.32
3 Quarterly revenue grew by f… 0.36 0.32 1.00
ctrl+r run · tab focus · ↑↓ move · enter edit · a add · x delete
c command · m model · esc backThat matrix is the quickest way we know to see whether a model thinks "Hamburg" is closer to "Lübeck" or to "hamburger".
Images
Four fields: Prompt (multi-line), Size (1024x1024, 1792x1024, or 1024x1792), Count (1 to 4), and Folder (the current folder when empty). ← → change the size and the count.
The Playground caps the count at 4 to keep a slip of the finger cheap; melious image goes up to 10. The pane saves each image to the folder as melious-<YYYYMMDD-HHMMSS>-<N>.<EXT> and lists the paths. It never overwrites a file: when a name exists, it adds -2, -3, and so on.
Melious → Playground → flux-2-klein-4b
Prompt ───────────────────────────────────────────────────────────────────
│ A lighthouse at dusk, watercolor, soft light
│
──────────────────────────────────────────────────────────────────────────
Size ‹ 1024x1024 › 1792x1024 1024x1792
Count ‹ 1 › 2 3 4
Folder out
Result · 1 image saved · 51.23 s · req f0db94ba
✓ out/melious-20261019-012556-1.jpg
ctrl+r run · tab focus · c command · m model · esc backThe Playground doesn't show the images in the terminal — open the files in your image viewer.
See the command
Press c in any pane to see the CLI command for your current input. The command quotes your text in single quotes for a POSIX shell, so you can paste it into a terminal or a script as it is, and it sends the same request. The Decisions example from above:
Melious → Playground → clef → Command
╭─── Command ──────────────────────────────────────────────────────────────╮
│ melious decide \ │
│ 'Ticket #4128: customer requests a refund 11 days after purchase; │
│ the order has shipped.' --model clef --choice \ │
│ resolution=refund,credit,deny --ask \ │
│ 'resolution=Which resolution matches policy?' --score \ │
│ urgency=routine,same-day,immediate --ask 'urgency=How urgent is this?' \ │
│ --noul escalate --ask 'escalate=Should a human review this?' │
│ melious decide batch <input.jsonl> --spec <name> -o results.jsonl │
│ # Save the spec with ctrl+s to use it in a batch. │
╰──────────────────────────────────────────────────────────────────────────╯
Copy the command to run the same request from a shell or a script.
any key closeThe box breaks a long command only at a space outside the quotes and ends each broken line with \, so what you copy pastes as one command. A line break inside quotes is part of your text: the context of the example has one after purchase;, and the quotes keep it.
The commands put your text, file, or query before the flags, as in the table below; chat puts it last. When one of them starts with -, such as a query of -1 is not a capital, the command would read it as a flag, so the flags come first and -- ends them:
│ melious rerank -f docs.txt --model qwen3-reranker-4b -- \ │
│ '-1 is not a capital' │
│ # docs.txt holds the documents, one on each line. │| Pane | Command |
|---|---|
| Decisions | melious decide '<STATE>' --model <MODEL_ID> --spec <NAME> when the spec is saved and unchanged; otherwise the questions as --choice, --score, --noul, and --ask flags, by their keys. A JSON context becomes --state-file state.json. |
| Chat | melious run --model <MODEL_ID> --system '<SYSTEM>' '<MESSAGE>', without --system when that field is empty |
| Transcription | melious transcribe <FILE> --model <MODEL_ID>, plus --language <CODE> when you set one |
| Rerank | melious rerank '<QUERY>' -f docs.txt --model <MODEL_ID> |
| Embeddings | melious embed '<TEXT_1>' '<TEXT_2>' … --model <MODEL_ID> |
| Images | melious image '<PROMPT>' --model <MODEL_ID> -n <COUNT> --size <SIZE> -o <FOLDER> |
The Decisions pane also shows the batch form, for when one ticket worked and you have a thousand more:
melious decide batch <INPUT.jsonl> --spec <NAME> -o results.jsonlTwo things the commands can't carry for you. A batch needs a saved spec, so until you save one, the batch line says <name> and a note asks you to press ctrl+s; the same goes for criteria the shorthand flags can't express, such as an option with its own meaning or Yes means and No means texts. And the rerank command reads its documents from docs.txt, one per line, as its note says — the pane doesn't write that file, so put your documents in it first.
Every flag of these commands is in the command reference, and running decisions from scripts is covered in scripting and automation.
Default decision model
The Playground lets you pick any decision model. melious decide needs to know which one to use without asking, so you can set a default under Settings › Default decision model in the terminal UI, or with melious config set models.decision <MODEL_ID>. Configuration has the full selection order.