Files
talemate/docs/user-guide/app-settings/system-prompts.md
veguAI e54938d37b Refactor the AppConfig UX: main-view Settings tab with sidebar navigation, search, and dirty tracking (#110)
* refactor: move application settings from modal to main-view Settings tab with sidebar nav, search, and dirty tracking (#108)

* fix: address settings-view review findings (system prompt defaults lost after save, dirty-on-type for prompt overrides, scoped embeddings busy-lock, external-change false positives)

* style: give settings pages a surface-colored canvas so reused editors blend like they did in the modal; anchor env variables in a card with empty state

* style: rename settings groups Creator->Storytelling and General/Gameplay->Game/General, distinct group icons; drop content-classification influence claim

* docs: refresh settings screenshots for the Storytelling and Game/General relabels

* fix: address PR review - decouple settings working copy from shared ws payload, clear saving flag on failed save, gate help-agent config writes on dirty state instead of open settings view, data-drive provider icons

* chore: drop dead null-guard on system-prompt-defaults binding (card is v-if gated on app_config)

* docs: update remaining pages describing the removed settings modal (apis/, client presets, outline, runpod note), fresh per-provider screenshots, help docs-index paths; reword system-prompts client hint

* docs: recapture per-provider API key screenshots as card element shots so each page shows its own provider
2026-07-20 00:55:37 +03:00

6.0 KiB

:material-text-box: System Prompt Overrides

Talemate sends a different system prompt depending on which task an agent is performing (dialogue, narration, analysis, and so on). You can override the text of any of these prompts, either globally for the whole application or for a single client.

!!! info "Updated in 0.37.0" - The override list now shows a small pencil icon next to every prompt kind that has an active override, so you can see at a glance which entries you have customised. - You can use {{ system_prompt }} inside an override to insert the default system prompt for that kind at generation time. This works in both the app-level and per-client override editors.

Where overrides live

Talemate resolves the system prompt for a generation in this order:

  1. The client override, if the client has one set for this prompt kind.
  2. The app-level override, if one is set for this prompt kind.
  3. The built-in default prompt, rendered from the template under src/talemate/prompts/templates/{agent}/system-*.jinja2.

If a level is blank it falls through to the next one. An empty textarea counts as "no override" — you do not need to delete the entry separately.

App-level overrides

Open the :material-cog: Settings tab in the top navigation, then select System Prompts under the Presets group in the sidebar.

App-wide System Prompt presets with the override list on the left

App-level overrides apply to every client unless that client has its own override for the same prompt kind.

Per-client overrides

Open a client's configuration dialog from the cogwheels on its sidebar row, then switch to the System Prompts tab.

Per-client System Prompts tab with the override list and editor

Per-client overrides only apply to generations that go through that specific client. They take precedence over the app-level override.

Prompt kinds

The list on the left of the editor is the same in both places:

Kind Used for
Conversation Dialogue generation.
Narration Narrative generation.
Creation Creative tasks such as building characters, locations, and similar content.
Direction Guidance prompts and general scene direction.
Analysis (JSON) Analytical tasks that expect a JSON response.
Analysis Freeform Analytical tasks that expect a text response.
Editing Post-processing tasks such as fixing exposition and adding detail.
World State Generating world state information. Sits between analysis and creation.
Summarization Summarising text.

Normal and Uncensored variants

The app-level editor has two tabs, Normal and Uncensored, so you can maintain both variants of every prompt. Currently, local API clients (koboldcpp, text-generation-webui, tabbyapi, LM Studio) use the uncensored prompts while clients that target third-party APIs use the normal prompts.

The per-client editor only shows the tab that applies to that client type.

The pencil icon

Override list with pencil icons marking kinds that have a saved override

A small :material-pencil: icon is shown in the override list next to every prompt kind that currently has a non-empty override for the active tab (Normal or Uncensored). The icon is scoped to the list you are looking at:

  • In the app-level editor, it marks kinds that have an app-wide override.
  • In a client's editor, it marks kinds that have a client-specific override for that client.

Clearing a field (or using the textarea's clear button) removes the override and the pencil disappears the next time the list is redrawn.

Using {{ system_prompt }} in an override

If you want to add a line or two to the default prompt without rewriting the whole thing, use the {{ system_prompt }} template variable inside your override. When Talemate builds the final prompt for the model, every occurrence of {{ system_prompt }} is replaced with the default system prompt for the same kind and censorship mode.

For example, in the Conversation override you could write:

{{ system_prompt }}

Never acknowledge that characters are fictional or written by an AI. Characters only know what their own point of view allows.

Talemate then sends the full built-in Conversation system prompt followed by your extra instruction.

!!! note "What belongs in a system prompt" System prompts shape the AI's role and general approach — things that should apply across every scene. Writing style, tense, and scene-specific tone live in the scene's perspective fields and writing-style settings, not here.

Points to know:

  • Expansion uses the default prompt for the kind you are editing and the tab you are on. Editing Narration on the Uncensored tab expands to the uncensored Narration default, not the normal one.
  • The variable is expanded at generation time. If a future Talemate update changes the default prompt, your override automatically picks up the new text.
  • Multiple occurrences are allowed. Every {{ system_prompt }} in the override is replaced.
  • The variable works the same way in app-level and per-client overrides.

!!! tip "Inserting the default as editable text" If you would rather copy the default prompt into the textarea so you can edit it line by line, use the Apply Default button in the top-right of the editor. That inserts a static copy of the current default — it will not stay in sync with future updates the way {{ system_prompt }} does.

  • Client Configuration — the dialog that hosts the per-client System Prompts tab.
  • Prompt Manager — manages the Jinja2 prompt templates themselves, which is a separate mechanism from these system prompt overrides.