Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 13 additions & 11 deletions DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@ Top to bottom:

1. **Brand row** — logo mark and a "New workbench" button (`+`) that
opens `/new`.
2. **Bench list** — the "Workbenches" label, then rows of workbench
conversations, with search built into the list itself. Nothing
page-scoped ever renders in this body; it lists conversations, not
product sections.
2. **Bench list** — two labels, Agents then Channels, with search built
into the list itself. Agent conversations and unopened conversational
definitions sit under Agents; rooms sit under Channels. Pinning is
local to each section. One search filters both without dropping either
label. Nothing page-scoped ever renders in this body; it lists
conversations, not product sections.
3. **Footer rail** — Mission Control is pinned above the rail as its own
row. The first-run rail below it is Routines, Files, Skills, Agents, in
that order (CL-6765). Insights and Evals join that rail only when
Expand All @@ -35,13 +37,13 @@ Top to bottom:
direct one-click control to Settings, not a menu item — Settings
never cost two clicks to reach.

A workbench is an agent conversation, and the bench list IS the switcher —
its rows are the primary way to move between workbenches, with no separate
"switcher" control layered on top. The command palette's hidden "Switch
workbench" action is a second door onto the same list, reachable by search
rather than by scanning rows; it does not replace the sidebar as the
switching mechanism. Approvals render inside the conversation, never as a
standing band in the shell.
A workbench is an agent conversation or a room, and the bench list IS the
switcher — its Agents and Channels rows are the primary way to move between
them, with no separate "switcher" control layered on top. The command
palette's hidden "Switch workbench" action is a second door onto the same
conversations, reachable by search rather than by scanning rows; it does
not replace the sidebar as the switching mechanism. Approvals render
inside the conversation, never as a standing band in the shell.

## Pages & Routing

Expand Down
15 changes: 8 additions & 7 deletions PRODUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ conversation is also its own tenant, so its membership and grants are its
own. There is no separate "project" or "space" object sitting above the
conversation; the conversation is the unit of work.

This is why the sidebar is one list of workbenches, not sections split by
kind — every workbench a person has, agent conversation or group
conversation alike, shows up the same way. See
This is why the sidebar lists workbenches under two labeled sections —
**Agents** (agent conversations) and **Channels** (rooms) — rather than
one undifferentiated list. Every row is still a workbench; the sections
are how a person finds the right one. See
[docs/GLOSSARY.md](docs/GLOSSARY.md) for the full term mapping and
[docs/CHAT.md](docs/CHAT.md) for how a conversation is built underneath.

Expand All @@ -32,10 +33,10 @@ team spaces); within a bench, they open, create, and work in workbenches.
Workbench is intentionally not a multi-pane IDE. The product surface is one
column at a time:

- **A sidebar of workbenches** lists every conversation in the selected
bench, flat, most-recently-active first. There is no separate "channels"
vs. "chats" grouping the sidebar exposes to a person — every row is a
workbench.
- **A sidebar of Agents and Channels** lists every conversation in the
selected bench under those two labeled sections, most-recently-active
first within each. Pinning stays inside a section; one search filters
both without dropping either label. Every row is a workbench.
- **"+ New Workbench" always creates.** It opens `/new` — the shipped
prompt-primary picker — never a picker of existing things to join.
Starting a new workbench is the one way in, whether the result is a
Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/routes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ export const APP_ROUTES: readonly AppRoute[] = [
},
{
path: WORKBENCH_PATH_PREFIX,
label: "Workbenches",
label: "Workbench",
icon: <ChatCircle />,
render: (path: string, navigate: (to: string) => void) => (
<ChatPage path={path} navigate={navigate} />
Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/shell/bench-activity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
// query with nowhere to point.
//
// `useBenchActivity` may be mounted more than once per navigation (the
// sidebar's `WorkbenchList` in `./workbench-list.tsx`), so every listing
// sidebar's `SidebarSections` in `./workbench-list.tsx`), so every listing
// below goes through `useQuery` keyed with the shared `tenantKeys`
// factories — both mounts subscribe to the same cached queries instead of
// each firing its own fetch. This uses `useQuery` directly rather than the
Expand Down
177 changes: 0 additions & 177 deletions apps/web/src/shell/sidebar-rows.test.ts

This file was deleted.

53 changes: 0 additions & 53 deletions apps/web/src/shell/sidebar-rows.ts

This file was deleted.

Loading