i wanted to talk to my coding agent.
so i made it happen. this is pi-voice: you talk, pi does the work, and a voice tells you what happened. it's all in your terminal, on your mac.
^ that's the bar above pi's input. it shows who has the floor: you talking, the voice talking, or pi working.
how this happened
when gpt-live showed up in the chatgpt app on my phone i was honestly a little too excited. it felt like the first voice thing that actually talks with you. you can cut it off mid-sentence, it keeps up, it doesn't feel like a walkie-talkie.
and my first thought was: i want this hooked into my coding agent. now.
but there was no api. so i waited. and kept checking. and waited some more.
the day the api came out i opened codex and built my own /voice command. it worked, and it was really fun.
why pi
because this shitty harness is what a simple man needs. (said with love.)
pi is small, it gets out of the way, and you can bend it however you want with an extension. that's all this is: one pi extension. gpt-live is the voice, and your pi session is the brain. same model, same tools, same permission prompts, nothing hidden.
stuff i cared about
- you can interrupt it any time. just talk over it.
- use your speakers. echo cancellation keeps it from hearing itself. headphones are optional.
- when the voice reads out pi's answer, that read-out goes in the chat. pi's full written answer is one click away.
- gpt-live costs money while it's connected, so it pauses itself when nobody's talking.
- the bar only moves when something is actually happening.
try it
pi install npm:@lprsrts/pi-voice
then set OPENAI_API_KEY (or put it in your keychain as openai-api-key), type /talk in pi or hit alt+v, and say something. same again to stop.
you need macos 14+, node 24+, the xcode command line tools, and an openai api key with billing. a chatgpt plan doesn't cover it. the voice is about $0.05 a minute, and pi's model costs whatever it costs. the free package is MIT. more in the readme.
heads up
this is a side project. it works for me every day, but it's young and there are rough edges. if something breaks, open an issue and i'll take a look.
— alper (@lprsrts)