Skip to content

v0.143.0 — Bert M1: Ask Bert

The Bert program's first milestone (M1): Bert, an assistant in the chat that answers how-to questions from the help wiki and reads your campaign as you, through the same routes and permissions, so it sees only what you see. It runs on your own provider key. The program's documents are in docs/programs/bert/; this milestone's tasks, decisions and test script are in docs/programs/bert/m1-ask-bert.md.

Bert in the chat

  • [x] Bert is under Direct messages for every user with a campaign, first in the list, with its own avatar. The conversation is yours alone; nobody else can read it.
  • [x] One message from Bert that fills in as it works, with a state line (Thinking…, Reading the map…, Writing…), and a small i behind each reply with the provider, model, what it read and how long it took. If a turn fails or runs out of time, the reply says so in words.
  • [x] Ask Bert from anywhere: an AI icon at the right end of the footer, on every page and on a phone, opens the chat on Bert with the cursor in the box. It appears once you have a campaign.

What Bert answers

  • [x] How do I…? Answers from the help wiki, linking the page; a link opens Help at that page.
  • [x] Questions about your game: where you are, your campaigns and maps, the tokens on a map (properties and conditions), characters, the system's conditions, recent chat, and your Library. Bert reads through the platform's own routes, as you: a player asking about a hidden token is told there is no such token.
  • [x] Show me: a reply can carry buttons that select tokens on the map (panning to them), open a map, or open a character. Nothing runs until you tap it, and nothing runs from history.
  • [x] Without a key, Bert says it needs one and where to add it, without calling any provider.

Settings, help and policy

  • [x] Settings → AI → Assistant: the provider and model Bert uses, and What Bert sends: your question, the conversation so far, where you are, and what its tools read, to the provider you pick. Keys stay in your browser.
  • [x] Help → Asking Bert: what it can and can't read, how to add a key, and how to report a wrong answer. AI features gets a section.
  • [x] AI Policy 1.4 says what Bert sends, that it acts as you through the same permissions, and that it is instructed (not guaranteed) to treat what it reads as information.

Under the hood

  • [x] Tool calling and streaming in the LLM layer for every provider (the OpenAI dialect for OpenAI, Gemini and Grok; the Anthropic dialect for Claude), with recorded fixtures per provider and Gemini 3's thought signatures carried through.
  • [x] A tool registry over the platform's read routes, dispatched in-process as the user, with a contract test against the mounted routes and the hidden-row scrub.
  • [x] The help corpus built once at start from docs/help.
  • [x] Fifteen evals replayed in CI (pnpm verify), and pnpm bert:eval --live for a real key. The eval's cleanup deletes only its own rows, and no test may open the repository's data/app.db.
  • [x] No migrations, no Module API change.