When in doubt, there's always the option of rewriting an existing interactive shell in Rust.