BMUX is a browser multiplexer: it splits one tab into panes and lets you and an agent work across them at once. We are porting it into Leverine's workspace. This page is the honest status report — what it is good for, and all the ways it is currently not working out.
status: it's complicated · commands failing at a rate we are now able to countNone of the problems on this page are “panes were a bad idea”. Panes are a very good idea, which is exactly why we keep flogging them. What BMUX gets right, in one go:
Compare three environments without five windows: test, staging, production, side by side, same viewport, same session, no tab gymnastics.
Not “the active tab, if you ask nicely” — every pane, including cross-origin ones, through the same broker that gates every other read. A pane is a permission-scoped document, not a screenshot.
Every command you can type, the model can call — same validation, same refusals, same status line. There is no second, cosier path for the machine.
A .mux file is a list of those commands. No expressions, no variables, nothing that can decide
to do something you did not write down. Where BMUX stripped frame protections browser-wide, here it is one
tab, revoked when the pane closes, and only a person can allow it.
We added a flight recorder, because “so many commands are failing” is not a bug report — it is five different bugs wearing one sentence. Each op is now stamped where it happened, with a reason from a closed set. Here is what a bad afternoon looks like:
18:02:11 ✗ worker/panel.command:split-window 6003ms — timeout 18:02:10 ✗ content/mux.command 1ms — not_open: The workspace is not open in this tab. 18:02:10 ✗ panel.state 800ms — timeout 18:01:58 ✗ tool:open 2ms — no_receiver: the tab did not answer 18:01:58 · worker/mux.command:focus-pane 4ms 18:01:57 ✗ content/mux.command 2ms — refused: This plan allows 2 panes. Close one first. 18:01:57 ✗ content/mux.command 1ms — unknown_action: Unknown workspace op "mux.restore" 18:01:56 · worker/mux.toggle 118ms 18:01:56 … 18 op(s), 11 failed — 6× no_receiver, 3× not_open, 1× refused, 1× timeout
| Excuse | What it actually means | How it feels |
|---|---|---|
| no_receiver | the message never reached the page — wrong tab, a restricted page, or a content script that is not there yet | you click, nothing happens, the panel is very calm about it |
| not_open | it arrived, but no workspace is mounted in that document | “open the workspace first” — it is open, in a different frame |
| unknown_action | the dispatcher does not know that command | a document said this works |
| refused | the workspace said no: pane limit, framing, selector | the only one that explains itself, and therefore the only popular one |
| timeout | nothing answered in time | a spinner, then a shrug |
We are not asking whether panes are nice. We are asking whether this earns its place in the product, and the numbers are not there yet:
Currently at “we would miss it, but we would also get an hour of our life back”. The decision hangs on whether the command success rate can be fixed, and whether the panes earn the framing problem they drag in.
“Open the workspace first.”
— the workspace, open in front of us, refusing a command a real afternoon in October
not a merger separate projects
BMUX and Leverine are kept separate. BMUX is its own project, MIT licensed, and stays that way: it is a multiplexer, it does one thing, and it is maintained on its own terms. What exists here is an experiment — a port of BMUX's ideas into Leverine's workspace, because a browser extension with an agent in it can hold both halves. Nothing on this page claims BMUX is part of Leverine, or that Leverine is BMUX, or that the two are merging. If the experiment proves itself, the relationship will be attributed properly and in writing. If it does not, the panes come out and BMUX stays exactly what it was — a good idea in a different body.
And to be fair to BMUX: the panes that do work, work. It is the plumbing between a page, a worker and a panel that keeps dropping its end of the conversation — and that plumbing is ours.