Desktop app: a mod pane goes back to its first column and width after a switch to another session and back
What happens
In the desktop app's Code tab, I open a mod pane with $.ui.open({ id, title }). I drag it to another column and resize it. Then I switch to another session and come back. The pane is back in the rightmost column at its first width. The app's own panes (file viewer, browser) keep their column and width through the same switch.
Steps
- Load any mod that opens a pane from a slash command. The
pane.tsxexample from the plugin-authoring skill is one. - Run the command. The pane docks in the rightmost column.
- Drag the pane to another column and resize it.
- Click another session in the sidebar, then click back.
- The pane is in the rightmost column again, at the width it opened with.
What the engine reports
I logged every ui.* and session.* event and every Pane render in the mod:
- The switch raises
session.detach(reason: "detach") and thensession.attachwith a newviewport. - Before the switch, the
Panerender hadbodyColumns: 43after my resize. The first render aftersession.attachhadbodyColumns: 42, the opening width. - Between the resize and the put-back, the mod made no
$.ui.opencall, no$.ui.closecall, and no$.statewrite. Its only part was answeringui.render.
So the client re-seats the pane at session.attach, and the mod has no way to keep its place. The PaneOpenArgs.columns doc says that a dragged width "wins, this session's or a kept one". But the dragged width is not kept across the switch. Also, no API sets a column.
Expected
A mod pane keeps the column and width that the person gave it. The app's own panes already do this through a session switch.
Related
- #83002 (closed): the file viewer lost its state on a switch to another session and back.
- #85936 (closed): after a toggle, the Browser pane forgot its width.
- #80352 (closed, not planned): save and restore pane layouts between app runs. This report is narrower. The pane loses its place within one app run, at a switch to another session and back.
- #99404 (open): let a plugin choose the pane placement. A dragged place that the app keeps covers part of that need.
Environment
- Seen on 2026-10-04: Claude desktop app on macOS, Claude Code 2.1.286
- Current versions, not yet re-tested: Claude desktop app 2.31226.1, Claude Code 2.1.287, macOS 27.0.1
- Surface
desktop, paneplacement: "dock", viewport 106 columns, fullscreen