Workspaces

A workspace is a folder and the layout you open it in. Save one for each folder you work in, then launch the whole arrangement from a picker instead of splitting panes by hand.

Add a workspace

Open Settings with , and choose Workspaces, then Add workspace. Give it a name and point it at a folder. That is the whole minimum: a named workspace that opens one shell in that directory.

Set the layout in the same form when you want more than a shell. The main pane runs your editor, a right or bottom drawer runs a second command beside it, and Focus decides which one holds the cursor when the workspace opens.

zen-termfeature/zen-83…
swift build
Building for debugging…
Build complete! (4.21s)
1ZenTerm2Craftwork
New Workspace
Workspace name *
Workspace name
Folder *
Click to choose, or type a path
Layout
MinimalEditor + AI + ShellCustom

Set each region yourself

Main pane
blank → plain shell
Right drawer
claude → agent
Bottom drawer
pnpm dev → server
Focus
MainRightBottom
Environment
Add variable
CancelAdd Workspace
Settings → Workspaces

The name is independent of the folder. A workspace called ZenTerm can point at ~/Dev/zen-term, and that name is what the picker lists and the tab wears.

Open it

Press P for the workspace picker. Your workspaces are listed. Choose one and you get a tab in that folder, named after the workspace, arranged in the layout you set.

zen-termfeature/zen-83…
swift build
Building for debugging…
Build complete! (4.21s)
1ZenTerm2Craftwork
Search workspaces…
New Workspace…
ZenTerm
ZenTerm Website
Craftwork
Reecv
Cohaus
Drucial App
Dot Files
⏎ open⇧⏎ replace↑↓ move⎋ close
The ⌘P workspace picker

The row at the top adds a workspace and opens it in one step. For a workspace already in the list, Enter opens it in a new tab, and holding Shift replaces the current tab instead.

Put them in the order you want

The picker lists your workspaces in the order their sections appear in the workspaces file. To change it, focus a row in Settings → Workspaces and press or . Settings moves that whole section in the file for you, so moving it by hand gets you the same result.

One keystroke, the whole layout

Opening a workspace runs its recipe at once: the first pane starts your main program, each drawer opens running its command, focus lands where you set it, and any environment variables you added reach every pane and drawer. An editor in the main pane and an agent in a drawer beside it arrive together, in one keystroke.

16/// Split orientation. `.vertical` = a | b.
17public enum SplitAxis: Sendable { case vertical, horizontal }
18
19/// Recursive pane layout. A value type.
20public indirect enum PaneNode: Sendable {
21 case leaf(PaneID)
22 case split(id: SplitID, axis: SplitAxis,
23 ratio: Double, a: PaneNode, b: PaneNode)
24}
25
26public extension PaneNode {
27 var leafIDs: [PaneID] {
Szen-termSources/PaneKitPaneNode.swift
zen-term
zen-term ❯ swift run ZenTerm
Building for debugging…
Build complete! (4.21s)
✓ ZenTerm launched
Bash(swift build)
… +6 lines
Build succeeded. Running swift test.
Test Suite 'PaneKitTests' passed.
Verifying the reconciler… (2m 14s)
▶▶ auto mode on (shift+tab to cycle)
1ZenTerm2Craftwork
A three-pane workspace: editor, agent, build

The picker shows the workspaces you add and nothing else. ZenTerm does not scan any directory, so the list stays deliberate and stays yours.

Edit the file directly

Settings writes each workspace to ~/.config/zen-term/workspaces, one section per workspace. You can edit that file by hand, and the picker reads your changes the next time you open it. The workspaces reference covers every field a section takes, including the drawer commands and the environment it injects.