Core concepts

Panes & Tabs

An IDE-like layout system: split the screen into nested panes, each holding multiple tabs across 9 kinds.

The pane tree

Panes form a recursive tree: axis nodes are horizontal/vertical splits, leaf nodes are real panes with their own tab bar. Split freely, drag to resize, and a pane auto-unsplits when its last tab closes.

Horizontal & vertical splits

Shortcuts: ⌘\ splits right, ⌘⇧\ splits down. Drag handles adjust the ratio.

Persisted layout

Layout persists per project in settings.json, plus a global lastLayout and named presets.

The 9 tab kinds

KindContent
sessionA chat/terminal session with an agent
fileFile editor (CodeMirror 6)
specProject OpenSpec documents
merge · diff · compareSource-difference views
gitlogGit commit history
terminalStandalone terminal
monitorProcess & system-resource monitor
File tabs

File tabs show a “dirty” dot for unsaved changes and auto-save when you switch away. View/edit: ⌘K. Save: ⌘S.

Why state survives tab switches

Stateful containers like the terminal (xterm) and editor are kept alive with a hidden-pool technique and v-show instead of being destroyed and recreated. As a result, terminal history, scroll position, and in-progress input stay intact when you switch projects or tab kinds.