Docs/Naming & handles

Naming & handles

A conversation that hops runtimes needs a name that belongs to no runtime. Constant gives every conversation three layers: a handle (the stable address), a title (the glance layer), and chapters (the position).

The handle

One color word plus a two-digit tail:

cobalt-37   ash-52   viridian-08

The handle is suggested by a hash of the conversation id, but decided by the ledger registry: if a handle is already taken, the tail deterministically extends until it is unique. Collisions are impossible by construction — the registry, not probability, guarantees it. The shape (color + digits) is also deliberately distinct from opencode's adjective-noun session slugs, so the two can never be confused.

Handles work as addresses everywhere:

constant resume cobalt-37
constant pack cobalt-37
constant rename --of cobalt-37 auth bug

The title

The human layer on top, with strict precedence:

  1. An explicit rename locks it. constant rename auth bug, or :rename auth bug inside a hosted session. Once you name it, nothing overwrites it.
  2. Otherwise, a harvested runtime title. If the runtime generated a title (opencode does; a /rename inside Claude Code counts), Constant adopts it.
  3. Otherwise, a birth slug from your first message, with leading filler words stripped.

Renames re-stamp the native resume pickers immediately, so the name you chose is what codex and claude show in their own /resume lists.

Chapters

Every carry is a chapter: ch01, ch02, … You'll see them in the status bar, the trail, the snapshots listing, and the record volume filenames (ch04-from-codex.json). The full stamp a native picker shows:

auth bug · ch04 ← codex · cobalt-37

Name first, then where the thread stands, then the address.

Seeing it

constant trail          # chapters and projections for this directory
constant resume --list  # addressable conversations

Inside a hosted session, Ctrl-B t opens the trail graph — every chapter as a colored rail, with the "you are here" head. See Hosting a runtime.

Next: Runtime vs model.