^[control-codes live in libghostty-vt

Operating system commands

OSC 3008 Hierarchical Context Signalling

Tell the terminal when a shell, a command, a container or a privileged session starts and ends.

OSC 3008 ; start=id ; type=… ST
ECMA-48
§8.3.89 OSC – Operating System Command, p. 51
Specification
UAPI.15 OSC 3008: Hierarchical Context Signalling

Control of a terminal passes from program to program: a shell runs a command, ssh connects to another machine, run0 acquires root, a container manager starts a container. OSC 3008 lets each say so, so that the terminal can mark where each began and ended, tint the output of a privileged session, or offer to open a new shell in the same place. Its definition is the UAPI group’s OSC 3008: Hierarchical Context Signalling, and systemd’s tools send it.

SequenceDoes
OSC 3008 ; start=id ; field=value ; … STopens the context id, or updates it, with metadata
OSC 3008 ; end=id ; field=value ; … STcloses it, and every context opened inside it

The id is chosen by whoever opens the context, up to 64 printable characters, and should be unique, such as a UUID. The fields include type, which is one of boot, container, vm, elevate, chpriv, subcontext, remote, shell, command, app, service and session, and others such as the user, the host name and the working directory. Contexts nest: a new one becomes the active one, and the one before it its parent.

A default xterm does not have it and ignores it (the OSC numbers it knows). libghostty-vt parses it and does nothing more. What a case can see is that nothing is printed or answered, and libghostty-vt passes.

Validation

OSC3008-1: Nothing on screen

A
\e]3008;start=5f1c;type=shell\e\\
\e]3008;start=9a2e;type=command\e\\
B
\e]3008;end=9a2e;exit=success\e\\
C
|ABC___|
cursor 1,4
reply none