5.1.0 — Walk the grid from the keyboard

A snapshot as of 5.1.0 (released 2026-09-18). It will go stale as the app moves on — that is expected, and the living reference is the guide each section links to.

Two things ship here. The first needs a key binding before you have it; the second needs nothing.


1. Move the cursor across the tiled grid

Until now, reaching a neighbouring terminal in the un-zoomed grid meant the mouse. zoom-next / zoom-prev walk the grid, but only while a cell is enlarged — they move the enlargement, so there was no keyboard way to move the cursor around the tiles themselves.

focus-next and focus-prev are that missing pair.

Bind them

Shortcuts are opt-in and there are no defaults — every key you bind is a key the program inside the terminal stops receiving, so nothing is taken from you by surprise. Open ~/.mulmoterminal/config.json and add a keymap block:

{
  "keymap": {
    "focus-next": "Alt+ArrowRight",
    "focus-prev": "Alt+ArrowLeft"
  }
}

Restart the server (Ctrl+C, then npx mulmoterminal@latest again) and reload the browser tab.

Pick keys the terminal does not want. On macOS, Alt+ArrowLeft/Right is word-motion inside most shells and editors, so binding it here takes that away. If you live in the terminal, prefer something like Ctrl+Alt+ArrowRight, or the function keys. The keymap reference lists the full syntax and several worked examples.

What it does

  • Moves the keyboard cursor one terminal along the on-screen order. The layout does not move; the focused cell lifts slightly, which is the existing marker.
  • Switches page at the edge — the cell’s page is brought on screen, the same way next-attention already does.
  • Stops at the ends rather than wrapping.
  • Skips an empty launch cell, because focusing one does nothing visible and would read as a dead key.
  • Declines while a cell is enlarged. That state belongs to zoom-next / zoom-prev. If you bind a send to the same keystroke, it fires there instead.

Do not bind both pairs to one key. A key bound to zoom-next and focus-next resolves to zoom-next alone — the resolver takes the lowest-ranked bound action and stops — and the config validator will warn that focus-next never fires. This is deliberate; the reasoning is in the keymap reference.

How to tell it works

  1. Open at least two terminals, and make sure none is enlarged.
  2. Click into one so it has the cursor.
  3. Press your focus-next key. The lift moves to the next terminal, and what you type goes there.

2. The cockpit roster fills in for codex and cursor cells

Nothing to configure.

The cockpit roster — the text rows you get when you enlarge a cell in the grid — shows summary / prompt / reply per cell. On a codex cell all three were blank, while the Claude cell beside it was filled.

The route behind those rows read Claude’s transcript whatever the cell was running. Codex mints its own session id and writes its rollout somewhere else entirely, so there was no file to read and the row came back empty. It now reads each session’s own log.

  • codex and cursor cells now show their prompt and reply.
  • grok, muse, Antigravity and Copilot still show neither — reading those agents’ logs is separate work, tracked in #1822.
  • The summary line is still blank for every agent but Claude, on purpose: that value is the title Claude Code writes into its own transcript, and no other agent writes an equivalent anywhere. What to put there instead is being decided in #2123.

How to tell you have the fix

  1. Start a cell with codex and exchange at least one turn with it.
  2. Enlarge any cell so the roster opens.
  3. That codex row now carries a prompt and a reply. Before 5.1.0 both were blank.

Also in this release

Codex cells also got faster to supervise. Each roster poll used to walk the whole ~/.codex/sessions store to find a cell’s rollout — twice per cell, synchronously, on the thread that drives every terminal. That lookup is now remembered, so a grid full of codex cells no longer pays for it on every refresh.


5.1.0 carries #2120 (for #2106) and #2122 (for #2121).


This site uses Just the Docs, a documentation theme for Jekyll.