
Setting Up Voice Channels With OpenClaw and Discord
I wired voice onto my agent, said hello, and waited about eight seconds for the reply. It wasn't the model — it was the turn-taking config: a two-second silence grace, and a full-agent round-trip on every turn. Here's the exact OpenClaw + Discord config, the feel before and after, and the per-minute bill.
I put voice on my agent, joined the channel, and said hello. About eight seconds later it answered. I thought the usual thing: this isn’t ready for prime time.
It was ready. The pause was a config default.
Short version: it wasn’t the model — it was the turn-taking config, and these are the settings that make it feel like talking to a person.
Here is the before and after, the settings that did it, and what it costs to talk to your agent like a person.
The eight seconds were two things, and neither was the model
The first was a fixed wait for silence. OpenClaw’s captureSilenceGraceMs defaulted to 2000 — it waited a full two seconds after I stopped talking before deciding I was done. People leave each other a few hundred milliseconds, not two thousand; a two-second gap reads as hesitation.
The second was hidden. The realtime model was consulting the full agent on every turn before it said a word. I’d say “hello,” and behind the scenes the whole OpenClaw agent ran — tools, memory, the lot — and only then did voice speak. That round-trip is what made it feel like a bad phone line.
I would have gone and bought a faster model. The model was fine. This is the same lesson as the latency post on my other blog — the pause lives in the turn-taking, not the LLM. This post is the config that fixes it.
The config that fixed it
It all lives under channels.discord.voice in ~/.openclaw/openclaw.json. The before/after:
| Setting | Before (default) | After | Why |
|---|---|---|---|
captureSilenceGraceMs |
2000 |
800 |
Wait a beat, not two seconds |
realtime.consultPolicy |
always |
auto |
The model answers the conversation glue; consult the agent only for facts, tools, memory |
realtime.bargeIn |
(on) | true |
Pinned — you can cut it off mid-sentence |
realtime.minBargeInAudioEndMs |
250 |
0 |
Interrupt with no 250ms tail gate |
realtime.instructions |
ends …conversational. Never open with filler. |
ends …conversational. |
Lets it use a brief backchannel (“one sec”) while an agent consult runs |
model (the brain behind voice) |
openai/gpt-5.6-terra |
deepseek/deepseek-v4-flash |
A cheaper, faster brain behind the realtime front end |
The single biggest win was consultPolicy: "auto". The realtime front end (gpt-realtime-2.1) is only the voice layer — turn-taking, barge-in, playback. The brain is your OpenClaw agent, reached through a tool the realtime model can call. On always, every turn round-tripped that agent before a word was spoken. On auto, the front end handles the glue and consults only when the turn needs something real.
The block, after:
"channels": {
"discord": {
"voice": {
"enabled": true,
"mode": "agent-proxy",
"captureSilenceGraceMs": 800,
"realtime": {
"provider": "openai",
"model": "gpt-realtime-2.1",
"speakerVoice": "cedar",
"providers": {
"openai": { "apiKey": "${OPENAI_API_KEY}" }
},
"instructions": "Always speak English unless the user is clearly speaking another language to you. Keep spoken replies short, natural, and conversational.",
"consultPolicy": "auto",
"bargeIn": true,
"minBargeInAudioEndMs": 0
},
"model": "deepseek/deepseek-v4-flash"
}
}
}
(You’ll need an API account to do this — OpenAI, or Grok if you want to see whether that side is cheaper.)
If you’re still building the basics, five emails cover the first automation.
What it feels like now
The realtime model answers first, then tells you what it actually called. Talking to it feels less like talking to my agent and more like talking to someone who has access to my agent — and it is very effective. Back-and-forth is what this is supreme at, and the awkward pause is gone.
The bill
One session, over the drive from home to the office: about $3.25. Most of it was input — the base listening. You pay while you talk, on the order of thirty cents a minute on the realtime model. For a drive’s worth of conversation, that’s the price of a coffee.
Still rough
- On Bluetooth, the reply audio cuts out in ways music doesn’t. The connection feels a little flakier than it should.
- Long dictation and quick back-and-forth are different modes. Voice is supreme at the back-and-forth. For deep brain-dump dictation, I fall back to Wispr Flow; and I set up a “skinny mode” so the agent answers short and skimmable when I want to skim and reply fast.
The pause was the thing. Once it’s gone, talking to your agent out loud stops feeling like a demo.