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
sleepandalarmoperations 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,:linejumps in the current editor, andfile:lineopens 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
.humbugdirectory 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
.humbugdirectory exposed to the outer mindspace's AI tools, which only excluded their own root's.humbug. Every.humbugdirectory 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
.humbugdirectory 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, andlet*with a single newletform that handles letrec-like semantics. This dramatically simplifies the langauge surface. - Added
pptx-decodeandpptx-encodemodules 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-decodeandxlsx-encodemodules to the standard library. - Renamed
menai-pretty-printtomenai-formatas it more accurately reflects its role as a canonical formatter.menai-formatnow has a new canonical format. - Added capturing groups to the
regexpmodule.search-groupsandsearch-all-groupsreport each group's extent, andreplaceexpands$1..$nin 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-decodeandhtml-encodemodules to the standard library. - Added
integer-gcdandinteger-lcmoperations with VM opcode backing. - Added more float opcode-backed operations to handle things like NaN, Inf, etc.
- Added a
statsmodule to the standard library. It provides descriptive statistics — mean, median, variance, quantiles, histograms, correlation, and linear fit — over a column of floats, withvector-andlist-forms. - Added
vector-fillto 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
regexpstack 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
letbinding. - Fixed a problem that prevented VMs from being reused.