Prefixed output
A single script and a serial group inherit the terminal, so their output is untouched. A parallel group pipes its members so each line can say which script wrote it.
The prefix
The prefix is the member's script name, padded to the width of the longest name in the group, in a colour that stays the same for the whole run. Colours come from the cool half of the spectrum only, because green, amber and red mean pass, warn and fail everywhere else in Rune's output.
Partial lines
Bytes are forwarded as they arrive, not held until a newline. A prompt that ends mid-line renders immediately rather than waiting for output that may never come.
When a different script writes while a line is still open, Rune injects a newline first, so two scripts never share a line. A carriage return re-emits the prefix, which keeps progress bars that redraw a single line readable.
Child bytes themselves are never rewritten. Whatever the tool emitted is what reaches the terminal, minus nothing.
Colour through the pipe
A piped process sees a pipe rather than a terminal, and most tools turn colour off when they do.
Rune detects colour support on its own output and forwards FORCE_COLOR to piped members, so tools
that honour it keep their colour.
NO_COLOR set to any value turns off Rune's own colour, including prefixes.
A member with interactive: true is not piped at all. It inherits the terminal, so it is not
prefixed and it detects colour for itself.
Grouped output
--group-output buffers each member and prints it in one block when it finishes, instead of
interleaving.
Useful in CI logs, where interleaved output from four members is hard to read after the fact. Buffering means a member's output appears only after it exits, so it is the wrong choice while watching a long run.
Broken pipes
When Rune's own output goes to a pipe that closes, such as rune run dev | head -20, it stops
writing, terminates the members, and exits. It does not keep running invisibly with nowhere to
write.
Encoding
Output is decoded incrementally, so a multi-byte character split across two reads is reassembled rather than corrupted. Bytes that are not valid UTF-8 pass through as they arrived.