Repository navigation
Conversation
The chat is the constant surface: it stays open beside every page and only hides when the main panel expands over it. Layout controls live on the main panel (expand, close), the chat reopens a closed panel, and a project's "open the chat" setting is honored again, defaulting to open. The empty chat no longer presents an agent identity: a project is context, not someone you talk to. A chat that changed a site shows its draft as a card in the conversation, with a strip above the composer while it is pending. Also restyles messages (right-aligned user bubbles, dashed queued messages, time beside the cost) and moves the connect prompt to a home banner that leaves once an agent is connected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The chat now follows the person across the home, projects and pages instead of switching to a project's own chat, and the page is context for it. New chats belong to the org's assistant. Also: page headers keep one filled action and drop outlines from the rest, a recent-chats empty state, context chips, a compact task card, and composer/header fixes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rafavalls
changed the base branch from
t3/chat-first-persist-fullscreen
to
main
November 10, 2026 19:09
2 of 4 tasks
# Conflicts: # apps/web/src/components/import-from-deco-dialog.tsx # apps/web/src/components/monitor/monitor-page.tsx # apps/web/src/hooks/use-preferences.ts # apps/web/src/layouts/library/index.tsx # apps/web/src/layouts/route-page-header.tsx # apps/web/src/layouts/task-board/index.tsx # apps/web/src/routes/thread-session/route.tsx
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What is this contribution about?
Studio becomes chat-first. The chat is always there, and every other screen opens beside it. There is one chat across the whole workspace: the page you're on is context for the chat, not its owner. This also cleans up the page headers, the task board toolbar and the chat list.
This replaces #8404, which is folded in here.
Front end only. Every change is in
apps/web. There are no API, schema, tool or migration changes. Server-side work this behavior will need is listed under "Expected next".Premises
Expected UX
Layout
One chat
The page as context
Messages
Cards in the conversation
Created task: a compact row with the project avatar, the title, and a meta line (status · key · project). The whole row opens the task on its project's board, including a task created seconds ago.
Projects list: shows real projects only, not the org's built-in agents.
Draft card: when the chat's thread has a hosted (Blocks v8) draft with at least one change against main, the conversation shows a card with:
It appears after the first answer that used a tool. The changes are read from the hosted draft every 15s, so the card doesn't depend on the editor's runtime.
The empty chat is just the composer and a "Continue" list of recent chats. A dot marks chats with a pending draft. The agent identity screen and the ice-breaker prompts are gone.
Page headers
Chat list
Execute (task board)
Monitor
Composer
Home
Breadcrumbs
Expected next (not in this PR)
Sandbox on the first change:
name") and the draft card appears. Booting takes a while, so the chat shows a "Preparing…" state meanwhile.Today a thread is stamped
cmsorsandboxat creation and can't change, so a chat started in one mode can't edit in the other.Publish / Discard / Keep as draft on the draft card. Publish (or open a PR) and Discard collapse the card to one line. Keep as draft lets the chat let go while the draft stays in the project. Today these live in the Site Editor header, which Open leads to.
Draft cards for git (sandbox) drafts. Only hosted (v8) drafts show a card today.
Content edits without a sandbox. Editing site content (Blocks v8, the hosted draft) works without a sandbox, so a content-only change shouldn't wait for one to boot. Today every agent edit goes through a sandbox, because there's no agent tool that writes to the hosted draft.
The projects list comes from the server. The card hides built-in agents, but the tool still returns them, so the assistant can still mention them as projects.
When the target is unclear, the assistant asks. If the chat worked on one project and you're looking at another, "change the title" gets a question back, not a guess.
The home banner detects OAuth connections. It can't today, so it keeps showing until a key exists.
E2E specs that assume entering a project opens that project's chat, or the old left-side chat toggle, need updating.
Docs: the chat guide describes one chat with page context.
How did you verify your code works?
bun run fmt,bun run lintandbun run knippass.tsc --noEmitpasses forapps/webandpackages/ui.bun test src/layouts/task-boardpasses (292). The sprint chip tests now cover the new rule: any sprint, including the running one, is a chip, and clearing it shows every sprint.bun test --parallel src), after merging main: 5227 pass, 647 fail. Main alone gives 647 failures, and the list of 629 distinct failing tests is identical. They leak globals between files.use-chat-layout-state.test.tspasses. The project setting is asserted as honored, including?sidepanel=trueoverriding it, and an unset setting opens the chat.bun run verifytest step, which also runs API integration tests against local services.Screenshots/Demonstration
Layout and the draft card. Expand and close are on the main panel; the chat stays on the right with the draft it changed.

Main panel expanded

Messages

Home banner

Headers. One filled action, outlined secondary actions, a divider before ⤢ ✕. From the top: Home, Monitor, Execute, a task, Context, project Settings, Analytics, Members.

Sprint in the Filter menu

Chat list. Date headings, then search with the org-wide fallback, then the grouping menu.



Task card

Projects list. Real projects only.

Closed panel. "Open panel", with the sidebar open and collapsed.

Composer. Narrow on top, wide below.


Context chip

Empty chat

How to Test
Migration Notes
Review Checklist
🤖 Generated with Claude Code