gradeNot graded
spawn_encounterAction
Put a new challenge in the room the player is standing in. Difficulty is optional — leave it out and the game picks from how the player is actually doing (health, level, how many rounds have gone badly in a row). If you do ask, you can always ask for less than the game suggests, never more: a request above the ceiling is lowered and the result tells you why, so read suggested_difficulty from get_game_state first. Returns what the player now faces.
View tool JSON
{
"name": "spawn_encounter",
"kind": "act",
"impl": "imperative",
"description": "Put a new challenge in the room the player is standing in. Difficulty is optional — leave it out and the game picks from how the player is actually doing (health, level, how many rounds have gone badly in a row). If you do ask, you can always ask for less than the game suggests, never more: a request above the ceiling is lowered and the result tells you why, so read suggested_difficulty from get_game_state first. Returns what the player now faces.",
"inputSchema": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"combat",
"puzzle",
"discovery"
],
"description": "combat arms an enemy the player must fight; puzzle poses a question they must answer; discovery puts something in the room to find."
},
"difficulty": {
"type": "string",
"enum": [
"easy",
"medium",
"hard"
],
"description": "Optional. Scales enemy health and damage, or what a find is worth. Omit to let the game choose for the player’s current state."
},
"enemy_name": {
"type": "string",
"description": "Optional, combat only. Rename the thing you are spawning to fit the room you are in — \"the verger who kept the keys\", not \"Goblin 2\". The numbers stay the game’s."
},
"intro_text": {
"type": "string",
"description": "Optional, combat only. The sentence that introduces it — how it arrives, what the player notices first. Write this whenever you are spawning into a room you invented, or the house entrance will describe furniture that room does not have."
},
"hit_text": {
"type": "string",
"description": "Optional, combat only. One sentence the player reads each round the fight continues. Present tense, second person, concrete: wet stone, cold iron, a voice that is nearly right. No gore for its own sake, no generic fantasy, no adjectives doing the work of a noun."
},
"kill_text": {
"type": "string",
"description": "Optional, combat only. One or two sentences for the moment it goes down. Same voice as hit_text. Let it be quiet rather than loud."
}
},
"required": [
"type"
]
}
}resolve_combatAction
Resolve one round of the fight in the current room. attack trades damage; defend halves what the player takes this round; flee ends the fight and retreats to the previous room, leaving the enemy wounded exactly as it is. Fails if nothing is fighting the player.
View tool JSON
{
"name": "resolve_combat",
"kind": "act",
"impl": "imperative",
"description": "Resolve one round of the fight in the current room. attack trades damage; defend halves what the player takes this round; flee ends the fight and retreats to the previous room, leaving the enemy wounded exactly as it is. Fails if nothing is fighting the player.",
"inputSchema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"attack",
"defend",
"flee"
]
},
"target": {
"type": "string",
"description": "Optional name of what is being fought, for the narration."
}
},
"required": [
"action"
]
}
}award_itemAction
Give the player something and narrate them finding it. The description is shown to the player as the DM speaking, so write it as a sentence of story, not a label. Fails when the pack is full.
View tool JSON
{
"name": "award_item",
"kind": "act",
"impl": "imperative",
"description": "Give the player something and narrate them finding it. The description is shown to the player as the DM speaking, so write it as a sentence of story, not a label. Fails when the pack is full.",
"inputSchema": {
"type": "object",
"properties": {
"item_name": {
"type": "string",
"description": "Short name, as it appears in the pack."
},
"description": {
"type": "string",
"description": "One or two sentences of narration describing the find."
}
},
"required": [
"item_name",
"description"
]
}
}advance_storyAction
Move the story on and open the way to somewhere new. Pass the player's stated intent as direction (e.g. "follow the singing down the stair"). If this room still has hand-written content left, that is revealed and the prose is already written — you can send direction alone. Once the written map runs out you are writing the room yourself: send room_name, mood and description and they become the actual scene the player reads, marked ✦ on the map as yours. THE HOUSE VOICE, match it: second person, present tense, plain words. Dread comes from something being slightly wrong — a sound that stops when it should not, wet stone where stone should be dry, a task someone was doing here until they stopped. Name real objects: lamps, water, iron, wax, chalk marks, rope. No elves, no magic systems, no "ancient evil", no adjective piles. Two to four sentences, and let one of them be short. The player still has to walk there themselves.
View tool JSON
{
"name": "advance_story",
"kind": "act",
"impl": "imperative",
"description": "Move the story on and open the way to somewhere new. Pass the player's stated intent as direction (e.g. \"follow the singing down the stair\"). If this room still has hand-written content left, that is revealed and the prose is already written — you can send direction alone. Once the written map runs out you are writing the room yourself: send room_name, mood and description and they become the actual scene the player reads, marked ✦ on the map as yours. THE HOUSE VOICE, match it: second person, present tense, plain words. Dread comes from something being slightly wrong — a sound that stops when it should not, wet stone where stone should be dry, a task someone was doing here until they stopped. Name real objects: lamps, water, iron, wax, chalk marks, rope. No elves, no magic systems, no \"ancient evil\", no adjective piles. Two to four sentences, and let one of them be short. The player still has to walk there themselves.",
"inputSchema": {
"type": "object",
"properties": {
"direction": {
"type": "string",
"description": "Where or how the story moves, in the player's words when they gave any."
},
"room_name": {
"type": "string",
"description": "What this place is called, the way a lamplighter would write it on a chart: \"The Bell Stair\", \"The Wet Vestry\". Falls back to a name built from direction if you don't send one."
},
"mood": {
"type": "string",
"description": "One short line under the room name — what the place feels like. A fragment, not a sentence: \"Wet plaster, and someone else breathing.\""
},
"description": {
"type": "string",
"description": "The scene itself, in the house voice described above. This is shown to the player verbatim as the room they are looking at, so write the room, not a summary of it. Under 900 characters."
}
}
}
}get_game_stateAnswer
Read the current game: health, level, inventory and space left, the room the player is in, any live enemy or unresolved encounter, every room revealed so far, and the recent log. Changes nothing. Call this before spawning an encounter or advancing the story.
View tool JSON
{
"name": "get_game_state",
"kind": "answer",
"impl": "imperative",
"description": "Read the current game: health, level, inventory and space left, the room the player is in, any live enemy or unresolved encounter, every room revealed so far, and the recent log. Changes nothing. Call this before spawning an encounter or advancing the story.",
"inputSchema": {
"type": "object",
"properties": {}
}
}