Skip to main content
Screens verified by tests/test_rm.py (and the walkthroughs above).

Reading dabs ls

ls draws what dabs owns as a tree, grouped by driver: NODE · KIND · VOL/HELD/TMP (a dot per space that holds files) · STATE · WHERE.
local (bwrap, this machine)
  NODE             KIND     VOL  HELD  TMP  STATE  WHERE
  myproj-________  project                         ~/myproj
  └─ sh-________   box                      live   ~/.dabs/nodes/sh-________  (shell-____________)
Visibility follows life: ls shows only subtrees holding a running box or real files. Empty markers (a project record with nothing under it) hide behind a hint —
1 inactive (dabs ls --inactive)
— and dabs ls --inactive lists only those instead. dabs rm <node> stops the box and removes its node and spaces, cascading to everything nested under it. Losing anything requires consent; without it, rm previews and exits nonzero. --dry previews and removes nothing. Four flags authorize four different losses — never collapsed into one:
flagconsents to
-y / --yesstop a live box; reap a held space that holds files
--volumeadditionally delete the volume — what a place keeps on purpose
--forcediscard a worktree’s unreviewed git work
--multipleact on all nodes one ambiguous name matched
--keep stops the box but keeps its node record (when its spaces still hold something worth pointing at).

Ambiguity reaps nothing

A prefix matching several nodes is refused — with the count shown — until you opt in with --multiple:
⚠ sh matches 2 nodes: sh-________, sh-________
dabs: "sh" matches 2 nodes; pass --multiple to rm all of them
dabs rm sh --dry --multiple     # preview both
dabs rm sh -y --multiple        # reap both
✓ shell-____________ stopped
✓ sh-________ removed
✓ shell-____________ stopped
✓ sh-________ removed
--multiple is not --all: it scopes to what one name matched. The only all-of-a-kind sweeps are rm --clean-worktrees (reviewed worktrees) and rm --inactive (empty markers).

Sweeping the empty markers

dabs ls --inactive        # what's hidden
dabs rm --inactive        # sweep it
✓ myproj-________ removed
no inactive subtrees

Images

dabs prune reclaims built box images (they rebuild on the next dabs build); --dry lists them with sizes; --force removes even an image a live box still uses.