08 · Shell · Workspace

Two columns. Everything in reach.

08 / 22

The shell is a disciplined instrument panel, not a nav bar with suggestions stapled on. A single sidebar on the left, the work on the right. No persistent right rail. Search (⌘K) replaces a primary-CTA button — every jump and command lives in one keystroke. History swaps the sidebar for a list of recent items, Linear-style. Create sits top-right of the main — one click opens Studio with a naming form. Threads list your open chats in the sidebar — the active one carries the cubic mark as a live status indicator. Clicking any thread (or pressing /) collapses the sidebar to a 48px icon rail and unfurls the chat column in its place — keeping main breathable. Switch themes up top to confirm it holds.

State A Default — Library view

Library

All Figments Workflows

The active thread carries the cubic mark — a live status indicator that animates per state on the same cube (see the Focused frame below). Clicking any thread opens the chat; clicking History at the bottom of the sidebar swaps the whole panel. The back arrow returns, or click History again.

State B History — sidebar swapped, main unchanged

Library

All Figments Workflows

Only items appear in History — and the list spans the full Objects vocabulary: figments, boards, workflows, documents, integrations, plus chats and inbox threads. Each glyph carries its kind color, so the list reads as a map of what you touched, not just when. Top-level pages (Inbox, Library, Studio, Marketplace) stay pinned in the default sidebar — they don't need to echo here.

Focused Active thread — chat unfurls between sidebar and main

Library

All Figments Workflows
Brand kit figment · 5d ago
Campaign Q2 figment · 12m ago
Weekly digest workflow · 2h ago
Pitch deck v3 figment · 1h ago
1 · One cube, two homes There is only ever one cube on screen. At rest it lives in the sidebar next to the active thread (22px, alongside the title). When you open the thread, the same cube travels: it slides from its sidebar position into the composer at 32px. The sidebar rolls its Threads list away — you're inside the thread now, and the chat column itself is the answer to "which one." On close the cube travels back. The cube is the assistant's identity; it moves with your attention, it never duplicates itself.
2 · Four states on one face Wherever the cube lives at any moment, it carries the same four states — Ghost at rest, Step while you type, Uplink while the message is in flight, Facet while the assistant streams. See §22 Glyphs. State is independent of position; the cube just happens to be over there now.
3 · Cube is the send The cube doubles as the send button. There is no separate arrow element — when the composer holds content ready to send, hovering the cube morphs it into a directional up arrow (the cube and the arrow share the same 32px slot, cross-fading on opacity). Click or sends. With an empty composer the cube stays as a status indicator — no morph, nothing to send. One element, two meanings: who's listening and feed them.
4 · Two rows, balanced The composer is a two-row stack: the input row is pure text — nothing but the caret and what you're writing — and the action row underneath carries the + add menu on the left and the cube-send on the right. The split frees the input of all chrome, and gives the cube its conventional "bottom-right of the composer" home, where the send button lives in every modern chat UI. Citations to figments/workflows appear inline inside messages (see the 1 marker), never pinned as a chip.
5 · UI glyph family All single-stroke icons in the composer and column — the +, the send arrow, the close × — share one treatment: 14×14 viewBox, 2px stroke, round caps + joins. That handshake is what keeps the cubic kit (assistant identity) and the UI glyphs (verbs on buttons) reading as one family instead of two. If you add a new verb glyph, use this spec; if it doesn't work at 2px round, it doesn't belong here.
6 · Rail when engaged Opening a thread collapses the sidebar to a 48px icon rail — nav icons, the active thread's cube, avatar. Total left chrome becomes ~408px (rail + 360px chat) instead of ~604px. Main stays breathable at 1024–1280 viewports. Closing the chat restores the full sidebar.
7 · Column header A 40px header anchors the top of the chat column: the active thread's name sits as a dropdown trigger on the left, a small × close sits on the right. The trigger's chevron flips when the dropdown is open (see callout 9). / and Esc close the column as alternatives to clicking ×. Studio reuses this header without the close button — Studio is a destination, not a panel.
8 · Directional unfurl The column slides out away from the rail it was summoned from. No teleport — the motion points from click to result, so the layout change reads as causal.
9 · Switching + creating Click the thread name in the column header to drop a menu: every thread + a + New affordance in the menu header. Each row shows the thread title, the time of last activity, and a muted mono sub-line naming the thread's toolbox (e.g. general · 4 tools). The active row carries a tiny kind-color dot and a left stripe. Click any row to swap — the cube travels to match — or + New to spin up a fresh thread (name + toolbox picked at creation). The menu dismisses on outside click or Esc. When the sidebar is fully expanded (chat closed), the Threads section in the scroll region is right there, no dropdown needed. / still toggles the active thread; pressing it with none open creates one.
10 · Thread settings A overflow sits in the column header between the thread picker and ×, always visible (not hover-gated, so touch users reach it too). Muted at rest so × stays primary. Clicking drops a small menu rooted under the button: Rename, Change toolbox, Delete. Thread-scoped settings live here — not in the composer, not in the sidebar — so they're close to the thread identity they edit. Studio reuses the same button (Studio has no close, but keeps the overflow).
11 · Live link When the assistant cites a page object, the tile focuses in main (outlined in kind-blue, pulsing). Chat messages are footnotes to the page; the page is the source the footnotes cite.
12 · Empty + first-run With zero threads, the sidebar's Threads section shows one muted line — "Press / or start your first chat" — in place of rows. Pressing / creates a thread on the fly and opens it with the cube in Ghost state. The rail never shows the empty row; you only see it while the sidebar is expanded.
13 · Focus + keystrokes On open, focus lands on the composer input — you can type immediately. On close (Esc or click the ×), focus returns to the thread row in the sidebar you came from. The × sits at 32×32 visible with a 44×44 hit area, over a surface-matched chip so it stays legible when transcript content scrolls underneath.
14 · Responsive fallback Below 1100px the chat column narrows from 360 → 320 to keep main breathable. Below 900px the three-column grid collapses; the chat column takes over the main region entirely, with the rail the only remaining navigation. Close the chat to return to the full shell.

Threads live in the sidebar — one per conversation. The active thread carries the cubic mark, animated to show state on the same cube: Ghost trace at rest, Step thread while you type, Data uplink while the message is in flight, Facet fill while the assistant streams. Click any thread — or press / — and two things happen at once: the sidebar collapses to a 48px rail of icons, and the chat column unfurls into the space it vacated. Total left chrome stays ~408px instead of ~604px, so main keeps room to breathe. The motion points away from the click origin, so the layout shift reads as directional, not as a teleport. Main reflows to the narrower space; the grid drops to two columns. + next to Threads opens a new chat; Esc collapses the column and restores the full sidebar. (Still hidden on Studio and Onboarding, where the whole page is the chat.)

Create itself — the form that opens when the button is pressed — lives in its own section: 21 · Create · Name + Type. It only makes figments and workflows; boards and chat threads have their own + in the sidebar and aren't part of Create.