I actually expected the models to perform better than they did, but I'm a bit of an optimist. It makes sense for the more mature SAST tool to outperform them just based on maturity alone.
It was probably due to the lack of flow control. Serial doesn't work well when it's one-way. I did something similar to send logs waaaay back in the day, and it would constantly flip bits or send characters out of sequence, etc. I had to transmit very slowly to get it to work stably without any flow control. I want to say that I limited it to 9600 kbps before it started to become reliable.
I did something similar with gemini cli by just wrapping it in tmux and building some extensions.[0]
Eventually that wasnt enough so I ended up forking it and adding REST endpoints to inject commands and read the screen.[1]
Your solution is much cleaner! I'll probably replace mine with it. Thanks for sharing!
[0] https://github.com/stevenAthompson/self-command
[1] https://github.com/stevenAthompson/gemini-cli-remote-control