# /api/prompts

**Prompts are source code** (charter §16). They are versioned, reviewed like code, and changing one is a change to the game.

Four narrow roles, not one omniscient prompt (charter §5). Each has its own input contract and output contract:

| File | Role | Output |
|---|---|---|
| `narrator.md` | Narrator — scenes, outcomes, transitions | Prose + tags |
| `adjudicator.md` | Adjudicator — free text → legal action | **Strict JSON** |
| `improviser.md` | Improviser — minor sandboxed events | Prose + tags |
| `npc.md` | NPC — voice one character | Prose + move tags |
| `banter.md` | Banter — companion callbacks | Prose |

## Tag syntax (charter §12)

```
[MOVE: offer_quest(14)]
[FACT: the eastern bridge is out]
[ADJUST_DISPOSITION: -10]
```

Extracted by regex, validated against game state, stripped from displayed prose. Invalid moves are silently dropped, prose kept (§6).
