Quick Start
- Configure your AI backend: open ⚙ Settings, choose Claude, OpenAI, or Ollama, and paste your API key. Click Test connection to verify it works.
- Create a Universe: click + New Universe in the sidebar. Give it a name, fandom/genre, and an optional premise.
- Build your Lore Vault: in the Lore Vault tab, click + Add Entry to create characters, locations, factions, magic systems, and more.
- Write alongside the AI: open the Chat tab and start co-authoring. Commit good AI responses as story beats to build your narrative record.
The Lore Vault
Lore entries are the world-building backbone of your universe. Every chat message is sent with your lore as context so the AI always knows your world.
| FIELD | SENT TO AI? | PURPOSE |
| Type | Yes | Categorises the entry (Character, Location, etc.) |
| Name | Yes | How the AI refers to this entity |
| Core Description | Yes | Brief overview the AI reads first |
| Type-specific fields | Yes | Structured metadata (see below) |
| Tags | Yes | Additional keywords for context |
| Relationships | Yes | Bidirectional links to other lore entries, each with a label and optional notes describing the connection from both sides |
| Private Notes | No | Your private thoughts, planned twists, spoilers the AI should never see |
Canon vs Working Ideas: Canon lore is locked-in fact; the AI must never contradict it. Working Ideas are possibilities treated as plausible but not definitive. Use Working for things you're still developing.
| LORE TYPE | TYPE-SPECIFIC FIELDS |
| Character | Appearance, Personality, Motivation/Goals, Dialogue Style, Role in Story |
| Location | Atmosphere/Mood, Key Features, Significance, Who Frequents It |
| Faction | Goals/Agenda, Values/Ideology, Key Members, Relations to Other Factions |
| Magic/Power | How It Works, Limitations/Cost, Who Can Use It, Visual Manifestation |
| Timeline | When (in-story), What Happened, Consequences, Characters Involved |
| Rule | The Rule, Why It Exists, Consequence of Breaking |
| Writing Style | Narrative Voice, Tone, Prose Style, Pacing, Dialogue Approach |
| Other | (core description only) |
Tip: Add a Writing Style lore entry to give the AI a consistent narrative voice. It shapes the tone of every response and is one of the most powerful entries you can create.
Relationships
Any lore entry can be linked to any other via the Relationships section in the edit modal. Each relationship is bidirectional: you define both sides at once so neither entity needs to be edited separately.
- Your View of Them: the label (and optional notes) this entity attaches to the other (e.g. "Rival: we grew up competing for the same mentor").
- Their View of You: the reciprocal label (and optional notes) saved automatically to the linked entry (e.g. "Nemesis: she never lets me win").
Both labels must be filled for a relationship row to be saved. When the entry is saved, the linked entity's relationship list is updated silently, so you will see the reciprocal label appear on that entity's card without opening it. Removing a relationship row and saving will also remove the reciprocal from the other entry.
Relationship labels and notes are included in the AI context alongside the entry's other fields, so the model understands the web of connections between characters, factions, and locations.
Tip: Relationship chips on lore cards show the label; hover a chip to see the notes. Canon and Working status applies to the entry as a whole, so use the notes field to flag tentative connections within an otherwise canon entry.
Importing Lore from Another Universe
In the Lore Vault tab, click ↓ Import Lore to cherry-pick individual lore entries from any other universe into the current one. Each universe's entries appear in a collapsible section; select as many as you want across multiple universes and click Import Selected. Imported entries receive new IDs and are fully independent; editing them will not affect the originals.
Story So Far
The Story So Far tab connects two things: the raw beats you write, and the polished summary the AI generates from them.
Story Beats are short factual notes about what has happened: "Rin discovered her quirk was inherited from her father", "The League attacked during exams". Add them manually in the text box, or commit an AI response from Chat using + Add to Beat.
The Summary is compiled by the AI from your beats. Click ✦ Summarise after adding beats. The summary is injected into every chat session; it's how the model knows the current state of your story without re-reading the full history.
Workflow: Chat → something interesting happens → + Add to Beat → ✦ Summarise → the next chat picks up with full context.
In epic mode, beats are off. The Story So Far summary stays as a hand-edited scaffold; per-scene records live as events on the Timeline tab. See the Epic Mode section below.
Chat & Co-authoring
Every message is sent with your full story context: lore, summary, and recent chat history. The context bar at the top of the chat panel shows what's included; click any chip to toggle it on or off for the next request.
- + Add to Beat / + Add to Event: classic universes commit the AI response as a beat; epic universes commit it as a timeline event using the metadata the AI emits with every response. ✎ Edit + Add to ... opens an editable form pre-filled from the response.
- 💡 Ideas block: if the AI appends directional suggestions, they appear collapsed below the response. Use ↩ Adopt to drop a suggestion into your chat input.
- ⊘ Ignore / Skip: click on any chat message to exclude it from the context sent on the next turn. Useful when an AI reply went off-track and you want a retry.
- ✦ Summarise button (context bar, classic only): regenerates your summary from the current beats without leaving the chat tab.
Epic Mode
Multi-generational stories with hundreds of lore entries break the classic "send everything every turn" model. Epic mode replaces it with an era-aware retrieval pipeline that runs entirely in your browser.
Convert classic to epic: hover any universe in the sidebar and click the ⇄ button. The convert dialog creates a non-destructive duplicate (the original classic universe stays put). Optionally click ✦ Suggest Eras with AI to have the model read your beats and propose 2-6 eras with assignments; preview, rename, reassign, then apply.
- Timeline tab: appears for epic universes. Manage eras (named segments of in-story time) and events (per-scene records replacing beats; each carries a title, body, era, in-story time label, and tagged entities).
- Era scope on a lore entry restricts which eras it feeds the AI into. A character from the second arc can be hidden when the active era is the first.
- Pinned lore: entries always included in the AI context regardless of relevance ranking. Plus any Writing Style entry is always included.
- Active era chip in the chat header: click to change. Determines which lore and events are eligible for the next turn.
- Retrieval context bar (below the chat): shows exactly which lore and events the pipeline picked for the most recent turn, with a token count and the budget cap. Click to expand.
- Embedding model: snowflake-arctic-embed-xs (384-d int8), ~22MB, vendored locally. Runs in a Web Worker via WASM. No data leaves your browser for retrieval.
Token budget: defaults to 4,000 tokens. Tune it in ⚙ Settings under Era Mode. Raise it if your turns feel under-contextualised; lower it to save provider cost.
Duplicating a Universe
Hover over any universe in the sidebar to reveal the ⧉ duplicate button. Clicking it opens a dialog with three modes:
- Copy everything: duplicates lore, beats, story summary, and chat history. Ideal for branching timelines or experimenting while keeping the original intact.
- Just lore: migrates all lore to a new universe with a completely blank story. Use this to explore an AU (alternate universe) that shares the same world-building but tells a different story.
- Lore + AI seed: migrates lore, then opens a dedicated story-shaping chat panel. The AI knows your migrated lore and helps you articulate what's different, who matters, and where this new story begins. When you're satisfied with an AI response, click ✓ Save as Story So Far to set it as the new universe's summary and close the panel.
AI seed context toggles: The story-shaping panel lets you give the AI access to the source universe's original lore and story for reference; useful when the new story is a direct divergence from the original.
AI Prompts
Open ⚙ Settings → AI Prompts to view and customise the five prompts enForged sends to the AI. Leave any field blank to use the built-in default.
| PROMPT | USED FOR |
| Co-Author Instructions | Behaviour rules appended to every chat, e.g. "never contradict canon", "flag invented details" |
| Summary Compiler · System Role | The AI's role definition when generating your Story So Far |
| Summary Compiler · User Instructions | Format rules for the story brief (EVENTS / STATE / THREADS structure) |
| AI Seed · Story-Shape Role | The AI's role when helping you define a new story after duplicating a universe with Lore + AI seed |
| Epic Convert · Era Suggester | Used by "Suggest Eras with AI" when converting a classic universe to epic; the AI reads your beats and proposes eras with assignments |
Each prompt has two buttons: Clear (empties the field; blank means use the built-in default on the next call) and Default (fills the field with the built-in text so you can read and tweak it). Custom prompts travel with your backup JSON when the Custom AI prompts category is ticked in the export modal.
Data & Backup
Classic state lives in localStorage under enforged_v2_state; epic state (eras, events, scope, pinned) under enforged_epic_state. Vectors live in IndexedDB and are regenerated on demand (not backed up). Everything persists across page reloads but is browser- and device-specific.
The sidebar's Export and Import buttons open per-category modals so you choose what travels with the file:
| CATEGORY | EXPORT DEFAULT | WHAT IT COVERS |
| Universes | ✓ ticked | All universes, lore, beats, chat history, and epic timeline data (eras, events, scope, pinned) |
| API keys & tokens | ☐ opt-in | Claude / OpenAI / Drive token. Keep the file secure |
| Settings | ☐ opt-in | AI provider, model selection, font, history window, chip defaults |
| Custom AI prompts | ☐ opt-in | Any prompts you customised in Settings |
On import the defaults flip: categories present in the file default ticked so applying everything is the obvious path; untick to skip. Imported universes get fresh IDs and merge alongside existing ones; epic state remaps so eras and events keep their cross-references.
- This Device: Export downloads a
.json file; Import reads one back.
- Google Drive: add an OAuth access token in Settings → Google Drive Backup. Tokens expire after ~1 hour and need refreshing manually.
- Import an existing story: use Import → ✦ Generate JSON from existing story for a prompt that converts any existing story text into an enForged import file via any capable LLM (Claude, ChatGPT, Gemini, etc.).
What the AI Receives in Every Request
Classic mode: a flat assembly of every lore entry plus the Story So Far summary plus your customisable instructions.
- Universe name, fandom/genre, and premise
- Canon lore: all entries marked Canon (if the context chip is on)
- Working Ideas: entries marked Working (if toggled on)
- Story So Far: the AI-generated summary (if toggled on)
- Co-Author Instructions: your customisable behaviour rules
Epic mode: same shape, but Canon/Working sections are replaced by RELEVANT LORE and RELEVANT EVENTS containing only the items the retrieval pipeline picked for the current turn (era-filtered, cosine-ranked, packed into the token budget). The active era is named at the top. Pinned lore and Writing Style entries are always included. An extra epic-only instruction tells the AI to append a hidden 📌 EVENT: metadata block to every response, which powers the + Add to Event chat button.
What is never sent (both modes): Private notes on lore entries, individual story beats (only the compiled summary), and internal system messages from the chat history.