evOo-local/docs/ADAPTIVE-WORKSPACE.md
Claude 065b1322bb
feat: let the pane beside a conversation follow the bot's work
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
2026-10-03 18:30:39 +00:00

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.