Conversation settings controls global chat behavior for every user: the default and task models, system and prompt text, context compression, built-in Prompts / Skills / components, option pass-through, and conversation export.
Where to find it#
Open Admin console → Conversation. The page has five sections:
- Conversation settings
- Context management
- Prompt Library
- Option passthrough
- Data export
Each section has its own Save button, enabled only when a field in that section has changed. These are platform settings, not per-user chat settings. Changes apply to later conversations; existing titles, labels, and messages are not rewritten.
Choose the default and task models#
Open Conversation settings.
| Field | Behavior |
|---|---|
| New conversation default model | Used first when a user selects System recommended or has no personal default model. Options are System recommended plus every routable chat model. Leave it on System recommended to fall back to the first available model. |
| Task model | Chat model used to generate conversation titles and labels. Options are Follow current model plus every routable chat model. |
If users often pick expensive models, set a dedicated, stable, low-cost task model instead of Follow current model. That keeps title and label generation cheap and consistent.
Write the global default system prompt#
Open Conversation settings → Global default system prompt.
The text is injected as a platform-wide behavior instruction for all chat models. Leave it empty to inject nothing. Model-level prompts are appended after it. Use it for general requirements such as accuracy, clarity, or organizational safety. Do not put a single project's, user's, or task's temporary requirement here; use project prompts, model prompts, or a built-in Skill instead.
Customize title and label prompts#
Open Conversation settings → Title generation prompt and Label generation prompt. Both support the {{MESSAGES}} placeholder and must return JSON:
- Title prompt:
{ "title": "your summarized title" } - Label prompt:
{ "labels": ["label1", "label2"] }
Leave a field empty to use the built-in default prompt. Keep the JSON shape unchanged when you edit, or title and label generation may fail to parse.
Configure context compression#
Open Context management. The switches and thresholds work together.
| Field | Default | Notes |
|---|---|---|
| Token budget protection | — | Automatically trim history that exceeds the model context budget. |
| Default context window | 128000 | Used when the model context window cannot be identified. |
| Context compression | — | Summarize older conversation turns into a rolling context. Users can still opt out in chat settings. |
| Compression trigger turns | — | Trigger compression when the conversation exceeds this turn count. Set 0 to disable this trigger. Shown when Context compression is on. |
| Compression trigger ratio | 80 | Trigger compression when accumulated context reaches this percentage of the active model's effective input budget. Set 0 to disable the token trigger. Shown when Context compression is on. |
| Recent turns to preserve | — | Recent original turns to keep during compression. Older content is summarized. Shown when Context compression is on. |
| Highlights per role | — | Maximum summary highlights retained for each user and assistant role during template compression. Shown when Context compression is on. |
| Snippet character limit | — | Maximum characters retained in one message snippet during template compression. Shown when Context compression is on. |
| Evidence retention days | 90 | Retention period for context evidence, including RAG results, historical evidence, and tool results. 0 disables automatic expiry. Shown when Context compression is on. |
| Background compression | — | Run template or LLM compression after the current response. Results are persisted in the message process trace, with start, completion, and failure recorded in backend logs. Shown when Context compression is on. |
| LLM compression | — | Call a model to generate semantic summaries. When off, only template summaries are used. Shown when Context compression is on. |
| Compression model | Follow current model | Model used to generate compression summaries. Follow current model falls back to the default chat model when the active conversation model is not chat-capable. Shown when LLM compression is on. |
| Circuit threshold | — | Consecutive failure threshold for LLM compression. After reaching it, the system falls back to template summaries. Shown when LLM compression is on. |
| Full summary prompt | — | Custom instruction sent to the LLM for full compression. Leave empty to use the built-in default. Shown when LLM compression is on. |
| Light summary prompt | — | Custom instruction sent to the LLM for light compression. Leave empty to use the built-in default. Shown when LLM compression is on. |
Turning compression off lowers background cost, but long conversations are more likely to lose early context or hit the model context limit.
Manage built-in Prompts, Skills, and components#
Open Prompt Library. Use the Skills, Prompts, and Components tabs. Each tab has its own search box, New button, table, and pagination.
| Tab | Admin manages | User-side effect |
|---|---|---|
| Skills | Name, description, SKILL.md, enabled state | Users pick them from / to load context for the current turn. No commands are run. |
| Prompts | Name, description, content, enabled state | Users pick them from / to insert text into the composer. |
| Components | Name, description, props summary, props schema, renderer, enabled state | The model can render them inline. The picker lives in the composer's output popover. |
Deleting a built-in item removes it from the user-facing list. It does not affect user-created Prompts, Skills, or components.
Skills prompt#
On the Skills tab, the Skills prompt field controls how the model interprets and uses loaded skills. Leave it empty to use the built-in default prompt. It is saved with its own Save button.
Create a built-in Prompt or Skill#
- Open the Prompts or Skills tab.
- Click New (or New Skill).
- Enter a Name. The name is used as the
/trigger; a leading/is stripped. - Enter a Description.
- For a Prompt, enter Content; for a Skill, enter the SKILL.md body.
- Set Enabled.
- Click Save.
Limits: name 64 characters, description 256 characters, content or SKILL.md 10000 characters. Exceeding them shows Name can be up to 64 characters, description up to 256 characters, and content up to 10000 characters. (or the SKILL.md wording).
Create a component#
The Components tab manages the interactive component catalog. A component has a name, description, props summary, optional props schema, and a sandboxed HTML renderer.
- Click New component.
- Enter a Name. It must be lowercase letters, digits, and hyphens, for example
stock-glance. - Enter a Description: one sentence telling the model what the component shows.
- Enter a Props summary, a compact description of the props for the model, for example
{symbol, name?}. - Edit the Renderer. HTML and script run in a sandboxed iframe with no network access; receive data with
deeix.onPropsand theme variables withdeeix.onTheme. - Optionally add a Props schema JSON Schema to validate model output. Leave it empty to skip validation.
- Use the Preview panel to test the renderer with sample props, then click Apply current code to refresh the preview.
- Set Enabled and click Save.
Limits: name 64, description 256, props summary 1024, props schema 16 KB, renderer 256 KB. An invalid schema shows Props schema must be a valid JSON object. Missing required fields show Fill in the name, description, props summary, and renderer.
Built-in components are defined in code and can only be enabled or disabled. They cannot be edited or deleted:
- Card grid — homogeneous items such as news or search results; filter by tag.
- Chart — line, bar, area, scatter, pie, radar, funnel and more; toggle series.
- Function plot — edit expressions live; zoom, pan, toggle curves.
- Stat cards — side-by-side KPIs; sparkline with hover readout.
- Gantt — schedule, milestones, dependencies; scale switch, chain highlight, group collapse.
- Data table — sort, search, paginate, export CSV.
- Calculator — drag inputs; outputs recompute from formulas.
- Decision tree — step through choices; go back or reset.
- Diff — unified / split view, jump between changes, word highlights, copy result.
- Quiz — instant grading with explanations; branch on answers.
Interactive components switch#
Open Conversation settings → Interactive components. When it is on, the model can emit interactive components in replies and the component catalog is injected into the prompt. When it is off, the catalog is not injected, the picker is hidden, and existing blocks show their raw content. The component library stays editable either way.
Configure option pass-through#
Open Option passthrough. This controls whether the model options a user writes in chat settings can reach upstream providers.
| Policy | Behavior |
|---|---|
| Allowlist | Only listed paths pass. Other fields are discarded. This is the default. |
| Denylist | Fields pass by default. Paths matched by the denylist or the system blocklist are removed. |
| Disabled | User-defined options do not pass through. |
Path syntax#
Write the field name for a top-level field, and dots for nested fields. Multiple nesting levels are supported:
text
The allowlist and denylist are JSON objects. The default key applies to every protocol. Other keys add paths for one protocol only. In denylist mode, the default key lists blocked paths.
json
Protocol keys#
The latest frontend recognizes these protocol keys:
default, openai_chat_completions, openai_responses, openai_image_generations, openai_image_edits, anthropic_messages, gemini_generate_content, google_image_generation, gemini_interactions, xai_responses, xai_image, xai_image_edits, xai_video, xai_video_extensions, openrouter_chat_completions, openrouter_responses, openrouter_images
OpenAI service_tier accepts only default, flex, or priority. It is omitted when not configured.
System blocklist#
These paths are always blocked and cannot be allowed by the allowlist:
model, messages, input, instructions, prompt, system, systemInstruction, headers, api_key, apiKey, base_url, baseURL, stream, previous_response_id, prompt_cache_key, prompt_cache_options, prompt_cache_breakpoint, prompt_cache_retention
Live preview and guide#
The active policy field shows a Live preview with two lists: Passed and Filtered. Each row shows the path, the protocol scope, and the reason (System blocked, Matched denylist, Matched allowlist, or Not on the denylist). Invalid JSON is reported inline before you save.
Click Guide for a dialog that explains path syntax, the two strategies, protocol keys, and the system blocklist.
Export conversations#
Open Data export. Click Export to download all conversations, messages, and metadata as a JSONL file. A success toast reports the count; a partial result reports how many were exported and how many failed.
Setting key reference#
All keys belong to the chat namespace unless noted.
| Group | Setting keys |
|---|---|
| Conversation settings | chat.conversation_default_model, chat.conversation_task_model, chat.default_system_prompt, chat.conversation_title_prompt, chat.conversation_labels_prompt, chat.ui_components_enabled |
| Context management | chat.context_token_budget_enabled, chat.context_window_fallback_tokens, chat.context_compact_enabled, chat.context_max_turns, chat.context_compact_trigger_percent, chat.context_compact_preserve_recent_turns, chat.context_compact_highlights_per_role, chat.context_compact_snippet_chars, chat.context_artifact_retention_days, chat.compact_async_enabled, chat.compact_llm_enabled, chat.compact_task_model, chat.compact_max_failures, chat.compact_system_prompt, chat.compact_light_prompt |
| Prompt Library | chat.skills_prompt |
| Option pass-through | chat.model_option_policy_mode, chat.model_option_allowed_paths, chat.model_option_denied_paths |
Troubleshooting#
- Titles or labels are missing. The title or label prompt no longer returns the expected JSON object. Restore the documented shape or clear the field to use the built-in default.
- A user option never reaches the provider. The path is not on the allowlist, or it is on the system blocklist. Check the Live preview.
- Compression does not run. Context compression is off, or the conversation has not reached the turn or token trigger.
- Compression summaries are generic. Turn on LLM compression and pick a capable compression model, or raise the circuit threshold if LLM calls are failing.
- Interactive components stop rendering. Interactive components was turned off, so existing blocks show their raw content. Turn it back on.