Repository navigation
Conversation
…hout a box quiet: the tab icons with no group fill, muted, a hairline before sources. expand: quiet, and the icon under the pointer slides open to its name (still under reduce motion). layout.json headerStyle quiet|expand.
toggle right sidebar (opt-cmd-b, a stub until now) runs the focused chat's new tab / hide tabs: a column of panes opens beside the chat and hides again, closing nothing. the column starts as window tiles (terminal, browser, files, changes, new chat), no text, a letter picks one. files and changes open in the column's own pane (pane.action here:), not in a new split. off by default; read at launch. dev: ?mock&newtab=surfaces, gallery new-tab/side-column.
it was bound once at launch, so turning agentChat.sideColumn on in a running app left the shortcut reporting no right sidebar until a relaunch.
…ever over its editor it showed for any focus inside the row, so clicking a prompt's edit put copy on the prompt's corner.
…ader summary becomes thread details: the chat's folder with open in (finder, vs code, cursor, zed, xcode, whichever are installed; folder.openIn names no path, the app uses the tab's own folder), the branch with ahead/behind and base, and head's commit (a click copies it), above outputs and changes. layout.json threadTitle puts project / title at the header's start: the project opens new chat here in that folder, the title renames the tab in place (pane.rename).
…crumb fixes with panelTabs on, a tab an agent or the header opens beside a lone chat moves into a column on its right instead of docking the chat left and taking its pane (files, changes, preview). thread details' top is now menu rows: where (machine, project or no project), open in <app> with the app's own icon and a chevron for the rest (last pick remembered), branch, commit. the breadcrumb's project keeps its width while the title is edited, shows a folder icon, and reads no project (placeholder icon, not clickable) for a chat in agent-home.
…cursors open in's app icons come from the icon's own image at 64px (drawn into a 32px bitmap they were blurred on a grey tile). thread details' top is one bordered group with hairlines between rows, one folder glyph per row. the thread name shows a text cursor. layout.json pointerCursor puts pointer cursors on the composer's controls (arrow stays the default).
…ursor the field is a combobox (its @ and / menus), so the pointer rule caught it.
no container, no project (the header's breadcrumb has it), no branch or commit: this mac by name with a computer glyph, then open in <app>.
…d details uses the location strip's computer glyph
…behind agentChat.dockBesideTabs a chat sharing its pane with other tabs was not lone, so files (changes, preview) took a new column; on a screen without columns it filled the window and scrolled the chat and its tabs out of view until closed. with the switch on such a chat docks left like a lone one, the view opens on its right and the other tabs stay with it. the chat that asked docks, not the pane's first.
the header gets a refresh button and a search field (the session host's git.files.search under the tab's folder, a flat list of matches while it holds text, escape clears). on this mac a folder lists what git ignores too, marked ignored and drawn at 45% (never .git, at most 500 per folder).
…th search and refresh, no folder title
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Unclear: CI failed on
Not re-run automatically: Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW:
Agents: |
|
Agents: |
|
Bead |
…e: and rename refusals, thread details behind threadTitle - files search keeps the host's paths (relative to the folder searched) and only drops ones that leave it; a tab in a repo subfolder or behind a symlink found nothing before. - the ignored scan skips a listing git cut short, uses the entry's own type (a symlink is a file), leaves empty folders out and runs off the main actor. - opt-cmd-b toggles the focused chat, else the nearest chat on the focused pane's left by position, never a new tab page or dictionary order. - here: only from the side column's tiles page and only files/changes; an unknown action, no folder or a remote chat answers a failure. - pane.rename answers the tab's refusal so the page rolls back. - thread details (label and rows) only with layout.json threadTitle; today's chat summary otherwise. open in uses one placeholder string; borders=none drops its rules. - the title field ignores return/escape inside an ime composition and never commits twice; files search waits 120ms after typing; the floating copy is out of the tab order while a prompt is edited; side column help text. - tests: files search (web), request decoding and here: refusal, search path filter (swift).
|
correctness review (review subagent, correctness first) on the branch's own changes. no blockers: nothing in the new page methods reaches a path outside the chat's folder or an app outside the fixed list. findings and what happened to each, fixed in 4b1a92c: P1
P2 verification after the fixes: typecheck clean, web tests for files page / files search / thread title / transcript copy / header styles pass locally, strings check clean, the tagged app builds and launches. swift tests are written but not run locally (ci). |
…r tray are fieldsets, the tiles take their letters on the buttons
|
ran the ci-mirroring checks locally on 4b1a92c and fixed what was ours in the next commit:
still red locally but not from this branch (the branch doesn't touch these files, they match feat-cmux-next):
passing locally: concurrency, crash safety, layers, system blue, text focus, browser test lanes, formatting, typecheck, the touched web tests. |
…300px a screenshot the agent saves in a temp folder used to draw as a locked name card with an open button. it now follows the outside-files setting: open (default) shows it inline, ask first shows a load image button, show as text keeps the card. deny-listed names stay refused. reply and tool images cap at 300px wide.
|
pushed 2a13f8d: reply images outside the chat's folders (like a screenshot the agent saves in a temp folder) now show inline instead of the locked name card. they follow agentPane.links.outsideRoots: open (default) shows at once, ask first shows a load image button, show as text keeps the card. deny-listed names stay refused. reply and tool images cap at 300px wide. heads up: this loosens decision d5 (outside images used to always be refused), so it's a trust policy change and should get a yes before merge. the image is read by the host and handed to the page as a data url, so nothing leaves the machine. web test added (red on the old code, green now). swift tests added in AgentPaneReplyImageOutsideTests, not run locally (no build host here, disk too low for a local build), leaving them to ci. |
- vp fmt webviews/test/reply-image-outside.test.tsx Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39015696875
This comment has been minimized.
This comment has been minimized.
…arity switches all behind labs in agent-pane/layout.json, off by default: - liveRender: render cards run on their own with stop, window.cmux bridge (prefill, send with a confirm strip, copy, open link with confirm, theme, state), cmux-react fences, and a dev server render frame with its own policy - contextMeter, promptCollapse, copyTurn, messageTimes, codeWrap
|
|
|
|
|
|
|
|
…ble extensions (fast tier compile)
… own run: (fast tier compile)
Resolves the 8 conflicts against 1e98159: - The guarded fetch types moved to CmuxNextRemoteFetch (3956b17): the branch's allowsTruncation and finalURL now live on RemoteFetchRequest and RemoteFetchResponse there, and the source-icon files and tests import the new module. - FaviconLoader keeps ImageIO and CmuxNextCompat with CmuxNextRemoteFetch. - Agent pane tunables list both sides' entries. - acpmux: RowFrame forwards sessionId to the row component; question records, subagent rows and the in-flight title come from the base next to the branch's render-guide queue and notes between steps; SubagentClockContext wraps the branch's transcript and summary card; the subagent pill names the chat with sessionTitle. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Markdown keeps the branch's received-render fences and adds the base's away blocks (a block that streamed in while the chat was hidden never enters). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the files viewer joins the chat pr conflicts: localizable.xcstrings (kept every key from both sides), markdown.tsx (kept the render engine's revealed and received-render blocks, added feat-cmux-next's away blocks and cached fence check). dropped an unused chatLook memo dependency. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es viewer's strings Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he transcript, so they stay centered with the files column open (lucas) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… chat's first files open moves the chat once, thread details has an x (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…flag too, the viewer column draws a shell while its chunk loads, and review layout waits for a panel (lucas) the new-chat glitch: files and the file viewer are lazy chunks with a null fallback, so the first open had no panel for a few frames while thread details had already closed and the old changes layout (chat at 44%) applied to the bare reviewing class. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, a file and thread details are one 320 px column (lucas) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… is an empty url (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mpty url, as newer webkit reports a new frame (every render card stayed blank) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@greptile review |
…scriptor that resolves into a denied place, is not read (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…riptor's real path against the roots and deny list before reading (security pass p2, check-then-open race) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@greptile review |
conflicts in app.tsx, turns.ts, model.ts, chatfind.ts, the strings catalog and the pane build script, each keeping both sides: the render engine, brain thought notes, the files viewer and thread details next to upstream's session cards, incoming messages, agent-pair resume and the activity line. a final reply followed by a started-chat card no longer turns into a thought note (new test in transcript-live-notes). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@greptile review |
|
|
|
|
|
|
|
|
update (2026-10-21): #22057 (files beside the chat) is merged into this branch, so this pr now carries the chat viewer too, with the latest
feat-cmux-next. fixes from dogfooding the combined build:AgentPaneNavigationnow treats an empty url as blank. found with a diagnostic build: the frame's navigation reached the policy withtarget=empty and never reached the scheme handler.reviewingclass, and closing thread details left a popover flag that revived it. the column now draws a shell while its chunk loads, the review layout waits for a panel, and closing clears both flags.update (2026-10-20): merged
feat-cmux-nextagain (27 conflicts, each ported onto the base's new structure, string tables regenerated, settings stamp from the helper) and lawrence's merge of #22058. the CmuxNextApp size cap passes: the new code lives in CmuxNextAgentPane, and the app target is 131 lines smaller than the base. new fix: a render guide queued with a prompt that gets withdrawn or replaced now waits for the next prompt instead of being lost (red test first,render-guide.test.ts). security pass on the whole diff: no findings, the #21760 fixes all still hold. greptile's four findings fixed red-first (render preview errors in all 21 locales; the header's terminal beside a panel opens a tab there even with new terminals opening workspaces; files search menu acts on the result; renders with bare body text grow). ci: our reds fixed (seven react compiler bailouts, a recap footer test, an extra settings stamp line); the rest is red onfeat-cmux-nexttoo (cmux-next checks, protocol contract, inventory, same-tree cmux-tui, defaults freshness, some react-apps-check suites).update (2026-10-19): lawrence's #21760 review is addressed on this branch (#21760 merged into it before the review): nested fences stay code, only the live reply auto-runs (history waits for a click) with a hang watchdog, confirm strips show the whole payload with an origin label and hold one request at a time, openLink reports refusals, a render frame loads its document once and never navigates after (7b926b0, 6d1c37d, 5e754d7, red tests first). the trust note for #13742 covers the rest.
split out to keep this one reviewable: the chat viewer (files and changes beside the chat) is #22057, thread details site icons #22058 (stacked on this branch; lawrence merged it in on 2026-10-20), and the blank-workspace layout fix #22059 (against
feat-cmux-next).first pass at getting the agent chat closer to claude / codex / t3 / cursor / conductor, plus in-chat rendering (#21760 is folded in here). almost everything is behind a switch (debug settings, or
~/.config/cmux/agent-pane/layout.jsonfor the web-only header bits), the parity bits are off by default. the render switches (live render, render guide, render kit, render preview, render expand, table scroll) and site icons are on by default. the ones without a switch are bug fixes.what's in here
thoughts (debug settings → pages → thought style: brain)
cleaner transcript (browser preview only for now:
?mock&sleek)header
layout.jsonheaderStyle:quiet(every tab kind as muted icons, no box, a divider before sources),expand(hovered icon slides open to its name),labels,tray,add/add-terminal(one + menu). split down lives in the … menu in these.layout.jsonthreadTitle: true: project / thread name at the top left (the project is a label). click the name to rename the tab in place (pane.rename). a chat without a project reads "no project".threadTitleon, summary becomes thread details: this mac's name, then open in (finder, vs code, cursor, zed, xcode, whichever are installed, real app icons, remembers the last pick,folder.openIn; the app side uses the tab's own folder, the page never names a path).right side / panes (debug settings → panes)
agentChat.panelTabs: with a panel beside the chat, terminal and browser add a tab to it instead of another split, and the header keeps its tools in …agentChat.sideColumn: ⌥⌘B (toggle right sidebar, a stub until now) shows/hides a column beside the chat. it opens as window tiles (terminal, browser, files, changes, new chat). this goes against the "no right sidebar" rule in pointers.md, so it's here to look at, not to ship.agentChat.dockBesideTabs: a chat that shares its pane with other tabs docks left when files / changes / preview opens, like a lone chat does. without it the view takes a new column that fills the screen and scrolls the chat and its tabs out of view until you close it.files page
git.files.searchunder the tab's folder), refresh button, git-ignored files listed greyed out (on this mac only, never.git, capped at 500 per folder). the folder title is gone, the tab already names it.in-chat rendering (debug settings → pages →
agentPane.labs.liveRender, on by default)```cmux-renderblock (or arendertool call) draws inside the chat as it streams. one sandboxed frame per block from the first token: markup and styles show as the agent writes, scripts run once the block is complete, never half-written.```cmux-reactblocks hold a component (function App()), mounted with pinned react 18.3.1 + babel standalone 7.26.4 once the block is complete.window.cmux:prefill,sendPrompt,openLinkandcopyall wait for a click in the pane (a quiet confirm line under the page), plustheme/onThemeand an in-memorystate.agentPane.labs.renderGuide, on by default): a short note with the first prompt of each session (hidden prompt context, app connections only) says when a visual beats prose and how to lay it out. same idea as t3code's standing html_render line.agentPane.labs.renderKit, on by default): a design layer in the frame before the first byte, so plain html looks like the app while it streams (type, tables, controls, stat tiles, segmented),cmux.chartfor line / area / bar / donut charts in system colors, streamed elements fade in,data-cmux-promptfollow-up buttons, and a quiet "ask to fix" note when a page throws.render_previewreturns a png of the page drawn off screen in the real chat frame, with console errors and layout warnings (agentPane.labs.renderPreview). wide markdown tables scroll (tableScroll), renders open larger (renderExpand).chat labs (debug settings → pages →
agentPane.labs.*, each off by default)contextMeter: context ring next to the model picker, details on hover.promptCollapse: prompts over 8 lines fold with show more; find opens them.messageTimes: hover a prompt to see when it was sent.codeWrap: one wrap choice for every code block, remembered.planProgress: the running plan's current step and a thin bar above the composer.shortcutsHelp: "keyboard shortcuts" in the chat menu, the pane's live bindings in groups.labsentry inlayout.jsonwins, then the debug settings toggle, then the default.transcript speed (no switch)
fixes (no switch)
$TMPDIR/cmux-pane-errors.log(post only, same origin, 20 KB cap), since the web view keeps no console a session can read.layout.jsonpointerCursor: trueputs pointer cursors on the composer's controls (the field keeps the text cursor). arrow stays the default.screenshots
files beside the chat (was #22057, behind
agentPane.labs.chatViewer, on)..goes up (never above the chat's folder), search across the folder, a file opens in the same column.link.readPath): the same checks as opening a path link today (deny list,agentPane.links.outsideRoots, a user gesture), text only, capped at 1 MiB. changes and a changed file's open work as before.heads up
render_preview(mcp) lets the agent see a screenshot of its page before showing it; the rust side is only compiled by ci, so agents get it once a cmux binary with it is published.verification
AgentPaneLabsTestsadded, not run locally.HeaderPanelTabsTests,AgentPaneThoughtStyleTests) but not run locally.CMUX_BROWSER_TESTS=1 bun test test/chat-viewer-layout.test.tsx): 12 pass; the 4 new-chat jump cases failed before the fix (transcript and composer 448 px apart for a frame).summary-card-open7,chat-viewer34,chat-files-view7, render tests (incremental-markdown, render-stream, render-fence, live-render, page-reveal) 120, all pass. the empty-url render fix has a swift test (AgentPaneNavigationTests, ci) and was checked in the dev app.Task<_, Never>annotation there, not part of this pr).changelog
Added: Agent chats can show interactive pages that build as the agent writes them
Added: Files and files a chat links to open in a column beside the chat
(the other parity bits stay behind dev switches)