mnml 0.3.2
Release notes for mnml 0.3.2, the week after the cutover — a sessions mode, an API, and links everywhere.
mnml 0.3.2 is the week after the cutover. Sessions get a mode of their
own — every Claude Code and Codex session side by side, with a ring
that walks the ones waiting on you — and mnml grows an API: a local
socket with mnml remote, a gate on what a program in a pane may ask
for, and a face for Claude Code's IDE protocol, so a session can open
files, read the selection and show its diffs in a review pane with no
setup. Ticket keys and PR references are links wherever they appear.
The dashboards prefetch and refresh on their own cadence. Jira and
Bitbucket 0.2.2 ship alongside: their chips wear Atlassian's own icons,
and their cards and terminals link to the issue or pull request they
name.
This release is 1 contributor over 257 commits since 0.3.1.
Highlights
A program in a pane asks first
A program running in a pane can no longer run commands through the file
channel unasked. Anything that changes more than the view, and every
open-pty, waits on a toast with a Review button: Allow once,
Allow for the session, Deny or Cancel, and nothing answered in two
minutes is denied. Every command has a class — view, edit, write or
exec — and every answer is written to .mnml/ipc/audit.jsonl. See
What a program may do.
The API
Each mnml serves a local socket that mnml remote (or mnml r) talks
to: open PATH[:LINE[:COL]], run COMMAND-ID, status, panes, and
call METHOD [JSON] for anything raw. Run in a pane it reaches that
mnml as that pane; from any other terminal it finds the mnml whose
workspace holds the current directory. Every pane gets its own token,
and a command that changes more than the view asks you first, naming
the pane. See mnml remote.
Claude Code links to mnml as its IDE
A Claude Code session started in an mnml pane links to mnml with no
setup. It sees your selection, opens files, reads diagnostics, and
shows its edits as a diff in mnml's review pane, for you to accept hunk
by hunk or reject. A linked session wears ⇄ on its tab. Settings →
Integrations → API turns the socket, and the link, off. See
Claude Code, with no setup.
A sessions mode, and a ring of who is ready
The Sessions row of the activity bar puts the editor layout aside and
stands every Claude Code and Codex session in columns side by side
(ai.session_columns, 1 to 4), the rest stacked behind them; click it
again and the layout comes back as it was. sessions.next_waiting
(Ctrl+Alt+N, space a j) walks every session ready for you — the
ones waiting on you first, then the ones that finished or ended since
you last looked — and skips the rest. See
AI sessions.
Links everywhere
Ticket keys and pull-request refs link everywhere text is shown: a
terminal pane, an editor, the Markdown preview, the git graph's detail
column, a toast, an HTTP response body and the SESSIONS cards. A dotted
underline marks one, the pointer lights it, and a click (Ctrl/Cmd+click
in a terminal or editor) opens it. What a ticket key looks like comes
from the installed integrations: a manifest's new links[] pairs a
pattern with the address it opens. With none declaring one, only URLs
link.
Jira and Bitbucket 0.2.2
The Jira integration declares the issue key, and Bitbucket links
<repo>#<number> to that pull request in your workspace; --install
writes your site or workspace in. The four Atlassian chips wear
Atlassian's own icons: the pull request, the pipeline loop, the board
and the ship. Run ./run.sh install-font to pick the icons up.
To update, update mnml first, then open the Marketplace tab under INTEGRATIONS: an installed Jira or Bitbucket 0.2.1 reads update available. See Marketplace.
Changelog
What a 0.3.1 user notices. The full list is the v0.3.2 section of CHANGELOG.md and the GitHub release.
Safety
- A
run-commandof anything that changes more than the view, and everyopen-pty, waits on a Review toast; two minutes unanswered is a denial, and the toast never takes the key you are typing. - Every command has a class — view, edit, write or exec — listed in
docs/commands.md; Allow for the session covers one class until mnml quits. - Each answer is a line in
.mnml/ipc/audit.jsonland inevents.jsonl. .api.allow_commandsand.api.clientsinconfig.zonlet a command or the file channel through unasked; an untrusted workspace cannot set them.
The API
mnml remote/mnml r:open,run,status,panes,ping,instancesandcall, with--json.docs/API.mdhas the methods and the exit codes.- Every pane gets the socket and its own token, gone when the pane closes. Anything without a token may only read the status and the command list.
- Settings → Integrations → API turns the socket off.
- Claude Code sessions in a pane link to mnml as their IDE; an accepted diff is saved, and a session asking to save a file itself asks first.
- A linked session wears
⇄on its tab and its SESSIONS card, and a toast says so when it first connects. ai.send_selectionpoints the session you looked at last at the selected lines.
Sessions
+ New sessionopens batches of 3 or 6 as well as 2, 4 or 8.- The sessions mode, from the activity bar's Sessions row: columns side
by side (
ai.session_columns, default 2; the AI chips' Show side by side sets it). In it Ctrl+Tab steps the focused column's stack, Ctrl+1 to Ctrl+9 show the rail's Nth session there, and Ctrl+N starts one in it. Ctrl+Shift+N starts a Claude Code session anywhere. - Closing a session keeps the shape: the zoom passes to the next one, and an emptied column is refilled from the stack.
- One click on a SESSIONS card shows that session when zoomed or in the
sessions mode; a
•marks a session on screen, a◆one that finished or ended since you last looked. sessions.next_waiting/prev_waiting(Ctrl+Alt+N/Ctrl+Alt+Shift+N,space a j/space a k) walk the sessions ready for you; the toast says which,needs you: NAME (3 ready).- The bell's right-click leads with a
Needs input: NAMErow per waiting session, then Finished: and Ended:. - The
session needs inputtoast goes to the session when clicked. - Search sessions… (
ai.search_sessions) searches every Claude Code and Codex transcript of the workspace; Enter goes to that session. - A session in the background, or started through a shell or wrapper
script, now counts in a strip's
‹ n/m ›. - URLs and ticket keys on a SESSIONS card and in the sessions table are
links, listed as
Open …rows in the card's menu; Shift+F10 opens it. - The help panel steps aside while SESSIONS has more cards than fit.
- SESSIONS is ready the first time you open it, and a changed transcript shows within half a second while it is on screen. Settings → Integrations → Dashboard refresh chooses auto, fast, slow or manual.
Links
- Ticket keys and PR refs link in terminal panes, editors, the Markdown preview, the git graph's detail column, toasts and HTTP response bodies, through the one rule set the integrations declare.
- In a terminal Ctrl/Cmd+click opens a link and a right-click offers
Copy link / Open link; in an editor
gxor Ctrl/Cmd+click. - Bitbucket links
<repo>#<number>; a bare#42names no repo and does not link. Reinstall the integration to pick this up. - The wheel over a link scrolls what is under it.
Tabs
- A strip whose tabs overflow shows
‹ 2/5 ›and pages;⋯beside it opens the buffer picker. The+N hiddencount is gone. - A page holds whole tabs only, and opening the tab just past the edge brings it into view whole.
- Double-click a tab to zoom its pane; again to put the splits back.
The frame
- The sidebar is a fifth of the window by default (30 to 48 cells) and
follows a resize; a number in
ui.tree_widthstill pins it. Its divider's right-click resets, sets, hides, auto-hides or moves it. - Every menu prints each row's chord at its right edge, for the profile you are in: VS Code's under standard, Neovim's own keys under vim.
- The standard profile has VS Code's AI chords: Ctrl+Alt+I opens a Claude Code session and Ctrl+Alt+Shift+L asks Claude a question.
Sandbox and demo
mnml --demoopens a sample Zig workspace in a throwaway home, beside offline Jira and Bitbucket servers and a stand-in Claude Code session — no model, no network. A downloaded mnml carries the demo's servers (not on Windows, which has no--demo).--sandboxand--democlean up on SIGTERM, SIGHUP or SIGINT as on a quit, and exit with 128 + the signal.mnml --helplists--demo.ipc.report_input = truewrites aninputline toevents.jsonlwhen a person presses a key, clicks, scrolls or pastes — never what was typed. Off by default.
Text fields
- Every text input takes the mouse: a click places the caret, a double
or triple click selects a word or the line, and Shift with a click or
the arrows grows a selection — prompts, pickers, every sidebar and
pane filter, the find bar, the
:line, Settings, the HTTP pane and the debug console. - A paste goes where you are typing, not to the editor underneath.
- In a terminal or session pane a double-click selects a word and a triple-click the line.
Terminal panes
- The scrollback has a scrollbar over the pane's right column, shown while scrolled back or under the pointer; it never takes a column from the program.
- A right-clicked link stays lit while its menu is open.
Splits
- Auto-equalize splits carries a tick in the Window menu and has a switch in Settings → UI. Off by default.
Jira and Bitbucket chips
- The Bitbucket pull requests, Bitbucket pipelines, Jira Boards and Jira
Fix Versions chips wear Atlassian's design-system icons, baked into
MnmlSymbols.ttf. Run./run.sh install-fontto pick them up; under--asciithe chips still readBP,BL,JBandJV.
Fixes
- Copies outside the editor reach the system clipboard.
- Ctrl+Shift+V and Shift+Insert paste into a terminal pane in both
profiles; Ctrl+C over a selection copies without reaching the program;
ui.copy_on_selectturns drag-to-copy off. - The tree's lines and chevrons share the menu bar's grey and meet what
they connect;
MnmlSymbols.ttfuses JetBrains Mono's metrics. - Crashes fixed in
:onlyand after closing panes another tab page or git mode showed. - Switching the workspace now switches the title, statusline, git mode
and
Ctrl+P, not only the tree. - HTTP: a request naming a
{{VAR}}no env defines is not sent, and says which variable and where to define it; the Env chip readsno envwhen there is none. - Moving the sidebar to the right takes the activity rail and the width with it; Esc in Settings puts a previewed width back.
- Vim
]a/[astep through sessions from a terminal pane's T-NORMAL mode too. - On Linux, a terminal whose command prints and exits at once no longer comes up empty.