4.14.0 — Restart an agent without leaving the cell

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

npx mulmoterminal@latest

One thing here needs configuring, and deliberately so: the restart is opt-in, and nothing appears in your cells until you write it in. The rest applies on its own.

Restart the agent in the cell you are looking at

Change an MCP server, a plugin, or ~/.mulmoterminal/config.json, and the agent already running in a cell keeps the old view of the world. Until now the way back was: close the cell, pick the directory and the agent again in the launcher, then find the conversation under or resume here.

There is now a restart that stays where you are — same cell, same directory, same conversation.

It is not in the cell header by default. Most people never need it, so it is two opt-in surfaces and you choose which (or both).

As a header button

Add it to buttons in ~/.mulmoterminal/config.json:

{
  "buttons": [
    { "id": "restart", "icon": "restart_alt", "label": "Restart the agent", "run": "action", "action": "restart" }
  ]
}

Writing buttons replaces the defaults. The array you write is the whole set — if you already have buttons you want to keep, add this entry to them rather than pasting this on its own. See the trap.

Save the file and reload the browser tab. A restart_alt icon appears in the header of every agent cell — that icon appearing is how you tell the config took.

A cell header with the restart icon among its buttons, to the left of the chat, copy and history icons

A Shell cell or a launcher chip shows no custom buttons at all, this one included: that terminal is your own command line, and nothing configured here is added to it.

As a keyboard shortcut

Add it to keymap in the same file:

{
  "keymap": {
    "zoom-toggle": "F9",
    "terminal-restart": "Ctrl+Alt+R"
  }
}

terminal-restart acts on the enlarged terminal, so bind a way to enlarge one as well if you have not already — zoom-toggle above is there for exactly that reason. Reload the tab after saving.

What it costs, before you bind it

It restarts immediately, with no confirmation, even mid-turn — the same treatment terminal-close gets. Bind it to something you will not hit by accident.

The conversation comes back by being read from its transcript, which spends real tokens. This is not a free reload, and that is the reason the button is not shipped in every header: it is for the moment you changed something the running agent has to re-read.

How to tell it worked

Register or edit an MCP server for the project, press the button (or the key), and ask the agent for its tools once it is back. The conversation should be the one you were having, and the new server should be in the list. codex, antigravity, grok and muse cells restart the same way — each resumes its own conversation.

The reference is run: "action" for the button and Keyboard shortcuts for the key.

Shared apps: a participant’s page can be limited to their own rows

For people writing shared apps with the mulmoterminal-shared-app skill. The runtime moves to @receptron/sharedapp 0.35.0, which adds ownRead on a view: the page is sent only the rows the viewer wrote, instead of every row plus a check on each one.

The magazine template records when to reach for it, as decision 10: while a handful of people are writing, handing the whole collection to every page is the right shape — it is what lets the app say “that URL name is taken” before the article is sent. It stops being right when the archive grows, because a page that exists to fix your own article is then reading everyone’s, article bodies and all, and that read grows with the age of the app.

Ask the skill for the magazine template to read the decision in full; the guide’s Shared apps page remains the reference for the feature as a whole.

Fixes worth knowing you have

A PORT left behind in tmux no longer steals the app’s own port

MulmoTerminal stopped handing its own port to every cell in 4.11.0. What that fix could not reach was the tmux server, which outlives every restart of the app: a PORT baked into it before the fix kept being handed to new panes, so a dev server started in a cell (next dev, and anything else that reads PORT) still grabbed the port MulmoTerminal was listening on, and the browser dropped.

Two things changed. On startup, a PORT in the tmux server’s global environment that equals the port this app is listening on is cleared. And a tmux server that MulmoTerminal creates is no longer started with that port in its environment in the first place.

The manual workaround on the 4.11.0 page is no longer needed — that page is a snapshot of its moment and still says to run tmux -L mulmoterminal set-environment -gu PORT after upgrading. You can skip it now.

How to tell you have the fix: open a new terminal in a cell and run echo $PORT. It should print nothing, unless you exported one yourself. A PORT you set on purpose is untouched: launching with PORT=3000 mulmoterminal --port 34601 still puts your 3000 in the cells, because that value is not the one the app is holding.

Existing panes keep the environment they were born with — this reaches the ones you open from here on.

Smaller ones

  • Dependencies moved forward: @google/genai 2.19, zod 4.5, puppeteer 25.9, sharp 0.35.4.

Where the reference lives

This page is a snapshot; the guide is the part that stays current. Header buttons · run: "action" · Keyboard shortcuts · Shared apps · Every key in the config file


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