AI Instructions Reference
Complete documentation for tabs/ai-instructions.json.
Schema
interface AIInstructionsTab {
aiInstructions: Record<string, Record<string, string>>
narratorStyle: string
gameModes: Record<string, GameMode>
imagePromptConfiguration?: {
npcs?: string
locations?: string
areas?: string
regions?: string
items?: string
}
resourceSettings: Record<string, Resource>
death: {
permadeath: boolean
instructions: string
}
}
aiInstructions
Task-keyed object where each task contains instruction key-value pairs.
aiInstructions: {
[taskKey]: {
[instructionKey]: string
}
}
Processing Order
- Load base instructions for the task
- Load world config overrides for the task
- For editable keys: use the override if the key is present (an empty string
""blanks that section; it does not fall back), otherwise use the default - Keys whose name matches an engine-owned (non-editable) section are stripped on save and ignored
- Add any remaining keys from world config as custom sections (appended after the built-in ones)
- Concatenate all non-empty instructions
Editable Keys
| Task | Editable Keys |
|---|---|
generateStory | How to Use the Narrator, Turn Structure, Turn Boundaries and Endings, Player Agency, Combat Narration, Victory and Downtime, Character Behavior, Style Principles, custom |
generateInitialStart | Opening Structure, Style Principles, custom |
generateActionInfo | impact, custom |
generateCharacterBackground | prompt, custom |
generateDialogue | Style, Tone, and Length, custom |
generateConversationStarters | Conversation Starter Guidance, custom |
generateNpcChatSummary | Summary Guidance, custom |
generateNPCIntents | core_principles, when_to_generate, what_is_not_action, description_economy, summary_established_beats, action_format, story_driver, custom |
generateNewNPC | custom |
generateNPCDetails | character_creator_instructions, personality_archetype_information, style, cliche_avoidance, hidden_info, personality, faction_affiliation, abilities, basic_info, custom |
generateNPCUpdates | relationship_initialization, relationship_change_updates, party_management, custom |
generateLocationDetails | custom |
generateRegionDetails | custom |
generateEncounters | custom |
ItemGenerationAndUsage | custom |
summarization | custom |
generateLearnedAbilities | custom |
Keys are case-sensitive and must match exactly. Setting an editable key to "" blanks that section rather than restoring the default. Keys that collide with an engine-owned section name are stripped on save; any other key is appended as a custom section.
Reserved section names
Each task also has prompt sections the engine writes itself; only the keys in the table above are editable. The engine-owned names are reserved: a config key that happens to use one is stripped on save and never reaches the prompt. If a custom key disappears after saving, it collided with a reserved name; rename it.
generateStory
Main story narration for game turns.
| Key | Purpose |
|---|---|
How to Use the Narrator | What Narrator lines are for — setting the scene, describing new elements and outcomes, then getting out of the way |
Turn Structure | How a turn is built: which beats it covers, how much happens, and how Narrator and Character lines alternate |
Turn Boundaries and Endings | Where a turn stops and hands control back to the player; no resolving the player’s next move for them |
Player Agency | Respecting player intent: never overriding the player’s stated action, speech, or decisions |
Combat Narration | How to narrate attacks, hits, misses, and outcomes using the resolved mechanics |
Victory and Downtime | How to handle scene resolution after combat or major story beats — pacing of cooldown, recovery, and transition |
Character Behavior | How characters act, speak, and interact |
Style Principles | Writing style, tone, and formatting |
custom | World-specific additions (speech patterns, magic rules, etc.) |
generateInitialStart
Opening scene for new games.
| Key | Purpose |
|---|---|
Opening Structure | How to structure the opening narrative |
Style Principles | Writing style for the opening |
custom | World-specific additions |
The engine keeps the opening calm on its own (it will not raise the stakes or force problems into a quiet starting situation); write Opening Structure with that in mind rather than trying to override it.
generateActionInfo
Assesses action difficulty and determines skill checks.
| Key | Purpose |
|---|---|
impact | How to rate an action’s impact, which the engine uses as a damage multiplier for the action’s outcome |
custom | World-specific additions |
The default impact text describes 50-90 as low impact, 100 as normal, 120-150 as high, and 150-200 as extreme. The engine honors impact values up to 600 (a 6x multiplier), so a world that wants truly devastating actions can override this section to rate them beyond the default text’s range.
generateCharacterBackground
Generates character backstory and appearance during character creation. An undefined prompt falls back to the built-in default. Set prompt to "" (empty string) to blank the default without replacing it.
The generated appearance is a portrait-only prompt: it exists to feed the image generator (face, build, clothing, palette), not to carry story facts. Anything about a character’s look that should matter in play (a missing hand, a faction brand, a famous scar) belongs in the background text, where the narrator reads it.
| Key | Purpose |
|---|---|
prompt | The full character profile generator prompt — covers overall guidance, background, the portrait-only appearance, style, structure, context use, and any final notes in one block. Replaces the built-in default when set. |
custom | World-specific additions (appended after prompt) |
NPC chat tasks
Players can open a direct chat with an NPC in the scene. Three tasks power that chat. Creator text for them merges per section like every other task, so only the keys listed below (plus custom) persist on save.
generateDialogue
Writes the NPC’s replies in a direct chat.
| Key | Purpose |
|---|---|
Style, Tone, and Length | How the NPC’s chat replies should read: voice, tone, and how long each reply runs |
custom | World-specific additions |
generateConversationStarters
Writes the two short suggested openers shown when a chat begins, grounded in the recent story.
| Key | Purpose |
|---|---|
Conversation Starter Guidance | What kinds of openers to suggest and how to phrase them |
custom | World-specific additions |
generateNpcChatSummary
Writes the summary spliced into the story when a chat ends.
| Key | Purpose |
|---|---|
Summary Guidance | What the end-of-chat summary should capture and how it should read. Default: 2-3 concise third-person past-tense sentences focusing on key information exchanged and notable moments |
custom | World-specific additions |
generateNPCDetails
Generates NPC personality, abilities, and hidden info. Every built-in section is editable:
| Key | Purpose |
|---|---|
character_creator_instructions | Overall role and goal of the NPC detail writer |
personality_archetype_information | How to pick and blend personality archetypes |
style | Prose style for the generated fields |
cliche_avoidance | Patterns and tropes to avoid |
hidden_info | What hiddenInfo must contain (background, personality, combat) |
personality | How to write the personality summary |
faction_affiliation | How faction membership shapes the NPC (factions are read-only context; the task never invents one) |
abilities | How many abilities to generate and how to format them |
basic_info | How to write the public-facing basic info |
custom | World-specific additions |
generateNPCUpdates
Applies NPC state changes after each turn: relationship shifts, party joins and departures, status changes.
| Key | Purpose |
|---|---|
relationship_initialization | How the AI picks an absolute starting relationship (-100 to 100) for an NPC whose definition omits relationship, inferred from background, personality, faction, history, and the current story. Authored relationship values stay exactly as written |
relationship_change_updates | When and how far relationship values move in response to what happened |
party_management | When NPCs join, follow, or leave the party |
custom | World-specific additions |
generateLocationDetails
Generates location descriptions, areas, and paths.
generateRegionDetails
Generates region descriptions and locations.
generateEncounters
Generates wilderness encounter options.
generateNPCIntents
Generates NPC intent decisions for what NPCs do on their turns.
generateNewNPC
Generates new NPCs dynamically during gameplay.
ItemGenerationAndUsage
World-specific guidance on items — how they are discovered, generated, obtained, used, consumed, equipped, transformed, and removed. Appended to the engine’s item-update and item-definition prompts so the AI honors the world’s economy, magic system, and item conventions when handling player inventory and creating new items mid-game. Custom-only.
summarization
Condenses past story into the running summary the narrator reads. Custom-only; use it to name what must never be dropped from summaries (standing oaths, faction standing, unresolved debts).
generateLearnedAbilities
Defines abilities characters learn mid-game. Custom-only; use it for world rules on what can be learned and how learned abilities should be named and scoped.
storySettings
Story-level configuration that applies across all narrative tasks.
storySettings: {
worldBackground: string // World background description (required)
questGenerationGuidance?: string // Guidance for AI quest and arc generation (optional)
}
questGenerationGuidance
Optional free-form text injected into generateProblemDetails and generateNewQuests AI tasks as “Creator quest generation guidance”. Use this to steer the themes, tone, or constraints of AI-generated quests and arcs.
narratorStyle
Single string defining the overall narrator voice. Applies to all narrative output.
narratorStyle: string
Example:
- Prioritize plot and dialogue over description
- Show story through what characters say and do
- Keep scenes dialogue-heavy but natural
- Describe what characters DO, not how well they do it
gameModes
Player-selectable modes that re-shape how the story is told. The player picks one at character creation, and its instructions are injected into the narrator’s storytelling for the whole game — layered on top of narratorStyle. Use game modes for distinct ways to experience the same world (e.g. “Classic Adventure”, “Pure Roleplay”, “Hardcore Survival”), where each mode wants a different narrative emphasis or tone.
interface GameMode {
name: string // ✅ Display name shown in the mode picker
description: string // ✅ One-line summary shown under the name
instructions: string // ✅ Storytelling guidance injected into narration for this mode
difficulty?: string // ✅ Optional. Sets the DEFAULT mechanical difficulty for players who pick this mode. Use one of: "very easy" | "easy" | "medium" | "hard" | "very hard". The player can still override it in Advanced Settings
askTheNarratorPrompt?: string // ✅ Optional message shown when the player asks the narrator for help. Falls back to a default help message if omitted
npcIntentInstructions?: string // ✅ Optional guidance layered onto NPC intent generation while this mode is selected, the intent-side counterpart of `instructions`
}
gameModes is keyed by an id you choose (e.g. "classic").
What a game mode does to narration: when the player has a mode selected and that mode has instructions, those instructions are added to the narrator’s prompt as an extra guidance block on top of the base narration and narratorStyle. Defining and selecting a mode therefore adds instructions that wouldn’t otherwise be present.
Default behavior (no game mode): if a world defines no game modes, or the player has none selected, the narrator runs on its base narration instructions plus narratorStyle only — no extra mode block is added. When the player asks the narrator for help and no askTheNarratorPrompt is set, a built-in default help message is shown.
What npcIntentInstructions does: while the mode is selected, this text is added to the NPC intent prompt on top of the base intent instructions and any generateNPCIntents overrides, so a mode can change how NPCs behave (aggression, how often bystanders act, how quickly scenes escalate) without touching the world-wide intent instructions. Omit it and NPC intents run on the world-wide instructions alone.
What difficulty does: it presets the game’s mechanical difficulty for players who pick the mode. The five valid values are very easy, easy, medium, hard, and very hard, which scale NPC health and damage (e.g. very easy ≈ half NPC HP, very hard ≈ 1.5× NPC HP). Selecting the mode fills in this difficulty automatically; the player can still change it in Advanced Settings before starting. Use one of the five values — other strings are passed through but won’t map to the difficulty display.
Example:
{
"classic": {
"name": "Classic Adventure",
"description": "Balanced storytelling with action, exploration, and dialogue.",
"instructions": "Balance combat, exploration, and character moments. Keep momentum toward the player's goals.",
"difficulty": "medium"
},
"roleplay": {
"name": "Pure Roleplay",
"description": "Slow-burn, character-driven scenes with minimal combat.",
"instructions": "Emphasize dialogue, relationships, and introspection. Let scenes breathe. Avoid forcing combat.",
"npcIntentInstructions": "NPCs favor conversation over confrontation. Bystanders rarely act unless addressed."
}
}
imagePromptConfiguration
Optional per-entity-type instructions that steer how Voyage generates images for your world. Each entry is a free-text instruction block (like narratorStyle, but for images) that is injected into the image-generation task for that entity type:
imagePromptConfiguration?: {
npcs?: string // ✅ Art-direction instructions for NPC portraits
locations?: string // ✅ Art-direction instructions for location images
areas?: string // ✅ Art-direction instructions for area images
regions?: string // ✅ Art-direction instructions for region map images
items?: string // ✅ Art-direction instructions for item images
}
Use it to lock a consistent art style, framing, palette, or rendering technique across all generated images of a given type. Leave a field blank or omit it to fall back to the default image instructions for that type. Which model renders the images is a separate choice, set by imageModelSource in the settings tab.
Example:
{
"npcs": "Painterly oil-portrait style, warm candlelit lighting, head-and-shoulders framing, muted earth tones.",
"locations": "Wide establishing shots, moody atmospheric fog, cinematic depth of field.",
"items": "Single object on a plain dark background, soft studio lighting, no hands or characters."
}
resourceSettings
Character resources like health, mana, stamina. Keys must be lowercase.
resourceSettings: Record<string, Resource>
interface Resource {
name: string // Display name
initialValue: number // Starting value (usually 0, traits add to this)
maxValue: number // Level-1 maximum (usually 0, traits add to this)
gainPerLevel: number // Amount added to max per character level
rechargeRate: number // Amount restored per tick
restRechargeMultiplier: number // Multiplier when resting
color: string // Hex color for UI
isHealth?: boolean // Only ONE resource should have this
usageInstructions?: string // AI guidance for modifications
}
isHealth
Exactly one resource must have isHealth: true. This resource:
- Determines death/unconsciousness when at 0
- Receives damage from combat
- Displays as the health bar
- Uses special NPC calculation
usageInstructions
AI guidance for when/how to modify each resource:
### Health Changes
- Small injuries: -1 to 15% player health
- Medium injuries: -5 to 25% player health
- Massive injuries: -15 to 50% player health
- Healing potions: +30 to +40
Example
resourceSettings: {
"health": {
name: "Health",
initialValue: 0,
maxValue: 0,
gainPerLevel: 10,
rechargeRate: 1,
restRechargeMultiplier: 1,
color: "#ef4444",
isHealth: true,
usageInstructions: "..."
}
}
death
Character death and resurrection configuration.
death: {
permadeath: boolean // true = permanent death
instructions: string // Resurrection narrative (if permadeath: false)
}
permadeath: true
- Character death is permanent
- Game ends when all party members die
instructionsfield is ignored
permadeath: false
- Characters can be resurrected
instructionsguide the resurrection narrative
Example instructions:
Death is not the end, but the resurrection comes with a price. The character returns changed—perhaps they've lost a memory, gained a scar, or made a deal with something dark. Make the return dramatic and consequential.
Cross-References
| Field | References |
|---|---|
resourceSettings keys | Used in triggers, abilities, trait modifiers |
resourceSettings[].isHealth | Used by death system, combat |