Ogma — GM Tool
A Fate Condensed co-GM assistant for running live sessions. Demo campaign: Hawking Cove.
Overview
This tool acts as a real-time GM assistant during Fate Condensed tabletop sessions. It loads your campaign data from YAML files and gives you fast access to AI-generated suggestions — compels, NPC dialogue, scene twists, session prep, and more.
Everything runs in the browser. No accounts, no data sent anywhere except to the AI worker when you click a button. YAML files are your source of truth; edit them between sessions to update characters, scenes, and threads.
Layout
The tool uses a three-panel layout:
| Panel | Contents |
|---|---|
| Left — PARTY | Accordion sidebar: Players, NPCs, Threads, Zones — all collapsible groups |
| Center — SCENE / ACTIONS / LOG | Current scene, AI action buttons, AI response panel, session log |
| Right — BINDER | GM Binder: Prep Shelf, Session Journal, Past Sessions tabs. Tension and FP economy shown inline in the Scene block. |
The left and right panels can be collapsed by clicking the arrow button (‹ / ›) in each panel header. This gives the center panel full width. Click the initials icons in the collapsed strip to re-expand.
Column widths are draggable — click and drag the dividers between panels to resize them.
Data & YAML
All campaign data lives in /src/data/ as YAML files. The tool loads them fresh each time you open or refresh the page. Changes you make between sessions (editing YAML directly) will appear on next load.
Runtime changes — fate points, stress, session events, tension level, aspect usage — are saved to localStorage and restored across refreshes.
Player Characters Panel
Each PC card shows:
- Name and high concept — in the card header
- Trouble — shown on hover (desktop) or tap-to-expand (touch)
- Aspects — shown on hover; click any aspect to instantly trigger a compel suggestion
- Fate points (FP) — 7 pips in the top-right of each card; click a pip to set the PC's current FP count
- Stress — PH (physical) and MN (mental) checkboxes; click to mark/unmark. Use the ± buttons for quick single-box stepping.
- Consequences — Mild (−2), Moderate (−4), Severe (−6) input fields with monospace shift-cost labels. PCs with Physique or Will ≥ 5 get an extra Mild slot.
- ⚡ Compel — generates a compel suggestion focused on this character
- Concede — opens a modal to confirm concession and calculate FP award (1 base + 1 per consequence taken)
- Take Hit — opens the Take Hit modal to absorb incoming shifts with stress boxes and consequence slots
Aspect usage is tracked visually: invoked aspects are dimmed with a strikethrough; compelled aspects show in red. Click "✓ Mark as Compelled" in the AI response panel to record it.
Taken Out: When all stress boxes for a PC are marked, a skull badge appears. Click the badge to open a modal where you can narrate the outcome or redirect to the Concede flow.
Scene Panel
The scene panel (top of center column) shows the current scene from scene.yaml:
- Scene name — italic title
- Scene aspects — clickable tags; click any to trigger a compel suggestion on that aspect
- Stakes — what's at risk if the party fails
Scene aspects are fed into every AI request as context. Update scene.yaml between scenes to keep the tool in sync.
Action Bar
AI action buttons appear in the Moves tab in the right panel, organized into categories (All, Scene, Conflict, Characters, Session). Each card shows its icon, label, and description at all times — no hover required.
Suggested row: On the "All" tab, a context-aware "Suggested" row appears at the top showing 3–4 prompts relevant to your current game state (e.g., scene generators when no scene is active; conflict tools during high tension; summarize when many events have been logged).
GM Brain bar: The quick-question input in the center panel is for open-ended questions. A ? tooltip clarifies: "Quick questions go here. For specific moves, use the Moves tab or Cmd+K." Available prompts:
| Button | What it does | Best used when… |
|---|---|---|
| 🎭 Generate Compel | Suggests 3 compels grounded in PC aspects, scene aspects, and recent events. Prefers unused aspects. | FP economy is low; you want to create drama for a specific character. |
| 💬 NPC Dialogue | Opens a modal to select an NPC and describe the situation. Returns 3 dialogue options (reveal / deflect / pressure). | A named NPC is in the scene and needs to speak. |
| 📝 Summarize Session | Generates a structured session summary (what happened, character moments, thread updates, open questions, setup for next session). | End of session, before updating session_log.yaml. |
| 🌀 Scene Twist | Returns 3 twist options: Complication, Escalation, Reveal. Each grounded in existing aspects. | The scene has plateaued; you want to inject energy without railroading. |
| 📋 Session Prep | Generates a full prep document for the next session: opening scene, NPC agendas, compel setups, thread beats, stall escalations. | Prepping between sessions. |
| 🧠 GM Brain | Open-ended Q&A. Type any question about the current situation and get a targeted answer grounded in your campaign context. | "What am I forgetting?" / "What's the most interesting move right now?" / "Which PC needs a spotlight?" |
| 🗺 New Scene | Generates a new scene: an evocative name, 4 categorised situation aspects (Tone / Danger / Usable / Movement), up to 5 named zones with descriptions, and an opening question for the players. Optional location hint. Click Apply Scene to adopt the generated scene into the active session — zones, aspects, and descriptions are parsed and applied to the scene display. | Transitioning to a new scene mid-session; the next scene hasn't been prepped. |
| ⚔ Generate Encounter | Builds a ready-to-run Fate Condensed encounter: situation aspect, victory and defeat conditions, and opposition NPCs with full stat blocks (Nameless / Supporting / Main). Optional difficulty hint. | Combat or conflict is about to start; you need opposition stats on the fly. |
"What are the most interesting unused compel setups given recent events?"
"Musashi and Barnabus are about to conflict — what's at stake for each?"
"The party is stuck. What's the most natural escalation given the creature thread?"
All AI responses appear in the AI Response Panel (below the action bar). Click ✕ to dismiss it. The panel is not cleared when you make a new request — the new response replaces the old one.
The response panel has three tabs:
- Response — the AI-generated text
- GM Guide — running tips and a Fate Condensed rules reference for that specific result type
- D&D? — side-by-side comparisons between Fate concepts and D&D 5e equivalents, filtered to the relevant concepts for the current result type. Useful when players come from D&D backgrounds.
All three tabs are populated for every AI result. The GM Guide and D&D? tabs are disabled until the first result is generated.
Dice Roller
Click 🎲 Roll Fate in the header to roll 4 Fate dice (4dF). Each die shows −, □, or +. The total is displayed with color coding: positive (green), zero (grey), negative (red). Use the MOD stepper to adjust the modifier (resets between sessions).
vs Opposition: The dice modal includes an opposition value stepper. Set it to the opposing roll or passive difficulty. When set, the outcome recalculates as shifts (PC result minus opposition) with a color-coded display — green for positive shifts, red for negative, yellow for a tie.
After a roll, 📖 Interpret appears. Click it to send the roll to the AI for a narrative outcome at the correct Fate Condensed level. You can optionally select the Fate Action and skill being used.
Session Log
The session log tracks events in chronological order. Events are automatically classified by type (dice roll, NPC speech, compel, narrative) and displayed with colored left-border indicators.
Adding Events
Click + Add Event or use the Command Palette (Cmd+K → "Add Event") to open the event input. Type what happened and press Enter or click Add. Events are immediately saved to localStorage.
How Events Feed AI Context
The last 5 recent events are automatically sent to every AI endpoint as recent context. This means the AI's suggestions are grounded in what just happened at the table. More events = better compel suggestions and twists.
Undo
Press Ctrl+Z (or Cmd+Z) or click the Undo button in the log header to revert the last state change (FP, stress, boosts, aspects, GM pool, tension). Up to 20 undo steps are kept. Undo does not affect text events.
Autosave
A subtle "Saved" indicator flashes in the session log header each time state is persisted to localStorage. All changes are saved automatically — no manual save needed.
Export
Click the zip icon in the session log header to download the full campaign as a ZIP of YAML files.
Clearing the Log
Click Clear in the session log header. A confirmation modal appears with a 3-second safety delay before the confirm button activates. Clearing wipes localStorage events, aspect tracking, and tension level. YAML history events (from session_log.yaml) are always shown regardless — they are never deleted.
Left Sidebar — Accordion Groups
The left sidebar contains four collapsible accordion groups. Click any group header to expand or collapse it. Open/closed state persists across refreshes.
Players
Full PC cards with fate points, stress boxes, and aspects. Each card has an eye icon (top-right) to toggle whether the PC appears on the Player View. PCs are visible by default.
Small ? buttons appear inline next to Fate Points, the Compel button, and the Stress track. Clicking any ? opens the Learn Fate Reference panel directly to the relevant rules card.
NPCs
Each NPC card shows the character's name, role, and first two aspects. Click 💬 Dialogue on an NPC card to open the dialogue modal pre-filled with that NPC. Each card has an eye icon (top-right) to show or hide that NPC on the Player View. NPCs are hidden by default — toggle them on when you're ready to reveal them at the table.
Threads
Threads are loaded from session_log.yaml → current_threads. Each thread card shows:
- Status badge — Active (orange), Seeded (gold), Hidden (grey)
- Progress bar — thin bar below the name. Click to advance by 10%. Color shifts green → gold → red as tension rises. Persisted per session.
- Last development — what happened most recently
- Next beat — suggested upcoming development from YAML
Click a thread name to ask the AI for advice on advancing it.
Zones
Zones from the current scene (scene.yaml) appear here as cards showing the zone name, description, situation aspects, and occupants. PC names appear in blue; NPC names in purple.
GM Binder (Right Panel)
The right panel is the GM Binder — three tabs for prep work and session history.
Prep tab
Contains the Prep Shelf — items pinned from AI responses via the 📌 button. Each card shows a type badge, preview, and can be expanded. Includes a compact arc status summary (active / seeded / hidden thread counts) at the top.
Journal tab
Contains the Session Journal — AI responses saved via the 🔖 button. Each entry can be edited or deleted. Click Recap to generate a session recap document.
Past tab
Shows open questions from the most recent session summary, followed by expandable cards for each session in session_log.yaml (newest first). Each card shows session number, title, and date. Expand to see: narrative summary, key moments, thread advances, and open questions.
Scene Block
The center scene block shows the current scene name, stakes (amber warning bar, shown when stakes are set), and the pulse bar. A + New Scene button in the scene header lets you generate a scene-setup brief via AI.
Zone Map
When the current scene defines zones, a zone map grid appears below the pulse bar. Each zone card shows the zone name, description (if present), situation aspects, and occupant pills (PCs in blue, NPCs in purple). Click a zone card to highlight it — the highlighted zone filters the NPC presence rows below. When you use Apply Scene on an AI-generated scene, zone descriptions are automatically parsed and displayed.
NPCs Present
NPCs whose zone field matches a scene zone, or whose name appears in a zone's occupants list, are shown as quick-action rows below the zone map. Each row has Dialogue, Compel, and Roll buttons. The Roll button rolls 4dF + the NPC's peak skill and logs the result (with shifts vs the last PC roll) to the session log.
Scene Pulse bar
The scene block displays a compact pulse bar showing:
| Element | Description |
|---|---|
| Tension meter | 5 clickable pips (1–5). Tracks scene intensity. Persisted across refreshes. |
| Fate Economy | Total FP in play across all PCs, plus count of aspects invoked and compelled this session. |
Command Palette
Press Cmd + K (Mac) or Ctrl + K (Windows/Linux) to open the command palette. Type to filter, use arrow keys to navigate, Enter to execute, Esc to close.
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| Ctrl/Cmd+K | Open Command Palette |
| Ctrl/Cmd+Z | Undo last game-state change |
| Ctrl/Cmd+Shift+Z | Compel Catalyst — generate compel suggestions for the current scene |
| Ctrl/Cmd+Shift+A | Create Advantage — generate advantage aspect suggestions |
| Shift+Click aspect | Quick invoke (skip context menu) |
| Escape | Close any open modal or panel |
| Enter | Submit Brain question / event input |
Shortcuts are also listed in the "Keyboard Shortcuts" card within the Learn Fate reference panel.
Learn Fate Reference
Click Learn Fate in the header to open the Fate Condensed reference panel — a slide-out panel with 12 plain-language reference cards for players and GMs new to the system.
The panel includes:
- What Are Aspects, The Four Actions, The Four Outcomes, Fate Points, Invoking, Compels, Create an Advantage, Stress & Consequences, Conceding, The Skill Ladder, Stunts, Scene Framing
- Search — type in the search box to filter cards by title or body text
- Expand/collapse — click any card header to read the full explanation and a Hawking Cove example
- Got it — click to mark a card as read; read cards are dimmed so you can focus on unfamiliar topics
Read tracking is stored in localStorage and persists across sessions. Close with ✕ or press Escape.
Contextual ? links: Small ? buttons appear inline next to rules-heavy UI elements (Fate Points, Compel, Stress track on PC cards). Clicking one opens the Learn Fate panel directly to the relevant card — no searching required. These buttons are intentionally subtle and become visible on hover.
Take Hit & Conflict Resolution
Take Hit Modal
Open via the button on any PC card, or the Command Palette (Cmd+K → "Take Hit"). The modal lets you:
- Select the character taking the hit
- Set the number of shifts to absorb
- Click stress boxes and/or consequence slots to allocate the damage
- See a live "remaining shifts" indicator
Already-used stress boxes and filled consequences are greyed out. Click Apply Hit to mark the selected boxes and log the event.
Boosts & Free Invokes
Boosts appear in the Boost Tracker below the scene. Each boost shows a free invoke badge with the remaining count. Click to use one free invoke — the badge decrements, and the boost is removed when all invokes are spent. Boosts created via the Add Boost button start with 1 free invoke; those created via Create Advantage (Succeed with Style) can start with 2.
NPC Opposition Rolling
Each NPC strip card in the scene has a Roll button. Clicking it rolls 4dF + the NPC's peak skill. The result and shifts vs the last PC roll are logged to the session log.
Focus Mode
Click the Focus button in the header to toggle Focus Mode. When active, the left sidebar (The Crew) and right sidebar (The Toolbox) fade away, leaving only the center Scene column visible for immersive, high-intensity roleplay moments.
Click the button again (now showing ) to restore the full 3-column layout.
Player View
There are two ways to show a player-facing view:
In-app overlay
Click Player View in the header to open a full-screen overlay on the GM's current screen. It renders the current scene name, aspects, stakes, zones (with tension pips), and session label. Use this for quick table-facing reveals on a single monitor. Close with ✕ or Escape. An ↗ link next to the button opens the separate player.html page.
Separate page (player.html)
The ↗ link opens player.html — a read-only screen designed for a second monitor or projector facing the players.
Both views show:
- Current scene name, aspects, and stakes
- Each visible PC's name, high concept, trouble, and aspects (controlled by the eye toggle on each PC card in the GM tool)
- Scene Characters section showing any NPCs the GM has revealed (controlled by the eye toggle on each NPC card — hidden by default)
Neither view shows fate points, stress, GM notes, or any AI tools. player.html auto-refreshes every 30 seconds, or you can click ↺ Refresh manually.
player.html via the ↗ link and drag it to the second screen. The auto-refresh keeps it in sync as you update the scene between encounters.
Notebook
The Notebook (notebook.html) is the recommended live-play interface. It sits on your iPad or laptop at the table alongside your dry-erase cards, physical dice, and fate point tokens.
How It Works
One column, three zones:
- Scene strip — current scene name (tap to edit, 100 char max) and aspect pills. Tap [+] to add aspects, tap [×] to remove. These match what's on your dry-erase cards.
- Brain — ask any question in plain language or tap a quick prompt. The AI knows your campaign, characters, and what's happened so far this session.
- Session log — auto-captures Brain interactions. Tap stamp buttons to log table moments. Tap any log entry to edit it. Long-press to flag it as unresolved (amber marker).
Smart Quick Prompts
The 6 prompt chips change based on what's happening:
- Default: Compel, Flavor, Complicate, NPC says, What's next, Twist
- After stamping Conflict: Attack pattern, Concession, Consequence, Compel, Escalate, Twist
- After stamping Dialogue: NPC says, NPC lies, NPC reacts, Compel, Flavor, Reveal
- After stamping End Scene: Describe, Who's here, Tension, Danger, Opener, What's next
A mode label (e.g., "Conflict mode") appears above the chips when they change.
Stamps
One-tap logging — no dialog popup. Tap a stamp to instantly log the moment:
Conflict · FP (fate point changed hands) · Dialogue · Discover · End Scene (triggers auto-summary) · Note
Header Buttons
| Suggest — analyzes your log for gaps (uncompled PCs, untouched threads) and recommends what to focus on | |
| Whisper mode — toggle on for 1-2 sentence answers. Great for quick lookups mid-scene. | |
| Dice — 4dF roller with modifier. Result auto-logged. | |
| Reference — slide-out drawer with PC aspects, NPC goals + one-tap dialogue, and active threads. |
Reference Drawer
Tap to open. Shows PC aspects/troubles, NPC names/goals with a speech button (tap for instant AI dialogue in that NPC's voice), and active threads. No stats or stress — just narrative identity.
Momentum Strip
The thin bar below the header shows session energy: calm (dim) → building (amber) → intense (red). Based on recent log entries. Purely visual — glance at the pacing without counting.
Session Flow
On load, a "Previously on..." card shows last session's recap. Tap Start Session to begin. At session end, tap Recap to generate a structured summary from your log, then Copy YAML to paste into session_log.yaml. The button clears the log (with confirmation) for the next session.
Keyboard Shortcuts
| / | Focus the Brain prompt |
| ? | Toggle reference drawer |
| Enter | Send Brain prompt |
| Escape | Close modals and drawer |
Session Overrides
During play, you can update campaign data without touching YAML files. All changes are stored in your browser and feed into the Brain automatically.
- Edit NPC — tap on any NPC in the reference drawer to update their goal and disposition mid-session.
- Advance thread — tap on any thread to change its status (active/resolved/hidden) and next development.
- New NPC — tap New NPC at the bottom of the NPCs list to add a character on the fly (name, role, goal, disposition).
- Scene edits — tap the scene name to rename it, tap [+] to add aspects, tap [×] to remove.
All overrides persist in your browser between page reloads. YAML files are never modified.
Exporting Session Changes
After a session, tap Export Session Changes at the bottom of the reference drawer. This downloads a .yaml file containing:
- Scene name and aspect changes (for
scene.yaml) - NPC goal/disposition updates (for
npcs.yaml) - New NPCs with starter fields (for
npcs.yaml) - Thread status and next-development updates (for
session_log.yaml) - Session log key moments (for
session_log.yaml)
Upload the file to your repo and merge the changes into the canonical YAML files. Then push to main — the tool picks up the updates on next load.
Design Philosophy
The Notebook focuses on what the table can't do: remember NPC motivations, generate flavor text, suggest compels that connect to the story arc. Everything mechanical (stress, FP, consequences) stays on your physical cards and tokens. The goal: glance down, tap, read, look back at your players.
GM Screen
The GM Screen (screen.html) is a separate live-play view optimized for running sessions at the table. Access it via the Live Screen link in the dashboard header.
Layout
Three-column desktop layout:
- Left — The Table: Scene banner (name, aspects, stakes, zones), On the Table cards (PCs, NPCs, locations), and a Tray of off-table entities with filter chips
- Center — The Brain: 8 quick prompts, free-text AI input (Ctrl+Enter to send, / to focus), response panel with pin-to-scratch-pad, prompt history
- Right — Reference: Threads, Rules search, Scratch pad with stamp buttons and session Recap generator
Cards
Each entity card has a type badge (PC/NPC/Zone/Threat), expand/collapse chevron, and an on-table dot (click to move between table and tray). PC cards show FP coin (click +1, Shift+click −1), stress boxes (click to toggle), consequences, top skills, and stunts. Card footers have context-aware Brain prompt buttons.
Keyboard Shortcuts
| / | Focus Brain textarea |
| ? | Toggle Rules panel |
| 1 / 2 / 3 | Switch right panel: Threads / Rules / Log |
| Ctrl+Enter | Send Brain prompt |
| Escape | Close dice/confirm modals |
Responsive
At 768–1099px the right column becomes a slide-out drawer (toggle via button). Below 768px, a bottom tab bar switches between Table, Tray, Brain, Threads, Rules, and Log views.
Shared State
The GM Screen and dashboard share localStorage. FP, stress, and consequences updated on either page are visible on both after a refresh. The scratch pad and Brain history are screen-specific.
Offline Mode
The tool registers a service worker that caches all core assets (HTML, CSS, JS, and YAML data files) on first load. If you lose internet connectivity during a session:
- A red "Offline" banner appears at the top of the page
- All local features continue working: dice rolling, FP tracking, stress, consequences, boosts, events, undo
- AI features (compels, dialogue, scene generation, etc.) are unavailable until connectivity returns
The banner disappears automatically when you're back online. AI error messages are now specific: the tool distinguishes between offline, API key issues, rate limits, timeouts, and server errors — each with actionable guidance.
YAML Data Files
All campaign data lives in src/data/. Edit these files directly in a text editor between sessions.
| File | Contents | Edit when… |
|---|---|---|
pcs.yaml |
Player characters: name, high_concept, trouble, aspects, skills, stress boxes, fate_points, notes | A consequence is taken; a character advances; aspects change. |
npcs.yaml |
NPCs: name, role, personality, disposition, current_goal, aspects | An NPC's attitude shifts; a new NPC enters the story. |
scene.yaml |
Current scene: name, aspects, stakes, active_threats, gm_notes | The party moves to a new scene. |
session_log.yaml |
Sessions history (summaries, key moments, open questions), current threads, current session number | After each session: paste in the AI summary, update threads, increment the session number. |
AI Providers
The GM tool supports multiple AI backends. Claude is the default; others act as automatic fallbacks if Claude fails. You can also override which provider is used for the current browser session.
Provider Selection Panel
Click the status indicator (the dot + text in the top-right of the header) to open the provider panel. It shows every supported provider with its current status:
| Status | Meaning |
|---|---|
| ● Green dot | Provider is configured — an API key or URL is set in the Cloudflare Worker. |
| ● Grey dot | Provider is not configured — no key set; it will be skipped. |
| ✓ Checkmark | This provider is currently active for the session. |
Default badge | This is the worker's default primary (set by LLM_PROVIDER in ai.js). |
Setting a Session Override
Click any configured provider in the panel to use it as primary for the current session. The status indicator will update to show the active provider (e.g. Ready · gemini). Click the same provider again, or click Reset to default, to go back to the worker default.
The override is saved to localStorage and persists across page refreshes within the same session. It is not permanent — clearing browser storage resets it.
Fallback Chain
Even without a manual override, the worker tries providers in order if one fails:
- Claude (primary by default)
- Gemini 1.5 Flash (free tier — get key from
aistudio.google.com) - GPT-4o Mini (paid — get key from
platform.openai.com) - Ollama (local — requires a public tunnel URL)
Providers without a configured key are silently skipped. The panel will only show providers as clickable if their key is set in the Worker.
Configuring Providers
API keys are stored as Cloudflare Worker secrets — never in any file. Run each command and paste the key when prompted:
| Provider | Command | Cost |
|---|---|---|
| Claude | wrangler secret put ANTHROPIC_API_KEY | < $0.01/session |
| Gemini | wrangler secret put GEMINI_API_KEY | Free tier |
| OpenAI | wrangler secret put OPENAI_API_KEY | < $0.01/session |
| Ollama | wrangler secret put OLLAMA_URL | Free (local) |
After adding a new key, redeploy the worker: wrangler deploy. The provider will then show as configured (green) in the panel.
Deployment
See README.md for full setup and deployment instructions. In brief:
- The frontend (
src/) is a static site — serve it from Cloudflare Pages, GitHub Pages, or any static host - The AI backend (
workers/ai.js) deploys as a Cloudflare Worker viawrangler deploy - Set
CONFIG.workerUrlinapp.jsto your deployed Worker URL - Store your
ANTHROPIC_API_KEYas a Wrangler secret:wrangler secret put ANTHROPIC_API_KEY - For local dev: run
wrangler dev(Worker onlocalhost:8787) and opensrc/index.htmldirectly in a browser
Multi-Campaign Support
The tool supports multiple campaigns stored in localStorage. Hawking Cove is the built-in campaign; imported campaigns live alongside it in the browser. All data (events, fate points, stress, aspects, tension, journal, prep shelf) is automatically namespaced by campaign slug — switching campaigns never mingles data.
Campaign Selector
The dropdown in the header (next to the campaign title) lists all available campaigns. Select one to switch — the current session state is saved, and the new campaign's state loads immediately.
Importing a Campaign
Click + Import in the header. Upload at minimum:
campaign.yaml— campaign identity and AI context (name, slug, tone, setting_summary)pcs.yaml— at least one player character
Optional: npcs.yaml, scene.yaml, session_log.yaml. The tool validates all files before importing and shows clear error messages if anything is wrong.
Campaign Templates
Click Download Templates in the import modal to get a zip of all five template files with comments explaining every field. Start a new campaign by filling in the templates and importing.
The campaign.yaml Spec
| Field | Required | Description |
|---|---|---|
name | Yes | Display name shown in the selector |
slug | Yes | Lowercase, hyphens only — must be unique. Used as the localStorage namespace. |
genre | Yes | Free text tag (e.g. "dark_fantasy_horror", "space_opera") |
tone | Yes | 1–3 sentences injected into every AI prompt. The most important field for flavour. |
setting_summary | Yes | 2–5 sentence world summary — who, what, where, what's happening |
skill_cap | No | Peak skill rating (default 4 = Great) |
custom_skills | No | null = standard 19 FCon skills; or a list of skill names to override |
Exporting a Campaign
Open the Prep Shelf (📌 in the header) and click Export Campaign at the bottom. Downloads a .zip containing all five YAML files for the active campaign — ready to back up or share.
Fate Condensed Rules Reference
This section documents the exact Fate Condensed rules as implemented in this tool. When in doubt, these rules take precedence over Fate Core or Fate Accelerated conventions.
Stress
Each PC has two stress tracks: Physical (resisted by Physique) and Mental (resisted by Will). All PCs start with 2 boxes per track. Track length is automatically extended based on the relevant skill rating loaded from pcs.yaml:
| Physique / Will rating | Stress boxes |
|---|---|
| 0 (no skill) | 2 boxes |
| 1–2 (Average / Fair) | 3 boxes |
| 3–4 (Good / Great) | 4 boxes |
Each box absorbs exactly its number in shifts: box 1 absorbs 1 shift, box 2 absorbs 2 shifts, box 3 absorbs 3 shifts, box 4 absorbs 4 shifts. A single hit must be absorbed by a single box — you cannot split a hit across multiple boxes. Box labels show their numeric value in the UI. Track length is calculated at load time; stored state is capped to the calculated length.
Consequences
Consequences absorb hits that stress boxes cannot. Each consequence slot has a fixed shift cost that it reduces the incoming hit by:
| Consequence | Shift cost | Notes |
|---|---|---|
| Mild | −2 | Recoverable in the same session with a Overcome roll |
| Moderate | −4 | Recoverable at the end of the session |
| Severe | −6 | Recoverable at the end of the next session |
| Extra Mild | −2 | Only available to PCs with Physique or Will ≥ 5 |
PCs with Physique or Will rated at 5 or higher gain an additional Mild (−2) consequence slot. This extra slot is shown on the PC card automatically when the relevant skill meets the threshold.
Fate Points
Each PC's starting Fate Points equal their Refresh value (loaded from pcs.yaml). The pip display in the tool always shows the relevant range for the current FP count using:
display pips = Math.min(12, Math.max(fp, refresh + 2))
This ensures the pip row always shows at least refresh + 2 pips so the Refresh baseline and a couple of earned points are always visible, while capping at 12 to prevent the UI from becoming unwieldy.
Concede
A PC can concede at any point before the GM rolls dice for an action against them. Conceding is a distinct button on each PC card and opens a confirmation modal. The FP award is:
1 FP base + 1 FP per consequence already taken (from any conflict in the current scene).
The conceding player narrates how they exit the scene. They do not get to dictate outcomes, but they avoid being Taken Out. The award is logged to the session log.
Boosts
Boosts are temporary free-invoke aspects that vanish after one use. They are tracked in the Boost Tracker (below the scene block) and stored in state.boosts — never in the scene aspects list. Key rules:
- Created when you Succeed with Style on Create an Advantage, or as a tie result on an attack
- Grant one free invoke — using the invoke removes the boost
- If not used before the end of the scene, they vanish
- Never confused with persistent scene aspects, which remain until actively removed
Compels
Compels are always one of exactly two types:
| Type | Description |
|---|---|
| Event | Something happens to the PC because of their aspect — external complication |
| Decision | The PC is tempted to act in a way their aspect would naturally push them — internal choice |
The GM offers 1 FP to the player. The player may:
- Accept — take the FP and the complication. Play it out.
- Buy off — pay 1 FP to refuse the compel and avoid the complication.
The AI's Generate Compel and Compel Catalyst prompts always label each suggestion as Event or Decision type.
Actions
There are exactly four actions in Fate Condensed. Every roll falls into one of these:
| Action | When to use |
|---|---|
| Overcome | Get past an obstacle; clear a situation aspect; accomplish a goal with opposition |
| Create an Advantage | Create or discover an aspect you can later invoke; place a new situation aspect on the scene or a character |
| Attack | Inflict stress or consequences on an opponent during a conflict |
| Defend | Prevent an Attack or stop someone from Creating an Advantage against you |
Outcomes
Every action produces exactly one of four outcomes, determined by shifts (your roll result minus the opposition):
| Outcome | Shifts | Result |
|---|---|---|
| Fail | Negative | You don't do it, or you do it at a serious cost set by the GM |
| Tie | 0 shifts | Succeed at a minor cost, or partial success — not simply failure. Use the Success at a Cost prompt for options. |
| Succeed | 1–2 shifts | You do it cleanly |
| Succeed with Style | 3+ shifts | You do it and gain a boost or extra benefit |
Milestones
Characters advance through milestones at the end of sessions or story arcs. The AI's Milestone Reflection prompt uses this exact taxonomy:
| Milestone | When | What you get |
|---|---|---|
| Minor | End of most sessions | Swap skill ranks between two adjacent skills; rename an aspect; swap a stunt. No Refresh gain. |
| Significant | End of a major story arc or notable achievement | +1 skill rank (up to the campaign cap); +1 Refresh (which may be spent on a new stunt immediately) |
| Major | End of a campaign arc or major turning point | Everything from Significant, plus: +1 additional skill rank and one free stunt |
Refresh gained at a Significant or Major milestone should be recorded in pcs.yaml before the next session — the tool reads Refresh from YAML at load time.
Prep Shelf
The Prep Shelf is a persistent binder for AI responses you want to keep between sessions. Unlike the Session Journal (which is per-session), the Prep Shelf survives Clear Session — it's for GM prep material, not session logs.
Pinning a Response
After any AI response appears, click the 📌 button in the AI panel header to pin it to the shelf. Pinned items show a type badge (e.g. "New Scene", "Encounter"), a timestamp, and a preview of the first two lines. Click the preview to expand the full response.
Opening the Shelf
Click the 📌 button in the header nav (next to the journal). The shelf slides in from the right and shows all pinned items, newest first. Each item has an ✕ button to remove it. Clear removes all items at once.
Campaign-Specific
The prep shelf is namespaced per campaign slug — switching campaigns shows that campaign's shelf. Items are stored in localStorage under {slug}_prep_shelf. Maximum 20 items per campaign.