Left bar and tasks

Brief

The left bar is a tree down the left edge of the window with every tab in the session in it. A tab is a task. Tasks are filed under a project, optionally inside a group, and no deeper than that.

Each task row shows what its agents are doing: a robot that breathes while an agent works and blinks when it needs you, ✅ when it finished, ❌ when it finished against an error, 📌 for a pinned note. Fold a branch and those marks roll up onto the branch row, so a folded project still blinks when something inside it asks a question.

Click a row to go there. Drag a task onto a project or group to file it. Right-click anything for its menu, including ▲ Promote and ▼ Demote for what matters today. Delete a branch or close a tab and it goes to the bay at the foot of the bar, where it stays recoverable for an hour or more. Ctrl+Shift+Z brings back the last thing you closed.

Ctrl+Shift+B shows and hides the bar, and Ctrl+Alt with the arrow keys walks it.

Technical has every mark, menu, key and saved setting.

Technical

The tree

The tree has three kinds of row, two layers deep: a project contains groups, a group contains tasks, and a task may also sit directly in a project. A group is the same thing as a tab group on the tab strip; the tree gives it a project. Tasks filed nowhere sit below an UNFILED divider, which only appears once something above it is filed.1

What each row shows#

RowDrawn as
ProjectA filled colour dot and an UPPERCASE name. A new project's colour comes from its id.
GroupThe group's colour band stood on end, the same band its tabs sit on in the tab strip. New groups start teal; Colour… on the group menu changes it.
TaskA small swatch in the tab's colour, the tab's name (or its number when unnamed), its level mark, one badge per agent pane, 📌 for a pinned note, and a × on hover that closes the tab.

The active task wears a ring, and the project and group that hold it wear a faint wash of their own colour. Rows carry no counts.

Marks#

MarkMeans
robot, yellow HEY blinkingAn agent needs input. It blinks on a 700 ms square wave.
robot, breathingAn agent is working (a 1.4 s breath).
✅An agent finished. Clears when you visit the pane.
❌An agent finished with an error on screen. Clears when you visit.
📌A pinned sticky note on a pane in this task. Steady, never pulsing.
▲ green · ▼ bluePromoted or demoted. A task inheriting a level from its branch shows it at half strength.

With more than one agent in a task, the loudest wins: needs input, then working, then finished. An idle agent shows nothing. A folded branch shows one robot and the ✅ ❌ 📌 of everything under it; an open branch shows nothing, because its tasks are on screen.2

Moving around#

KeyDoes
Ctrl+Shift+BShow or hide the bar. Works from any pane, on either face.
Ctrl+Alt+↑ ↓Move the highlight one row, wrapping at both ends. Opens and activates nothing.
Ctrl+Alt+→On a folded branch, open it; on an open branch, step to its first child; on a task, go to it.
Ctrl+Alt+←Fold an open branch, or climb to the parent.
Ctrl+Alt+1…9Highlight the Nth top-level branch.
Ctrl+Alt+RRename the highlighted row, or the active tab when nothing is highlighted.
Ctrl+Shift+ZBring back the last thing you closed.

The arrow and number chords only work while the bar is open, and they travel over what is drawn, so folding a branch lets the same key press go further. Clicking a project or group goes to its first tab; clicking the branch you are already in does nothing. Double-click any row to rename it. Clicking a fold triangle folds without going anywhere, and the triangle in the bar's header folds or opens the whole tree.

Filing#

Drag a task onto a branch row to file it inside. The top or bottom quarter of a branch row, or either half of a task row, puts it above or below instead, and a chip reading into <name>, above <name> or below <name> says which. Dropping onto a task takes that task's branch and place. Dropping onto a project takes the task out of any group. Drag onto the UNFILED line to file it under nothing. A group dragged onto a project moves into it; a group can't go inside another group.

From the keyboard-free side: Ctrl+click a task for its tray, which has a project section with a chip per project and + new project. Adopt loose tabs into their directories, on the header's menu, files every unfiled task under a project named after its git root (a worktree counts as its own root), or its working directory outside a repository. It never moves a task that is already filed.

Menus#

Right-clickRows
The headerNew project, New group, Adopt loose tabs into their directories, then one Recover … row per thing in the bay and Empty the trash, or Nothing to recover
A project▲ Promote, ▼ Demote, New tab here, New group here, Rename, Fold everything beneath, Delete — …
A group▲ Promote, ▼ Demote, New tab here, Rename, Colour…, Delete — …
A task▲ Promote, ▼ Demote, New tab beside this, Rename, Remove from group, Close or Close — N panes

The level already in force carries a ✓; choosing it again clears it. A delete row counts what it takes with it, as in Delete — 3 groups, 11 tabs, 14 panes, and is disabled when the branch holds every tab in the window, because deleting the last tab would quit. The + in the header makes a project holding a fresh terminal, with its name box open.

The bay#

The bay sits at the foot of the tree: two doors that open a little when you start dragging and all the way when you drag over them, reading drop here to delete and then release to delete. Deleting a project or group, closing a tab when more than one is open, and dropping a task or pane into the bay all put it there. Its shells keep running.3

  • Anything with one pane stays recoverable for an hour; two or more panes, four hours. The bay holds ten things; the eleventh pushes out the oldest, whose shells then end.
  • Deleting a branch that holds anything asks first: DELETE PROJECT? or DELETE GROUP?, Enter to delete, Esc to cancel. An empty branch goes without asking.
  • With something inside, the shut doors read N recoverable. Click them, or right-click the header, and pick a Recover … row, which shows the time left as under a minute, 42m left or 3h 5m left.
  • A recovered branch comes back with its groups and its tabs in their old places. A recovered pane comes back to its old place if it can, and the bay says which: back where it was, back in its tab, in a new seat or back as its own tab.
  • The bay's contents do not survive the window closing.

Under the tree#

Below the bay, the bar shows one row per AI subscription with how much of its allowance is left. Usage and vitals has what those rows read and how to change them.

What is saved#

The tree lives in the session's layout file, ~/.config/terminal-delight/sessions/<session>.toml, so a second window on the same session shows the same tree.

KeyHolds
[[projects]]id, name, color, collapsed, level
[[groups]]id, name, color, text_color, collapsed, project, level
[[tabs]]each tab's name, color, group, project and level
left_barShown or hidden. Absent means the default, which is shown.
left_bar_wWidth, 132 to 420 px; the default is 208. Written only once you drag the edge.

level is Promoted, Neutral or Demoted. A missing level means "inherit from the branch", which is a different answer from Neutral. Scratch windows and demo windows never show the bar. terminal-delight ctl tab and ctl tabs can name and group your own tab from a script (see ctl); there is no scripting for projects yet.

Not yet#

  • Clicking a project does not open an overview of it; it goes to its first tab.
  • There is no keyboard path to delete a branch. Use the menu or drag it to the bay.
  • The help screen has no row for Ctrl+Shift+B yet.

What would prove this wrong#

If a folded branch holds an agent that is asking you something and its row does not blink, the roll-up has failed at the one job it exists for. That is a bug worth filing with the tree's layout file attached.

Sources

  1. The tree's model and row order: tree.rs, and the left bar plan.
  2. Agent badges and their precedence: main.rs (the tab badge and tree row drawing); levels: attention.rs.
  3. The bay and its retention: hold.rs, and the plan's manners.