The live screen now opens wide beside the chat while the bot works on it, a file the bot presents as its result opens next to the conversation, and a question that scrolled away gets a "Needs you" pill back to it. Focus is derived from signals clients already have (pointer events, takeover requests, a new `present` flag on attach_file, pending asks) by shared core rules, so web and mobile agree and the behaviour stays deterministic. The pane only moves on focus edges, never replaces a pane the user opened, and learns per bot whether the screen should open on its own. Pane widths persist per device. Mobile shows a pill that opens the computer route. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C7VSRHHzyt2KwoCkUkZ2Gc
1.9 KiB
1.9 KiB
Adaptive workspace
The pane beside a conversation follows what the bot is actually doing, not a guess about the task.
No classifier or model decides the layout: deriveWorkspaceFocus in @rakazo/core reads the thread
state every client already has, so web and mobile agree and the rules stay testable offline.
Signals
| Focus | Signal | Web | Mobile |
|---|---|---|---|
| Screen | A fresh thread.computer pointer event from a working run, or a takeover request |
Live screen opens beside the chat (wide pane), steps back a few seconds after the work ends | Pill above the composer opens the computer |
| Artifact | The latest run attached a file with present: true (attach_file) |
File opens beside the chat until the user closes it or the bot presents another | Unchanged: file cards open the native preview |
| Needs you | An unanswered ask on a waiting run | "Needs you" pill replaces the jump arrow when the question scrolled out of view | Existing push and attention notifications |
Everything else stays a plain conversation.
Rules
- The pane moves only on focus edges (
applyWorkspaceFocus). The first focus of a conversation is a baseline, so opening a thread never jumps. - A pane the user opened by hand is never replaced or closed automatically. Auto panes close only when their own focus ends; a presented file stays.
- Windows narrower than 1024px keep the conversation full width; file cards fall back to the dialog.
- Per bot, the client learns from the user: opening the screen by hand while the bot works three times makes it open on every run; closing an automatically opened screen twice stops it opening on its own. A takeover request always shows the screen.
- Pane widths are remembered per device.
Not in scope
Generated layouts, per-domain dashboards and prompt classification stay out: they guess, move the UI under the user, and cannot be verified deterministically.