Terminals & Panels
The panel model in Daintree: the seven built-in panel kinds, the grid, dock and dialog presentations, tabs, maximize, and how panels get their titles.
Everything in the main content area of a Daintree window is a panel. A panel has a kind (what it is) and a presentation (where it currently lives). Those two axes are independent, and understanding them is most of what you need to know to move around the habitat.
This page covers the panel model itself. Terminal behavior (the renderer, scrollback, search, links, drag-and-drop) lives on Terminals.
Panel Kinds
Daintree ships seven built-in panel kinds. Each carries its own icon and accent color, so you can tell them apart at a glance in the grid, the dock, and the quick switcher.
| Kind | Accent | Process | What it is |
|---|---|---|---|
| Terminal | Gray | PTY | A shell session. Runs any command, including an agent CLI. |
| Browser | Blue | No | An embedded Chromium browser. See Browser Panels. |
| Dev Preview | Teal | No | A dev server paired with a live preview. See Dev Preview. |
| Review | Violet | No | The Review Hub bound to one worktree, so a diff sits next to the agent producing it. |
| File Viewer | Amber | No | A read-only view of one file. See File Viewer. |
| File Browser | Cyan | No | A tree plus folder listing for a worktree, scratch workspace, or plain project folder. See File Browser. |
| Diff Viewer | Green | No | A single file's changes. Always opened against a target file, so it has no bare launcher entry. |
Plugins register additional kinds through the same registry. A plugin panel gets an orange brand color, appears in the launcher alongside the built-ins, and is restored across restarts like any other panel.
Three Presentations: Grid, Dock, Dialog
A panel has up to three presentations: grid and dialog always, dock only for kinds that support it (see below). The panel record is the same across all of them (only its location changes), so moving a panel between presentations never restarts anything or loses state.
| Presentation | What it is |
|---|---|
| Grid | The main content area. This is where work happens. |
| Dock | The compact chip row along the bottom. A docked panel stays fully live and opens in a popover on demand. See UI Layout. |
| Dialog | A modal over the workspace. Used when you want to look at something without giving up a grid cell. |
A dialog carries an Open as panel button in its header. Press it and the panel moves into the grid, keeping everything it had loaded: scroll position, expanded folders, the file you were on. That is the intended path from "glance at this" to "keep this open".
Dialogs layer rather than replace. Opening the Review Hub as a dialog and drilling into a per-file diff leaves the hub mounted underneath; closing the diff returns you to it exactly as you left it. Only the topmost frame takes focus, and only the topmost frame offers Open as panel. The File Browser and Diff Viewer pin their dialogs at a fixed near-full height, so expanding a folder or stepping to the next file doesn't resize the frame under your cursor.
Which kinds can be docked
Every panel kind is dockable by default; a kind opts out only when it has no meaningful compact form.
| Dockable | Not dockable |
|---|---|
| Terminal, Browser, File Viewer | Dev Preview, Review, File Browser, Diff Viewer |
The four that opt out are all surfaces whose whole value is the area they occupy: a live preview, a two-pane browser, a side-by-side diff. Squeezing them into a chip row would produce something you'd have to reopen to use. They can still be presented as dialogs.
When a reading panel leaves the grid (docked or closed), focus returns to whatever you were last looking at rather than jumping to the first terminal in the worktree.
Creating Panels
- The launcher is the one searchable surface for starting anything: agents, terminals, panels, recipes, and closed sessions. Open it from the toolbar or the empty grid. See Palettes & Menus.
- Panel palette: Command-N Control-N Control-N opens a picker for the non-terminal kinds.
- Direct shortcuts for the kinds you open constantly, listed below.
| Action | Shortcut |
|---|---|
| New terminal | Option-Command-T Control-Alt-T Control-Alt-T |
| Terminal in the current worktree | Option-Command-N Control-Alt-N Control-Alt-N |
| Claude Code agent | Option-Command-C Control-Alt-C Control-Alt-C |
| Codex agent | Option-Command-X Control-Alt-X Control-Alt-X |
| Gemini agent | Option-Command-G Control-Alt-G Control-Alt-G |
| Browser panel | Option-Command-B Control-Alt-B Control-Alt-B |
| File Browser panel | Option-Command-F Control-Alt-F Control-Alt-F |
| Duplicate the focused panel | Command-T Control-T Control-T |
| Panel palette | Command-N Control-N Control-N |
Every kind routes its launch through a single action, so the toolbar, the launcher, the palette, a worktree card, and an agent calling it over MCP all resolve the target the same way. That is why opening a File Browser for a folder that already has one focuses the existing panel instead of stacking a second copy.
Managing Panels
| Action | Shortcut |
|---|---|
| Close focused panel | Command-W Control-W, or Control-F4 Control-W |
| Reopen last closed panel | Shift-Command-T Control-Shift-T Control-Shift-T |
| Resume a closed session | Command-K, then Command-R Control-K, then Control-R Control-K, then Control-R |
| Close all panels | Command-K, then Command-W Control-K, then Control-W Control-K, then Control-W |
| Restart all panels | Command-K, then Command-A Control-K, then Control-A Control-K, then Control-A |
| Kill the focused panel | Command-K, then Command-Q Control-K, then Control-Q Control-K, then Control-Q |
| Restart the focused panel | Command-K, then Command-E Control-K, then Control-E Control-K, then Control-E |
| Rename the focused panel | Command-K, then Command-L Control-K, then Control-L Control-K, then Control-L |
| Find in the focused panel | Command-F Control-F Control-F |
| Focus panel 1–9 | Command-1, through Command-9 Control-1, through Control-9 Control-1, through Control-9 |
| Next panel (includes docked) | Control-Tab Control-Tab Control-Tab |
| Previous panel (includes docked) | Control-Shift-Tab Control-Shift-Tab Control-Shift-Tab |
| Back to the previously focused panel | Option-Command-` Control-Alt-` Control-Alt-` |
| Move the focused panel to the dock | Option-Shift-Command-D Control-Alt-Shift-D Control-Alt-Shift-D |
| Move the focused panel to the grid | Option-Shift-Command-G Control-Alt-Shift-G Control-Alt-Shift-G |
| Toggle every panel's dock state | Option-Shift-Command-M Control-Alt-Shift-M Control-Alt-Shift-M |
Three more chords act on every session in the active worktree at once: Command-K, then Command-M Control-K, then Control-M Control-K, then Control-M docks them all, Command-K, then Command-X Control-K, then Control-X Control-K, then Control-X maximizes them all, and Command-K, then Command-V Control-K, then Control-V Control-K, then Control-V resets their renderers. The full list is on Keyboard Shortcuts.
Maximize & Focus Mode
There are two ways to clear the space around a single panel, and they are easy to confuse. Maximize expands one panel to fill the grid while the sidebar stays put. Focus Mode goes further and hides the sidebar and the assistant entirely. Use maximize when you want one panel large but still want the worktree list in reach; use Focus Mode when you want nothing but the panel.
Maximize a panel
- Keyboard: Control-Shift-F Control-Shift-F Control-Shift-F toggles maximize on the focused panel.
- Hotkey twice: Command-1, through Command-9 Control-1, through Control-9 Control-1, through Control-9 focuses the panel at that position. Press the same hotkey again and it maximizes; once more and the grid comes back.
- Double-click the panel header: click the header's drag area: the icon or the empty space beside the title, not the title text, a tab, a button, or an input.
Double-clicking a panel's title text or a tab starts an inline rename instead, and double-clicking a docked panel's header moves it back to the grid rather than maximizing it.
Focus Mode
Focus Mode gives a single panel the whole window. The sidebar is hidden (not collapsed), and the Daintree Assistant goes with it.
- Keyboard: Command-K, then Command-F Control-K, then Control-F Control-K, then Control-F (a two-key chord)
- View menu: Toggle Focus Mode
- Command palette: Shift-Command-P Control-Shift-P Control-Shift-P , then search for "Toggle Focus Mode"
An Exit Focus button appears in the header as the way back. If other panels are open behind it, a background indicator in the center of the header shows how many are still running, with an animated pulse for the ones actively working. Focus Mode is saved per project, so reopening a project restores whichever mode you were last in, including the sidebar width you had.
Panel Tabs
A panel can hold more than one session. Once it does, the header switches from a single title to a tab bar, with each tab showing the panel's icon, a truncated title, and a close button on hover. Single-tab panels keep the standard header and reveal a + button on hover.
Creating tabs
Command-T Control-T Control-T duplicates the focused panel as a new tab alongside it. The + button does the same. Both create a new session of the same kind. Agent tabs show a state badge next to the title (a spinner for working, a pause icon for waiting), so you can track progress across tabs without switching.
Navigating tabs
| Action | Shortcut |
|---|---|
| Next tab | Shift-Command-] Control-Shift-] Control-Shift-] |
| Previous tab | Shift-Command-[ Control-Shift-[ Control-Shift-[ |
These work from anywhere in the panel and wrap at the edges. When the tab bar itself has keyboard focus, ArrowLeft and ArrowRight move between tabs and Home and End jump to the first or last. Arrow navigation is there for accessibility, not as the fast path.
Overflow and management
When tabs exceed the header width, scroll arrows appear at the edges on a gradient fade. Clicking one pages the bar by roughly 80% of its visible width. Switching to a tab by any means scrolls it into view, so the active tab is never lost behind an edge.
- Rename: double-click a tab title to edit it inline. Enter or a click away confirms, Escape cancels.
- Reorder: drag a tab left or right within the bar.
- Close: hover a tab to reveal its × button. Closing the active tab moves focus to the nearest neighbor.
Panel Grid Layout
Pick a layout strategy in Settings > Panel Grid:
| Strategy | Behavior |
|---|---|
| Automatic (default) | Columns are chosen from the available width, not the panel count. |
| Fixed Columns | Lock to N columns (1–10). |
| Fixed Rows | Lock to N rows (1–10). |
The automatic grid is size-driven. It fits as many columns as will hold a panel at least 380 px wide, capped at four, with a dead band at each boundary so nudging a window edge doesn't flap the whole layout. Rows stretch to fill the height until a row would fall below a minimum readable height (roughly sixteen text rows), and at that point the grid scrolls rather than shrinking panels into uselessness. Panel count on its own never triggers scroll mode; running out of vertical room does.
In scroll mode the grid uses its own overlay scrollbar rather than the platform one: a chunky, always-visible handle with a minimum size, modelled on the terminal's own slider. It re-measures whenever the layout could have changed the content height (a panel opening or closing, a column-count flip, entering or leaving scroll mode), because those change the scrollable height without firing a scroll or resize event, which is exactly when a native scrollbar goes stale.
Two-pane split
Enable a side-by-side split in Settings > Panel Grid. Panels arrange into two panes at a ratio you set anywhere from 20% to 80%. A prefer preview option routes browser and dev preview panels into the secondary pane automatically, which is the "agent on the left, live preview on the right" arrangement most people want it for.
Moving panels and focus
- Move focus left, right, up, or down: Option-Command-Left Arrow Control-Alt-Left Arrow Control-Alt-Left Arrow , Option-Command-Right Arrow Control-Alt-Right Arrow Control-Alt-Right Arrow , Option-Command-Up Arrow Control-Alt-Up Arrow Control-Alt-Up Arrow , Option-Command-Down Arrow Control-Alt-Down Arrow Control-Alt-Down Arrow .
- Move the panel itself within the grid: Option-Shift-Command-Left Arrow Control-Alt-Shift-Left Arrow Control-Alt-Shift-Left Arrow , Option-Shift-Command-Right Arrow Control-Alt-Shift-Right Arrow Control-Alt-Shift-Right Arrow , Option-Shift-Command-Up Arrow Control-Alt-Shift-Up Arrow Control-Alt-Shift-Up Arrow , Option-Shift-Command-Down Arrow Control-Alt-Shift-Down Arrow Control-Alt-Shift-Down Arrow .
- Option-Command-Z Control-Alt-Z Control-Alt-Z undoes the last layout change; Option-Shift-Command-Z Control-Alt-Shift-Z Control-Alt-Shift-Z redoes it.
You can also drag panels between worktrees using the sidebar's drop targets.
Restore order
Reopening a project doesn't bring every panel back at once. The active worktree's panels load first. Within every other worktree, the panel you most recently focused is restored ahead of the rest, and the remainder fill in behind on a staggered schedule. Daintree tracks this by stamping each panel with the time you last focused it. See Session Management for what is saved and what is rebuilt.
The Empty Grid
An empty grid is a launcher, not a blank slate. It stacks five sections, each arriving a beat after the one above it:
- Recipes: run a saved workspace setup straight from here. See Recipes.
- Resume: a one-line shortcut back into a closed agent session.
- Quick actions: a chip per agent whose toolbar button is currently visible, plus New terminal and Browse files, and a button into the full searchable launcher.
- Project pulse: the worktree's recent activity. See Project Pulse.
- Tips: a rotating hint, shown once you've launched an agent at least once.
Recipes lead deliberately: the fastest way to fill an empty grid correctly is to replay a setup you already trust. Switching projects replays the entry sequence rather than remounting the sections, so the fetches and rotation timers behind them keep their state.
Panel Titles
A panel's title comes from one of three owners, and the stronger owner always wins. This is what stops an agent's own task title from overwriting a name you chose.
| Owner | Set by | Behavior |
|---|---|---|
| Default | Nobody, the starting state | Derived from live runtime identity. Flips as detection promotes or demotes an agent, and composes in the agent's observed task title. |
| Custom | Automation: a preset, a launch name, an MCP or Assistant rename | Frozen against detection rewrites. Task composition still applies, and a later automation rename can replace it. |
| User | You, by renaming the panel | Fully frozen. No detection rewrite, no task composition, and automation renames bounce off it. |
A user-set title survives a respawn, a restart, and duplication into a new tab: it is part of the panel record, not a label on the process. Renaming a panel to an empty string resets it to Default and hands the title back to detection. Rename with Command-K, then Command-L Control-K, then Control-L Control-K, then Control-L , by double-clicking the title text, or from the panel's context menu.
Where to Go Next
- Terminals: the renderer, scrollback, search, links, drag-and-drop, and everything else terminal-specific.
- File Viewer: reading a single file without leaving the habitat.
- File Browser: browsing a worktree's files and handing them to an agent.
- QuickRun: firing off a command or a detected script from the sidebar.
- UI Layout: the toolbar, sidebar, and dock that surround the grid.
- Recipes: saving a panel arrangement you want back.
- Session Management: what persists across a close, a restart, and a project switch.