---
title: What changed in 2.5.0
layout: default
parent: English
nav_order: 1027
---

# What changed in 2.5.0
{: .no_toc }

Written on **2026-07-28**, as a snapshot of that day. Behaviour moves; this page does not. For the
reference that is kept current, follow the links out of each section.

- TOC
{:toc}

---

## Your rate-limit windows, in the grid header

The **5-hour and 7-day windows your subscription shares across every session** are now on screen
whenever the grid is, for Claude and for Codex.

![The grid header showing 5h and 7d rate-limit percentages for Claude and Codex](../images/v2.5.0-rate-limit-gauge.png)

Running a grid of agents is what burns those windows fastest, and until now nothing in the app
showed them — the only way to look was to type `/usage` in a session, which you do after wondering,
not before. The point of putting them in the header is to notice a window filling up **without
going to look**.

**Nothing to configure.** Numbers appear as soon as an agent reports; hover for when each window
resets.

### Reading it

- `5h` and `7d` are the **percentage already spent**, so bigger is closer to stopped.
- Past **75%** the figure turns amber. That is a threshold, not a warning from the server.
- Two rows appear only when both agents report; with one agent there is no mark, because there is
  nothing to tell it apart from.
- A window that is missing is **not drawn at all**. It never shows `0%` for absent data — that
  would read as "everything left" at the moment we cannot see how much is.

### What it costs

Codex is free: it writes both windows into its own session file, and MulmoTerminal reads them.

Claude has no such file. The figures exist only in the payload Claude Code hands to a `statusLine`
command, and only after a session has had one API response — so MulmoTerminal runs a **hidden
session of its own**, asks it one trivial question, reads the answer off the status line, and closes
it. That costs one small query.

Because the gauge measures a budget and that query spends it, the hidden session runs **only while
a browser is actually showing the gauge**, and only when what we hold is more than ten minutes old.
Close the tab and nothing is spent. The last figures are cached, so opening the grid shows them
immediately rather than after the next probe.

### If nothing appears

- **On API-key billing rather than a Claude.ai subscription**, the windows do not exist and nothing
  is drawn. This is a Pro/Max feature of Claude Code, not of MulmoTerminal.
- **Codex not installed** (or never run) means no session file to read, so its row is absent.
- **Right after a restart with no cache yet**, Claude's row can take up to a minute — the hidden
  session has to start and answer first.

---

## Which PR or issue a cell is on

Each cell's header now says what that cell is working on — `#977 → #966`, meaning the branch's PR
and the issue that PR closes. It **disappears as soon as the PR is merged or closed**, so what you
see is always live work.

![A cell header: the directory badge, the branch, then the work chip reading #2621 → #2613](../images/v2.5.0-work-item-chip.png)

A cell that has an issue but no PR yet shows just the issue, which is where most of the time on an
issue is actually spent.

{: .note }
> **If you have set `chips` in your config, add `"work"` to it.** A configured list replaces the
> defaults entirely rather than adding to them — the same rule chips have always followed — so a
> hand-written list will not grow this one on its own. Untouched headers already have it.

Where the issue number comes from, in order:

1. The **closing keyword in the PR body** (`Fixes #966`) — written by the author on purpose, so it is
   taken as given.
2. Failing that, the **branch name** (`fix/966-…`), but only as a candidate that is confirmed to
   exist first. `release/2026-07-28-hotfix` would otherwise be read as issue #2026, and no pattern
   can tell a year from an issue number.

→ [Customizing the header](config.html#header)

---

## A config written by a newer version is no longer erased

If you run **more than one version of MulmoTerminal against the same machine** — a released one and
a checkout, say — the older one used to rewrite `~/.mulmoterminal/config.json` **without the settings
it did not know about**, silently deleting them.

That is fixed: unknown keys are now carried through a write untouched. Downgrading, or running two
versions side by side, no longer costs you settings the newer one wrote.

Nothing to do. If a setting has gone missing before now, add it again and it will stay.

→ [Configuration](config.html)

---

## Smaller things

- **The PR body says which clone did the work** more reliably, including when the PR is created from
  a prompt rather than the button (→ [Which clone made this PR](config.html#pr-workdir-footer)).
- **The activity timeline** no longer renders underneath the panel it was opened from.
- **Focus after leaving zoom** returns to the terminal instead of being dropped.
- Dependency updates.

---

← [Back to the feature reference](features.html) / [Guide contents](index.html)
