You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Design audit of the agent transcript (desktop/src/surfaces/AgentTranscript.tsx, desktop/src/ui/EventCard.tsx, desktop/src/ui/Composer.tsx, desktop/src/styles/partials/05-transcript-boards.css) against the ChatGPT / Claude / Kimi bar. The engineering underneath is strong (virtualized feed, tool folding, lenses, insight navigator); what's missing is the visual discipline of a commercial chat surface. Related behavioral issues already filed: #331 (open-at-bottom), #323 (composer multiline/voice HUD), #315 (skeletons/toasts), #314 (lifecycle confirmations), #317 (contrast).
Core problem: everything is a card
Every event — including each assistant text block — renders as a bordered, shadowed box with a 3px colored left spine and an uppercase micro-tag (.ev, 05-transcript-boards.css:2-12; accentVar assigns 9 different colors across kinds, EventCard.tsx:43-70). At 500 events the feed reads as a wall of boxes: high chrome-to-content ratio, and the rainbow of spines (terminal-blue/cyan/yellow/purple) gives a debug-console feel, not a conversation.
In ChatGPT/Claude/Kimi, assistant prose is borderless full-measure text; structure comes from typography and whitespace, and chrome appears only where action lives (tool calls, code blocks, errors).
Recommendations:
Borderless assistant text — no box, no spine, no shadow for text/thought kinds; reserve boxes for tool calls/results, diffs, plans, and errors.
Collapse the spine palette to 3 semantics: neutral (tools/system), error red, accent (user). Drop per-kind rainbow coloring.
Retire the uppercase micro-tags (ev-tag: tool/result/thinking/turn/session/system/done, 05-transcript-boards.css:259-270) in favor of icon + natural-language affordances ("Ran bash", "Read file", "Thinking"); demote raw kind labels to verbose mode.
Center a readable measure (~720–760px) instead of max-width: 92% cards stretching edge-to-edge (05-transcript-boards.css:5) — long lines on wide monitors are unreadable today. User bubbles and tool cards live inside the same measure.
Turn structure & live status
Group events into turns. Today a turn boundary is a tiny muted turn done · 123ms tag row (EventCard.tsx:286-296). Commercial agent UIs give each turn a quiet header (timestamps, duration, model) and visual separation. FeedEvent.ts is parsed (EventCard.tsx:20,30) but never rendered — add timestamps (relative, absolute on hover).
Add a persistent status line. Running state is only inferable mid-feed from tiny usage/lifecycle rows. Add a header status: ● running · model · elapsed · tokens (the data already exists in session.init/usage payloads, EventCard.tsx:298-317), plus a shimmer/"agent is working" row at the feed tail while streaming — and make the composer's primary action Stop while running.
Per-tool inline summaries. Tool input currently shows as a mono-font first line of raw JSON in a <details> (EventCard.tsx:143-166). Claude-Code-grade presentation shows the key argument inline: bash → the command; read/write/edit → the file path; search → the pattern — with the full JSON behind the expansion. This one change removes most of the feed's visual noise.
Code block header with copy..md pre is a bare box (05-transcript-boards.css:57-63) — no language label, no copy button. ChatGPT/Claude/Kimi all have a header strip (language + copy). Cheapest, most-felt affordance available.
Diff gutters. Diffs are plain red/green -/+ lines (EventCard.tsx:168-191, 05-transcript-boards.css:304-309); give full-line background tints (del/add gutter backgrounds) so hunks scan as blocks.
Tame the collapse nesting. Tool card → <details> input → <details> result is a Russian doll of disclosures with mono first-line previews. Single-level collapse with a clean one-line summary (chevron + "N lines"); for long assistant text prefer a gradient fade + "Show more" (Kimi/Claude idiom) over <details> with a redundant dimmed preview line (EventCard.tsx:102-121, 05-transcript-boards.css:243-247).
Chat-grade affordances
Scroll-to-latest pill. When the user scrolls up, followOutput releases (AgentTranscript.tsx:398) and new messages arrive invisibly. Commercial apps show a floating "↓ new messages" button with an unread count that jumps to the bottom.
Hover actions on messages — copy message text, quote into composer (and for the assistant, the existing "insert into note" pattern from AgentCompanion). Today there are zero per-message actions.
Composer polish beyond feat(desktop): voice dictation HUD + composer multiline & persistent drafts #323: icon send button (arrow) instead of a text "Send" button, Enter-to-send hint, and drop the linear-gradient wrapper (05-transcript-boards.css:353-357) for a flat surface + hairline (gradients read dated next to the rest of the shell).
Design audit of the agent transcript (
desktop/src/surfaces/AgentTranscript.tsx,desktop/src/ui/EventCard.tsx,desktop/src/ui/Composer.tsx,desktop/src/styles/partials/05-transcript-boards.css) against the ChatGPT / Claude / Kimi bar. The engineering underneath is strong (virtualized feed, tool folding, lenses, insight navigator); what's missing is the visual discipline of a commercial chat surface. Related behavioral issues already filed: #331 (open-at-bottom), #323 (composer multiline/voice HUD), #315 (skeletons/toasts), #314 (lifecycle confirmations), #317 (contrast).Core problem: everything is a card
Every event — including each assistant text block — renders as a bordered, shadowed box with a 3px colored left spine and an uppercase micro-tag (
.ev,05-transcript-boards.css:2-12;accentVarassigns 9 different colors across kinds,EventCard.tsx:43-70). At 500 events the feed reads as a wall of boxes: high chrome-to-content ratio, and the rainbow of spines (terminal-blue/cyan/yellow/purple) gives a debug-console feel, not a conversation.In ChatGPT/Claude/Kimi, assistant prose is borderless full-measure text; structure comes from typography and whitespace, and chrome appears only where action lives (tool calls, code blocks, errors).
Recommendations:
text/thoughtkinds; reserve boxes for tool calls/results, diffs, plans, and errors.ev-tag: tool/result/thinking/turn/session/system/done,05-transcript-boards.css:259-270) in favor of icon + natural-language affordances ("Ran bash", "Read file", "Thinking"); demote raw kind labels to verbose mode.max-width: 92%cards stretching edge-to-edge (05-transcript-boards.css:5) — long lines on wide monitors are unreadable today. User bubbles and tool cards live inside the same measure.Turn structure & live status
turn done · 123mstag row (EventCard.tsx:286-296). Commercial agent UIs give each turn a quiet header (timestamps, duration, model) and visual separation.FeedEvent.tsis parsed (EventCard.tsx:20,30) but never rendered — add timestamps (relative, absolute on hover).usage/lifecycle rows. Add a header status:● running · model · elapsed · tokens(the data already exists insession.init/usagepayloads,EventCard.tsx:298-317), plus a shimmer/"agent is working" row at the feed tail while streaming — and make the composer's primary action Stop while running.AgentTranscript.tsx:342-348) crowd the header; show one contextual primary action (stop while running) and move the rest into an overflow menu. (Confirmation gaps already filed in fix(desktop): destructive actions lack consistent confirmation (connections, sessions, agents, runs, profiles, SFTP, vault sync) #314.)Tool calls & code
<details>(EventCard.tsx:143-166). Claude-Code-grade presentation shows the key argument inline: bash → the command; read/write/edit → the file path; search → the pattern — with the full JSON behind the expansion. This one change removes most of the feed's visual noise..md preis a bare box (05-transcript-boards.css:57-63) — no language label, no copy button. ChatGPT/Claude/Kimi all have a header strip (language + copy). Cheapest, most-felt affordance available.-/+lines (EventCard.tsx:168-191,05-transcript-boards.css:304-309); give full-line background tints (del/add gutter backgrounds) so hunks scan as blocks.<details>input →<details>result is a Russian doll of disclosures with mono first-line previews. Single-level collapse with a clean one-line summary (chevron + "N lines"); for long assistant text prefer a gradient fade + "Show more" (Kimi/Claude idiom) over<details>with a redundant dimmed preview line (EventCard.tsx:102-121,05-transcript-boards.css:243-247).Chat-grade affordances
followOutputreleases (AgentTranscript.tsx:398) and new messages arrive invisibly. Commercial apps show a floating "↓ new messages" button with an unread count that jumps to the bottom.AgentTranscript.tsx:411) — matches feat(desktop): feedback systems — toast notifications, skeleton loading, surface silent data-layer failures #315.linear-gradientwrapper (05-transcript-boards.css:353-357) for a flat surface + hairline (gradients read dated next to the rest of the shell).Smaller items
AgentTranscript.tsx:467-468; plan marks ☑◐☐ atEventCard.tsx:200) instead of theIconsystem — same discipline gap as the 🎤 mic (filed in feat(desktop): voice dictation HUD + composer multiline & persistent drafts #323)..feed-itemgutters use the phantomvar(--spacing-s20, 20px)fallback (part of feat(desktop): design-token governance — semantic-layer leaks, phantom tokens, z-index scale, responsive strategy #318); ev accents use raw--color-terminal-*vars that bypass the semantic layer and break light theme (fix(desktop): WCAG AA contrast failures (esp. light theme), theme FOUC, dead transition + undefined token #317/feat(desktop): design-token governance — semantic-layer leaks, phantom tokens, z-index scale, responsive strategy #318) — the redesign should route all new colors through semantic tokens from the start.RunReportis hardcoded English (RunReport.tsx:97,128) — include it in the i18n sweep (feat(desktop): design-token governance — semantic-layer leaks, phantom tokens, z-index scale, responsive strategy #318) when restyling.Acceptance criteria
Iconsystem); all colors resolve through semantic tokens in both themes.