Chat titles and session labels
Session mentions show the native chat title, surface, project, current item
claims (or the most recently released item), and last tool age. An unnamed
launched chat uses its assigned item ref and title. Labels resolve when read,
so later renames and claim changes appear in existing notices and messages.
Labels say last tool Nm ago using only the last tool call. Heartbeats never
refresh this age, including after a process exits; without a tool timestamp,
the label omits the age.
UUIDs remain in commands and secondary session details.
Session cards keep the harness name in the header. They add a title line only for a stored native chat title that differs from the launch item ref and title and has no steering claim. Item-derived fallback titles stay off the card face. The header (i) reveals state details. Search matches titles.
A session start, prompt or Stop hook observes the name on the machine running the harness. Desktop and CLI surfaces use their harness family's title reader:
- Claude reads the latest
custom-titlerecord in its transcript tail. If no title has been observed, it scans the file forward once. - Codex reads the latest matching
thread_namefromsession_index.jsonlunderCODEX_HOME(default~/.codex), thenthreads.nameinstate_5.sqlite. The session id is the thread id; the first prompt is never used as a name. - Cursor desktop reads the composer name from
state.vscdb; Cursor CLI reads the chat name from itsstore.dbmetadata.New Agentis unnamed.
Only a changed title travels to the control plane as a client fact; chat content stays on the machine. Unnamed headless chats use the item label.
Launches store their assignment in nullable session_launches.item_id.
The relay derives the worker name from the current item ref and title when
leasing the job. Claude receives --name; Codex receives thread/name/set.
Cursor has no worker naming surface.
When a desktop wake notice names a chat, open that chat and type anything. Its next hook delivers the waiting message; Yoke leaves that wake to you because a native resume would fork the transcript you are reading.