Summary
Codex sessions no longer let me scroll back to messages that have moved above the visible pane with a mouse wheel, trackpad, or touch gesture. The transcript is still present: PageUp/PageDown navigate it on desktop, and the Response Viewer ("View last response") still shows the latest response.
This appears to be a regression caused by newer Codex hybrid rendering no longer matching Codeman's inline-viewport assumption. It is particularly disruptive on mobile, where PageUp/PageDown are unavailable.
Environment
- Codeman: 1.33.2
- Installation: Docker Compose
- Codex CLI: 0.159.1
- Codex render mode:
hybrid
Reproduction
- Start a Codex session.
- Generate enough output to exceed one terminal screen.
- Scroll upward with a wheel, trackpad, or touch gesture.
Expected
Earlier Codex output becomes visible.
Actual
Scrolling cannot reach output above the visible pane.
- Desktop: focusing the terminal and pressing PageUp/PageDown still navigates the internal transcript.
- Mobile: there is no equivalent navigation key, so "View last response" is the only remaining way to inspect content that moved above the pane.
Diagnostics
Live Codex panes reported:
alternate_on=1
history_size=0
mouse_any_flag=0
For one active session:
GET /api/sessions/:id/terminal?full=1
source: mux-full-history
captureRows: 36
terminalBuffer.length: 8,835
GET /api/sessions/:id/terminal
terminalBuffer.length: approximately 211 KB
The first non-Shell terminal load requests full=1, so this Codex pane receives only the current tmux frame even though the server byte buffer is much larger.
Codeman currently routes Codex wheel gestures to local xterm scrollback. That behavior was based on Codex CLI 0.147.0, where Codex used an inline viewport with alternate_on=0 and growing tmux history. Codex 0.159.1 hybrid mode now uses alternate_on=1 with history_size=0, leaving nothing local to scroll.
The existing hollow-buffer PageUp/PageDown fallback only recognizes Claude sessions.
Local verification
I tested an experimental frontend-only patch that lets Codex use the existing hollow-buffer PageUp/PageDown fallback when xterm reports baseY === 0:
_localScrollbackIsHollow() {
const mode = this.sessions?.get(this.activeSessionId)?.mode || 'claude';
if (mode !== 'claude' && mode !== 'codex') return false;
const buf = this.terminal?.buffer?.active;
if (!buf || buf.type === 'alternate') return false;
return (buf.baseY || 0) === 0;
}
Test results:
- Wheel/trackpad scrolling reached the missing Codex transcript.
- PageUp/PageDown continued to work directly.
- Wheel scrolling was somewhat janky because smooth travel was translated into whole-page keypresses.
- The same fallback is wired into the touch path, giving mobile a route to Codex's internal transcript.
- Codex sessions with real local scrollback remained on the existing local route.
- Focused terminal tests: 74/74 passed.
- Frontend syntax check passed.
This confirms that the transcript is intact and that the regression is in Codeman's wheel/touch scroll-owner selection. The experimental fallback demonstrates the likely direction, although a final fix may need smoother wheel-to-page mapping or Codex-version/render-mode detection.
Workarounds
- Desktop: focus the terminal and use PageUp/PageDown.
- Mobile: use "View last response." There is currently no equivalent transcript-navigation gesture.
Related
Summary
Codex sessions no longer let me scroll back to messages that have moved above the visible pane with a mouse wheel, trackpad, or touch gesture. The transcript is still present: PageUp/PageDown navigate it on desktop, and the Response Viewer ("View last response") still shows the latest response.
This appears to be a regression caused by newer Codex hybrid rendering no longer matching Codeman's inline-viewport assumption. It is particularly disruptive on mobile, where PageUp/PageDown are unavailable.
Environment
hybridReproduction
Expected
Earlier Codex output becomes visible.
Actual
Scrolling cannot reach output above the visible pane.
Diagnostics
Live Codex panes reported:
For one active session:
GET /api/sessions/:id/terminal?full=1source: mux-full-historycaptureRows: 36terminalBuffer.length: 8,835GET /api/sessions/:id/terminalterminalBuffer.length: approximately 211 KBThe first non-Shell terminal load requests
full=1, so this Codex pane receives only the current tmux frame even though the server byte buffer is much larger.Codeman currently routes Codex wheel gestures to local xterm scrollback. That behavior was based on Codex CLI 0.147.0, where Codex used an inline viewport with
alternate_on=0and growing tmux history. Codex 0.159.1 hybrid mode now usesalternate_on=1withhistory_size=0, leaving nothing local to scroll.The existing hollow-buffer PageUp/PageDown fallback only recognizes Claude sessions.
Local verification
I tested an experimental frontend-only patch that lets Codex use the existing hollow-buffer PageUp/PageDown fallback when xterm reports
baseY === 0:Test results:
This confirms that the transcript is intact and that the regression is in Codeman's wheel/touch scroll-owner selection. The experimental fallback demonstrates the likely direction, although a final fix may need smoother wheel-to-page mapping or Codex-version/render-mode detection.
Workarounds
Related