4.22.0 — Two more agents, and which of them will tell you it has finished

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

Two more CLIs run in a cell: GitHub Copilot CLI and Cursor CLI. Seven agents ship now, and the useful question is no longer “can it run?” but “will it tell me when it has finished?” — because the answer differs per agent, and that is what the grid is for.


Which of the seven tells you it has finished

Agent Working (blue) Finished (green) Needs you (amber)
Claude Code yes yes yes
Cursor CLI (new) yes yes no
Codex yes no no
GitHub Copilot CLI (new) yes no no
Antigravity, Grok, Muse no no no

Cursor is the second agent, after Claude, that goes green on its own. A cursor cell you are not looking at raises the attention mark and plays the sound when its turn ends.

Only Claude can tell you it is BLOCKED. For every other agent an approval prompt sits in the cell in silence. That is not a gap in this app: cursor and copilot each emit an event that looks like “blocked” and fires on every tool call whether or not anyone was asked, so using it would mark every tool call as needing you — which is worse than saying nothing. The details per capability are in the capability matrix.


Turning them on

Nothing to configure. Install the CLI you want, restart the server, and it appears in the Agent Picker at the top of an empty cell. An agent whose command is missing simply fails to start that cell; the others are unaffected.

# GitHub Copilot CLI
npm i -g @github/copilot        # then: copilot   (sign in once)

# Cursor CLI
curl https://cursor.com/install -fsS | bash    # then: cursor-agent login

Point either elsewhere with COPILOT_BIN / CURSOR_BIN — a pinned version, a wrapper, a path outside PATH. COPILOT_MODEL / CURSOR_MODEL pass --model.

Cursor’s model names are account-specific, and a wrong one is fatal. cursor-agent exits and prints the whole list rather than falling back, so a cell configured with a model your account does not have will not start. Run cursor-agent --list-models before setting CURSOR_MODEL.

How to tell it worked: open a cell, pick the agent, send anything. The cell’s dot should go blue while it works. For cursor it should go green when the reply lands — switch to another cell first, because a cell you are looking at is not marked for attention.

The reference for picking and installing agents is Which coding agent; the picker itself is in The basics.


What each of them does NOT do yet

  • Cursor gets no GUI tools. Cursor reads its own .cursor/mcp.json and MulmoTerminal does not write that file, so the launcher replaces the four tool-group switches with a line saying so. Whatever you configured there yourself is what the cell gets (#2066).
  • Copilot has no token or context badge and no $ cost. Copilot records its own usage; this build does not read it.
  • Neither has an editable draft: typing into the header’s draft box and pressing Enter is Claude-only for now.

One thing that changed for everyone

Both new agents register their hooks in a file shared by the whole machine — <COPILOT_HOME>/hooks/mulmoterminal.json and ~/.cursor/hooks.json — because neither CLI has Claude’s per-session --settings. Three consequences, all of them ordinary:

  • A copilot or cursor session you start in a plain terminal also posts to MulmoTerminal. It carries an id this server does not know, so nothing happens; the cost is one short-lived, silent process per hook.
  • If you already keep your own ~/.cursor/hooks.json, MulmoTerminal leaves it alone and logs that it did. Cursor reads one fixed path and we do not merge into a file we did not write, so those cells run without status. Move your hooks elsewhere if you want the dots.
  • Two MulmoTerminal instances on different ports share that file, and the last one to start wins; the other’s cells of that agent run without status until their next spawn. It is logged when it happens.

A hook file outlives the server that wrote it, so the cursor poster checks that a live MulmoTerminal still holds the port before it sends anything. A file left behind by a crash posts nowhere.


Also in 4.22.0

  • publishShapeScript posts a ShapeScript model to the public gallery, uploads the script as a Storage object, records which AI model wrote it, and can update a post in place by id — the tail of its gallery URL — instead of publishing a second copy.
  • A Copy button on a presentShapeScript result puts the source on your clipboard.
  • The capability matrix is new: what each capability requires of a candidate CLI, how all seven answer it, and the probe list to run against a new one. Both agents above were added by running that list — and in both cases the vendor’s own documentation did not survive contact with the binary.

No screenshots in this page: the visible change is one more row in the Agent Picker and one replaced line in the launch form, and the captures for this release were not taken. The picker is shown in The basics.


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