Tags, commands and modifiers
Everything Composite reads out of a message, a character definition or a model id. Tags and shortcuts are removed before the request reaches the model, so they never show up in the story.
Several at once
A request can run any number of presets and prompts. They apply in this order: what is attached to the key, then the key's Default tags, then profiles named in the request, then the other tags in message order. System text and prompts from every layer are joined in that order; where two presets set the same option (temperature, prefill) the later one wins. An asset named twice applies once. A profile named in a request brings only its assets and model pool: its memory layer and helper funding are never applied, and assets it points to that you cannot read are skipped. Add --show-info to a message to see the stack that ran.
A key or profile can also hold a model pool. Each request goes to one model from the pool, drawn at random or by weight (one model per line on the Keys page, model*3 to weight it). A pick the account can't use is skipped and the next draw is tried.
Message flags
Written anywhere in the message you send. The flag is removed before the prompt is built, and only the newest message can switch one on. The status lines are added to the reply and are stripped again if your app sends them back in the history.
| Flag | Adds | Cost |
|---|---|---|
--show-info | Adds the resolved stack (what applied, in order) before the reply and the time to first token, tokens per second, stop reason, upstream calls (retries and fallbacks included) and any fallback model after it. A reply that is not streamed shows all of it first, with total latency. | Free |
--show-orchestrator | Adds the model that answered and the sampling it used (reasoning effort, temperature, top P, top K, any steering note) before the reply. | Free |
Tools
Tools are handled by Composite and never sent to your provider as tool definitions. Turn one on with a tag or shortcut in the character definition or your message.
| Tool | How it works | Cost |
|---|---|---|
state | The model writes <use_tool>{"set":{"key":"door","value":"open"}}</use_tool> (or {"unset":"door"} or {"clear":true}). Composite hides the call in a comment that stays in the stored reply and rebuilds the state from your chat history on every request, so nothing is kept on the server and edits and swipes stay consistent. Up to 32 keys and 4,000 characters. | Free |
dice | A tray of real random values (d4 to d100, coin, pick) is given to the model every turn, and an inline <use_tool>{"roll":{"sides":20,"count":1}}</use_tool> is replaced with the real result. | Free |
names | A tray of 8 real given names and 8 surnames, drawn from about 200,000 names, is given to the model every turn, with an instruction to name new characters from it and a list of overused names (Elara, Kael, Lyra, Voss, Thorne and more) it must never use. | Free |
antislop | An instruction listing overused words and stock phrases goes to every model. On a model that accepts logit_bias (OpenAI models, through Composite or your own key), Composite also lowers the probability of those words when they are a single token, by strength (1 to 20, default 5), without overriding a logit_bias you send yourself. | Free |
choice | An inline <use_tool>{"choose":{"options":["a","b"]}}</use_tool> is replaced with a real random pick. | Free |
webfetch | Reads web pages. Links in your newest message are fetched for you, and the model can ask for one with <use_tool>{"fetch":"https://..."}</use_tool>, answered on the next turn (up to 3 pages per request, 20 per minute). The model gets the page text only. | Your provider, or your credits or plan |
worldbook | Wikipedia for roleplay. Names in your newest message are looked up on Wikipedia and the lead of the top article is added like a lorebook entry, labelled [WorldBook: Title] with attribution. The model can also write <use_tool>{"lookup":"topic"}</use_tool>, answered next turn. [tool: worldbook lang=fr] picks a language and auto=off turns the name search off. Answers are cached for hours. | Your provider, or your credits or plan |
artifacts | For apps that cannot show custom HTML. The model writes <use_tool>{"publish":{"title":"Map","html":"<h1>...</h1>"}}</use_tool> and Composite replaces it with a private link to the page. Pages are plain HTML and CSS (no scripts) and expire after about an hour. | Your provider, or your credits or plan |
Image links in your newest message (http or https, ending in .png, .jpg, .gif or .webp, up to 4) are sent to vision models as images; the model's provider fetches them, Composite never does. Other models see the link as text.
Helper features
These make extra model calls. On a key with your own provider they run on your provider, so they cost Composite nothing; on a key you have set to use Composite's helper models, or on a Composite key, they bill your credits or plan. An account that can't pay for helper calls doesn't get them: the reply is simply the model's own.
| Feature | How it works | Who pays |
|---|---|---|
Orchestrator | Add [ORCHESTRATOR], or put a "Plan next reply" node in Orchestrate mode in a plugin. One helper call reads the recent chat and picks the model from the key's model pool, plus temperature, top P, top K, reasoning effort and a short steering note. Anything outside the allowed ranges, or a model that is not in the pool, is ignored, and a slow helper is skipped. | Your provider, or your credits |
Rewrite pipelines | Plugin nodes that act on the finished reply: Rewrite, Critique, Branch on the reply and Merge. [POLISH] is a ready one. The reply is held until the pipeline finishes. At most 4 helper calls per reply across all plugins, and a plugin can hold at most 3 rewrite and 2 critique nodes. | Your provider, or your credits |
Side by side | Add [SIDEBYSIDE]. Two models (two from the key's pool when it has one) answer, and both appear as [1] and [2]. Write [1] or [2] at the start of your next message to keep one; the other is dropped from the history. Streaming apps get both answers at once. | Twice the cost: your provider, or credits and a second request |
Lorebook agents | Add [AGENTS], or [tool: agents steps=3 rewrite=1]. A helper model asks for up to 3 searches of the lorebooks already on the key, and the entries it finds are added to the reply's context (up to 1,500 tokens). rewrite=1 condenses them with one more call. | Your provider, or your credits |
Embeddings | POST /v1/embeddings with your Composite key. On a key with your own provider it goes to that provider and model, on your bill. Otherwise use model composite/embeddings, billed to credits or a plan. | Your provider, or your credits |
Plugin nodes for these are listed in the plugin builder under "After the reply" and "Before the reply". A picked side-by-side answer is kept as preference data only if you turn on "Keep my side-by-side picks" in Account settings; it is deleted after 90 days, or when you turn the setting off.
Shortcuts
Shorthand for Composite's official plugins and tools. Write them in square brackets and in capitals, like [SHORTREPLY]; the older angle-bracket spelling (
Shorthand for Composite's official plugins, written the way other roleplay proxies spell them so existing bots keep working.
lt;SHORTREPLYShorthand for Composite's official plugins, written the way other roleplay proxies spell them so existing bots keep working.
gt;) still works, so existing bots keep running.| Shortcut | Does |
|---|---|
[LORE:CODE] | Same as [lorebook:CODE]. |
[AUTOPLOT] | Plot twists: occasionally turns the story in a new direction (about 1 reply in 15). |
[AUTOPLOT-CHANCE=1:N] | Plot twists at about 1 reply in N (N up to 1000). |
[CRAZYMODE] | Wildcard: adds an unexpected event to the scene. |
[MEDIEVALMODE] | Keeps the scene grounded in a medieval world. |
[FORCEMARKDOWN] | Markdown fix: tidies basic markdown in replies. |
[BETTERSPICEMODE] | Scene seasoning: adds an occasional sensory detail. |
[BETTERSPICE-CHANCE=1:N] | Scene seasoning at about 1 reply in N. |
[CUSTOMOOC]text[/CUSTOMOOC] | Adds your out-of-character note to the scene (up to 4,000 characters). |
[CUSTOMPREFILL]text[/CUSTOMPREFILL] | Starts the reply with your text. |
[NOUSERSPEAK] | Keeps the reply from writing dialogue, actions or choices for your character. |
[SHORTREPLY], [LONGREPLY] | Short (about 60 to 120 words) or long (400 words or more) replies. |
[SLOWBURN] | Lets relationships and tension build gradually. |
[FIRSTPERSON], [THIRDPERSON] | Writes the reply in first person, or in third person past tense. |
[BRAINROT] | Smoke grenade: for the next 5 of your messages the story talks in internet brainrot slang. Written as a tag, [plugin: BRAINROT turns=10] lasts 10. |
[PIRATEMODE] | Smoke grenade: for the next 5 of your messages, everyone talks like a pirate. |
[DICE], [CHOICE], [STATE] | Turn on the dice, random choice or state tool (see Tools). |
[NAMES] | Turn on the names tool, so new characters get real names instead of the usual ones every model reaches for (see Tools). |
[ANTISLOP] | Steers replies away from the words and phrases models overuse (tapestry, testament, delve, ozone, "barely above a whisper" and more). On models that accept token biasing, OpenAI models included, those words are made less likely at the source; [tool: antislop strength=10] pushes harder (1 to 20, default 5). |
[WEBFETCH], [WORLDBOOK], [ARTIFACTS] | Turn on the web fetch, WorldBook or artifacts tool (see Tools). |
[ORCHESTRATOR] | Orchestrator: a helper model picks the model from your pool and the sampling for each reply (see Helper features). |
[POLISH] | Polish: checks each reply for repeated phrasing or speaking for you, and rewrites it only when it finds a problem. |
[POWERSTEER prompt=your instruction] | Holds every reply to your instruction (for example [POWERSTEER prompt=Reply only in Spanish], or prompt="..." in quotes). The instruction goes into your message, then each reply is checked against it and rewritten when it does not comply. Helper calls, like Polish: your provider, or your credits. Stays on for the rest of the conversation once it is in a message. |
[SIDEBYSIDE] | Two models answer each turn and you keep one (see Helper features). |
[SPEAK] | Also speaks the reply in the voice on the key or in a [voice: CODE] tag, billed as its own speech call (see Voices and speech). Ignored when no voice is set. Sending "audio": true in the request body does the same. |
[AGENTS] | Lorebook agents: a helper model looks things up in your lorebooks before the reply. |
[PREFILL-OFF], [OOCINJECTION-OFF], [JAILBREAK=...], [BYPASS=...] | Accepted for compatibility with other proxies and removed; they do nothing on Composite. |
Plugin commands
A plugin can define its own command. Type it in square brackets in your message, for example [recap], and any plugin on the key (or tagged into the bot) that listens for that name runs its branch. The command is removed from your message unless the plugin keeps it, and a message that is only the command is sent as-is so providers don't reject an empty turn. Which commands exist depends on the plugins you use; each plugin's Discovery card describes its own.
Lorebook macros
Written inside a lorebook entry and filled in each time the entry is inserted.
| Macro | Becomes |
|---|---|
{{char}} | The character's name, when the frontend sends it. |
{{user}} | The user's name, or "the user". |
{{random:a,b,c}} | One of the listed options, picked fresh each time the entry fires (up to 20 options). |
{{roll:2d6}} | The total of a real dice roll: up to 100 dice with up to 1,000 sides. |
Model modifiers
Added to a Composite catalog model id, such as minimax/minimax-m3:fast. The endpoint variations exist only for models with more than one usable endpoint; the Models page lists each model's variations. Reasoning effort suffixes also work with OpenAI-compatible provider keys: Composite removes the suffix and sends the effort separately. Native Anthropic provider keys do not translate these efforts into thinking controls.
| Modifier | Does | Needs |
|---|---|---|
:fast | Pins the fastest endpoint for the model. | |
:cheapest-provider | Pins the lowest-priced endpoint. The old name :cheap still works. | |
:quality | Pins the highest-quality endpoint. | |
-normal | Leaves provider choice to OpenRouter's own routing. | |
-reasoning | Turns thinking on by default for models where it is optional. | |
[minimal], [low], [medium], [high], [xhigh], [max] | Append one to the model ID to set its reasoning effort, for example provider/model[high] or provider/model:fast[low]. This overrides reasoning settings in the request body or preset. The model must support the requested effort; higher effort can use more tokens and take longer. | Normal model usage |
:cheapThink | Adds a short planning step before the model answers. | Credits, or your provider on a BYOK key |
composite/anthropic-router, composite/gpt-router, composite/gemini-router | Routers: the model is picked per message from that family. | Credits or a plan |
Errors
Every error says where it came from. Frontends that only show the message get it in words: Provider error: means the model provider failed or refused, Composite error: means we did. Limits, walls and spending caps carry no prefix and name the next step instead. Upstream outages link to the status page.
| Field | Meaning |
|---|---|
error.origin | provider, composite, account (a limit, wall or spending cap) or request (something in the request itself). |
error.code | Unchanged machine-readable code, for apps that switch on it. |
error.request_id | Also sent as the x-composite-request-id header. Quote it when you report a problem and we can find the request. |
Responses also carry x-composite-upstream-calls (how many calls went to the provider, retries and fallbacks included) and x-composite-served-model (the model that answered).