SBCL's stdin during --load is the load file, NOT the terminal. When uiop:run-program creates a subprocess, it inherits this stdin, so 'stty size' reads from the load file and fails. :input :interactive opens /dev/tty for the child's stdin, matching the behavior of 'stty size' from an interactive shell.