Skip to content

4.9.0

Choose a tag to compare

@isamu isamu released this 17 Aug 08:26
· 578 commits to main since this release

Highlights

  • A pane for the prompts you sent (#1748, #1749) — with several cells running it stops being obvious which one you told what. The cell header shows only the latest prompt, the Activity timeline shows what the agent ran, and the roster row shows what the agent said. None of them is a list of what you asked for. Press the forum button on an enlarged cell to get one: newest first, read-only, expands a long prompt in place, and keeps up by itself if left open. Claude and Codex.

    It reads what you typed~/.claude/history.jsonl, not the transcript — and that is measured, not preference. A prompt sent while a turn is running never appears in the transcript as a user record (it lands as queue-operation / attachment), while text a skill injects does. A pane built on the transcript would drop the interruptions you are most likely to forget giving, and add text nobody typed.

Three things the review changed after the plan was written, each measured rather than reasoned:

  • /compact does not reissue the session id. A comment said it did and a chain of id-mapping was built on it. Measured across every transcript on the development machine — 95 compacted, 61 with prompts after — the id was identical in all of them. The chain was deleted and the comment corrected.
  • After /clear, prompts from before the clear are not shown. The header, the AI title and the latest reply all blank on a clear; this pane alone was still showing the finished conversation. The boundary is drawn on time, not the id, because whether /clear reissues the id could not be measured and an id-based implementation fails toward a permanently empty pane.
  • That boundary is persisted. Both the time and claude's id at the moment of the clear were in memory and lost on a restart — losing the time resurrects the erased conversation, losing the id empties the pane. Both moved onto the mark that already records the clear.

Also in this release

  • The prompts pane resumes instead of re-reading (#1750, #1753). ~/.claude/history.jsonl is 8 MB on the development machine and was scanned end to end on every poll. It now resumes from where it stopped, reading only what was appended, and everything a scan reads comes from one file handle rather than a path re-resolved per read — a path can land on two different files across two reads, and a reader that folds a range and then checks something else about "the file" has no way to say the two saw the same one.
  • The dev server no longer restarts forever on a port collision (#1735, #1736). A port already in use made it exit, which made it restart, which made it exit again. It reports the collision and stops.
  • The Windows PTY specs get a 60-second timeout (#1740, #1741). They drive a real PTY, and the Windows runner is slow enough that the default was the thing failing, not the code.
  • collection-plugin is on 4.2.0 (#1754), and a recorded timestamp is no longer editable from the pane — it is the server's record of when a row was written, not a field.

Plans and docs

#1755 records the design for reading a Claude transcript on the phone — the terminal screen cannot answer it, because claude runs in the alternate screen where tmux keeps no scrollback (measured: alt=1 hist=0 on 11 of 12 live sessions).

Release pages in the guide now use a nav_order that descends as the version rises (oldest = 10000000). Shipping a release used to renumber all fifty pages in both languages; it is now one new file per language and nothing else moves.

📖 Setup guide: The prompts pane (日本語)

📦 npm: mulmoterminal@4.9.0