github Pasta-Devs/Marinara-Engine v2.5.0

4 hours ago

Important

Android APK notice: The APK is a Termux bootstrap + WebView shell, not a native Android server build. It opens an already-running local Marinara server, and on first launch it can download Termux from F-Droid, hand it to Android's installer, and start Marinara through Termux after Android permission prompts. Follow the Android wrapper guide if Android blocks the bootstrap handoff.

  • Release notes too long for a GitHub release are trimmed at a whole entry and end with a link to the full changelog, so publishing a large release such as this one no longer fails (#7146).

  • Added Professor Mari's v2.5.0 What's New with screenshots and recordings of the customizable chat windows and widget styles, Gacha Forge, Quartermaster, Relationship Tracker, Decision models and Advanced Memory. The Memory Recall help now says Advanced Recall progress appears in Agent activity (#7146).

  • On phones and tablets, Home's browser bar now matches the color of the top bar above it instead of showing as a lighter strip. With reduced motion turned on, theme and accent changes no longer play slow transitions, and dialogs close at once. On phone-width screens in some WebKit browsers, Conversation message buttons such as Regenerate and Bookmark, pin or note no longer ignore a press, and Tab reaches them (#7146).

  • On phones with Chromium-based browsers, tapping a chat button right after flicking it into place now opens it on the first tap instead of being ignored (#7146).

  • Pressing Escape to cancel dragging a chat, character or persona, or to close a picker such as the Text to Speech voice search, no longer closes the whole side panel. Dropping a chat window button onto another one now places it neatly beside it instead of hiding one under the other. On phones, Help explains the Chat tools button and lists the tools inside it, labels the map and party buttons again, and keeps its instructions from covering the buttons along the top (#7146).

  • Coming back to a chat before its Expression agent finished no longer shows the previous turn's sprites when Only show active sprites is on. Switching chats during a Game translation no longer leaves that message marked as translating. On computers, the Trackers button starts in the top-right corner when the Tracker Panel is on the left, so it no longer covers the panel's header and settings button (#7146).

  • Game Mode combat works on phones and tablets that open Marinara over plain HTTP, such as a LAN address or Tailscale. Every action in a fight used to fail there before reaching the server, so battles in new games could not continue (#7146).

  • On Android (Termux), updating to this version no longer runs out of memory while building the app. Every build path, including the first start after an automatic update from v2.4.6, the in-app updater and switching update channels, now gives the build the memory it needs (up to 1.5 GB, at most half the phone's memory) without raising the running server's limit, and a memory limit you set yourself still wins. Two Game Mode labels that showed raw text keys now show real text, and Decision model warnings use your theme's colors instead of a fixed yellow that was hard to read in light mode (#7146).

  • The README and the Built-in agents guide now list Quartermaster and Relationship Tracker as regular Tracker Agents, since both are now in the stable Download Agents catalog, and link to their package guides on main (#7146).

  • Multiplayer (work in progress) is sturdier. When the host stops or turns off a room, guests who are connected at that moment see that it ended instead of reconnecting for hours. A guest who leaves or restarts can rejoin under the same name and, in Game, keeps their character. Leave in an old chat no longer ends the session in another room. Adding or removing characters from Chat Settings in a hosted room no longer breaks replies. A stale session or a room port that fails to open no longer blocks hosting or joining again. The Players list says Offline instead of "Reconnecting", and turning the in-app switch off points to Settings → Advanced → Multiplayer. Room addresses work over IPv6. Someone outside the room can no longer lock guests out with floods of requests or idle connections, names can't hide invisible characters to look like another player, and guests see which player is the host (#7146).

  • Professor Mari's mari code check now runs inside her shell sandbox, without network access or the server's secrets, because it runs project scripts she can edit. Where no sandbox is available, she asks you to run pnpm check yourself. She can no longer read, copy, change or delete the key file that protects your saved API keys, and her shell commands can't write into your saved data folder. /api/health still answers uptime checks and launchers without a password, but only shows local model names and GPU details to this machine, a trusted network or a signed-in browser (#7146).

  • Exports and backups are more reliable. Exporting many chats at once streams the ZIP one chat at a time instead of building it all in memory. Bulk lorebook and preset exports and the compatible profile ZIP keep every item when two share a name, numbering the copies. A large-gallery character or persona export can be imported again even when it is bigger than the normal upload limit for JSON. Restoring a trashed message brings back the lorebook changes an agent made with it. Feature switches restored from a profile backup take effect right away. The server-folder backup no longer fails on Docker or Termux, and an export over the image budget says so instead of "request body is too large" (#7146).

  • Jumping from a search result into a Game chat no longer shows the "not available in Game mode" notice twice in development builds. The full browser regression suite now drives the redesigned Chat Settings window and the plain-language copy, so it passes again on desktop, Android-sized and iPhone-sized browsers (#7146).

  • Updated the upload parser, proxy address handling and two logging and styling helpers to their patched releases, clearing four newly published dependency advisories. The dormant Bunny Review workflow no longer lets files in a pull request replace the Python modules it runs with, and only trusts its own review markers (#7146).

  • Prepared v2.5.0 across the Engine, Home version, PWA manifest, README, Windows installer, and Android bootstrap metadata. Android uses version code 48 so the APK can update existing installations, and the Credits list is refreshed (#7146).

  • The lorebook sidebar's All view now shows one list in your selected sort order, without dividing it into category sections (#7154).

  • Advanced Memory now offers Pause processing and Resume processing, including during initial setup. Paused work keeps its progress visible, stays paused when new replies arrive, and resumes from saved checkpoints.

  • Play As Character now shows each character's title/comment in persona pickers and the selected identity in Chat Settings, making cards with the same name easier to tell apart. Cards without a title keep the Character label (#7151).

  • Enabling Advanced Memory turns off basic Memory Recall, and enabling basic recall turns off Advanced Memory and stops its running work. Delayed settings saves preserve your choice. Advanced Memory can be switched off during processing or a status error, including when a saved message or narrator is gone, without deleting the chat or its prepared memories (#7150).

  • Saving a connection change that affects Long-Term Memory now waits for the package's index refresh when supported, and reports refresh completion, failure or unavailability separately from the successful save. Unrelated connection and agent edits do not trigger LTM refreshes; older or inactive packages still allow configuration saves (#7042).

  • Windows opened from message actions — including Hide from AI, Model Thoughts, Peek Prompt, notes, reactions and confirmations — now follow Apply preset font, Apply preset shape and Apply preset colors on phones and computers (#7144).

  • On phones, the Chat tools three-dots button, lock and expanded tools now follow your selected chat widget shape, including Dottore's cut corners and custom shapes. Expanded tools stay aligned with the launcher at screen edges and use the same spacing as other snapped buttons. Echo Chamber places Dottore's and Mari's ornaments beside its title like other mobile windows, while keeping its movable, resizable window (#7144).

  • In Game Mode, HUD widgets, the map panel on computers, characters' side remarks and character sheets now follow Apply preset font, Apply preset shape and Apply preset colors, like the dialogue box beside them. Widget numbers keep the game's own accent colors. With the switches off, nothing changes (#7136).

  • Claude agents now keep signed thinking across tool calls, and Opus 4/4.1 batches stay within the model output limit when reasoning is enabled. Agent thinking headroom respects small context windows, including fallback connections, and connection Send switches remain effective on shared-connection agents and retries (#7131).

  • Agents now use the generation settings saved on their connection under Use custom defaults for this connection: Top P, Top K, Frequency, Presence, Reasoning Effort, Verbosity, OpenRouter Service Tier, Custom Parameters and headers, and extra parameters such as Top A. A parameter with a Send switch is sent only while the switch is on. This covers agents on the chat's own connection, retries, knowledge agents, the Illustrator's prompt writer and installed agent packages. A Reasoning Effort you pick (custom defaults start at Maximum) now replaces the "off" that JSON agents asked for, and agents that think get extra output room so their answers aren't cut short; with no level saved, agents behave as before. Claude requests with thinking on no longer send Top K, which Claude rejects (#7131).

  • Professor Mari clears an earlier request error when you try again, so a corrected connection or successful reply no longer leaves the old error visible until the server restarts (#7126).

  • NanoGPT connections now show each model's subscription cost in the Connections menu by the chat input, not just in the connection editor: 1x when the model is covered at the normal rate, a higher multiplier such as 2x when each token sent draws more from your weekly allowance, and Paid when the model bills to your balance instead. These pills follow the connection's Show subscription usage switch, which is off by default, so they appear only on connections you have set to track usage (#7109).

  • The Trackers button opens Tracker Panel when it is enabled for the chat, and the standard tracker window otherwise. On phones, selecting Tracker Panel also hides the old HUD tracker widgets, regardless of Dock Tracker Panel to edge. Detached character trackers use readable character cards that rearrange as their window is resized, with a single heading (#7128).

  • Each background in the background library now has a Download button that saves the image with its file name, built-in backgrounds included. On iPhone and iPad it opens the share sheet, or offers Save file if the sheet can't open straight away (#7129).

  • Exporting a character or persona with a large gallery no longer crashes the server, and an export that fails now shows an error instead of doing nothing. On iPhone and iPad, exports open the share sheet so you can save the file; if it can't open straight away, tap Save file on the message that appears. Character and persona ZIP exports keep every file when two share a name (#7115).

  • On phones, Echo Chamber can be moved and resized, and Chat tools expands into round buttons instead of drawer rows. Dottore and Mari chat widget presets use refreshed palettes inspired by their character references, and cut-corner windows keep their backgrounds inside the frame (#7121).

  • Downloaded packages can now start roleplay scenes from their own threads, such as a direct message in a social app, the same way /scene starts one from a Conversation. Back returns to the thread instead of a Conversation. When the package asks for it, the thread stays locked while the scene runs and the scene's recap goes back to the package when you end it. For package developers: capability API 1.66 adds api.registerSceneOrigin and the scenes permission (#7118).

  • Roleplay chats on wide screens can now sit on the left or right instead of the center: choose Chat position in Settings > Appearance > Roleplay > Roleplay Presentation. Messages and the input box move together and stay clear of open sidebars and a Tracker Panel on the same side. Center remains the default, and phones and Game mode are unchanged (#7106).

  • You can now change a connection's model straight from the Connections menu by the chat input: search or type a model ID, star favourites to pin them on top, and refresh the list when needed. On phones, tap a connection to see its models. Chat Settings → Connection has the same Model field. The model is saved to the connection, so agents and other chats that use it switch too. Fetched model lists are kept, so the menu doesn't ask the provider every time (#7098).

  • Chat input popups now follow Apply preset font, Apply preset shape, and Apply preset colors, including emoji and media pickers, autocomplete menus, character responses, Push Story options, quick replies, and Game dice and address controls. Each switch works independently, and leaving them off keeps the existing look (#7103).

  • The Character Schedule Manager, and the schedule editor it opens, now show each character's portrait the way you cropped it in the character editor instead of the uncropped image. In the manager's list the portrait stays in its small round slot (#7100).

  • Character cards and personas have a new Image Appearance Override switch under Appearance. Turn it on to write a separate, image-prompt-ready description of that character, and Attach Card Appearance sends that instead of the full Appearance text, so clothing and other scene-specific detail from the card no longer leaks into illustrations. While the switch is off, or its box is empty, image prompts keep using Appearance as before, and the narrator always uses the full Appearance text. This covers chat illustrations, conversation selfies, and Game mode, and applies to custom image agents as well as the built-in Illustrator, including retries, characters used as the user identity, and characters left out of native image captions (#7053).

  • Button size (px) in Chat widget style lets you resize movable chat buttons and their icons independently of Display Size. Leave it at Default to keep the existing desktop and phone sizes. The setting also covers trackers, Chat tools, Map and Character Profiles, and enlarged buttons stay within the chat area (#7092).

  • Chat widget styles can also supply the font, shape and colors for chat messages, input boxes and controls through three separate switches. Conversation messages keep their own shape. On phones, sections moved out of Chat Settings are grouped in a movable three-dot menu with a lock and a saved button order; tracker buttons stay separate. The phone Map button and Character Profiles on both computers and phones are separate movable controls, with the selected widget style and saved positions and locks. Game character sheet drafts stay open with their unsaved changes when the window layout saves (#7081).

  • With Show characters in Persona pickers on, opening a folder under Play as a character no longer lets a character's portrait cover the whole persona picker, in new chat setup or in Chat Settings. Portraits stay in their small round slots, and on phones long names in the Chat Settings persona list are shortened instead of pushing the list sideways (#7093).

  • OpenAI (ChatGPT) connections that use your Codex login can now set how long the model thinks. Turn on Use custom defaults for this connection and pick a Reasoning Effort, or pick one in a chat's Advanced Parameters; the levels match the ones Codex offers for the model. Default keeps Codex's own level, and Codex chats keep using it until you pick a level, so the level in your preset does not change them. If a Codex connection or chat already had custom parameters, its saved Reasoning Effort now applies, so check it. When a Codex connection on Default falls back to a connection with no Reasoning Effort of its own, the fallback no longer uses your preset's level either. The model list now includes the GPT-6 and GPT-5.6 models Codex offers (#7083).

  • A TypeSafe Decision connection can now send its requests to another server that runs TypeSafe's API: replace its Base URL with that server's address, and Test uses it too. The connection still needs your TypeSafe API key, which is sent to that server, and the address follows the same rules as the Base URL on any other connection. As with a Custom System One endpoint, a server elsewhere on your local network needs PROVIDER_LOCAL_URLS_ENABLED, which is on by default on Android (#7084, #7134).

  • Restoring a settings profile with Long-Term Memory while the Long-Term Memory package is active now waits for memory reads or rebuilds in progress, then reloads the restored memory instead of continuing to serve the pre-restore copy. If the installed package is too old to coordinate this, Marinara refuses the restore with a message to update or disable it rather than publishing memory the package cannot see (#7043).

  • Long-Term Memory recall now reads only the actual conversation history. Preset prompts, agent injections and other non-history text no longer fill the package's recent-message window. Normal generation prompts and other agents' inputs remain unchanged (#7044).

  • In the Card Browser, the Pygmalion Auth Token box now hides what you paste and turns away values with spaces or line breaks. Marinara checks the token with Pygmalion before keeping it, and a failed login says whether Pygmalion couldn't be reached, rejected the token or was busy. If Pygmalion stops accepting the token while you browse, you're asked to log in again instead of seeing a search error. Pygmalion requests and avatars now go only to Pygmalion's servers, and error messages and logs no longer include your token (#7074).

  • On phones, the small World State and Player & Tracker controls now use your chat widget style and open from movable buttons. Echo Chamber follows the same styling, with a movable, resizable window on computers and its compact view on phones. Detached tracker lists keep their bottom border in Default, Dottore and Mari styles, including custom gradients. Opening a sidebar keeps movable chat buttons inside the remaining chat area without stacking them on top of one another; closing it restores their saved positions. The large Tracker Panel keeps its existing layout. Fixed the staging regression check that still expected the removed minus button (#7075).

  • CharacterTavern can't be browsed in the Card Browser for now because its rebuilt website no longer offers the connection Marinara used. Selecting it shows a short notice explaining this instead of a failed search, with buttons to open character-tavern.com and import a card file. Cards downloaded from CharacterTavern can still be imported as files, and the CharacterTavern login has been removed. Switching sites while a search is still loading no longer shows the previous site's cards or card count (#7072).

  • Conversation groups in Individual mode no longer go silent for the rest of the day after a burst of autonomous messages. The group shares one daily check-in limit, but as soon as you went quiet, every character could check in one after another and use up the day's limit within minutes, often right after midnight or after starting Marinara. Now, once a character checks in, the next check-in waits longer, as in a one-on-one chat, and the characters who have waited long enough take turns instead of the chattiest one sending them all. After a long absence, a conversation sends one check-in instead of a burst, including while Marinara is closed in your browser. Character Exchanges now also work when schedules are off. In Individual mode, exchanges and @mention replies between characters never use the day's last check-in, so a later check-in still can. While Marinara is closed in your browser, autonomous messages take turns across all your conversations instead of only the two most recently active ones, and a conversation is no longer marked unread when nothing was sent (#7055).

  • Chat tools now live in Chat Settings, which opens from a movable sliders button inside the chat. The Chat Settings button starts at the top right; saved positions stay where you put them. Each chat remembers where you put its buttons and windows (#7034, #7036).

    • Window title bars use a single Close (X) control. Removed the redundant minus button, which performed the same action. Newly popped-out sections start unpinned, so clicking elsewhere returns them to their buttons; you can pin them to keep them open.
    • Chat Branches, Chat Summary, Active Context, Author's Notes, Agent activity, Gallery and Search messages have their own sections. Search starts collapsed unless you previously expanded it, with a help tip explaining how to find chat history, bookmarks and removed messages. Bookmarks and Trash are beside Search.
    • On a computer, move and resize Chat Settings or pop a section out into its own window. Pin a window to keep it open, or lock it to prevent accidental moves of both the window and its button. Pinned windows reopen after a page refresh unless you closed or minimized them. Closing a popped-out section shrinks it to a button; Put back returns it to its original window.
    • On phones, Chat Settings and the other chat windows open as full-width panels. Popped-out sections and chat controls have movable buttons, and panels fit above the keyboard while you type. In Help, tap Chat Settings for an explanation of its controls and icons.
    • Game controls, connected chats and package controls open from movable buttons too, and can be put in Chat Settings. In Roleplay, the die in the Chat Settings title bar controls the Tracker Panel. When the panel is not shown, trackers appear in a Trackers window on computers and as compact widgets on phones. When there is not enough room beside the messages, Trackers starts as a button; saved layouts keep your chosen arrangement.
    • Existing chats keep their old tools as movable buttons, with trackers grouped in Trackers. When you upgrade, that familiar setup is also starred for new chats in each mode. This happens once and preserves any favorite you have already saved or cleared. Windows first open below their buttons; a window you have already placed keeps its saved position.
    • Help is beside the Chat Settings title. Reset View restores the starting positions of buttons, windows and sections after confirmation, and settings profiles can save your layout for reuse. The star beside Reset View saves your arrangement and hidden tips for new chats of the same mode; a profile with its own saved layout takes priority.
    • Desktop Chat Settings includes tips for arranging windows and sections. Their X hides them for this chat; new chats show them unless a favorite layout or settings profile saved them as hidden. Dismissing the separate reminder beside the Chat Settings button keeps it hidden across chats and page refreshes.
    • Advanced Parameters keeps showing the connection's current values when popped out. Rearranging windows no longer moves a chat to the top of the chat list. Windows and buttons stay within reach when sidebars, the keyboard or display size change, and closing windows keeps keyboard focus in the chat.
    • A short video introduces the customizable chat layout the first time you enter a chat after updating, on computers and phones. Got it keeps it dismissed across chats and page refreshes.
    • Custom themes can style windows, drawers and buttons with the shared classes and variables listed in the theming guide.
    • In Settings > Appearance > App, choose Dottore or Mari under Chat widget style for themed chat buttons, windows and sections in light or dark mode. Dottore has cyan instrument frames and his gold ornament, with inner corners that follow the cut-corner frame. Mari has rose-and-gold storybook frames, with Primogems on windows only, buttons that match the window background, and straight section edges that join into one panel. Preview icons use each preset's own colors, including with animated app accents. Decorations sit at the top, sections touch without gaps, and scrolling content stays inside the frame. Font and Shape can be changed separately. Default keeps the current look. Professor Mari knows the styling hooks for making custom widget themes too.
    • Border & Buttons Color, Background Color and Text Color let you choose solid colors or gradients for chat widgets. Reset a color to follow the preset in light or dark mode. Choosing a preset resets Font, Shape and all three colors.
    • Agent activity matches the Tracker Panel's text sizes, spacing and backgrounds. The panel's border follows the pulsing accent color on computers and phones.
  • The Characters sidebar has its full-width New Folder button again. Removed Possible duplicates.

  • The Chats sidebar status prompt now reads What's up? to fit its field, and Advanced Settings labels the multiplayer section Multiplayer WIP (#7051).

  • In Roleplay Advanced Memory, you can now edit and save a scene summary's Story timeframe, or clear it when the story date is unknown (#7047).

  • In Roleplay groups using Merged (Narrator), characters referenced by ID macros, including through lorebooks, now join the reply's cycling avatars without being added to the group. Each swipe keeps the references used for that reply (#7045).

  • Home widgets: the Daily Encounter message for an empty library and its Open character library link now fit inside the widget on desktop and phones (only the very largest text sizes can still cut off the link), Professor Mari's head is no longer cut off in Your guide (she can now reach over the widget's top edge instead), and hovering a widget no longer makes its glow and edges pop in after the card lifts (#7032).

  • In Chat Summary, each message range now gets its own row across the window, and its number fields show message numbers up to five digits (four on the narrowest phones). A range that needs fixing keeps the same quiet border as the rest of the window, with a warning note under it instead of a flashing accent outline, and a range that can't be summarized no longer counts toward the messages selected. Range mode no longer opens on a range left over from a longer chat, which showed "This range is outside the chat history." right away; it starts on this chat's latest messages instead. Picking Range, or clicking into a range field, before a long chat finishes loading no longer leaves the range on that chat's first messages (#7029).

  • Expanded text editors, including message command results and preset variable values, now use the same background as the sidebars in dark and light mode (#7037).

  • Chats, Characters, Personas, Lorebooks, Presets, Connections, Agents, Settings and the Tracker Panel now each have a ? at the top. Hover over it, or tap it on mobile, to read what that sidebar is for and what you can do there (#7002).

  • Professor Mari can now turn Send without wrapper on or off for an existing prompt block, instead of failing or reporting success while leaving it unchanged. Asked to do this for a marker, which always keeps its wrapper, she reports that it cannot be done (#7014).

  • On phones, Chat Summary keeps the summary or prompt you are typing in visible above the keyboard, including sideways. A tap while the keyboard is open no longer lands on a different setting (#6993).

  • Auto-Translate Responses works in Game mode again. Translations of Game turns with character dialogue or game tags no longer stay hidden, including ones already made, and the translator no longer sees Marinara's internal dialogue tags. A runaway Game reply with long stretches of blank space no longer stalls the Game screen or the server (#7010).

  • On phones, editing a Roleplay message now starts below the buttons at the top of the chat, and while you edit, the strip around those buttons no longer blocks taps on the text beneath it, so words along the top edge can be selected again. In Conversation mode, opening the keyboard while editing a message now keeps its first line below the bar at the top of the chat, and text that scrolls under that bar can be pressed and selected too, except right under its buttons. On iPad, opening the keyboard while editing a long Roleplay message now brings its first line back below the buttons at the top instead of under them. On iPhone, a long message being edited now fits above the keyboard together with its Save button, so scrolling inside it reaches the last lines (#6992).

  • Mobile screen edges and the keyboard surround match the topbar, including when switching between dark and light mode (#7017).

  • Sidebar headers, item action trays, and settings use a consistent background. Mobile screen edges follow the app surface, and Refresh App uses the shared settings button style (#7011).

  • Preset prompt blocks now have a Send without wrapper switch. Turn it on to send one block exactly as written, without its XML tag or Markdown heading, while the rest of the preset keeps its wrap format. A group the block belongs to can still wrap it. Markers always keep their wrapper (#7006).

  • UI/UX improvements: welcome-dialog frames and settings actions follow the selected accent, Game actions keep their Marinara pink, and dark sidebars match the Home menu. Tracker edit controls align with their fields on desktop; on mobile, tap a field to edit it, with a small hint beside settings instead of pencil icons (#7000).

  • A damaged server file no longer keeps Marinara from starting until you reinstall. If a built server file changes after the build, the launcher names it and rebuilds the server before starting. Updating through the Windows installer or the in-app updater repairs it too. The Windows installer can also update an existing install again, instead of stopping with "Repository update did not land on the expected commit" (#6984).

  • The Character Editor has a new Voice section where you pick the voice Text to Speech uses for that character and hear it with Preview. It changes the same setting as Connections → Text to Speech, so the two always match, and the Phonetic name field now lives there too. Two cards with the same name, such as an AU version, can now each keep their own voice instead of one card's voice being used for both. Until a copy gets its own voice, its Voice section names the voice it still uses from the other card. Picking a voice there changes only that character's voice, and its Use a voice per character button changes only that choice. Every other Text to Speech setting stays as it is, even one just changed in another tab or on another device (#6997, #7008).

  • Professor Mari can no longer create, edit, move or delete Marinara's built app files (the dist folders the app runs from), so she can no longer leave a broken file there by mistake. She can still read them, and changes the source instead. A very long shell command from her also no longer freezes Marinara for minutes (#7003).

  • Retrying or re-running agents now runs rewrite agents one after another, each on the text the one before left, as after a new reply. Before, retrying two of them together, such as Prose Guardian and a custom Text Rewrite agent, kept only the last one's edits. Agent retries now also keep to the connection's Max Parallel Agent Jobs limit (#6977).

  • The agent editor has a new Share requests with other agents switch under Connection Override. Turn it off to send that agent in its own request instead of together with other agents, which helps local models that mix up their tasks. This also works for Prose Guardian, Continuity Checker and Immersive HTML, which otherwise rewrite the reply together. It is on by default, and agents that always run on their own show it as off (#6977).

  • Updated the multipart upload parser to fix two denial-of-service vulnerabilities triggered by malformed upload headers or oversized boundaries (#6995).

  • decision_choice: statements now get answers from System One servers that need a description for every option, such as Strands decider. Before, those servers refused the whole request, so every Choice comparison read as no. Open-Jev's answers stayed the same in testing. The Decision Models guide now explains how to run Strands decider yourself as a Decision connection (#6981).

  • Reinstalling the local model's runtime, or installing a new llama.cpp runtime, no longer deletes an installed decision model such as Open-Jev 2B along with the old runtime (#6982).

  • Advanced Memory, the OpenRouter connection editor and the Decision diagnostics now say Decision model instead of "Jev", which is only one of the models a Decision connection can use (#6983).

  • In group chats, replying to a character's message now makes that character answer, the same as mentioning them with @. Before, the reply did not count when choosing who speaks next, and since a character rarely speaks twice in a row, replying to the message they just sent almost always got an answer from someone else (#6978).

  • Professor Mari, and other background calls on slow local models, no longer give up when the first token takes more than two minutes. They now wait as long as the Text generation request timeout allows (Settings, or CHAT_GENERATION_TIMEOUT_MS; 5 minutes by default) (#6970).

  • With streaming on, a reply no longer starts with the raw <tool_call>…</tool_call> text when the model writes its tool calls as text, as some KoboldCPP or Gemma setups do. Once Marinara recognises and runs the call, that text disappears from the message on screen and is not saved, the same as with streaming off (#6951).

  • {{<character ID>}} macros now become the character's name in Conversation and Game chats, and in Roleplay chats without a preset, instead of staying as raw text. In these chats the macro gives only the name; the referenced card is not added to the prompt (#6956).

  • Switching a Roleplay group between Merged (Narrator) and Individual now changes the whole prompt at once. Continuing a reply in Merged mode no longer makes the model speak as that reply's character, a message sent right after switching waits for the new mode to be saved, and Chat Settings always shows the mode replies actually use (#6959).

  • Image Captioning in Chat Settings now shows its prompt in a box under the toggle, so you can change how images are described (for example, ask for more detail) or reset it to the default. If captioning fails, the reply now stops with an error instead of quietly sending the image to the chat model (#6960).

  • GLM models on NanoGPT, such as GLM 4.7 and 5.1, now stop reasoning when Reasoning Effort is Off, whether the chat sets Off itself or takes it from the connection's Default Chat Parameters. Before, they kept reasoning anyway and could spend the whole reply budget on it, ending with a message to raise Max Tokens (#6961).

  • In the Android app, picking a picture now offers the camera too, on Android 10 and newer, as Chrome does. Photos you take are saved to Pictures/Marinara (#6953).

  • On iPad, tapping a chat in the chat list now opens it instead of leaving the list on top, and buttons that start a chat or open a page from a full-screen panel close that panel too. The keyboard no longer covers a message you are editing, and Copy Support Diagnostics now copies (#6944).

  • Removing a chat variable in Chat Settings now asks first, so one stray tap on a phone no longer deletes it. Cancel, or tap outside the question, and the variable stays (#6942).

  • Chat variables that {{setvar}}, {{decvar}} and the other variable macros change now go back with the reply that changed them, as tracker values do. A new swipe starts from the values before that reply, showing another swipe brings back its values, and deleting the reply undoes its changes, so a lorebook countdown no longer drops again on every swipe. Values you typed in Chat Settings since stay as they are (#6923).

  • Agents and Download Agents now show Noodle, Slurp, Gacha Forge, Life Sim and other apps that open in their own Home tab in a separate Apps group at the top, instead of mixing them into Misc Agents (#6943).

  • The character and persona editors now show the whole name at the top whenever there is room for it, instead of cutting it short next to the creator and version (#6946).

  • A decision block can now stay on for as long as something lasts: {{#if decision:"A fight starts" until:"The fight ends"}} stays on after a yes and asks the until statement each turn instead, turning off when it is true. while:"..." turns off when its statement is false. With sticky, add :and to stop at whichever ends first or :or for whichever ends last, and cooldown starts once the block turns off (#6922).

  • The new {{include::Entry name}} macro puts in the text of a lorebook entry, so shared text can live in one entry and be reused in other entries, presets and cards. Inside an entry it looks in that entry's lorebook, and elsewhere in the chat's lorebooks. {{include::Lorebook name::Entry name}} reads from any lorebook, even one the chat does not use. IDs work too, and an include that loops back to itself becomes empty (#6912).

  • A character ID macro now turns into the character's name even when that character is already in the chat, instead of staying as raw {{ID}} text. Their card is still sent only once (#6924).

  • Image Generation connections have a new ChatGPT (Codex login) service that makes images with your ChatGPT plan, using the codex login session on the computer running Marinara, so no API key or API credits are needed. Selfies, illustrations, avatars, sprites, reference images and the gallery work with it like with any other image service. Based on prisoner310's prototype (#6884).

  • In Roleplay, a roll_dice added under Function Calling now reaches the model and actually rolls when called, the same as with the Rolls command. If Rolls is also on, its Who can roll dice choice still applies (#6945).

  • Many tooltips and help texts in Chat Settings, Settings, lorebooks, connections, and the agent editor now use plain words, so it is easier to tell what each setting does (#6947).

  • On phones, the top bar now looks like a small version of the desktop one: Home and Chats sit at the left and a hamburger menu sits at the right, with wider, finger-sized buttons, instead of every control stretching across the bar.

  • Updated Sharp (with libvips 8.18.7), DOMPurify, @fastify/static, dotenv and nanoid, and Android APK builds now use Gradle 9.8.0. Termux installs keep Sharp's matching WebAssembly fallback for image processing. Hono, which the MCP SDK pulls in, moves to 4.13.11 for an upstream XSS fix in its JSX renderer.

  • In Roleplay, a [whisper: character="name" text="..."] command typed while editing a character's or the narrator's message now becomes a whisper when you save, as it already did in your own messages. Whisper text can span several lines and quote dialogue as is, like text=""I love you."", and the command description now says so (#6918).

  • Select a word or short phrase in a chat message to get an Add to lorebook button, on desktop and mobile. Pick a lorebook and it opens on a new entry named after the selection, with the selection as its keyword, ready for you to write the content (#6899).

  • Game Mode rulesets can have markets (Capability API 1.65): price levels on an item's cost, place sizes such as a hamlet or a city, what each place sells, and kinds of seller who may sell only to some buyers. The Game Master says where the party is, buys with [inventory: action="buy"] at a price the Engine works out, and is shown what the place sells; services such as a bed for the night are paid for and never carried. Gravewatch's example has a market (#6917).

  • World Maps can now hold up to 5,000 locations instead of 500, enough for a whole world with its buildings, floors and rooms. Game Mode also accepts these larger maps when a game starts (Marinara-Agents#1132).

  • Two ruleset regression lanes no longer fail now and then: the classic-items lane's directed battle could end on the dice before the test's second item was used, and the loot lane counted the hand axes the party already carried as loot when the table dropped another (#6913).

  • Echo Chamber and other agents now see who said what in group chats: turns in individual group mode are labeled with the speaker's name, and merged replies keep their speaker tags. Reactions no longer credit one character's line to another (#6906).

  • On mobile, Echo Chamber stays scrolled to its newest reaction after you finish typing or editing, instead of showing an empty box until you scroll back up (#6906).

  • A message's Private note (under Bookmark, pin or note) can be shown to one Roleplay character with Show the note to the narrator character. That character receives it next to the message, and nobody else does. Notes stay private by default (#6895).

  • The Roleplay Whisper command description now shows the format for whispering to another character (#6895).

  • Charged and gated ruleset items now work in Classic and Tactical battles too: a wand or Gravewatch's dawn bell is offered while it has a use left and spends its charges (and may break on its last), a scroll or the page of the vigil litany rolls its check with the user's sheet first and is spent for nothing when it fails, and an item that has to be worn or bound is used only while it is, the worn one used up rather than a spare in the bag (#6909).

  • In a Game Mode game whose ruleset leaves fights to Classic and Tactical battles, the ruleset's items now do what the ruleset says in a fight: a poultice heals by its own dice and a firepot burns, with the conditions they put on, instead of whatever a model guessed. An item the ruleset gives no use is not offered, and a ruleset that turns Game Mode's own items off still offers its own usable items (#6905).

  • A Game Mode ruleset's money is now real: its coins are items in each character's bag, weigh what the ruleset says, and a line above the inventory shows what they are worth. The Game Master charges and pays the party with [inventory: action="pay"] and action="earn", and a payment makes change within the coin's family, or is refused when the purse is short. Loot tables can drop coins, and a ruleset's layer can take a coin out of a variant, pricing items in the coins left. Rulesets that drop coins or take them out with a layer need Capability API 1.64 (#6901).

  • A Game Mode ruleset with loot tables no longer loses its layers on the game screen, where the long night of Gravewatch was silently dropped from the sheet and picker while the Game Master still played by it (#6901).

  • A won fight in Game Mode now drops loot straight into the party's bags, as the combat guide always said it did: Game Mode's own treasure without a ruleset, and a ruleset's own items where it declares loot tables and says what its creatures carry. The Game Master is told what dropped, and can roll a ruleset's table in the story with [loot:]. Rulesets that use loot tables need Capability API 1.63 (#6894, #6758).

  • A Game Mode ruleset's items can now ask a check before they work, as a 5e scroll of a spell above the reader's level does: the Engine rolls it when the item is used, in a fight or from the Use button, skips it when the user's sheet is high enough, and a failed check uses the item up for nothing. Rulesets that use this need Capability API 1.62 (#6892).

  • A Game Mode ruleset's items can now get their charges back on a rest: a wand or a bell refills when its holder takes the rest the ruleset names, from the sheet's Rest button or the Game Master's rest, and an item can break when its last charge is spent, as a 5e wand crumbles on a 1. The Game Master sees how many charges each item has left. Rulesets that use these need Capability API 1.61 (#6888).

  • A Game Mode ruleset's items can now be used outside a fight: the inventory's Use button on a poultice or a potion heals whoever carries it with the Engine's dice, takes it out of the bag and tells the Game Master what happened, and the Game Master can use items the same way. An item can also give back a pool, such as a tonic that restores Resolve, in a fight or out of one. Rulesets that restore a pool need Capability API 1.60 (#6881).

  • Updated brace-expansion, fast-uri, and ip-address dependencies with upstream denial-of-service and address-validation security fixes.

  • Termux rebuilds now include the multiplayer guest assets required by startup checks, and dependency updates retain Sharp's matching WebAssembly fallback for Android image processing (#6883, #6859).

  • Merged Roleplay groups update expressions for the active, selected cast during replies and manual retries, instead of only the first character (#6872).

  • Roleplay's Gallery and /illustrate can generate one illustration with the installed Illustrator without enabling automatic agents or changing chat settings (#6874).

  • Agent contributor guidance now explicitly prioritizes simple solutions, avoiding over-engineering, and reusing existing code.

  • A Game Mode ruleset's items can now be used in a fight: a healing poultice or a potion is on the fight menu under Items, pressed on its holder or a friend, and used up; a bell or wand can hold charges that each use spends, and what is left stays on the item for the next fight. What a fight uses is saved to the inventory as it happens, the item's details say what using it does, and a party member the Engine plays uses a heal on whoever is hurt. Rulesets that use the new keys need Capability API 1.59 (#6880).

  • A Game Mode ruleset's weapons can now be used more than one way: a bow can loose a two-arrow volley at two targets, a gun can fire a burst, and the fight menu asks which way with what each is expected to do. A character with a light weapon in each hand gets a second strike with the other on the ruleset's off-hand budget, a weapon can promise a least harm on every hit, and one driven in hard enough can leave a condition on its target. Rulesets that use the new keys need Capability API 1.58 (#6875).

  • Roleplay group chats let you edit revealed whispers and keep the corrected text for later turns. Users can also write private whisper and notes commands in ordinary Roleplay messages. The narrator no longer receives notes from disabled or removed characters. In Individual mode with Smart or Manual response order, the response menu now starts with an accent-colored Smart option that asks the existing model or enabled Decision model to pick the next speaker without changing your saved response order.

  • A Game Mode ruleset's weapons can now use up what they shoot: a bow is offered in a ruleset fight only while its archer carries arrows, each shot takes one out of the bag, and half of them can be picked up after a won fight. A pistol keeps a loaded count between fights and has to be reloaded from the fight menu. What a fight shoots and loads is saved to the inventory as it happens. Rulesets that use the new keys need Capability API 1.57 (#6871).

  • Anthropic and Claude (Subscription) connections can select Claude Sonnet 5.5 (claude-sonnet-5-5), with a 1M-token context window, 128K output and reasoning effort from low to max. Turning reasoning Off skips up-front thinking on Anthropic connections. On Claude (Subscription), OpenRouter and other compatible gateways, which cannot express that setting, it runs at low effort instead. Forced tool calls use automatic tool choice, and samplers are not sent (#6869).

  • A Game Mode ruleset's items now count in a fight too: a ring of protection, boots that slow nobody, a cloak that makes attacks against its wearer harder, or a ring of fire resistance applies while worn or carried, and armor too heavy for its wearer can cost them speed. Ruleset fights now add the sheet's own roll modifiers (resolution.adjust) the way checks do, and where initiative is spent as damage, a blow below the hardness of armor or a creature's stat block still lands but does no damage. Rulesets that use the new item keys or hardness need Capability API 1.56 (#6857).

  • OpenAI connections can select GPT-6.1 Sol (gpt-6.1-sol). It has a 1.05M-token context window and 128K output, and reasoning effort from low to max. Reasoning cannot be turned off for this model: Off is sent as low, and temperature and top-p are never sent (#6867).

  • The Reasoning Effort and Verbosity controls are back for GPT-6 models on OpenAI connections. Sampling controls now only appear when the model would actually use them (#6867).

  • Hosted image and video provider detection matches the actual URL hostname, so lookalike hosted-provider domains cannot select the wrong API. Local-tool detection still recognizes SwarmUI and ComfyUI URL markers. Game sheet command hints reject malformed pool identifiers, and tactical terrain writes reject non-integer coordinates.

  • In Advanced Parameters, a long "Effective" line under a parameter stays on one line with an ellipsis (the full text shows on hover) instead of wrapping and pushing that input below its neighbour (#6863).

  • Optional private multiplayer rooms support Conversation, Roleplay and shared Game rounds without a fixed human or AI roster cap, with reviewed personas, host-approved AI characters, invitations, admission, host-controlled generation and text-only guest views. Multiplayer requires an explicit environment flag, Settings activation and Host/Join; the Android native wrapper cannot join rooms (#6790). Disabled multiplayer stays idle through unrelated workspace refreshes, and successful Host/Join actions remain usable if a status refresh fails. Opening a missing chat clears its active selection instead of leaving the loading view open.

  • A Game Mode ruleset's items can now be weapons: a sword, spear or bow the character holds is offered in a ruleset fight with its own to-hit, damage, reach and range, a spear deals more with a hand free, and one put away offers nothing. A weapon the Game Master invents fights like the ruleset's weapon it is most like. A creature can resist a kind of harm except from certain weapons, such as a grave wight that only silver gets through. Rulesets that use these need Capability API 1.55 (#6855).

  • A Game Mode ruleset's items can now ask something of whoever wears them, such as a grave spade that needs Sinew 3 and costs a die on Dig until then, and can set or raise an ability while worn or carried, such as gauntlets that make Brawn at least 2. The sheet, checks, the Game Master and fights all read the changed ability. A condition level can also follow a value worked out from the sheet, so carrying too much can slow a character without anyone ticking a track. An item's details say what it asks and what it changes, and the Game Master can give invented items an ability bonus. Rulesets that use these need Capability API 1.54 (#6846).

  • Review cards for edits to Professor Mari's own card, saved before she was stopped from making them, now clear on the next start instead of staying in every Mari chat; they could never be restored (#6842).

  • Professor Mari's review cards belong to the chat she made the change in: a new chat starts clean, and deleting a chat keeps its changes and removes its cards. She can no longer edit her own built-in card, which Marinara resets on every start, an edit that changes nothing makes no card, a refused Restore explains that Keep dismisses the card, and a failed Keep or Restore says why (#6842).

  • Lorebook editors can copy linked characters and personas to another lorebook without repeating each selection (#6840).

  • Default muted text uses neutral colors, message marks follow chat chroma, and chat Help explains bookmarks, context pins, and private notes (#6839).

  • Lorebook vectorization uses batches of ten entries to reduce timeouts with local embedding providers (#6837).

  • Updated Undici, fast-uri, and ip-address dependencies to pick up upstream network and URL-handling security fixes.

  • In a Game Mode game with a ruleset, a check or save outside a fight now counts the character's conditions and what they wear or carry: a poisoned or frightened character rolls with the disadvantage the ruleset gives them, a paralyzed one fails the saves it fails without a roll, and an item can say what it does while worn or only carried, such as a creaking coat that makes Sneak harder. Advantage and disadvantage cancel out with the Game Master's own, the dice card and the saved record say what changed the check, and an item's details say what it does. The Game Master can give invented items these effects, held to what each rarity allows. Rulesets that use them need Capability API 1.53 (#6832).

  • In a Game Mode game whose ruleset rolls something other than one d20 (such as 2d6 or a dice pool), a check the Engine rolls during a turn is no longer rolled a second time as if nobody's sheet were read. The saved result keeps the sheet's numbers, who rolled, and any wound penalty or modifier the ruleset applied.

  • A Game Mode ruleset's sheet can now read the items a character holds, with a new itemStat value: a stat over what they wear, what they only carry, or both, added up, the highest, the lowest or counted, optionally only one slot, category or tag. The sheet on screen, checks, the Game Master's sheet summary and the start of a fight all read it. In the Ember Roads example, a worn leather coat now adds to Guard. Rulesets that use it need Capability API 1.52 (#6826).

  • A Game Mode ruleset with native: false now keeps new untyped items out of its games: the Game Master can still add more of, remove or give an item already held, but anything new it hands out must be one of the ruleset's items or one it invents, and it is told so. Fights no longer guess what items do or offer them, until the ruleset can say what they do. The player's typed-in items and what a party carries into a new session are unchanged (#6822).

  • Regenerating a reply no longer shows the previous swipe's translation under the new text while it streams, and the new swipe does not inherit it. Swiping back shows that translation again.

  • Guided regeneration keeps your direction in the chat box, so you can adjust it and regenerate once more; turn off Keep guidance after regenerating in Settings → General → Input & Editing to clear it instead. Sending a message still clears the box (#7060).

  • In Conversation chats, a message sent right after typing no longer comes back in the chat box when you return to the chat or reload (#7060).

  • In a Game Mode game with a ruleset, the Game Master can invent items in the ruleset's own words, such as a named blade: the Engine keeps only the categories, rarities, tags, stats and slots the ruleset has, holds each bonus to what its rarity allows (the new rarityCaps), and says what it changed, in its answer and in the item's details. The game keeps the item, and a ruleset can forbid invention with propose: false. Rulesets using either key need Capability API 1.51 (#6814).

  • Lorebook references retain affordable images without displacing text, including recursively activated text, and image-only entries count their image budget once.

  • Duplicating a lorebook entry waits for reference-image uploads and removals, and reimporting an embedded lorebook preserves its character links. Valid reference images also upload when the browser cannot identify their file type.

  • Failed reference-image uploads keep the original error if cleaning up the unused image also fails.

  • Portable lorebook and character exports share a 64 MiB reference-image limit per request. Split larger selections into smaller exports or use a native profile ZIP.

  • Lorebook entries can attach PNG, JPEG, and WebP reference images with optional captions through a collapsed Reference images button. Activated entries send their images to compatible chat models; models that reject image input receive the text and captions with a notice. A shortcut adds wardrobe as an ordinary activation keyword (#6798).

  • Message marks stay consistent during swipe changes and inactive-swipe edits, preserving the context-pin limit and each swipe's own data.

  • Enabling or disabling selected lorebooks includes books hidden by filters, and Undo changes only the books updated by that action.

  • A Game Mode ruleset's items can be worn, bound and carried. An item that takes slots has an Equipped button and uses its bearer's free slots; one that binds is bound up to the limit on its bearer's sheet, and a cursed one stays bound. When the ruleset says what everything weighs, each bag shows its load, an item added from All or by the Game Master without naming anyone goes to whoever can carry it, and nothing is given past anyone's limit. The Game Master can equip and bind items too, and sees each character's load, slots and bound items (#6801).

  • Restore all preserves conflicts reported by completed batches when a later batch fails, even if no messages were restored.

  • Restore all supports more than 5,000 trashed messages in one operation, reports messages already recovered if a later batch fails, and keeps remaining entries available for retry.

  • Restoring several trashed messages reports an error when every write fails, while keeping failed entries available for retry and preserving successful partial restores.

  • Deleting a turn with saved Game state stays permanent after changing chat modes or importing it. Mixed selections recover only ordinary messages, and recovery counts reflect that.

  • Message marks remain visible in roleplay, private-note menus fit short mobile screens and close when their note is removed, and recovery reports partial restores accurately. Restoring several messages still updates chat memory when one entry fails; Game Mode rejects message-only recovery. Pin hints clarify the model token limit.

  • Per-character conversation-start edits complete without hanging, including edits that also pin a message or change its visibility.

  • Message recovery preserves edits that finish just before deletion, and changing a message's history-start setting no longer stalls. Bookmark menus focus their first action when opened for keyboard access.

  • Expired message recovery records are cleaned up at server startup and hourly, including unopened chats. Recovery ends at 30 days; newer records are preserved, and shutdown waits for active cleanup.

  • Message recovery notifications reflect whether the server actually retained deleted messages. Restoring pinned messages refuses to exceed the pin limit and keeps the recovery records intact.

  • Bookmark messages, attach private notes, and pin up to ten messages for prompt context. An optional message trash setting keeps supported deleted messages for 30 days for recovery; it is off by default, and Game Mode deletion remains permanent. Private notes stay out of model prompts and are excluded from exports unless explicitly selected. Launcher downgrade protection also preserves recoverable message records (#6698).

  • Bulk character tag edits continue after a rejected request and keep only failed cards selected for retry.

  • Regression commands invoked through an absolute or symlink path now execute instead of silently skipping their checks.

  • The terminal-shutdown regression now has enough total runner time for its six bounded server boots, without relaxing its per-case shutdown assertions or other regression limits.

  • Shutdown regression checks allow time for repeated server startups on slower CI workers while keeping individual shutdown deadlines unchanged.

  • Bulk character tag edits keep failed cards selected so you can retry them without selecting successful cards again.

  • Bulk character tag edits include selected cards hidden by library search or pagination. Failed saves report the affected cards, preserve their tags and version history, and allow the remaining selection to finish.

  • Duplicate-character comparisons return after closing the character editor on phones and desktops, and dismiss when navigating away from Characters.

  • The character library can compare possible duplicate cards without deleting them and preview adding or removing tags across selected cards (#6698).

  • Lorebook Markdown and CSV downloads preserve spaces and non-English characters in their filenames.

  • The native shutdown regression allows cold CI servers time to start while keeping its interrupt and shutdown deadlines unchanged.

  • Failed lorebook text imports leave existing entries and folders unchanged, and duplicate-key checks distinguish case-sensitive and regex matching modes.

  • Windows shutdown validation reads redirected output as one string, avoiding false readiness failures while the server is writing its startup log.

  • Lorebook activation statistics update after a reply is saved successfully and exclude Continue chunks.

  • Lorebooks gain lint checks, a scanner preview, opt-in activation statistics, bulk entry edits, selected enable/disable actions, and Markdown/CSV import and export. Chat previews explain their context limits, and text imports enforce bounded size and entry counts (#6698).

  • Lorebook Markdown export handles long whitespace runs without excessive processing time.

  • Lorebook CSV exports keep spreadsheet formulas inactive and mark their escaping format so imports restore the original text without altering apostrophes in independently authored CSV files.

  • Escape closes a panel from actions inside an expanded folder header, while active fields and menus keep their own Escape behavior.

  • Decorative missing-avatar icons stay hidden from screen readers; named character fallbacks retain their accessible labels.

  • Panels opened from the navigation bar support keyboard focus and return focus when closed. Cancelling a folder rename or leaving the activity field with Escape keeps its panel open. Profile imports are keyboard-accessible, missing library avatars have a visible fallback, and the chat sidebar shows clearer loading and retry states (#6698).

  • Generation settings show controls supported by the selected provider and model, reducing settings that would be ignored. Preset editing keeps its full set of reusable controls (#6698).

  • Printed HTML chat exports show included reasoning once, even if its Thinking section is collapsed on screen.

  • The native restart regression gives replacement servers time to rebuild routes on slower CI runners while retaining its process-ownership and shutdown checks.

  • Search across chats with phrase and filter support, inspect chat statistics and activity, and export readable Markdown or HTML transcripts. Internal and hidden-from-user content stays excluded from these views. Clearing search removes earlier matches, activity totals pick up edits even after a chat leaves memory, ambiguous timezone parameters are rejected, and Game exports label narration consistently. HTML stories embed each avatar once to keep long exports compact (#6698).

  • Professor Mari discards pending package-action discovery when a package is disabled, removed or replaced, so an older activation cannot start a new action.

  • Professor Mari can use actions that installed Agent packages offer her. Ask Mari which actions your packages offer, or ask her to do one, and she runs it through the new package_service tool. Only packages with the new mari-actions permission can offer actions, the package checks every input, and Plan and Manual Permissions Modes apply to each run. Package authors need Capability API 1.50 (#6799).

  • A Game Mode ruleset's own items go in the inventory. From the ruleset picks them from the ruleset's item catalogs, with its search and filters, and a name the player or the Game Master writes that is one of them adds that item. The selected item shows its category, rarity, tags, stats and description, a stack holds only as many as the ruleset allows before a new one starts, a ruleset can take only its own items from the player, and the Game Master sees what each one is (#6795).

  • Game Mode items keep who they are when renamed. Renaming a stack now gives it a nickname, shown with the item's own name beside it: it stays the same item, never merges into another one, and the Game Master can name it either way. The inventory's Add takes the item's name first, and adding an item a bag already has tops up its stack. The detailed inventory follows items instead of names, so an entry keeps its description through renames and gifts (#6791).

  • OpenAI-compatible text-to-speech can request PCM output and play it as WAV without changing the audio samples. Custom providers must supply the sample rate and channel count; malformed or incomplete PCM is rejected instead of playing distorted audio (#6709).

  • Define per-chat variables in Chat Settings → Chat Variables. Set char1 to Mary and use {{char1}} in a message: the AI reads Mary while the message keeps the tag. Changes apply to earlier turns too. Values survive restarts, include variables set by prompts, and respect preset-variable precedence. Your edits take priority over pending generation writes.

  • Phone navigation keeps Home and Chats visible, moves secondary panels into a keyboard-accessible More menu, and improves touch targets and stacked-dialog focus (#6698).

  • Roleplay chats can tune recent summaries, older semantic matches, and minimum relevance per chat using the existing summary retrieval controls (#6705).

  • Memory recall rebuilds now batch embedding requests for long chats and preserve the previous native index when a rebuild fails or is canceled (#6708).

  • Everyone in a Game Mode party carries their own things. The inventory opens on All, which shows who carries each stack, with a tab per party member; Give hands some or all of a stack to someone else, and dragging a stack onto a tab gives them all of it. The Game Master can say who gains, loses or hands over an item, and its inventory changes are now made by the server when the reply is saved, so they apply even when nobody is reading and a refused one is reported back to it. Every change saves the stacks, the detailed inventory and the journal together, including items a fight uses. Regenerating a reply, or swiping to another version of it, no longer adds its inventory changes on top of the version it replaces, and deleting a version or branching the chat keeps each version's inventory with it (#6772, #6774).

  • Character and persona gallery image downloads preserve the iPhone/iPad Home Screen app, using native sharing when available and keeping previews dismissible when saving is cancelled or fails (#6784).

  • Character-sheet generation can optionally use the character's saved neutral full-body sprite as a reference, on its own or together with the current avatar.

  • Persona sheet generation can use a saved neutral full-body sprite as a reference, alone or alongside the current avatar (#6786).

  • Game Mode rulesets can describe items. An items block declares the categories, rarities, tags, stats, slots, binding limit, carrying and currency families a ruleset's items are written in, and a catalog of items lists each one with its stats, slots, stack size, cost and binding. Everything is checked at import, both example rulesets carry items, and the author guide explains every key (#6765).

  • Decision diagnostics shows Advanced Memory's latest Jev recall and scene-end decisions, including scores, selections and fallback outcomes, without making extra model calls (#6768).

  • Advanced Memory swipes respect the shared "All" history cutoff even when its message is hidden from the responding character, without applying later cutoffs to earlier replies (#6766).

  • The browser test for attacks made in an initiative style no longer fails when the fight's random dice let the Grave-rat swarm down Ada before her first turn: the test's swarm throws no initiative dice, so Ada always acts first (#6763).

  • Game Mode's inventory changes a stack by any amount: type a count, or +N to add and -N to take, instead of clicking once per item. A stack can be split into a size you choose (300 apples split by 100 leaves 200 and 100), and dropping a stack onto another of the same item merges them. Split stacks carry over to the next session, and the Game Master and fights still count every stack of an item together (#6759).

  • Fixed a production startup regression that left Docker and installed web apps on a blank screen before React could load (#6760).

  • Regex packs can be selected, exported, and deleted in bulk, with one confirmation and failed deletions retained for retry (#6755).

  • Generation Settings can disable automatic character/persona gallery entries while keeping illustrations and selfies in chat. NovelAI image inspectors now include character captions alongside the scene prompt (#6752, #6748).

  • Conversation's Tools tray always offers Translate draft, including on mobile with the optional composer shortcut and automatic translation turned off (#6751).

  • Roleplay supports /illustrate range=N and /illustrate range=N-M for earlier messages, including before an Advanced Memory boundary, without branching or deleting history. Concurrent range lookups cannot start duplicate illustrations (#6722).

  • Client builds no longer depend on whether the checkout folder contains react. The restart regression allows cold CI servers more time for their first boot while keeping the normal restart deadline (#6732, #6743).

  • Game Mode rulesets whose fights throw pools can keep initiative as a number that attacks move. It opens as a thrown pool plus a number, one way of attacking takes it from the target instead of hurting them, another spends it as the damage dice and resets it on a hit or loses what the ruleset sets on a miss, and whoever falls to the ruleset's crash line crashes, cannot spend until they recover, and may carry a condition of the ruleset's own. The order follows the numbers every round, the menu asks which way to attack before whom, and the log says every change. Capability API 1.48 (#6740).

  • Claude Subscription now bundles a Claude Code runtime compatible with Opus 5.5, avoiding the older-runtime rejection even when a newer global Claude Code installation is present (#6693, #6711).

  • Roleplay Advanced Memory can optionally use a selected Decision connection, including Jev, to detect scene endings and choose recalled scenes and excerpts. Summaries still use the summary helper, and the existing recall remains the fallback. Advanced Memory no longer carries an Alpha label (#6749).

  • Advanced Memory lets you save a requested review without changing correct text, regenerate an individually deleted scene, and see background preparation failures in a toast (#6737).

  • Game Mode rulesets whose checks throw a pool of dice and count successes can fight the same way: an attack throws a pool and needs a number of successes, the successes past those add damage dice, and the damage is thrown and then soaked by the kind of harm before it marks a wound track. Wound penalties and conditions add or take away dice, and saves and contests are pools too. Rulesets of either kind can also throw initiative again every round and cap how much of a resource one turn may spend. Gravewatch, the example pool ruleset, now has fights, weapons and a small bestiary (#6736).

  • A creature a ruleset fight takes from its bestiary keeps its own reaction and anything it does to itself, so a monster's Parry is asked for when a blow hits it instead of turning up as an ordinary action on its turn aimed at an enemy (#6731).

  • The expression sprite and Roleplay whisper browser regressions wait for the page's own requests to finish before each reload, avoiding false WebKit access-control failures in release checks (#6677).

  • Game Mode rulesets that resolve their own fights can answer an attack after it hits and before its damage: a Shield or a parry raises defense and the same roll is checked again, so the hit can become a miss, and an answer can halve that one attack's harm. Creatures can have reactions of their own, including ones that land on themselves, and opponents the Engine plays raise a guard only when it turns the hit aside. Capability API 1.46 (#6728).

  • Game Mode rulesets that resolve their own fights can have conditions change numbers: raise or lower defense, add or take away a flat number or dice on attack rolls, saves and contest checks, or change speed by a number, halve it or double it. Conditions can make contests harder or easier, end at the start of their holder's turn or after one attack or save, and a track such as exhaustion can make things worse level by level. A condition that ends as a turn begins no longer shortens that turn's walk. Capability API 1.45 (#6719).

  • A Decision connection can use a chat model on a server you already run, such as Ollama, LM Studio or llama.cpp, so the model is not loaded a second time just for decisions. Choose the new OpenAI-compatible chat model source, or click Use this model for decisions on a Custom connection. A Test against a server that does not offer the chosen source's endpoint now says so instead of reporting it as unreachable (#6714).

  • The installed decision sidecar no longer shows a Thinking setting it does not have, which snapped back to Auto when changed. It is warmed up while it starts, so Test and the first turn show its normal speed instead of a one-time two-second delay, and Open-Jev 2B gets more time for a turn with many decision statements, which on a long chat used to run out and read every statement as no (#6716, #6717, #6718).

  • Decision time limits now apply to each statement, never to a whole group. A local model answers every statement of a turn instead of dropping the ones that waited for a free slot, a Decision connection's Time limit is given to each statement a request asks, and the decision sidecar no longer cuts a large turn off at 20 seconds (#6721).

  • Game Mode rulesets that resolve their own fights can write a counter: an ability that answers an opponent using something, whoever it was aimed at, and may call it off before it happens. An answer can be limited to abilities from certain catalogs, such as spells, and on a battlefield it reaches only as far as its own range. Capability API 1.44 (#6712).

  • Game Mode rulesets that resolve their own fights can declare contests: grab, shove over or back, and break free, where both sides roll and add their own number and the winner holds, knocks down or pushes the loser. The menu shows the chance to win, and opponents the Engine plays use them now and then. Capability API 1.43 (#6707).

  • Game Mode rulesets can give a sheet live states such as a form or a stance, one value out of a list that the Game Master or the player changes in play and a rest may put back, and derive numbers from a state or an enum field, so a stance can add dice to one ability's rolls. Capability API 1.42 (#6656).

  • Positioned ruleset fights no longer freeze when a wall stands between two fighters: whoever the Engine plays walks the way round instead of waiting for a straight path that never opens (#6678).

  • Game Mode rulesets can group abilities, skills and saves into sections, shown under their headings on the sheet and to the Game Master, and say what a check does untrained, by skill or by section: cost dice or points, roll one step harder, or not be attempted at all. A one-request branch check now rolls for the party member it names. Capability API 1.41 (#6655).

  • Local models can use an existing GGUF file without downloading another copy, select f16/q8_0/q4_0 KV caches, and show GPU buffer allocations reported by llama.cpp after loading (#6675).

  • Lorebook semantic search can optionally consider character replies as a separate query, preserving specific user cues and keeping user-only retrieval as the default (#6670).

  • RunPod Serverless exposes the shared ComfyUI generation settings, including prompt prefixes, sampling, reference placeholders, and LoRAs, and applies them to submitted workflows (#6699).

  • Game translations keep dialogue aligned when translators alter internal speaker tags, and preserve notes or books embedded in narration (#6687).

  • Added Gemini 3.8 Flash, 3.7 Flash, 3.5 Flash-Lite and 3.1 Flash-Lite Image to the Google model list, so they arrive with their own context window and output limit instead of being treated as unknown models whose reasoning effort and output cap cannot be sent. Corrected the context and output limits of the existing Gemini image models to the ones Google documents (#6683).

  • Advanced Memory finds old scenes from distinctive details even with excerpts disabled, without extra recall model calls. Characters can share access to a scene when only some messages are hidden from them; scene recaps keep shared events plain and use character conditions for private sections. Constant Chat Summaries retain their character conditions (#6679).

  • Game Mode wound tracks can be numbered boxes as many as a character's rating, with a penalty table over boxes filled or remaining, take marks on the box a hit names, refuse a mark when full (a fight counts a hit no box can take as taking the character out), heal one kind of harm from a rest or a command, and gain levels from a list on the sheet. Capability API 1.40 (#6654).

  • Automatic agent runs with NanoGPT Kimi K3 no longer send an unsupported request to disable reasoning (#6658).

  • Manual Illustrator requests honor the configured output-token limit instead of silently capping it at 1,800 tokens (#6659).

  • Development pull requests use a small Chromium smoke suite instead of the full browser matrix. Full desktop Chromium, mobile Chromium, and mobile WebKit coverage runs nightly, on demand, and before promotion to main; contributors run focused regressions locally before pushing (#6661).

  • Game Mode rulesets can work out values from a character's live resources and tracks as they stand, add up a column of a list (such as the weight of packed gear), cap a skill or save at any sheet value, and hide sheet items when a field is not a value or is one of several. Capability API 1.39 (#6653).

  • Any agent package's Home widget can open one item in its own Home tab through onOpenPost. Before, only Noodle could jump to an item; other agents could only open their tab.

  • Decision debug output shows scores and thresholds, and Peek Prompt can test decision statements against the selected model, including local reasoning models normally deferred before a reply, without generating a reply or changing the chat's decision state (#6650).

  • The Noodle and Slurp Lorebook Generation filters, and the Noodle and Slurp Remastered chat and character settings, no longer disappear after a package update that waits for a restart. The Noodle filter also shows for Slurp Legacy, which sends the Noodle trigger.

  • Quartermaster and Relationship Tracker appear under the Download Agents Roleplay filter. Their guides cover staging downloads, restart and per-chat activation, key controls, and planned availability with the next main release (#6724).

  • Copy Support Diagnostics now wraps the report in a ``` code block, so it reads cleanly when pasted into Discord or GitHub (#6668).

  • A NanoGPT connection can show its subscription usage. An optional Management Token field accepts a NanoGPT token with the Usage only scope, so quota readings never need your inference key, and a Show subscription usage toggle displays the weekly and daily input-token quotas beside the connection, in the chat connection picker, and in the chat's Connection settings while you play. A lookup that NanoGPT cannot answer reads as unknown instead of as unused quota, and the model list marks subscription-included models — including a green 1x at the normal rate — and the ones charged at a higher input-token multiplier.

  • Generation now reports when a prompt that does not fit spends the reply budget instead of dropping messages. A reply budget cut to its 128-token floor is logged as a warning, so a configured Max Tokens that never reaches the provider is visible instead of silent (#6614).

  • Game Mode pool rulesets can name standing re-throws the Game Master asks for on a check (reroll="id"), and a spend can buy a re-throw. A spend's limit can come from the character sheet or from the check's own dice, a ruleset can declare up to four spends, and any ruleset can add numbers from the sheet to the checks they apply to, shown on the dice card. Capability API 1.38 (#6652).

  • Game Mode rulesets can pick a difficulty by name (difficulty="Hard") instead of a number, and a pool ruleset's ladder step now sets the per-die target it prints. A pool ruleset can let a check lower the face dice roll again or count twice on, let an ability check add a second ability, and count a fumble as low faces on half the dice or more, which on a successful check shows as a complication alongside the result. Capability API 1.37 (#6651).

  • Game Mode rulesets can give a track a maximum the character sheet sets, hide a track by a field or always show it to the Game Master, print chosen columns beside a summary list's names (Gear: Crowbar 1d6) and name its rows with an enum column. When a ruleset has a wound track, the Game Master is taught the command that marks it without the ruleset having to explain it (#6657).

  • Lorebook entry Generation filters add Slurp, so entries can target Slurp Remastered posts, and the Noodle and Slurp filters now show only while their package is installed. Existing filter choices stay saved when a package is removed (#6660).

  • The Roleplay whisper browser regression finishes preparing visual-novel fixtures before reloading, avoiding false WebKit access-control failures in contributor checks (#6628).

  • Lorebook and Chat Summary review windows start with focus on the review explanation, so continuing to type cannot accidentally discard a proposal with Space or Enter (#6638).

  • Game translations use edited narration, dialogue, and readable text, preserve segment alignment, and discard translation requests invalidated by a later edit or deletion (#6615).

  • Agents, including Illustrator, receive complete character card lore and persona descriptions instead of silently losing details beyond the old field limits (#6620).

  • User Input prompt regexes in Roleplay’s Individual group chats also apply to other characters' messages, while each character's own replies keep AI Output rules and character-specific exclusions stay in effect (#6637).

  • Roleplay Advanced Memory scans and indexes globally hidden history, including turns hidden manually or by automatic summaries, preserving scene summaries and participant access during initial and later processing. If recovery changes a manually corrected scene's boundaries, disable its old correction to keep the text for reference, or delete it, then prepare history again (#6631).

  • Professor Mari can author Decision activation and conditional prompts with live model awareness, lean timing guidance, and separate preferences for use and cache-sensitive placement. Setup warnings are remembered per chat, and an enabled Memory can stop them across future chats. New invalid agent activation settings are rejected instead of silently disabling the question; legacy settings remain editable and undoable without blocking unrelated changes (#6629).

  • Imports that use decisions now warn when no Decision model is selected, explain the fallback behavior, and link to the Decision Models guide. If the selection cannot be checked, the notice says so without interrupting the import. The notice also covers custom agent imports and Agent catalog installations, including agents with activation questions (#6605).

  • Decision model guides now distinguish Jev from Open-Jev and clarify what each feature sends, threshold defaults, statement allowances, answer reuse, lorebook fallbacks, sidecar hardware needs, and prompt-cache costs. Author examples describe observable events and separate connection testing from testing statements in a chat.

  • Add bounded agent-owned Home widget presentation metadata and full-bleed package widget surfaces.

  • Agents can offer up to three Home widgets without placing them automatically. The Widget Manager groups built-in, agent, and personal widgets; users add, hide, restore, and reorder agent widgets, while custom agents can publish bounded text during their normal runs. Capability packages can supply verified interactive widgets in an Engine-owned frame. Noodle's Latest Posts widget is available through its companion agent package (#6621).

  • Contributors can use an optional Dev MCP (tools/dev-mcp), a small MCP server that lets a coding agent read a local engine's prompts, cache statistics and logs, run typechecks and regressions, and restart the engine safely. It is not part of the app build or the Docker image; see tools/dev-mcp/README.md.

  • Roleplay's optional Whisper command shares an inline secret only with its recipient and the appointed narrator. Recipients can be characters or your persona; revealing a hidden secret on screen does not give it to other characters' prompts (#6616).

  • Roleplay's Expression Engine has an optional Only show active sprites toggle. It keeps the current sprites visible while expressions generate, then shows only enabled characters returned by the completed result (#6611).

  • A Game Mode ruleset's bestiary creature can now be written in the ruleset's own terms: give it a sheet shaped exactly like a character's, as partial as you like, and a fight builds it the way it builds a party member. Its health, defense, saves, initiative, speed and the attacks and abilities on its lists come from the ruleset's own formulas, so a ruleset whose opponents use different abilities, skills or lists no longer has to squeeze them into a fixed set of numbers. Such a creature pays for its abilities out of its own pools and can pay out of a bigger one, whether the Engine or the Game Master decides for it. On a ruleset whose health is a wound track, a blow marks its boxes after its resistances and immunities have had their say. It is still an opponent: out at zero, never rolling against death, and never saved over a character who shares its name. Each number is given in one place only, so a creature with a sheet does not also list its health or defense. A creature the Game Master invents can be written on the ruleset's sheet too, so an invented mage has spell slots and spells named straight from the ruleset's catalogs. Unless it is a boss, it only gets what its ruleset opens to it (a Sorcerer's spells, not the whole list), and the spells it was not given are filled in by its temperament and competence without another request to the model: a protective caster leans to spells that hold up its side, a skilled one to counters and reactions. A boss is written in full by the Game Master. Either is still held to its threat tier, with its health, defense, to-hit, save difficulties and best round (the biggest slot it can afford included) pulled onto the tier's scale. Both example rulesets ship one, and ruleset packages that include one need Capability API 1.34. A refusal because the fight is waiting on somebody else's answer, or because that moment has already passed, now says so instead of a generic message (#6610).

  • Manual Gallery and /illustrate requests preserve the selected custom Illustrator prompt, including perspective and layout instructions alongside or after a response schema. Requests too large for the connection's context limit report an error instead of silently cutting instructions (#6597).

  • Character-browser imports and PNG downloads no longer crash when browser translation replaces their button labels before the loading icon changes (#6598).

  • Update local embeddings and Whisper to Transformers.js 4 with matching ONNX runtimes and retain the native installer's private temporary directories. Upgrade Intiface integration to Buttplug 5 while preserving existing haptic intensity values, including zero, full vibration strength, and directional outputs. Reject incompatible feature ranges before starting output, and stop the device if only some features accept a command (#6603, #6604).

  • Update static file serving with the latest security fix, refresh TypeScript and formatting tools, and update Android and CI build dependencies. CodeQL initialization and analysis now advance together so security checks continue to run (#6601).

  • New Settings > Advanced > Features section for optional server behaviours. Every switch is off by default, so nothing changes until you turn one on. Stable lorebook picks and Retry failed provider calls can now be turned on there as well as with LOREBOOK_STABLE_GROUP_WINNERS and PROVIDER_RETRY_TRANSIENT_ERRORS, which still win when set. See docs/configuration/features.md.

  • Decision statements take two more modifiers: every:3 asks a statement only every 3 turns (reading as no between checks, without taking a statement slot), and priority:high or priority:low decides which statements are asked first and dropped first when a turn has more than Decision statements per turn allows (#6599).

  • Decision statements that cannot affect a turn no longer use up Decision statements per turn. Only statements in enabled preset sections, selected preset variable options, lorebook entries that activate, and blocks not already ruled out are asked. Peek Prompt lists any statements the limit leaves out, and the preset guides now warn preset makers to be careful with decision blocks near the top of a preset, where a changing answer makes caching providers bill the whole prompt again (#6582).

  • A decision block inside a preset variable option now works. It was planned under the wrong key, so it read as no on every turn (#6582).

  • Decision statements can keep their answer for a few turns: {{#if decision:"..." sticky:3 cooldown:5}} stays yes for 3 turns after a yes, then reads as no for 5, without being asked or taking a statement slot meanwhile. Regenerations and swipes do not count as turns (#6582).

  • RPG pool names can be cleared and typed with spaces without resetting to HP or MP while editing (#6566).

  • Chat and game dialogs stay open when a drag ends on their backdrop, and overlapping pointers cannot combine into an accidental dismissal (#6576, #6577).

  • Browser notifications use the app's service worker when available and alert again for each completed reply in the same chat (#6571).

  • Browser checks wait for the settings search to finish focusing its result and capture the visible Advanced Memory inspector without scrolling its full container (#6578, #6579).

  • In Individual group chats, characters can hand the next reply to another available character with an @mention. Conversation and Roleplay reuse the current turn queue, with one reply per character to prevent loops; swipes and continuations do not start handoffs (#6567).

  • Server robustness, all opt-in and off by default (see the Robustness table in docs/CONFIGURATION.md): PROVIDER_RETRY_TRANSIENT_ERRORS retries a refused connection or a gateway 502/503 up to twice before any output reached the user (never on the primary of a connection with a fallback), STORAGE_SKIP_UNCHANGED_WRITES skips rewriting unchanged storage files, STORAGE_YIELDING_SERIALIZE keeps large chat saves from pausing other requests, STORAGE_CACHE_WINDOWS_BOOT_ID makes Windows starts about 1.5 to 2 s faster, and SHUTDOWN_WINDOWS_CONSOLE_SIGNALS, SHUTDOWN_FORCE_EXIT_ON_REPEAT, SHUTDOWN_EARLY_FLUSH and SHUTDOWN_RUNTIME_STOP_BUDGET_MS tune how the server stops. Always on, with no behaviour change: Windows identity probes run hidden instead of flashing a console window, shutdown logs which runtime stop failed or was slow, and a privileged GET /api/admin/runtime-diagnostics reports storage residency and whether each capability package runtime is live.

  • Capability packages no longer fail with "Root plugin has already booted" (which could also stop the server) when a background task calls an internal route while startup is still registering routes: such calls now wait until registration has ended. A package whose activate() or selfCheck() calls an internal route during startup gets an error at once instead of hanging startup, and a package that fails only because the server started too early is no longer rolled back or marked as errored; it is retried on the next start.

  • Roleplay Personal Notes and command instructions survive Advanced Memory context cutoffs, including when regenerating a reply (#6583).

  • Each Decision connection has a Time limit (0.5 to 30 seconds, 1.5 by default). A hosted provider that is sometimes slower than 1.5 seconds made decisions look randomly broken, with no way to allow for it. Test now waits longer and shows how long the answer took next to the limit, and says when an answer would arrive too late during chats (#6580).

  • Lorebook entries can be activated by your Decision model. In an entry's new Decision field, Require makes the entry activate only when a statement about the recent chat is also true (so passing mentions stay out), and Trigger lets the statement activate the entry without its keywords. Statements are asked only when the entry could otherwise activate, answered once per turn, and read as no without a Decision model. Imports and exports keep the setting (#6570).

  • The Decision Models guide now says exactly what a decision model reads: only the statement and the recent chat messages. It never sees the preset, character cards, persona description, lorebook entries or anything inserted @ Depth, and decision statements read the last 5 messages.

  • The full browser regression matrix uses more shards (ten for desktop Chromium and mobile WebKit, eight for mobile Chromium, instead of four each), bringing its expected runtime from about 30 minutes to under 20 and keeping it clear of the 30-minute job limit (#6573).

  • Server logs are easier to follow: every line a request causes carries its requestId (also returned as the x-request-id header), startup steps are timed with one ready summary, a failure is logged once with its cause chain, user stops are logged at info, repeating failures are rate limited, and model or provider text stays at debug. See docs/development/logging.md.

  • The regression runner gives every file its own temporary DATA_DIR, FILE_STORAGE_DIR and empty .env, so a regression can no longer read or lock the data folder named by a developer's .env.

  • Two opt-in lorebook settings, both off by default (see the Lorebooks table in docs/CONFIGURATION.md): LOREBOOK_STABLE_GROUP_WINNERS keeps the same inclusion-group winner in a chat while its candidates stay the same, so the prompt prefix stays cacheable, and LOREBOOK_COMPACT_STORED_SCANS keeps the full text of activated lorebook entries only on the newest reply of a chat, which makes chats with large lorebooks much smaller. scripts/compact-lorebook-scans.mjs applies the same rule to older chats (dry run by default).

  • Agent history lookups no longer compare every loaded agent run with every loaded message, preventing long server stalls as more chats are opened (#6562).

  • Conditional prompts can ask your Decision model about the scene: {{#if decision:"..."}} for yes or no, and {{#if decision_choice:"..." == "option"}} to pick one option. They work in presets, cards, lorebooks and agent prompts, are answered once per turn (post-processing agents once per reply), and read as no when there is no Decision model or no answer. A new Decision statements per turn setting limits how many are asked, fields that use them warn when no Decision model is set, and imports that contain them say so (#6569).

  • A new Decision Models guide explains what a decision model is, the three ways to get one (a local model you already run, a hosted Decision connection, or the installable Open-Jev), which to pick, including on Termux, and everywhere Marinara uses it. The agent guide now covers decision statements in an agent's prompt, and the package guide has notes for agent and Game Mode Experience authors.

  • Open-Jev 9B can be installed as a decision model alongside 2B. It was more accurate in our tests, but it needs about 22 GB of GPU memory and takes about a second per question, so its request budget grows with the number of questions.

  • Installing a decision model after a dropped connection or a sleep keeps the files that already finished, checked against their published sizes and checksums, instead of downloading everything again.

  • Development servers, scripts and regression specs no longer stay open after finishing when they log while the log worker is still starting; this intermittently failed the image-dimension regression. The regression summary also names every file that did not pass (#6529).

  • Smart response order in group chats can ask your Decision model who should speak, one yes/no question per character, instead of making a full AI call each turn. Turn it on under Decision model in the Connections panel. It is off by default. If the decision model does not answer, Smart order makes its usual AI call (#6559).

  • Advanced Recall cutoff summaries report activity in the Agents menu and preserve each character POV without duplicating summary conditions (#6557).

  • Message voice controls share a compact audio menu. Clear cached voice removes only that message’s audio and regenerates it on the next playback, without discarding other chats’ saved voice lines (#6514).

  • Roleplay dice outcomes follow the selected accent. Message usage and Peek Prompt distinguish tool-turn totals from the last request's input size, so repeated tool requests are not mistaken for an oversized context (#6550).

  • Advanced Memory also checks actual provider-reported input after the main reply, resetting to the latest known scene and reusing its recap in Chat Summaries when the input limit is exceeded. Cached input counts; output tokens and cumulative tool-turn usage do not (#6550).

  • Advanced Memory summary prompts request character-name conditions for separate POV knowledge. Recall resolves those conditions for the responding character; raw excerpts are omitted when they could expose a hidden section, while the narrator retains the full recap (#6550).

  • GPT-6 Sol and Luna are selectable in OpenAI connections with their documented limits, reasoning controls, and compatible streaming and tool requests (#6546).

  • Claude Opus 5.5 is selectable in Claude connections with its 1M context and 128k output limits, supported reasoning settings, and compatible tool requests (#6544).

  • Scene setup lets you choose its persona and Conversation characters. Characters in an active Scene pause automatic messages in the source Conversation until the Scene ends (#6542, #6541).

  • Roleplay tracker widgets tolerate saved blank rows, and Custom Tracker updates discard nameless entries after applying field locks instead of making a chat unusable (#6549).

  • Marinara can now download and run a purpose-built decision model for activation questions. It runs as its own local process, so it answers them whether or not you also run a local chat model. It is off by default and behind a warning, a confirmation carrying your machine's verdict, and a separate size-and-license step, because it costs about 10 GB of disk and 5 GB of GPU memory. If you already run a local chat model, that model is more accurate on roleplay questions; the decision model is faster and slightly smaller. You can also paste a decision model's repository, which is installed only when its own manifest declares a runtime this build ships.

  • On a machine with several NVIDIA GPUs, the decision model installer has a GPU menu for the card it runs on. Where the machine cannot run a decision model at all, the installer offers to set up a Decision connection instead.

  • The decision model preflight checks GPU compute capability, not just whether an NVIDIA card is present. Pascal cards and older cannot run the runtime whatever memory they have, and without this check the download would have been offered and then failed at load.

  • Activation question thresholds now start from whatever the selected decision model actually answers around, instead of always 0.5. Probabilities are not comparable between models: a general local model answers a clear scene change at 0.99 while a purpose-built decision model answers the same turn at 0.2, so one fixed number made the second kind skip every relevant turn while appearing to work. The editor seeds new questions from the selected model and offers to put its recommended value back.

  • Choosing a decision model that turns out to be unusable now leaves your current choice alone. A rejected selection reported the error but also silently switched the Decision model to None, which stopped every activation question until it was noticed.

  • Activation questions can be answered by the local model you already run, on either the main or the utility slot, with no download and nothing leaving your machine. Pick it under Decision model, which now lists local models alongside Decision connections and shows why an unavailable entry cannot be used. A Thinking setting handles models that always reason first; those gate post-processing agents by default so replies do not wait.

  • Support diagnostics report the server's own GPU and each local model slot: what is configured, whether it is running, and the estimated memory it needs, with a combined verdict. The existing GPU line is the browser's, which said nothing about the machine running the local model.

  • Advanced Memory completes partially covered scene ranges when preparing a missing scene, preserves older manual character corrections through reindexing, and keeps original access data in exports. Scene participants can be returned by name as well as ID; only actual participants receive access (#6537).

  • Advanced Memory keeps one memory per scene, assigns access to actual participants, and treats unassigned scenes as narrator-only; an explicit all-participants result grants the current chat characters access. Existing automatic assignments stay narrator-only until reviewed; preparation checks participants while keeping saved summaries (#6533).

  • Custom agents can use optional activation questions with a Decision connection to skip irrelevant turns. Question and keyword controls share one activation card with consistent labels and styling. Keyword and cadence settings still apply; failed decisions leave agents eligible to run. Decision connections support TypeSafe, OpenRouter, and user-run System One endpoints, including linked OpenRouter credentials (#6530).

  • Game helpers preserve unconfigured task defaults and explain when saved output limits cut off structured responses (#6511).

  • Game Mode honors connection and chat generation parameters instead of replacing them with fixed sampling and output settings (#6511).

  • Grok 4.6 and 4.7 keep enabled tools, including web search, instead of losing them as unrecognized models, with their supported context and reasoning settings (#6521).

  • Sidebar sorting applies to folder rows as well as their contents, including names, dates, and content-based sorts; manual folder ordering remains available (#6497).

  • A Game Mode party member you hand to the Engine to play can now pay a ruleset's ability out of a higher pool than it names: a spell cast out of a bigger slot, with whatever the ruleset says the extra buys. Only you could do that before, so a character played by the Engine never cast a spell that grows any bigger, on a turn or in a reaction alike. Each way of paying is weighed on its own and priced with the rungs it climbs, so the bigger version is not mistaken for a free one. Opponents built from a plain stat block are unchanged: it has no pools to pay out of (#6528).

  • A Game Mode ruleset's catalog entry can now say WHICH moment it waits for, so a spell or a trick written as a reaction finally has somewhere to be taken. Two moments: before something lands on its holder, where taking it may stop that thing from happening at all, and after something has hurt them, where it is pointed back at whoever did it. What the stopped action cost is still spent, because it was paid for before anybody was asked, and an entry pointed at whoever caused the moment fills the target in rather than asking you to pick. An entry that only says it is a reaction, without naming a moment, stays off every menu exactly as before. Ruleset packages that name a moment need Capability API 1.33. The fight still keeps one window rather than a stack, so a counter cannot itself be countered, and a reaction cannot change a number on what it answers, only stop it or answer it. A combatant the Engine plays now weighs letting a moment go by against spending on it, the way it weighs ending a turn, so having a reaction to spend no longer means always spending it; that includes a strike at somebody walking away. A friend aiming something at you, like a heal, opens no window at all.

  • Character, persona, and lorebook folder contents follow the selected sidebar sort order (#6497).

  • The extra-actions menu sits to the left of Emoji, farther from Send, while keeping existing Post Only and Guided Generation actions (#6507).

  • Conversation scene invitations stay beside the proposing reply; open setup when ready, including after cancelling or reloading (#6496).

  • PWA manifest requests include credentials so Android Chrome can read the manifest behind Basic Auth (#6492).

  • Advanced Memory scene recaps request 2–3 paragraphs with room for reasoning, and constant-summary consolidation no longer fails on tiny proportional token targets (#6512).

  • Advanced Recall scene checks appear in agent call activity, including shared post-processing tracker calls. Reindexing preserves progress toward the next scene check (#6512).

  • Advanced Memory constants use message-range titles, reject unfinished helper output, and deactivate the originals when a completed compacted replacement is saved. Ranged constants that overlap live context stay out of that prompt and its archived-summary compaction budget (#6512).

  • Advanced Memory's context threshold applies to the outgoing prompt without subtracting reply tokens. Automatic scene resets apply to all characters and can be undone with the existing All flag; temporary open-scene trimming no longer creates persistent character-specific flags (#6512).

  • New Start flag changes save together with Advanced Memory cutoffs, keeping the previous state intact if a save fails (#6512).

  • Advanced Memory identifies corrections needing review and exposes unfinished scene summaries for targeted recovery without resetting the archive (#6526).

  • Advanced Memory keeps saved scene indexes across source-text edits, swipes, illustrations and live context flags. Recalled excerpts use current message text, while character-access checks remain enforced (#6526).

  • Advanced Memory reindexing rebuilds saved text vectors without rerunning scene detection or summarization. Saved scene corrections no longer depend on outdated generated-summary inputs, and stale scene corrections can be reviewed and saved without changing their text (#6509).

  • Removed the obsolete root suggestion-chips implementation brief, MARI_SUGGESTION_CHIPS_TASK.md (#6504).

  • Consolidated root coding-agent guidance in AGENTS.md and updated contributor and reviewer references after removing the duplicate CLAUDE.md (#6504).

  • Advanced Memory resets live context to the latest detected scene when its context limit is reached, then keeps that cutoff while new messages accumulate until the next reset. Existing ranged summaries are reused after generation (#6503).

  • Advanced Memory preserves earlier confirmed memories across personal POV start flags and lets you correct a saved scene's character access without reprocessing the chat (#6503).

  • Advanced Memory shows post-generation scene checks in the Agents menu and checks the configured number of recent messages at its standalone interval (#6499).

  • Mobile chat images allow native pinch zoom, including app shells that honor viewport scaling limits (#6501).

  • Empty Recalled Scenes markers add no extra blank lines to the prompt (#6502).

  • Tapping Author's Notes again closes its panel in the mobile Roleplay toolbar (#6495).

  • Author’s Notes saves stay ordered within each roleplay chat, and pending edits finish saving before generation reads them (#6817).

  • Message Peek Prompt stays tied to the selected reply and swipe after images, summaries or memory settings change, preserving the character and commands actually sent to the model (#6493).

  • Advanced Memory uses enabled Chat Summaries and their character conditions even when the original messages are hidden or before a character's start flag. New and compacted constants retain character conditions; recalled scenes and raw messages keep their knowledge restrictions (#6493).

  • Advanced Memory keeps applicable enabled constants in the prompt and combines them after the reply when they exceed 70% of the configured summary and recall budget. Constants have priority, followed by all selected scene summaries, then excerpts; total memory may use up to 2,000 extra tokens. Existing ranged and legacy summaries reuse Chat Summaries and its Maximum output size.

  • Presets offer one Recalled Scenes marker for paired summaries and excerpts. Existing Recalled Messages markers remain compatible aliases.

  • Recalled messages and new scene summaries omit illustration attachments and their unavailable-content notices while retaining readable text attachments.

  • Post-generation scene checks receive chat message numbers and identify exact scene endings. They share eligible tracker calls when available and archive completed ranges after the reply; scenes still in live context stay excluded from recall.

  • Advanced Memory uses one Recalled Scenes prompt section, with each scene summary immediately followed by its available excerpt. Existing preset markers and saved swipe memories remain usable without another search or archive reset.

  • Advanced Memory stops polling ready archives while idle, keeping unrelated character and preset requests responsive. Long-chat replies and Peek Prompt avoid repeated metadata parsing and repeated whole-scene budget scans; previews without a preset retain message IDs so history can fit the budget (#6484).

  • Advanced Memory scene recall toggles and deletion stay responsive in long chats: archive checks reuse parsed message metadata, the inspector loads summaries without resending hidden excerpts, and user edits interrupt background processing safely (#6484).

  • Conversation chats reuse character-owned schedules. Enabling schedules no longer starts generation, and weekly renewal requires an explicit per-character opt-in without repeated retries after failure (#6481, #6477).

  • Schedule generation stops when cancelled or when its editor, manager, or chat settings closes. Invalid model output remains editable and can be applied to the draft after validation; completed days survive a later day’s failure (#6480, #6476).

  • Disabled Regex and Functions keep their switches and action buttons fully visible while dimming only their descriptions (#6463).

  • OpenAI-compatible image connections can fetch models from custom provider URLs without a dedicated provider integration (#6464).

  • Advanced Memory no longer starts or waits for continuity generation before the main Roleplay reply. Constants reuse existing ranged Chat Summaries, add only uncovered history after the reply, and combine only summary text when the constant-only budget is exceeded. All summary calls honor Chat Summary’s Maximum output size; replaced constants become inactive in Chat Summaries (#6474).

  • Every saved scene, legacy continuity and ongoing summary has a confirmed Delete summary action at the bottom of its vault editor. Original messages remain intact (#6474).

  • Toggling a Chat Summary no longer locks every entry, and Activate All / Deactivate All save together in one request. Background constant updates refresh Chat Summaries automatically (#6474).

  • Connection test results survive a late save refresh and stay with the selected connection, fixing intermittent missing fal.ai feedback on iPhone Safari. The mobile drag regression now measures scrolling after cancellation has settled (#6474).

  • Advanced Memory reuses the original reply's saved summaries and recalled scenes across unchanged regenerated swipes, avoiding another search or continuity-model call. Changes to source history, character access, memories or the context budget are still checked before reuse (#6474).

  • Advanced Memory recalls up to three relevant past scenes by default, with a configurable maximum. Each scene summary is paired with one bounded excerpt and a grouped message range; recalled context identifies the live range and last user message. Routine recall reuses the archive, bounds optional embedding latency, and stays out of agent and auxiliary generation requests (#6471).

  • Advanced Memory checks scenes independently after main Roleplay replies at the configured interval, and prepares the archive only when a scene ends. Background progress appears as Advanced Recall in the top-left Agents menu, including when ordinary agents are disabled (#6471).

  • Advanced Memory skips scene recaps that overlap live messages and uses only fully archived manual-summary ranges for continuity, avoiding duplicate story context at cutoffs (#6468).

  • Advanced Memory uses its selected helper for scene recaps, separates archived scenes from the constant-summary size limit, and sends standalone summary instructions with only the eligible source material. Completed summaries and scene detection survive Resume after an update (#6461).

  • Individual scene memories can be deleted from their editor after confirmation. Original chat messages are kept, and routine preparation does not recreate the deleted summary.

  • The schedule editor can generate a week one day at a time using seven smaller requests, preserves the draft on failure, and stops generation when closed (#6449). It offers connection selection and persistent errors, rejects incomplete or overlapping generated days, displays full-day blocks, prevents competing edits during generation, and refreshes the week date after day regeneration (#6455).

  • A Game Mode fight can now be held open for somebody who is not the one acting. Walking out of an enemy's reach stops the walk on that step and asks them whether to strike instead of striking for them, and the walk then picks up where it left off, paying for every cell it really crossed. When a turn ends, an opponent holding its own points is asked whether to buy one of its signature actions before the next turn begins, which is the only moment those are bought in. Your own party member's window is yours to answer, with the option and a Pass on the menu; everybody else's is answered by whoever plays them, and a Game Master's boss is asked through the Game Master. Nothing else moves while a window is open, one chance each per walk, and a game closed mid-walk comes back with the same people still to ask. Ruleset packages need no change and no newer Capability API: a ruleset that declares an opportunity budget gets the first, a bestiary with signature points gets the second.

  • Advanced Memory resumes unfinished summaries without replaying failed compactions or reporting completed scene detection as new work (#6461).

  • Advanced Memory retains earlier scenes across shared “Mark as new start” cutoffs, shows automatic cutoffs in chat, and updates them when manual flags move or are removed. Hidden messages and character knowledge limits remain respected (#6450).

  • Advanced Memory can prepare the full eligible Roleplay history through Prepare existing history, resumes unfinished scene detection, and shares one scene summary between characters with the same history. The narrator uses the shared archive across character participation boundaries without separate scene copies. The archive avoids redundant owner copies and uses compact memory rows; new recaps omit current-situation and open-tension sections (#6450).

  • When a Game Mode fight ends, the recap the Game Master reads now names anybody still carrying a condition and says those stay until the Game Master takes them off, with the command that does it. A charm or a fright does not expire because the fighting stopped, and what would end one is the spell's own terms or the fiction rather than arithmetic, so it is a ruling to make rather than something the Engine should guess. The condition a ruleset's own dying rule puts on somebody at zero is left out of that list, because healing or stabilising them is what lifts it.

  • A Game Mode ruleset can now say that one weapon is a single strike a turn however many attacks its wielder has. A weapon list that buys several strikes may name a column that holds its own rows to one, which is what a crossbow needs: 5e's Loading property says you fire once when you take the Attack action whatever your count, and until now a character with Extra Attack was offered the same number of shots with a crossbow as swings with a sword. Ruleset packages that use it need Capability API 1.32, and a list that says nothing is unchanged.

  • The ruleset authoring guide now says WHY a health pool cannot carry kinds of harm, rather than only that it is refused: a pool records how much damage landed, a wound track records how much and what kind each piece of it was, so a system where a wound stays bashing, lethal or aggravated after the blow needs a track. The refusal an author sees says the same thing and names the remedy.

  • Downloadable packages can use the host Engine's LLM, image and video integrations, inheriting provider fixes, queues and request safeguards without bundling stale service copies. These integrations require Capability API 1.31.

  • Conversation mode now has a persisted background-image opacity control while keeping its readability gradient visible.

…and 129 more changes. The complete list is in CHANGELOG.md.

Contributors

Thank you to everyone whose work is included in this release, across Marinara Engine and the Agents catalog that ships with it, including the authors of patches preserved in other pull requests:

@BiBoBaBe, @bobneumann77-hub, @Ejmathewp, @Gunterlie, @JurijPietrowicz, @kentarofujiy, @kolacheee, @luma-inibitor, @menemorofaan, @minikkeuen, @newfiesledneck, @NoblezDomain, @prisoner310, @Promansis, @SirAdoni, @SonaGat3, @SpicyMarinara, @stonebystone.

Full changelog: v2.4.6...v2.5.0

Don't miss a new Marinara-Engine release

NewReleases is sending notifications on new releases.