^[control-codes
live in libghostty-vt

Operating system commands

OSC 3008 Hierarchical Context Signalling

View as Markdown

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.

Support

TerminalVersionSupportNotes
VT220manual, 2nd ed., 1984NoOSC is not among the controls it recognizes (§4.2)
VT510manual, 1st ed., 1993Noignores an OSC string (chapter 4)
xtermpatch 412, xterm-411aNo
libghostty-vt0f171f6Noparsed, then ignored
Konsole26.11.70, a24c3d71No
ConEmubuild 230724, its documentationNonot in ConEmu’s list, ANSI escape codes

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
Every example on these pages runs in your browser, in libghostty-vt compiled to WebAssembly.