Release notes
Fx v0.0.15
fx now uses 70% less memory in long conversations. The model catalog updates without restarting fx. A leaner session store with 18% faster resumes and /fork to branch from an earlier prompt.
Improvements
- In a local synthetic benchmark with 96 MiB of saved images, fx used 69.5% less peak memory (116.5 MiB vs 381.8 MiB) and completed turns 3.3× faster (288 ms vs 939 ms) than 0.0.14.
- Text sessions resume about 18% faster in local comparisons with 0.0.14.
- WebAssembly also handles longer image conversations: a separate local benchmark completed 140 turns where the earlier implementation ran out of memory at turn 102.
- Durable libfx sessions no longer reread unchanged log entries. In a 40-turn benchmark, starting the next turn took 7 serial storage calls instead of 11, a 36% reduction.
- Durable libfx sessions save prompt, steering, and tool images once instead of copying them into every checkpoint. The conversation keeps its newest 4,096 images, up to 512 MiB, and replaces older images with notes.
- fx saves pasted, dropped, and attached images once per session and tells the model where to find the saved copy. Resuming or forking a conversation loads image bytes only when needed.
- fx loads prompt history faster by skipping entries from other workspaces.
/modelrefreshes its catalog in the background, so newly released models appear without restarting fx. Cached models remain available if a refresh fails.- For libfx engines that save their state, a turn's
resultresolves only after the final state is saved. If saving fails, the result rejects instead of reporting success. - Session timestamps, transcript times, usage resets, and sign-in expiry dates now use your local time zone.
- When the agent reads saved output, the transcript names the command or tool that produced it. Searches show the query too.
- ACP clients show command output rather than JSON in completed shell tool calls, including after reopening a saved session.
- Missing or changed command-output files no longer prevent
fx session recoverfrom recovering an older conversation. It leaves the original untouched and reports which content is unavailable. fx doctorlists older sessions it cannot convert and explains what recovery can keep.fx sessions convertreports skipped sessions and files left in their original folders./statusopens a scrollable panel with the current session ID, whether it is saved, and the active configuration./permissionsshows configured rules, temporary approvals, and remembered session rules in a scrollable panel, including the IDs used to revoke them.- The resume picker searches all saved conversations in scope, not just loaded pages, and shows
Load moreonly when more matches exist. - libfx agents and the MCP adapter can use more than 64 tools.
- fx can ask up to 20 questions in one batch, up from 4.
- Vercel and MCP sign-in screens show clickable links instead of long authorization addresses.
- Changing MCP configuration restarts only the affected servers. Other servers keep their connections, tool lists, running calls, and sign-ins.
/mcpgroups servers that need attention and shows each server's status, connection, and tools. Startup notices wait for servers to settle.- MCP tools show progress while they run, both in the terminal and in
fx ask. - Tool group summaries and the status line count MCP calls separately from shell commands.
- The agent can distinguish command runs with identical output when reading their saved results, including after resuming a session.
- Large MCP text results remain available through
read_tool_resultin saved sessions instead of failing when one item exceeds 1 MiB. - Slack renews its MCP login without requiring another sign-in every 12 hours.
New Features
/forkstarts a separate session before an earlier prompt and puts that prompt back in the composer to edit or resend. The original conversation stays unchanged./effortlets you choose reasoning effort without changing models. Open its menu or set a supported level directly with/effort <level>.- When an MCP tool requires a browser action, fx asks before opening its links and waits for completion, with Retry and Cancel available.
Bug Fixes
- When a request is too large, fx can retry with fewer older images, including after resuming an interrupted turn. Native libfx also leaves out older images to fit its request limit instead of failing with
HostStreamBackpressure. - Models listed as supporting vision, including Grok 4.7, now receive attached images and images returned by tools even when the catalog does not list document input support.
- Durable libfx sessions restore images from completed tool calls after a crash, not just the text.
- Cancelling a durable prompt during an image write no longer waits for the write to finish or queues the cancelled prompt.
- Images in prompts recalled from input history remain available after fx exits, even if the temporary capture has been deleted.
- libfx restores a reply saved just before a crash without asking the model to generate it again.
- Reopening a libfx turn no longer fails after the turn yielded and continued past a checkpoint.
- Resuming a compacted conversation no longer sends the model tool steps that its summary already covers.
- Reopening an interrupted session keeps the unfinished prompt and completed tool work. Tool results that the model saw in full are restored in full, rather than replaced with short previews.
- Converting an old session keeps its original folder if a file cannot be copied, including oversized command output, and tells you which files were left behind.
- A first prompt rejected because of an API-key sign-in error stays saved, so you can fix the key and resume it.
- The resume picker orders older and converted sessions together by recency.
- Fixed a crash that could occur on a later turn in an interactive session.
- Updating fx before its first prompt no longer fails while trying to resume an unsaved session.
- Codex, Grok, and custom Chat Completions streams time out after 10 minutes without a response event, so fx can attempt to recover the turn.
- fx can recover an empty reply cut short by a provider's default output limit by retrying once. If the reply still cannot produce text, fx reports the limit instead of saying
Done.. - A connection can use a working address even when another address is unreachable and background tasks occupy the worker pool.
- Fixed a macOS connection error or crash that could occur after another request finished.
- Custom Chat Completions turns no longer abort when the model requests an unknown tool or supplies malformed arguments. fx returns a tool error so the model can continue.
- libfx host tool calls no longer fail when their JSON input contains line breaks.
- ACP tool calls no longer remain pending when an unsupported tool is requested or a turn fails, pauses, or is cancelled.
- Pasted text no longer disappears when extra input arrives immediately afterward. fx keeps the paste and ignores that extra input instead of submitting it.
- File-approval answers no longer get lost while background transcript or status updates repaint the screen.
- Starting a new conversation clears the previous session's context-usage count, even when session saving is unavailable.
- If an interrupted reply's restart exceeds the context limit, fx compacts the conversation and retries instead of ending the turn.
- Follow-up instructions submitted while a Stop hook runs stay in the current turn instead of being left for a later turn.
- Images from earlier turns no longer block a new text message when the selected model cannot use them. fx keeps the saved images and leaves them out of that request.
- Terminal output keeps Unicode characters and following text aligned when output arrives in chunks, including after malformed text.
- Fixed a crash when a terminal application requests the cursor position after changing scroll margins.
- Forked sessions are recognized as saved before you send another prompt, and fx shows their resume command on exit.
- zsh commands containing unquoted
==or words beginning with=no longer fail with command-not-found errors.
…