# Story Starts

> Schema and rules for creating story starts

- Skill: `nikolaj-lat/story-starts` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add nikolaj-lat/story-starts`
- Raw SKILL.md: https://api.skillmd.com/api/skills/nikolaj-lat/story-starts/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: nikolaj-lat (https://skillmd.com/u/nikolaj-lat)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/nikolaj-lat/story-starts

---


# Story Starts

Edit `tabs/story-starts.json`.

## Required Fields

| Field | Requirement |
|-------|-------------|
| `name` | Must match object key exactly. Keep names unique: a story start referenced by a name shared with another definition resolves to nothing, an exact id always resolves |
| `description` | One compelling sentence shown during character creation |
| `storyStart` | Opening narrative prompt for the AI (see format below) |
| `locations` | Array of valid location keys - use one for specific starts, multiple for variety |
| `locationAreas` | Array of area keys, or `[]` to allow any area in the location |

## Conditional Fields

| Field | When to Include |
|-------|-----------------|
| `startingQuests` | When the story has immediate objectives for the player |
| `firstQuest` | When you want AI-generated quest details on turn 0 |
| `startingPartyNPCs` | When the player begins with companions |
| `isDefault` | Set `true` on exactly one story start. It is the start used when the host does not pick one; without it, the first entry is used |
| `questGenerationGuidance` | When this story start needs quest tone/scope distinct from the rest of the world |
| `startingItems` | Optional. Items granted on top of trait- and settings-based starting gear, for items specific to this story start. Usually leave to traits and settings and keep story starts narrative-focused |

## Never Include

Omit these fields (engine-controlled):
- `allowPlayerInput` — the engine deletes it from every story start except the built-in one named exactly "Write Your Own", where it is forced on with an empty `storyStart`

## description Format

One sentence that helps players choose this starting scenario. Focus on the hook, not mechanics.

Format: "[Situation] - [what makes this start interesting]"

## storyStart Format

The opening narrative prompt passed to the AI. This sets the scene and establishes the player's immediate situation. The AI expands this into the full opening story.

Three-part structure:
1. **Scene** - Where are we? What's the atmosphere?
2. **Situation** - What's happening right now?
3. **Hook** - What pulls the player forward?

## Location Selection Guidance

**Single location** - Use when the story demands a specific starting point:
```json
"locations": ["thornhaven"]
```

**Multiple locations** - Use for variety or "wanderer" style starts:
```json
"locations": ["thornhaven", "riverside-camp", "mountain-pass"]
```

## Quest Integration

**startingQuests vs firstQuest:**
- `startingQuests`: Array of quest ids or unique quest names from `tabs/quests.json` - at game start, hidden quests are promoted to `'available'`; quests already accepted (e.g. via a quest's `initialStatus`) keep their status
- `firstQuest`: Freeform text instruction - on turn 0, forces AI to generate a quest matching this description

These are independent systems. Use `startingQuests` for predefined quests, use `firstQuest` for AI-generated opening quests.

## Schema

```typescript
interface StoryStart {
  name: string
  description: string
  storyStart: string
  locations: string[]
  locationAreas: string[]
  startingQuests?: string[]
  firstQuest?: string
  startingPartyNPCs?: string[]
  startingItems?: Array<{ item: string; quantity: number }>
  isDefault?: boolean
  questGenerationGuidance?: string
  allowPlayerInput?: boolean
}
```

## Reference

For detailed documentation, see [story-starts-reference.md](references/story-starts-reference.md).

