Configuration reference
Core plugin configuration
These values configure the plugin for the whole DSH profile. Session settings belong to one story instead.
| Field | Default | Purpose |
|---|---|---|
rootPath | ~/dsh-roleplay | Folder for worlds, avatars, sessions and media |
sessionStorePath | ~/.dsh/sessions | DSH session store used for the chats attached to roleplay sessions |
authoringTools | none | Tools from other plugins that each authoring assistant may use. Groups are worldAuthoring, presetAuthoring, lorebookAuthoring and worldAuthor. An unlisted tool is unavailable. The session doctor never receives these tools |
catalogues | none | World catalogues to browse. Each entry has name, API baseUrl, and optionally an apiKeyRef for DSH's credential store. The deprecated apiKey field is used only when the store has no key, then removed on the next save |
sync.remote | empty | rclone remote and folder, such as mydrive:dsh-roleplay; empty disables sync |
sync.rclone | empty | rclone executable; empty finds rclone on PATH |
sync.configFile | empty | Absolute path to the rclone configuration file, which must be outside rootPath |
sync.passwordRef | empty | DSH credential-store reference for an encrypted rclone configuration; empty uses ROLEPLAY_SYNC_RCLONE_CONFIG_PASS |
sync.intervalMinutes | 0 | Automatic-sync interval; 0 permits manual runs only |
catalogueMaxBytes | 256 MiB | Maximum downloaded-world size, checked both compressed and unpacked |
catalogueTrashDays | 30 | Days to keep files replaced by a catalogue update in .trash/worlds/; 0 keeps them indefinitely |
importMaxUploadBytes | 100 MiB | Maximum character-card upload size |
importConcurrency | 4 | Import and authoring helper calls that may run at once |
importReasoning | empty | Reasoning level for import and authoring helpers and authoring chats; empty uses childReasoning, then the chat setting |
childReasoning | empty | Fallback reasoning level for roleplay helpers; empty follows the game master |
importModel | empty | Model for import and authoring helpers as provider/model; empty uses the chat model |
importStructuredOutput | schema | How import and authoring helpers return structured results. schema asks a compatible endpoint to constrain a JSON reply with response_format; LocalAI, vLLM and OpenAI support this form. If an endpoint rejects the schema, that model uses a tool call from then on. tool uses tool calls for every model |
importMaxTokens | 0 | Ceiling on output tokens for one import or authoring-helper request; 0 is a tenth of the model's context window (at least 16000); each job may use a smaller limit |
importVariablesPerRequest | 25 | How many tracked values one import request is asked to declare; a card that tracks more is asked again for the rest |
importTemperature | 0.2 | Import and authoring-helper temperature |
importTimeoutMinutes | 15 | Minutes before an import or authoring helper is stopped without a result; 0 disables the timeout |
importDecisions | llm | decision lets the configured decision service preclassify card pieces it can settle confidently; llm sends every piece to the language model |
importConfidence | 0.7 | Confidence required to accept a decision-model classification |
authoringApproval | ask | ask requests approval for every world-authoring-chat change; auto writes immediately while retaining replaced or deleted files in the world's .trash folder |
All fields except the restart-time sessionStorePath are editable under Settings, Role Play and take effect without restarting. See Sync between devices before pointing more than one installation at the same remote.
State plugin configuration
The state package can be installed on its own. These values configure its database and model-facing tools.
| Field | Default | Purpose |
|---|---|---|
journalMode | delete | SQLite journal mode. delete keeps a session easy to copy as one file; wal permits readers during a write |
writeTools | false | Register model tools that change records. Reading tools are always registered |
diceTools | false | Register dice tools for every roleplay agent. The full bundle instead grants them by agent kind |
Session defaults
These defaults are copied into a new story's settings.json. A world or preset may suggest different starting values, and the player can change them for that story.
Turn, memory and context
| Setting | Default | Meaning |
|---|---|---|
maxRounds / maxCharacters | 3 / 4 | Character rounds per player message, and characters activated per round |
memory.flaky | true | Apply imperfect perception and story-time fading |
memory.recall / memory.lookupCalls | 12 / 5 | Memories supplied per activation, and maximum lookups in one character decision |
memory.lookup / memory.verify | true / true | Let characters query memory, and have the keeper read edits back |
memory.backlogRounds | 6 | Unrecorded rounds that force the keeper to catch up |
memory.overRetrieve / memory.associate | 4 / 2 | Candidate multiplier before selection, and related memories allowed with a strong match |
memory.diversity | 0.3 | Penalty, from 0 to 1, for recalling near-duplicates together |
memory.foldedFade | 0.5 | Retention multiplier after a belief incorporates a perception; 1 leaves it unchanged |
context.limitTokens / context.limitRatio | 0 / 0.6 | Explicit folding limit, or share of the model context used to derive it |
context.workingTokens / context.retainRatio | 0 / 0.5 | Optional cap on the derived limit, and its verbatim share |
context.shortTermTokens / context.longTermTokens | 1500 / 2500 | Short-term and long-term summary targets |
World activity and time
| Setting | Default | Meaning |
|---|---|---|
authoring.enabled | true | Let the game master ask the world author for missing entities |
authoring.perTurn / authoring.thingsPerTurn | 2 / 4 | Authored characters and places, and ordinary things the GM may introduce, per turn |
authoring.consolidateAfter | 3 | Pending authored entities that trigger consolidation |
clock.mode / clock.timeZone | simulated / empty | Story-time mode (simulated or real) and its IANA time zone. At session start, an empty zone uses the host zone for real time, or the world's zone and then UTC for simulated time |
clock.roundSeconds / clock.maxSkipDays | 30 / 30 | Default simulated round duration and maximum days in one clock advance |
background.concurrent | false | Let background work overlap the next turn instead of completing first |
offstage.perTurn / offstage.perCharacter | 2 / 1 | Due off-stage characters per turn, and actions allowed for each |
offstage.joint / offstage.summary | true / true | Process overlapping situations together, and produce the Meanwhile summary |
factions.perTurn / factions.everyDays | 1 / 3 | Due factions advanced per turn, and their default story-time interval |
triggers.enabled / triggers.maxFires | true / 3 | Whether triggers run, and how many may fire per turn |
triggers.beatTurns / triggers.cueTurns | 3 / 2 | Turns a game-master beat or character cue waits to be used |
triggers.judgedPerTurn | 2 | Trigger conditions that may require model judgement per turn |
Reflection and decision checks
| Setting | Default | Meaning |
|---|---|---|
reflection.auto / reflection.everyTurns | true / 20 | Reflect automatically after this many turns; 0 disables the schedule |
reflection.onSceneChange / reflection.sceneDays | true / 1 | Also reflect after a place change or this many story days; 0 disables the time condition |
reflection.minTurns / reflection.perRun | 5 / 3 | Minimum gap between passes and characters processed per automatic pass |
reflection.minNew | 4 | New perceptions needed for an automatic pass; a manual pass needs one |
decisions.triggers / decisions.reflection | hybrid / llm | Judge trigger statements and belief evidence with llm, decision, hybrid or shadow. hybrid accepts confident decision-model answers and sends the rest to the language model. Without a configured decision model, it quietly uses the language model alone |
decisions.agency / decisions.refusal | off / off | Optional output checks, using the same four modes plus off |
decisions.rules / decisions.secrets | off / off | Decision-service-only checks of allowed actions against rules, and outputs against hidden lore |
decisions.gateThreshold | 0.5 | Probability at which a decision answer counts as a fault; the 0.15 below it is uncertain |
decisions.confidence | 0.7 | Confidence required before a decision answer is accepted instead of handed to the language model |
The modes and fallback rules are explained in Optional capability integration.
Models, prompts and sampling
| Setting | Default | Meaning |
|---|---|---|
models.characters, models.records, models.suggestions, models.authoring | empty | Model for that helper as provider/model; empty uses the chat model |
models.background | empty | Background-character model; empty falls back to models.characters |
sampling.master / sampling.characters | 0.7 / 0.8 | Game-master and character temperatures |
sampling.suggestions / sampling.authoring / sampling.records | 0.2 / 0.4 / 0.1 | Temperatures for suggestions, authoring and records |
sampling.topP / sampling.topK / sampling.minP | 1 / 0 / 0 | Additional sampling controls; defaults are not sent |
sampling.frequencyPenalty / sampling.presencePenalty / sampling.repetitionPenalty | 0 / 0 / 1 | Penalty controls; defaults are not sent |
sampling.tools | required | Tool-choice mode for helpers that must submit a result |
sampling.masterMaxTokens | 12000 | Maximum output tokens for one game-master request, including reasoning |
sampling.maxTokens / sampling.shortMaxTokens | 8000 / 2000 | Output ceilings for general and short helper requests |
sampling.headroom | 2 | Multiplier applied to a helper's estimated answer size before its ceiling |
prompts.language | en | Shipped prompt language: en or zh |
reasoning.children | empty | Helper-agent reasoning level; empty uses the plugin fallback |
Interface, rules and media
| Setting | Default | Meaning |
|---|---|---|
interface.pack | empty | Empty uses the world's first pack, none disables packs, and a name selects one |
rewind.keepSnapshots | 30 | Recent state snapshots retained for taking the story back |
rules.own | empty | Additional rules supplied by the player for this story |
preview.enabled | true | Show an early scene preview while the full turn runs |
suggestions.count | 3 | Suggested next actions shown after a turn |
dice.visibility | card | card shows rolls in a collapsed card; hidden shows no roll card |
tools | none chosen | Optional tools by agent kind (gameMaster, characters, records) and name; unknown names are retained and ignored |
images.mode | manual | off, manual or every-turn |
images.references | prefer-reference | prefer-reference, require-reference or text-only |
images.reuse / images.highRes | true / false | Reuse existing pictures, and optionally render a larger second result |
images.interpret | true | Describe uploaded pictures for the story |
images.interpreterModel / images.captioner | empty / empty | Models for uploaded-image interpretation and generated-image captions; empty uses the chat model |
diagnostics.keepRuns | false | Keep the latest 60 helper traces, including private character context, in the session folder |
The UI shows current numeric bounds. Unknown fields are rejected. Provider-specific embedding request options are stored under embedding.options.