Skip to main content
Every boot mints a node with a generated id (sh-a3f9c21d). --name lets you name it instead — a handle that works everywhere an id does (exec, ls, cd, rm, --worktree) and reads back in the NODE column. It turns a session of boxes and worktrees into something you address by intent, not by hash.
Screens verified by walkthroughs/test_names.py.

Name what you cut

Name a worktree and the branch is cut after it — dabs/<name>, not a random id:
Name a box the same way. --name sets the id the boot line prints:

Reach it by name

The name is a handle everywhere an id is — reach into the box with it:
And the whole session reads as what you called it — names in the NODE column:

cd into a node

The WHERE column shows each node’s own directory. dabs cd <node> prints that directory as a bare path, so a shell can step into it — a child process cannot move its parent’s shell, so you wrap it:
A prefix resolves the same way every handle does (dabs cd de → the same path), and an ambiguous one is refused rather than guessed. Inside that directory live the node’s three spaces as subdirectories — volume/, held/, tmp/ (see Spaces); a worktree’s checkout is its held/worktree.

A name is claimed while its work is live

A name held by active work refuses a new claim — it is never silently reused:
Reap the holder first (dabs rm login-fix) and the name frees up; a name left by an inactive node is reclaimed on the fly. Winding a session down reads as plainly as it named it: