Traditional CLI tools have a very static, synchronous workflow: The user types a line containing a command, the program processes the command, and prints one or more lines conta