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.
| Sequence | Does |
|---|---|
OSC 3008 ; start=id ; field=value ; … ST | opens the context id, or updates it, with metadata |
OSC 3008 ; end=id ; field=value ; … ST | closes 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