Raven
All docs

Concepts

Tabs and the right panel

Chats sit in the middle as tabs; files, changes, context, design, browser, simulator, and terminal sit on the right as surfaces — all pointed at the same checkout.

A workspace is a container. In the middle are its tabs, each a conversation with an agent. On the right is a panel of surfaces — the files, the diff, the context library, a design board, a browser, an iOS simulator, a terminal. Everything works against that workspace’s checkout, so a terminal and a chat are always looking at the same files on the same branch.

Chat tabs

⌘T or the + in the strip opens a new chat right away. A workspace holds up to ten; at the cap the button says so and you close one first. Drag tabs to reorder them, double-click one to rename it, and right-click for Duplicate in new tab (carries the whole conversation, titled with a (1)), Duplicate in new worktree workspace, Duplicate in new workspace (offered in local workspaces), and Close. Duplicating waits until the tab’s turn has finished.

Closing a chat that has messages asks first, because closing discards them for good. The last tab in a workspace can’t be closed.

When tabs outgrow the strip, labels squeeze before anything hides; past that, a +N chip collects the rest into a menu, and the active tab rides along on the chip so it’s never lost. A tab shows a working wing while its agent runs, a dot when it has an unread reply, and a frame glyph when its panel is showing Design.

Claude Code and Codex tabs

If you’d rather run the raw CLI, turn on Settings › Chats › Agent tabs › Claude Code and Codex tabs. ⌘T then opens a menu — Chat, Claude, Codex — where a bare digit picks the row. A CLI tab is the real terminal program with the session managed by Raven, so it resumes where it left off after a restart. The same settings section takes extra flags for each CLI. In these tabs ⇧Enter inserts a newline instead of submitting.

The right panel

Seven surfaces, one showing at a time:

Surface Shortcut What it is
Files ⌘E The checkout’s tree, a reader that edits, and search.
Changes ⌘D The workspace’s diff, uncommitted or the whole branch.
Context library ⌘⇧E The project’s context docs.
Design ⌘⇧D The design boards on this checkout.
Browser ⌘⇧W A browser the agent can drive.
Simulator ⌘⇧S The workspace’s iOS Simulator.
Terminal ⌘J Shells in the workspace’s folder.

All seven are pinned by default, so each has a button in the panel’s switcher row; the pinned set is per project. The ⋯ button opens the full catalog, where any surface can be unpinned to thin the row out, or pinned again. An unpinned surface shows a button only while it’s open.

The row works like this: the lit button is the surface you’re looking at. Click it again — or press ⌘. — and the panel hides, keeping the surface warm; ⌘. brings back whatever was showing last. The × beside the row — or on a row of the Panes rail — closes the surface and resets it: Files back to search, Browser to no tabs (it asks first when several are open), Terminal closes every shell. A shortcut always shows its surface; it never toggles.

While the panel is hidden, a narrow Panes rail at the right edge lists the surfaces with their badges — the diff’s +N −M, the count of context docs loaded, running terminals — and their shortcuts. Click a row to open it.

Each surface remembers its own width. Design opens at 60% of the app’s width, Changes at half, the rest at 40%; drag to adjust, and the width resets when the surface closes. The chat always keeps at least 400px.

The tab owns its panel

Which surface is showing, how wide, which board is open, and which browser tabs are open all belong to the tab. Switch chats and the panel switches with them; a new tab starts with no panel; a duplicate copies its source’s. Terminal and Simulator are the exception — their shells and device are shared by every tab in the workspace, so a build you started from one chat is still running when you look from another.

Terminal

The Terminal surface holds any number of shells, listed in its toolbar as a strip: + spawns one and puts your cursor in it, double-click renames, hover for the × (once there’s more than one). Showing the surface with no shells open spawns one for you.

⌘J shows the terminal and focuses it. ⌘⇧J hides it if it’s showing, otherwise the same. ⌘` makes a new shell, ⌘⇧` cycles between them, ⌘K clears the one you’re in, and ⌘A selects everything in it. The Run button’s terminal lives here too.

Shells are per checkout, so local workspaces in the same project share them. Their layout and scrollback survive a restart — a restored shell replays what it had under a resumed from previous session divider — but processes don’t: you get a fresh shell in the right directory, not mid-command. ⌘-click a URL in terminal output and it opens on the Browser surface; a plain click only moves the cursor.

What gets restored

Reopen Raven and your workspaces, tabs, active tab, each tab’s panel, and any unsent text in the composer are where you left them. Conversations replay in full from disk; the browser keeps its page address and cookies. What doesn’t survive is anything live — running processes, the page itself, images you’d attached but not sent — which comes back clean.