2026-11-02: Humbug v58 and Menai v0.9

Published: 2026-11-02

Some significant updates to both Humbug's usability, it's ability to run more autonomously, and Menai's functionality and performance.

Humbug v58

New features:

  • The clock tool's sleep and alarm operations now show a cancel control inside the executing tool-call message when the wait is longer than five seconds. Cancelling ends the wait immediately and the AI is told the user interrupted it.
  • Quick Switcher now supports Go to Anything prefixes: @ searches conversations, > runs commands, :line jumps in the current editor, and file:line opens a file at a line. The command palette covers the application menus, lists only commands that are valid right now, and shows each command's keyboard shortcut.
  • Tabs can now be moved without dragging them. A tab's context menu can send it to the column on either side, to a new column, or to a different place in its own column, and the View menu offers the same for the current tab. Ctrl+Alt+Left and Ctrl+Alt+Right move the current tab between columns, creating an adjacent column at an edge when the source column retains another tab. Ctrl+Shift+PgUp and Ctrl+Shift+PgDown reorder the current tab within its column.
  • Support gzip compressing HTTP client requests to the Anthropic and xAI backends.
  • Added a Network Access settings page with allowlist and denylist for the HTTP tool. Allowlisted GET and HEAD requests no longer prompt, and every redirect target is checked before it is followed.
  • Opening a folder that is not a mindspace, in this window or a new one, now offers to initialize it rather than reporting an error. A mindspace's .humbug directory now ignores itself in git, so its contents are never committed with the user's work.
  • Added GPT 6.1 Terra.
  • Added MiniMax M3.1 Flash, and corrected the reasoning effort levels offered for MiniMax M3.
  • Removed Qwen 3.5 from Ollama cloud as it has been removed from the model catalogue.
  • The mindspace log now captures all events.
  • The interaction log now records every prompt, AI reasoning and AI response, and every entry that belongs to a conversation carries that conversation's identifier, so the audit trail can be read conversation by conversation rather than as unconnected prose.
  • Improved rendering performance for long-lived conversations.

Bug fixes:

  • A mindspace inside another mindspace had its .humbug directory exposed to the outer mindspace's AI tools, which only excluded their own root's .humbug. Every .humbug directory within a mindspace is now excluded.
  • Fixed an exception where opening an editor from a diff view's context menu triggered a line size change.
  • The .humbug directory had mistakenly been exposed in the sidebar views.
  • Reordering tabs by dragging them within a column was not recorded in the session, so the original order came back the next time the mindspace was opened.
  • Support gzip-encoded SSE streams coming back from AI backends.
  • Fixed a problem where MiniMax M3 tool calls did not work correctly with the Ollama backend.
  • Fixed a probelm where reasoning efforts were not correctly used in the Ollama backend.
  • Inserting a new file or folder in the breadcrumb view now places it in the correct directory.
  • The inline editor for a new or renamed file or folder in the Files panel started at the left edge of the row and covered the item's icon.
  • Scrolling the Files panel jumped the first time it was used after creating a file or folder, because the panel's scrollbar could fall out of step with the tree it drives.

Internal structure changes:

  • Updated the Menai language dependency to v0.9.0.

Menai v0.9

New features:

  • Replaced let, letrec, and let* with a single new let form that handles letrec-like semantics. This dramatically simplifies the langauge surface.
  • Added pptx-decode and pptx-encode modules to the standard library.
  • Significantly improved performance of deflate-decompress.
  • Significantly improved performance of deflate-compress.
  • Added a common subexpression elimination (CSE) optimization.
  • Added xlsx-decode and xlsx-encode modules to the standard library.
  • Renamed menai-pretty-print to menai-format as it more accurately reflects its role as a canonical formatter. menai-format now has a new canonical format.
  • Added capturing groups to the regexp module. search-groups and search-all-groups report each group's extent, and replace expands $1..$n in its replacement.
  • Unbalanced-parenthesis errors now list the forms still open at end of input, innermost first, and name the ) that closed a form before its body.
  • Removed the Correct:/Incorrect: toy examples from syntax errors. They restated the rule with generic code unrelated to the source being compiled. Examples that show the shape of a form the reader may not know are kept.
  • Added html-decode and html-encode modules to the standard library.
  • Added integer-gcd and integer-lcm operations with VM opcode backing.
  • Added more float opcode-backed operations to handle things like NaN, Inf, etc.
  • Added a stats module to the standard library. It provides descriptive statistics — mean, median, variance, quantiles, histograms, correlation, and linear fit — over a column of floats, with vector- and list- forms.
  • Added vector-fill to the prelude, which builds a vector of n copies of a value.
  • Improved constant folding for integer and float comparisons.
  • Implemented VCode-level constant folding.
  • Implemented VCode branch folding when the condition is a constant.
  • Improved interprocedural type analysis.
  • Added an instruction scheduling pass. This pushes definitions close to uses, allowing register pressure to be reduced in common loop patterns.
  • Improved inlining to enable inlining in a few more places that before.
  • Improved type guard hoisting.
  • Improved the LICM guard hoisting to cover more scenarios.
  • Added an option to reuse VMs in menai-test.
  • Reduced overall test times by 3x.

Bug fixes:

  • Fixed a regexp stack overflow. A repetition recursed once per character, so a run of a few hundred characters raised "maximum call depth exceeded".
  • Reserved words are now protected correctly.
  • Fixed variable capture during inlining. A binding in the inlined body could capture a variable that was free in the argument, silently producing a wrong result.
  • Fixed namespace names not being shadowable by an inner let binding.
  • Fixed a problem that prevented VMs from being reused.