Skip to content

emrecerrah/lexis-ai

v0.1.0MIT

Live-table GM assistant for tabletop RPGs: records reported events as canon, lists their ripples as hypotheses, and updates world files only after end-of-session approval. MVP system: Fate Accelerated.

Lexis-AI

A GM assistant for the live table. You run the game; the agent never rolls dice and never decides outcomes. It records the events you report, shows how they ripple through the world, and updates your world files only with your approval at the end of the session.

  • System: Fate Accelerated (MVP)
  • Format: plain Markdown + [[wiki-links]]. Opens in Obsidian, but doesn't need it.
  • Your world lives in your own folder. The plugin contains no world data.
  • Language: the AI answers in the language you pick at install (each world can override it in world.md).

Commands

CommandWhat it doesWhat it writes
/world-initSets up a world in tiers: required core, deferrable parts, parts the agent can draft, FAE settingsall world files (only at setup)
/eventYou report what happened at the table. It becomes canon at once; you get 3-5 ripples and a "who might know" listthe session log only
/ripplesDeepens a recorded event through lenses and shows how word of it spreads 2-3 stepsthe session log only (hypotheses)
/create-aspectWrites one aspect for the scene, with invoke and compel examplesthe log (proposal)
/create-obstacleCreates an obstacle, puzzle or hazard: fiction first, then FAE difficulty and approachesthe log (proposal)
/create-loreCreates a persistent NPC, location, group or hookproposals/ (proposal)
/help-skillsAnswers "which approach is this?" in FAE termsnothing
/close-sessionGathers everything from the session into one numbered list for your approval and writes only what you approvecanon files

How you call them depends on the tool: Claude Code /lexis-ai:event, Codex $event (or @lexis-ai), Copilot /event. In Gemini CLI, just describe what you want. A plain-language request works everywhere.

Flow

/world-init  →  (at the table) /event … /ripples … /create-* … /help-skills  →  /close-session
  • Table mode (default): short bullets, no approval questions mid-session.
  • Prep mode: add prep or detailed to a command for deeper analysis.

Knowledge model

KindWhereHow it changes
Canonfile bodyonly with /close-session approval
Hypothesis## Uncertain, or ## Ripples in the logat session end: promoted to canon, kept as uncertain, or rejected
Inferenceonly in answersnever stored
Proposalproposals/, or ## Generated in the logapproved or rejected at session end

The "who might know" list comes from the ## Links section of each file (- [[slug]] — relation). The agent does not see links buried in prose, so write links in that section.

Rules

  • The Immutable Rules in world.md (IR1, IR2 …) are never broken by anything the agent produces. If an event you report breaks one, the agent does not block it. It flags it ⚠ rule conflict and offers three options: (a) apparent violation, (b) costly exception, (c) rule change.
  • A hook's 🔒 Hidden Truth is fixed. If players try to break it, the agent suggests in-world reasons why they can't.
  • Don't read lines marked 🔒 to the players.

Install

Run the lexis-setup tool from the Lexis-AI repository. It asks which AI tool you use (Claude Code, Codex, Gemini CLI, GitHub Copilot), where to install, and which language the AI should answer in, then installs the plugin in that tool's format. See the README at the repo root.

If you use Codex, open your world folder in workspace-write mode (with file-write permission); otherwise Codex asks for permission on every write mid-session.

Package layout

plugin.json                 # the only manifest (agent-plugins.org schema)
AGENTS.md                   # core rules every skill reads first
skills/<command>/SKILL.md   # 8 MVP skills (platform-neutral)
references/                 # knowledge model, folder layout, lenses (hidden references, not skills)
templates/                  # world core templates
systems/fate-accelerated/   # FAE system pack

The repo has a single plugin.json. lexis-setup generates each tool's own manifest (.claude-plugin/plugin.json, .codex-plugin/plugin.json, gemini-extension.json) from it at install time.