SCUA could read a payload piped into it. It could not prompt someone and read what they typed back. That is the sort of gap you notice the first time you try to write an installer, a CLI tool, or anything that asks before it deletes.
sys.readline() reads a line.
sys.readpassword() reads one without echoing it, for a
password prompt.
import sys
sys.write("Your name: ")
let name = sys.readline()
print(`hello, {name}`)
Both need the new --allow-tty grant. That follows the
same rule as the rest of SCUA's I/O: the terminal is where a person
types secrets, so reading it is a capability a host hands over, not
something every script holds by default. Without the grant the names do
not exist, and the compiler says which one you were missing and how to
grant it. An actor never inherits it either, so spawning a partition is
not a way around the sandbox.
Both readers return nil at the end of input. Guard for
it and the same script works three ways: someone typing at a keyboard,
input piped in from another program, and a run with no terminal attached
at all. That last one is how CI invokes things, and a reader that hangs
there is the bug you would hit first.
Two smaller things. Waiting for input does not freeze the program, so host timers keep running while the prompt sits there. And if you paste a username and password together at the first prompt, the terminal has already displayed the password before the secret read begins. No program can un-display that, so SCUA throws the pasted-ahead text away and asks again rather than accepting a value that was shown on screen.