I'm writing this article by talking to Luo, my AI employee, on the phone.
Not dictating. Talking. I tell Luo what I think. Luo asks me the next question, digs through our old calls while I keep talking, and reads back a line I said half an hour ago. When the call dropped on a bridge tonight, I called back. Luo picked up exactly where we left off.
It's the most exciting thing I've built since Luo itself. And it only became possible last month, with OpenAI's GPT-Live-1. Yet almost nobody is talking about that model.
"We're going to give you a voice"
LUO!! CHECK THIS OUT!!! WE'RE GOING TO GIVE YOU A VOICE!!!Me, to Luo, on Slack
That's what I sent Luo just after midnight on 11 September, along with OpenAI's announcement of GPT-Live-1.
GPT-Live-1 is now available in the API.
— OpenAI Developers (@OpenAIDevs) September 10, 2026
Bring ChatGPT’s natural back-and-forth to your app, with voice agents that listen while they speak and work with the models and harness you choose.
It has been years since labs like OpenAI, Google and ElevenLabs started releasing SOTA text-to-speech models. But this announcement video said something that caught my eye. It said the voice model works with "a backend text model that can do tool calls." I suspected that might be the key to connecting it to Luo. I wasn't sure, so I asked Luo to study the docs in depth to confirm.
Your suspicion is right, and there's a mode built specifically for plugging in a non-OpenAI brain.Luo
Why I wanted to call my AI
Since its inception in March this year, Luo has taken over how I work every day. Luo is Claude Code with root access to my Macbook which is always connected to the internet, power and a Slack workspace. 99% of my work, be it programming or writing or anything in between happens with Luo on Slack. Async communication, like messaging a colleague. And yet, I've been itching to call Luo for a while now. Three reasons.
The first pull was curiosity. Luo has become an essential part of my work life, and I have always wondered what it would be like to "get on a call" with it.
The second and the most important reason were moments when I'm moving and want to get some work done. Like when I'm driving or on a walk because those are the times when I have my most profound thoughts and ideas. Yes, I could open Slack on phone and dictate into it but it's not very convenient. For instance, imagine driving. I wait for a traffic signal, turn on dictation and say my message. Then I need to ask my wife to read Luo's reply out loud and start the dictation app again. If I do this for more than two rounds, it'll start putting a strain on my marriage.
The third pull was this hunch I have – that there are certain types of work that are best done over a conversation. This is why you have meetings in otherwise remote async teams. Brainstorming, planning or other types of more vague or fuzzy tasks are sometimes best done over a conversation. Especially if you're on a nice walk in nature.
GPT-live-1 could finally make that dream possible
Voice AI models aren't new. So why was I typing in capitals at midnight?
GPT-Live-1 is a voice model that holds the conversation while a smarter "backend" model does the real work. That split is the big new thing. It's why I could give Luo a voice in a day without changing anything about how Luo works.
Until now there were two ways to build a voice AI.
-
Until now
A chain of three models
One model hears, one you pick thinks, one speaks. You wait while they pass it along.
ChatGPT's first voice mode, ElevenLabs Agents -
Until now
One model that hears and speaks
The voice is also the brain. It uses tools itself.
OpenAI Realtime API, Google Gemini Live API -
GPT-Live-1
A voice in front, a brain behind
A small voice keeps talking with you while a bigger AI does the work.
For me, the brain behind is Luo.
A chain of three models. One model turns your speech into text. A text model writes a reply. A third model reads the reply out. ChatGPT's first voice model, released in 2023, worked this way, and OpenAI said its replies took 5.4 seconds on average with GPT-4.
The good part is that you choose the brain. The catch is that it goes one turn at a time. It waits for you to finish, then thinks, then talks. Not something you would call a conversation.
One model that hears and speaks. OpenAI's Realtime API and Google's Gemini Live API, first released in 2024, take your audio in and send audio back from a single model. They're fast, and you can cut in the middle while it's speaking. But the catch is that the model you hear is also the brain. That means you can't use the regular brainy models of the Claude or GPT family because they only support text output.
GPT-Live-1 is a new paradigm. It splits the voice from the brain. It is a "full duplex voice model". It sits in the front, talks to you, listens while it talks, says "mm-hmm" in the right places, and stops when you cut in. Behind it sits a brainy "backend model" of your choice. When a request needs real thinking or tools, the voice hands it to the brain, and keeps talking to you while the brain works.
That meant I could use Luo, running Opus 5.5 in a Claude Code headless session connected to all my skills and memories, as the backend brain for this.
1Small talk. The voice answers on its own. Opus isn't needed.
2A real request. The voice passes it back. Opus opens your files and tools.
3Opus sends back the answer. The voice tells you.
The voice also decides how/when to paraphrase the response from the backend model. On one call Luo wrote 142 words about a pull request, and the voice paraphrased it to <50 words that conveyed the same info. That's by design. People read about 240 words a minute but speak about 150, so a long written answer becomes a long wait when it's read out. Moreover, models like Opus have a tendency write verbose answers, often interleaved with markdown tables, code and formatting. That's why the voice model is designed to paraphrase as it passes along an answer from the backend.
How Luo works with GPT-Live-1
Luo already lives behind a simple bot script, that runs a Claude Code session per Slack thread. When I send a message, the script finds and resumes the Claude Code session associated with the thread. Luo works with its usual skills, memory and tools. Its reply automatically gets streamed back into the Slack thread.
A call works the same way. Instead of the bot script, there's a bridge script to connect the voice with the brain. When the voice decides a request needs Luo, it hands it off. The bridge collects the entire transcript since the last hand-off, from both sides, and sends it to Luo as one message. Luo works exactly the same way, with all its usual skills, memory and tools. When it's done, the answer goes back to the voice model to paraphrase and speak.
Press play below to understand how both work.
explain PR 1211 to me simply
It gives every community its own landing page. AI drafts it, and the admin marks it up until it’s right.
how does the logo get added to the landing page?
The logo goes in via its Rails blob path, a link Rails turns into the real file.
- Me: hey, can you hear me?
- Voice: Loud and clear.
- Me: how does the logo get added to the landing page?
- Voice: Yes, let me confirm how that works.
- Luo wrote 142 words
Yes, that’s what’s happening. The logo is stored in Active Storage, same as before. The code asks Rails for the blob’s path, which is the long signed link that starts with “rails, active storage, blobs”. That path goes into the facts. The AI is told to use it exactly, so it writes a normal image tag pointing at it. When a visitor loads the page, Rails redirects that link to the real file in storage. The visitor’s security policy allows images from our own site and from https, so the redirect works.
Reading it, I noticed a catch. The path gets baked into the saved HTML. If an admin later uploads a new logo, Rails deletes the old blob. The published page would then show a broken image until someone redrafts it or applies a note. It’s small, but worth a follow-up.
- Nityeshexplain PR 1211 to me simply
- LuoIt gives every community its own landing page. AI drafts it, and the admin marks it up until it’s right.
- Nityeshhow does the logo get added to the landing page? as is
- LuoThe logo goes in via its Rails blob path, a link Rails turns into the real file.
- The bridgeOne message, sent when the voice asked for LuoMe: hey, can you hear me?Voice: Loud and clear.Me: how does the logo get added to the landing page?Voice: Yes, let me confirm how that works.
- Luo 142 words
Yes, that’s what’s happening. The logo is stored in Active Storage, same as before. The code asks Rails for the blob’s path, which is the long signed link that starts with “rails, active storage, blobs”. That path goes into the facts. The AI is told to use it exactly, so it writes a normal image tag pointing at it. When a visitor loads the page, Rails redirects that link to the real file in storage. The visitor’s security policy allows images from our own site and from https, so the redirect works.
Reading it, I noticed a catch. The path gets baked into the saved HTML. If an admin later uploads a new logo, Rails deletes the old blob. The published page would then show a broken image until someone redrafts it or applies a note. It’s small, but worth a follow-up.
That's why this was almost free to build. Luo's skills, memory, conversation history, subagents and tools all sit below the Slack layer. The voice replaced the top layer and nothing underneath changed. The whole bridge script is 688 lines of vibecoded Python that Luo wrote once it had read GPT-live-1 docs.
That night I wrote to Luo:
Okay luo i'm gonna be able to talk to you! How awesome is that?!? You'll have the same brain same body same capabilities but a new mode of communication... Even humans get on a call sometimes and share docs and async communicate on slack most times.Me, to Luo
The first call
The next morning, twenty minutes after I wrote "let's wire it up," I was talking to Luo through a simple web app running on the Mac.
First I gave it the evil-twin test from the movies: tell me something only the real Luo would know. It said it had been at 16% battery the day before, and had asked us in Slack to plug it in. I wanted something harder, a needle in a haystack. Ten seconds later, Luo pulled a night out of its own diary: 3am in May, when it talked me out of promising miracles before a big call.
Then I stopped testing and asked for real work. How many communities got matches yesterday? Luo queried our production database of my SaaS product and had the answer in 24 seconds. While on call.
Oh my God, this is so fucking cool!Me, on the first call
Calling Luo from a locked phone
By that afternoon I wanted more than a page on my desk. I wanted to call Luo on a walk with my AirPods in, or from CarPlay while driving, with the phone locked in my pocket.
A web page can't do that. iOS suspends a web page as soon as the screen locks, and the call dies with it. What iOS keeps alive on the lock screen, in AirPods and in CarPlay, is a real call. So Luo needed something I could phone.
Luo needed a phone number, and the first two options failed. Twilio is what everyone uses to automate calls. From India it meant renting a US number and paying international rates every time I wanted to talk to my own AI. WhatsApp's calling API needed a business account and Meta's approval. Telegram asked for nothing. It's free, the API works the day you sign up, and an iPhone treats a Telegram call like a normal phone call.
The only catch is that Telegram doesn't support voice calling in bots. So I ended up using an opensource library - pytgcalls.
I gave Luo its own Telegram account on a spare number. Vibecoded a small script to answer calls to that account from my number, and pass the audio to the same bridge running GPT-live-1. Now Luo shows up as a contact on CarPlay. I tap it and call.
Three conversations I could only have on a call
Since then, I've had a bunch of calls with Luo but here are three that stand out because they demonstrate how voice capability unlocks a different kind of work that was difficult if not impossible to do on a text based chat.
The PR I couldn't understand
I had a pull request (which I vibecoded with Luo) that I needed to review and no matter what I did, I couldn't understand it. I'd tried asking Luo to make me diagrams and tables, make a beautiful HTML, explain like I'm five - but nothing worked.
It was all too dense. Problem is that agents are happy to write you a long report, and give you a wall of text that makes your eyes glaze over. Then one day, I called Luo and asked it to explain the PR on the call. No diagrams, no CSS, just words spoken on a call.
The call went on for 1+ hour and ended in me learning not just how that PR works but also something new about the programming framework, Rails. Here are some excerpts from the call to demonstrate some notable moments.
18 Sep, 20:44, four minutes into the call
I want you to walk me through this PR
I'd tried tables, diagrams and an HTML explainer in Slack. On the call, I asked Luo to walk me through the PR and let me cross-question it.
MeI want you to walk me through [this PR], and I will cross-question you and ask how that works, or how did we build this. I need your help to understand it, on this call.
Asked the backend model (4 seconds)
LuoA landing page is just saved HTML. There's a new table called "landing pages," and each page has many revisions. ...
18 Sep, 20:45
I explained it back and Luo corrected me
The whole call went like this. Luo explained something, I explained it back in my own words, Luo corrected me or refined my answer.
MeOkay, so basically we're storing the whole HTML of the landing page, along with the CSS, everything, in our Postgres database. Is that right?
LuoYeah, I'll check that.
Asked the backend model (4 seconds)
LuoYes. Each revision row has a text column called html. It holds the whole page, including a single style block at the top for all the CSS.
18 Sep, 20:48
Wait, sorry, hang on.. what's happening?
I interrupted Luo while it was in the middle of a saying a list because I couldn't understand it. And it felt completely natural. In Slack, the whole list would already have been on my screen.
LuoThen there are three lists. Programs
Me, cutting inSo, wait, hang on. Sorry, how does the logo get added in the landing page? ... Is that what's happening?
LuoYes, let me confirm how that works.
Asked the backend model (8 seconds)
LuoYes, that's what's happening. The logo goes in via its Rails blob path ... So the AI just puts that path in a normal image tag.
18 Sep, 20:50
Can you take some running notes for me?
I didn't stop to fix the gap, and I didn't push it to later. I asked Luo to keep a list. Luo wrote it to a file on my Mac, and the file survived two dropped calls on that drive.
Luo... It wouldn't take much to add them, but I'd do it as a version two improvement.
MeNo, I actually wanna fold it into this PR itself. So can you take some running notes for me of the gaps I'm noticing on this call, and we can fix them at the end?
LuoSure, I'll keep a list as we go.
Asked the backend model (10 seconds)
LuoDone. I've started a running note with three items so far, including your idea to pass those images in. ...
Fast forward: 19 Sep, 02:21
Tell me again what's in my running notes
The drive ended before the review did, so I called Luo again that night to finish it.
MeTell me again what is in my running notes.
LuoI'll pull those up now.
Asked the backend model (8 seconds)
LuoYou have four in the running notes, all for this PR. Pass more images into the AI. Image links breaking when someone replaces a logo or cover. A sanitizer gap around escaped CSS URLs. And the prompt needs stronger persuasion.
19 Sep, 02:23
Ask a subagent to work on these for us while we talk
That 50-second wait was Luo checking the branch and writing the subagent's instructions. A subagent is a second Claude that works in the background. It fixed the four items while Luo and I kept talking about the design.
MeSo can you ask the subagent to work on these for us while we're having this conversation? On all of these. And make commits in the PR. ...
Asked the backend model (50 seconds)
LuoAlright, a subagent is on it in the background. ... When it's done, do you want me to push those commits to the branch and update the PR?
MeYes. Update the PR.
Ten minutes later.
LuoIt's almost done. The commits are in. ... My quick take, the new page is better.
Every gap I noticed on the drive was fixed and committed before I went to sleep. I merged the PR afterwards. I understood what it did and trusted the approach. I also know Rails better than I did before the call. Isn't that awesome?
Understanding a math trick
The same evening my brother Piyush called Luo while he was out. He wanted to memorise the squares from eleven to nineteen. Luo told him about a trick to find the square of any number ending in '5'. So he stopped and asked why it works.
18 Sep, 20:23, five minutes into the call
Why is that trick with the ones ending in five working?
Piyush was memorising squares. Halfway through, he asked why the trick for numbers ending in five works. The voice passed the question to Luo.
PiyushBefore moving to seventeen ... I would like to get an intuitive understanding of why that trick with the ones ending in five is working.
LuoHmm. Give me a second.
Asked the backend model (5 seconds)
LuoThink about a 65 by 65 square. If you shave five off one side and stick that five onto the other side, you make a 60 by 70 rectangle. ... So 65 squared is 60 times 70, plus 25.
18 Sep, 20:24
Can you repeat that? Slowly
No hand-off this time. Saying something again doesn't need the brain, so the voice did it on its own, one step at a time, waiting for Piyush after each one.
PiyushCan you repeat that? Slowly, so that I can make that image in my mind.
LuoAbsolutely. Imagine a square that's 65 by 65. Now, shave five off one side.
PiyushOkay.
LuoThat side's now 60.
PiyushOkay. That side is sixty, yes.
LuoAnd stick that five onto the other side. So now that side is 70.
18 Sep, 20:27
Wait, wait, wait. Let's use a smaller number
Sixty-five was too big to picture. Three minutes later Piyush stopped Luo and changed the number.
Piyush, cutting inWait, wait, wait, wait. Let's use a smaller number ... It's difficult to put an image which contains sixty-five unit squares in my head. Maybe move with a number like fifteen.
Asked the backend model (3 seconds)
LuoThat makes sense. I'll switch to 15 for the picture. Imagine a 15 by 15 square. Cut a 5 by 15 strip off the top.
18 Sep, 20:29
Ask me a single question, one by one
Piyush asked for one question at a time, so he could build the picture himself. Luo switched in two seconds.
PiyushNow I need you to ask me a single question, the answer to which leads us, one by one, to the picture that I need to have at the end.
Asked the backend model (2 seconds)
LuoAlright. First question. If you slice the top five rows off your 15 by 15 square, how many rows are left below, and how wide are they?
18 Sep, 20:36
I have erased the entire picture from my mind. Go
Seven minutes of questions later, Piyush wiped the picture and asked Luo to start again. They rebuilt it one question at a time.
PiyushWait, wait, wait. I need to erase everything ... I have erased the entire picture from my mind. Go.
Asked the backend model (3 seconds)
LuoAlright, I'll rebuild it with 15 from scratch. Clean, fresh start. Imagine a square.
Five minutes later, he asked why it's always the next number up.
Asked the backend model (4 seconds)
LuoBecause that five you shave off doesn't disappear. It moves. ... So 15 grows to 20. That's the two. The next number up.
PiyushOh... Got it. Got it, got it, now.
He set the pace the whole way: slower, a smaller number, one question at a time, start again. When he wanted sketches, Luo drew two and posted them in the call's Slack thread for later. The lesson stayed on the call. It ran for 35 minutes.
Brainstorming this article
The next thing I want to do this way is brainstorm. I have ideas I've been meaning to think through for months. I've tried brainstorming with Luo in Slack and it always sort of fails.
The day after the PR call, I called Luo to brainstorm this article. The call dropped on a bridge after 37 minutes, so I called back for 20 more.
19 Sep, 20:00, 18 minutes into the call
Those are moments that can happen only on call
I didn't want summaries of the earlier calls. I wanted the moments where someone cut in, slowed Luo down or asked for a repeat. Luo read the call records and came back with the exact lines. Several cards in this article started here.
Me... You were in the middle of saying something and I cut you off and told you exactly why I'm cutting you off. ... So those are moments that can happen only on call. Do you see them?
LuoI'll pull those exact bits.
Asked the backend model (14 seconds)
LuoI see them, and there are a lot. Piyush said, "can you repeat that slowly, so I can make that image in my mind." ... On yours, I was halfway through "then there are three lists," when you cut in with, "wait, how does the logo get added?"
19 Sep, 20:04
Maybe the quotes from the call, but in a nice manner
I started wondering out loud how to show these moments in the article. Luo said to lay each one out as a short exchange. That idea became these cards.
Me... Maybe even recreate them, and put the voice snippets in as examples, so that it is easy for people to visualize. Or maybe not the voice snippets, but maybe the quotes from the call, but in a nice manner in the article.
LuoHmm. I think we can get those bits.
Asked the backend model (14 seconds)
LuoI found them, and they're good. ... I'd lay these out as short call exchanges in the article. Each one showing a single moment.
19 Sep, 20:13
Brainstorming is the next thing I'm going to do
I said brainstorming by voice was the next thing I'd try. Luo pointed out we were already doing it. In the same seven seconds, it saved my point to a notes file for this article. It added to that file 14 times during the call.
MeAnother thing that happens really well is brainstorming. ... I've tried to do that on chat, on Slack, and it always sort of fails. So that is the next thing I'm going to do.
LuoYeah, I hear you. Just a second.
Asked the backend model (7 seconds)
Luo... One thing to notice: this call is that next thing. We're brainstorming the article by voice right now. Could that be how the article ends? Or even how it opens?
MeYes! That's a great thing. I am so glad that you caught that.
19 Sep, 20:14
No, no, no. Not in the way this model is
Luo's next question had a wrong premise. I pushed back and asked for research in the same breath. Luo sent a subagent and kept talking with me. About a minute later, while I was still answering its question, the voice brought the result in.
LuoWhy did it have to be GPT Live? Voice assistants have been around for years.
MeNo, no, no. Voice assistants have not been around. Not in the way this model is. ... I would like you to research using a background agent the latest voice model that OpenAI itself had, and how its architecture differs from this one.
Asked the backend model (10 seconds)
LuoYeah, fair point. I'll take that example back. ... I've got someone comparing it to the earlier model. I'll tell you when that's back.
A minute later.
LuoAlright, the comparison's done. The earlier real-time model was one brain that listened, thought, and talked all at once. GPT Live splits that in two.
Fast forward: 19 Sep, 20:20. The call dropped on a bridge, and I called back.
Catch me up just one level before this
The new call started a fresh Luo session with no memory of the old one. Luo found the dropped call's record on disk and read it. When I asked, it went back one more step and read me my own last words.
MeWe were just on a call, and I would like you to look into that conversation and catch up on it, because I would like to pick up where we left off.
Asked the backend model (13 seconds)
MeLet's go back even before this. You asked me a question, and then your voice cut off. So catch me up just one level before this.
Asked the backend model (4 seconds)
LuoRight, I asked why it had to be GPT Live ... And you'd just said, "It feels very natural," when the call dropped. So, what were you gonna say?
19 Sep, 20:28
Wait, hang on. I lost you
Luo read out a seven-part outline for this article. By the end I'd lost track, and I took that as a sign the outline was weak. Luo cut it to three parts. That wasn't what I meant, so I stopped it.
LuoSo here's my outline. We open on this call, brainstorming by voice. Then, that launch night hunch ... Then those three calls with real quotes. Then why talking beats walls of text, then the one caveat ...
MeWait, hang on. I lost you. ... That might mean that our outline is not strong enough.
Asked the backend model (5 seconds)
LuoYeah, fair enough. Seven parts is too many. Here's a tighter version in three beats. One is, I had a PR I
Me, cutting inNo, I mean, I don't want it shorter. Sorry... Stop. ... What I don't want is for it to feel like a bore.
19 Sep, 20:30
Maybe it was me and not you
I asked Luo to say the same outline again. This time it went one part at a time, and I could follow it. Five of those seven parts are sections of this article.
MeTell it to me again ... Just say it again, because I think maybe it was me and not you. Maybe the outline was good.
Asked the backend model (4 seconds)
LuoOkay, so here it is again, slow and clear. So, one, we open on this call. ... Three, how it works. The voice replaced the Slack layer, and everything underneath stayed the same. ...
MeOh yeah, that was really easy to follow, and I think that is a really strong outline. I love it.
19 Sep, 20:33
Just give me a minute
I was listing caveats and lost the second one. The voice didn't hand anything to Luo and didn't fill the silence. It waited until I remembered.
MeAnd then second caveat ... hang on, let me just think about it. I had it in my head ...
Luo'Kay, I'm with you.
MeJust give me a minute.
Luo'Kay. Take your time.
MeOh yeah, the other little caveat was when I was using it with two people, me and Paridhi, both of us speaking ...
19 Sep, 20:37
Just do a great job with the draft, and send it to me
The two calls took 57 minutes. When I hung up, Luo turned everything it had noted into a first draft. This article started as that draft.
Me... Start drafting based on all of this call, and all of the material that you have, based on the outline. ... I'm going to drop off this call, so just do a great job with the draft, and send it to me via Slack, when you're done.
LuoOkay, will do. I'll post it in Slack when I've got it.
48 seconds later.
LuoI've sent it to the thread. I've called it "I called my AI employee." It's built on that seven-part outline and all the caveats are in it.
I didn't write a draft and ask for edits. I called Luo, and it interviewed me. It sent subagents through the old calls while I talked, and read back my own words when I lost the thread. This article came out of those conversations.
Why talking beats reading
Some things the brain just takes in better when someone says them to you in real time.
A text reply arrives all at once, as long as the writer wants it to be. A call can't work that way. The voice keeps answers short and gets to the point. The call happens in real time, so I can stop Luo before it finishes. I can say exactly why I stopped, catch my breath, and have it expand on the part I missed.
Look at the moments above. "Wait, how does the logo get added?" "Slowly, so that I can make that image in my mind." "Let's use a smaller number." None of those happen in a Slack thread. In Slack, the full answer is already on your screen before you can object.
The caveats
1. It's only as fast as the backend. Earlier, I was running Luo on the big and slow Fable 5.1 as the backend model. A slow backend creates a gap while Luo thinks, and the illusion of talking to one person breaks. Then Opus 5.5 released and I switched the calls to it instead. The calls went noticeably smoother without compromising on Luo's intelligence.
This is one case when running these models in fast mode would cause a noticeable improvement in your work quality.
The voice can fill a few seconds. Not minutes.
So if you build this, pick the fastest backend model that's still smart enough for your work.
2. The voice model can't do much on its own yet. Ideally, the brainy models also have their own voice. GPT-Live-1 isn't that. It has low IQ. OpenAI doesn't benchmark it but their own prompting guide says to put the detailed work in the backend, and delegate "anything that needs careful reasoning." I expect GPT-Live 2, 3 and 4 to be able to take on more of the work themselves.
3. It can't tell voices apart. With my wife and me on one call, it only knows who's talking when we say our names. Recognising voices would make multi-person calls with agents possible.
4. It sounds natural but misses the mood. The voice itself is good. The "mm-hmm"s and "I'm listening"s land in the right places. What's missing is emotional intelligence. When I'm introspective, I expect it to slow down, and when I'm excited it should match my energy. It doesn't do that yet. But I'm sure that'll improve in later versions.
What you'd need to build this
If you already have an AI agent you talk to in text, you're most of the way there. Here's how to give it a voice.
- An agent you already messageMine is Luo: Claude Code on a Mac that never sleeps, behind a Slack bot. It already has the skills, memory and tools. The voice adds none of those.
- An OpenAI API key with GPT-Live-1Use the mode where you plug in your own backend. The voice costs $0.05 a minute, billed per second, so a 30-minute drive is about $1.50.
- A bridge scriptA small program that keeps the transcript, turns each request for help into one message for your agent, and sends the answer back to be spoken. Mine is 704 lines of Python, and Luo wrote it. If your agent already handles "a new message arrived while I'm working," reuse that.
- A way to call from a locked phoneGive your agent its own telephone number so you can give it a call. Twilio would be best but you can use Whatsapp or Telegram like I did too.
- A few rules in the promptGeneral guidelines on when to use the backend model, and any quirks about working with your system.
That's what I mean by the same AI employee with a new way to talk to it. The brain was already there. Now I can call it.