<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ken Mazaika</title>
    <description>The latest articles on DEV Community by Ken Mazaika (@kenmazaika).</description>
    <link>https://dev.to/kenmazaika</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F8259%2FpMgvjOyr.jpeg</url>
      <title>DEV Community: Ken Mazaika</title>
      <link>https://dev.to/kenmazaika</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kenmazaika"/>
    <language>en</language>
    <item>
      <title>Your AI Voice Guide Probably Isn't Doing What You Think (Run the Control Test)</title>
      <dc:creator>Ken Mazaika</dc:creator>
      <pubDate>Tue, 20 Oct 2026 20:12:25 +0000</pubDate>
      <link>https://dev.to/kenmazaika/your-ai-voice-guide-probably-isnt-doing-what-you-think-run-the-control-test-3l1</link>
      <guid>https://dev.to/kenmazaika/your-ai-voice-guide-probably-isnt-doing-what-you-think-run-the-control-test-3l1</guid>
      <description>&lt;p&gt;My agent handed me a draft that opened with a scene from my own life:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On October 19, I wrote down one rule for every overnight OpenClaw job I run: "work on this overnight" is a request, not a scheduler.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I never wrote that sentence. There was no October 19 writing session, no notebook, no rule I sat down and recorded. The agent invented it, because my voice guide told it to open on a concrete, countable instance of my own work.&lt;/p&gt;

&lt;p&gt;The draft passed the guide.&lt;/p&gt;

&lt;p&gt;That's a bug in the file, but it isn't the interesting one. The interesting one is that I had no way to know whether the file was doing anything at all — and I'd been running it for a month.&lt;/p&gt;

&lt;h2&gt;
  
  
  The month of credit
&lt;/h2&gt;

&lt;p&gt;Twenty-odd rules. A paragraph cap. A seven-question sign-off at the end of every draft. Everything I published went through it, and every time a draft came out better than the last one, I credited the guide.&lt;/p&gt;

&lt;p&gt;I never ran the same sample with it and without it. Not once.&lt;/p&gt;

&lt;p&gt;Without a control, a guide gets credit for everything: a draft improves and the guide did it, a draft gets worse and the topic was hard. That's not a voice system. It's a mood with a filename.&lt;/p&gt;

&lt;h2&gt;
  
  
  The control test
&lt;/h2&gt;

&lt;p&gt;Hold everything still, change one thing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One post:&lt;/strong&gt; a 663-upvote r/OpenClaw thread, tip three — "work on this overnight doesn't work the way you think."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One brief:&lt;/strong&gt; a short essay about that post, 150–200 words, no headers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three runs:&lt;/strong&gt; no guide, the full 20-odd-rule guide, a trimmed 8-rule guide.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Reddit post is the subject. The essay is the sample. Same model, same brief, same day.&lt;/p&gt;

&lt;h2&gt;
  
  
  The result
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Text&lt;/th&gt;
&lt;th&gt;Words&lt;/th&gt;
&lt;th&gt;Sentences&lt;/th&gt;
&lt;th&gt;Mean sentence&lt;/th&gt;
&lt;th&gt;sd&lt;/th&gt;
&lt;th&gt;Em dashes / 1k&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No guide&lt;/td&gt;
&lt;td&gt;185&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;16.8&lt;/td&gt;
&lt;td&gt;5.4&lt;/td&gt;
&lt;td&gt;10.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full guide&lt;/td&gt;
&lt;td&gt;163&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;32.6&lt;/td&gt;
&lt;td&gt;6.2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trimmed guide&lt;/td&gt;
&lt;td&gt;183&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;16.6&lt;/td&gt;
&lt;td&gt;5.2&lt;/td&gt;
&lt;td&gt;5.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;My published posts&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;15.2&lt;/td&gt;
&lt;td&gt;10.3&lt;/td&gt;
&lt;td&gt;10.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The no-guide version is genuinely good. It opens on the lesson, uses two em dashes, runs sentences from eight words to thirty-five, and invents nothing.&lt;/p&gt;

&lt;p&gt;The full guide produced five sentences averaging 32.6 words, &lt;strong&gt;zero em dashes&lt;/strong&gt;, and a fabricated opening. It isn't sloppy — it's compliant. The self-specificity rule demanded a concrete personal moment and the no-fabrication rule forbade inventing one. The first rule won, because a concrete first sentence is checkable and "don't invent a memory" isn't.&lt;/p&gt;

&lt;p&gt;The trimmed guide lands on my published shape: mean 16.6 against a corpus mean of 15.2.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest size of the win
&lt;/h2&gt;

&lt;p&gt;The trimmed guide beat no-guide on two things: it opened on the number instead of the lesson, and it stopped sooner. That's the whole delta — about thirty seconds of a reader's attention.&lt;/p&gt;

&lt;p&gt;So the defensible claim is narrower than the one I'd been making:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A voice guide is a filter for AI idioms. It is not a transfer function for your voice.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mine caught the phrases I hate — the "it's worth noting," the forced triads, the recap conclusion. That's a real job. It just isn't the job I thought I was paying for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The eight-rule version I kept
&lt;/h2&gt;

&lt;p&gt;What survived is small enough to read in one sitting, which is the point:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Minimal voice guide

The five spine rules

1. Open on the concrete thing. The first sentence names the tool, number, file, or result. No framing,
   no backstory, no "in today's…".
2. One idea per section. If a later passage repeats an earlier beat, cut the later one.
3. Receipt, then verdict. Name the artifact or number, then one line on what it means. A stat never ends
   a paragraph.
4. Operator-active first person. "I ran it, it did X." Not "it returns / it packages."
5. Stop when the lesson is done. No recap, no FAQ, no motivational close.

The three voice rules

6. No AI idioms. No "not X but Y" / "it's not just X, it's Y", no forced triads, no em-dash pileups. An
   em dash only when it replaces a comma or colon and makes the sentence clearer; never as a rhythm tic.
7. One owned opinion, stated plainly. No both-sides mush. One inline caveat max, only where a claim
   needs it.
8. Let sentence length follow the thought. Short punch, then a longer explanation. Don't perform
   burstiness, and don't use rhythm as a substitute for a point.

The never list

Words: leverage · utilize · delve · seamless · robust · holistic · transformative · game-changer ·
revolutionize · unlock · "in today's…" · "it's important to note" · "at the end of the day" · "dive in" ·
"in conclusion".

Moves: "not X but Y" / "it's not just X, it's Y" · forced triads · em-dash pileups · rhetorical-question
filler · recap conclusions.

The three questions

1. Does the first paragraph name the concrete thing?
2. Does every claim have a receipt or an owned opinion?
3. Would I say this out loud to a peer?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three things got cut, and each one is a lesson:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The paragraph cap.&lt;/strong&gt; It was unenforceable next to the length target and the rhythm rule — three constraints arguing over the same sentence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The self-specificity language.&lt;/strong&gt; It bought the invented opening. "Be concrete" and "don't fabricate" are not compatible instructions unless you say which one wins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The em-dash ban became a permit.&lt;/strong&gt; The old file talked me out of punctuation I use in every post I actually like.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Run it on your own guide
&lt;/h2&gt;

&lt;p&gt;The kit is a blank template, one Reddit post, one prompt that writes the essay three ways, and the worked example. Clone it, fill the template with the rules you already use, run the prompt, and read the three essays side by side.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kit:&lt;/strong&gt; &lt;a href="https://gist.github.com/kenmazaika/c74400587ea6579ab8f20c41e5927394" rel="noopener noreferrer"&gt;https://gist.github.com/kenmazaika/c74400587ea6579ab8f20c41e5927394&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The guide that failed, in full:&lt;/strong&gt; &lt;a href="https://gist.github.com/kenmazaika/f6c1e5c5f351668fe7d54b9bad692aea" rel="noopener noreferrer"&gt;https://gist.github.com/kenmazaika/f6c1e5c5f351668fe7d54b9bad692aea&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your guide can't beat the no-guide version, its rules haven't earned their place. Now you know that in about twenty minutes instead of a month.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd tell you if you only read one line
&lt;/h2&gt;

&lt;p&gt;Test the file before you trust the file. A voice guide that has never been run against its own absence is a preference you're calling a system — and the cost is invisible, because it's paid in your cadence.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://engineering.kenmazaika.com/blog/give-your-agent-your-voice/" rel="noopener noreferrer"&gt;engineering.kenmazaika.com/blog/give-your-agent-your-voice&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>writing</category>
      <category>tooling</category>
    </item>
    <item>
      <title>My Voice Agent Replied in 8 Seconds. Two Settings, Not the Model.</title>
      <dc:creator>Ken Mazaika</dc:creator>
      <pubDate>Wed, 07 Oct 2026 23:18:14 +0000</pubDate>
      <link>https://dev.to/kenmazaika/my-voice-agent-replied-in-8-seconds-two-settings-not-the-model-485e</link>
      <guid>https://dev.to/kenmazaika/my-voice-agent-replied-in-8-seconds-two-settings-not-the-model-485e</guid>
      <description>&lt;p&gt;I run OpenClaw as my main agent harness, with the voice layer on Discord. When I first turned voice on, I said hello and waited about eight seconds for a reply. Eight seconds is long enough to assume it doesn't work.&lt;/p&gt;

&lt;p&gt;It works. The delay was two configuration defaults. Neither was the model.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;OpenClaw is the open-source agent harness I run my workflow on; the voice layer sits on Discord. The config keys are OpenClaw's, but the cause — turn-taking defaults — is generic.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Two defaults caused most of the delay
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A fixed silence wait.&lt;/strong&gt; &lt;code&gt;captureSilenceGraceMs&lt;/code&gt; defaults to &lt;code&gt;2000&lt;/code&gt; ms. It waits two full seconds after you stop talking before it decides your turn is over. Normal conversation leaves a few hundred milliseconds. Two seconds reads as a pause.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A full-agent round-trip on every turn.&lt;/strong&gt; The realtime voice model consulted the entire agent before it spoke. I'd say "hello"; OpenClaw would run the whole agent — tools, memory, the lot — and only then would the voice layer talk. That round-trip is the larger half of the delay — the same failure I wrote about from the theory side: &lt;a href="https://publish.kenmazaika.com/blog/your-voice-agent-is-slow-because-of-the-silence/" rel="noopener noreferrer"&gt;the pause lives in the turn-taking, not the LLM&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Both are turn-taking settings, not model quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  The config
&lt;/h2&gt;

&lt;p&gt;Everything sits under &lt;code&gt;channels.discord.voice&lt;/code&gt; in &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt;. Before → after:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Before (default)&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;captureSilenceGraceMs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;800&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Wait a beat, not two seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;realtime.consultPolicy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;always&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;auto&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Voice layer handles the conversational filler; call the agent only when the turn needs it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;realtime.bargeIn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(on)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pinned — cut it off mid-sentence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;realtime.minBargeInAudioEndMs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;250&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Interrupt with no 250ms tail gate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;realtime.instructions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ends &lt;code&gt;…conversational. Never open with filler.&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;ends &lt;code&gt;…conversational.&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Lets it use a short backchannel ("one sec") while an agent consult runs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;model&lt;/code&gt; (agent behind voice)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;openai/gpt-5.6-terra&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deepseek/deepseek-v4-flash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cheaper, faster reasoning behind the realtime front end&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The one that mattered most was &lt;code&gt;consultPolicy: "auto"&lt;/code&gt;. The realtime model (&lt;code&gt;gpt-realtime-2.1&lt;/code&gt;) is only the voice layer — turn-taking, barge-in, playback. The reasoning comes from the agent, which the realtime model calls as a tool. On &lt;code&gt;"always"&lt;/code&gt;, every turn called the agent before producing audio. On &lt;code&gt;"auto"&lt;/code&gt;, the voice layer handles the conversational filler itself and calls the agent only when the turn needs it.&lt;/p&gt;

&lt;p&gt;The block, after:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"channels"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"discord"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"voice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"agent-proxy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"captureSilenceGraceMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"realtime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gpt-realtime-2.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"speakerVoice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cedar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"providers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"openai"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"***}"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"instructions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Always speak English unless the user is clearly speaking another language to you. Keep spoken replies short, natural, and conversational."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"consultPolicy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"bargeIn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"minBargeInAudioEndMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek/deepseek-v4-flash"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You need an API key for the realtime provider. OpenAI here; Grok if you want to price that side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;The realtime model answers first, then reports what it called. The pause is gone and the back-and-forth is responsive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost
&lt;/h2&gt;

&lt;p&gt;One session, over the drive from home to the office: &lt;strong&gt;$3.25&lt;/strong&gt;, mostly input — the base listening. Roughly &lt;strong&gt;thirty cents a minute&lt;/strong&gt; on the realtime model while you talk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Known issues
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Over Bluetooth, reply audio cuts out in a way music doesn't. The link is less stable than it should be.&lt;/li&gt;
&lt;li&gt;Long dictation and quick back-and-forth are different modes. This setup is good at the back-and-forth; for long dictation I use a separate dictation tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If voice on your agent feels slow, check the silence grace and whether the voice layer consults the full agent every turn before you blame the model. If you've hit a different turn-taking bottleneck, I'd like to know which one.&lt;/p&gt;

&lt;h2&gt;
  
  
  More on this
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://engineering.kenmazaika.com/blog/my-default-model-stack-for-ai-agent-work/" rel="noopener noreferrer"&gt;My default model stack for AI agent work&lt;/a&gt;&lt;/strong&gt; — why a cheap, fast model behind the realtime front end holds up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://engineering.kenmazaika.com/blog/cost-to-run-an-agent/" rel="noopener noreferrer"&gt;How much it costs to run a capable AI agent each month&lt;/a&gt;&lt;/strong&gt; — the fuller version of the $3.25-a-session cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://engineering.kenmazaika.com/blog/what-is-an-ai-harness/" rel="noopener noreferrer"&gt;What is an AI work harness&lt;/a&gt;&lt;/strong&gt; — what the "agent behind the voice" actually is.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://engineering.kenmazaika.com/blog/setting-up-voice-channels-with-openclaw-and-discord/" rel="noopener noreferrer"&gt;engineering.kenmazaika.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>tutorial</category>
      <category>discuss</category>
    </item>
    <item>
      <title>AI Wrote a GPU Kernel 18 Faster Than Humans. Now Who Reviews It?</title>
      <dc:creator>Ken Mazaika</dc:creator>
      <pubDate>Thu, 16 Jul 2026 03:59:38 +0000</pubDate>
      <link>https://dev.to/kenmazaika/ai-wrote-a-gpu-kernel-18x-faster-than-humans-now-who-reviews-it-1c0e</link>
      <guid>https://dev.to/kenmazaika/ai-wrote-a-gpu-kernel-18x-faster-than-humans-now-who-reviews-it-1c0e</guid>
      <description>&lt;p&gt;Last week an AI-generated GPU kernel ran &lt;strong&gt;18.71× faster&lt;/strong&gt; than an optimized PyTorch baseline.&lt;/p&gt;

&lt;p&gt;The model—Fable 5—didn't just edge past the human implementation. It lapped it. Claude Opus 4.8 reached 14.4×. GLM-5.2 hit 11.14×. GPT-5.5 managed 4.34×. Fable's kernel was in a different tier entirely.&lt;/p&gt;

&lt;p&gt;The exciting read: AI is starting to improve the low-level machinery that makes AI itself cheaper and faster. Specialized performance work that once required rare expertise just got dramatically easier to explore.&lt;/p&gt;

&lt;p&gt;The uncomfortable read: what happens when the best implementation is also the one nobody on your team would have written—or can fully explain?&lt;/p&gt;

&lt;p&gt;That question is about to land on every engineering team that ships AI-generated code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Benchmark Problem
&lt;/h2&gt;

&lt;p&gt;A benchmark shows the kernel ran fast under tested conditions. It doesn't show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How it behaves across different GPU hardware&lt;/li&gt;
&lt;li&gt;How it handles numerical edge cases&lt;/li&gt;
&lt;li&gt;What happens under months of production changes&lt;/li&gt;
&lt;li&gt;Whether it degrades gracefully when inputs shift&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The person who wrote it can't answer these questions either. The AI generated this code through a process that doesn't leave a reviewable chain of reasoning. There's no commit message that says "I chose this approach because X."&lt;/p&gt;

&lt;p&gt;So the reviewer's job just got harder—not easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Shift
&lt;/h2&gt;

&lt;p&gt;I've been watching this pattern across engineering teams this year. The argument is moving from "can AI generate working code?" to "can our org absorb generated code without breaking quality, morale, or judgment?"&lt;/p&gt;

&lt;p&gt;The GPU kernel story makes the tension concrete:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One side&lt;/strong&gt; says the code ran, it was measured, it won. Stop moving the goalposts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The other side&lt;/strong&gt; says somebody still has to know where it can fail and take responsibility when it does.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are right.&lt;/p&gt;

&lt;p&gt;AI can make implementation cheaper while making &lt;em&gt;proof&lt;/em&gt; more expensive. Senior engineers may write less code but spend more time designing adversarial tests, checking assumptions, planning rollbacks, and deciding whether an impressive result is safe enough to ship.&lt;/p&gt;

&lt;p&gt;That's not the disappearance of engineering work. It's engineering work moving into review—and raising the stakes of who's qualified to perform it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Question Nobody's Answering
&lt;/h2&gt;

&lt;p&gt;If AI does more of the building, how do engineers learn enough to review what it produces?&lt;/p&gt;

&lt;p&gt;Senior engineers learned by building systems, making mistakes, debugging failures, and taking the call when something broke. If junior engineers begin as &lt;em&gt;supervisors of generated work&lt;/em&gt;, they may learn how to move output through a pipeline without developing the instincts needed to know when that output is wrong.&lt;/p&gt;

&lt;p&gt;One comment on a thread about this put it well:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You can't conduct an orchestra without knowing music."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Companies should not preserve manual coding because suffering builds character. But they do need to identify which parts of implementation create &lt;em&gt;judgment&lt;/em&gt; before automating those experiences away. Otherwise, they may create extremely productive junior engineers and discover a few years later that they did not create senior engineers.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I write about engineering management, AI adoption, and what actually changes when tools shift. If this landed, I send a weekly post covering stories like this with the management angle. You can find it &lt;a href="https://kenmazaika.substack.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>review</category>
      <category>management</category>
    </item>
    <item>
      <title>Here's What You Can Learn In 10 Minutes That Will Be Useful For The Rest Of Your Programming Career</title>
      <dc:creator>Ken Mazaika</dc:creator>
      <pubDate>Wed, 01 Mar 2017 21:26:23 +0000</pubDate>
      <link>https://dev.to/kenmazaika/heres-what-you-can-learn-in-10-minutes-that-will-be-useful-for-the-rest-of-your-programming-career</link>
      <guid>https://dev.to/kenmazaika/heres-what-you-can-learn-in-10-minutes-that-will-be-useful-for-the-rest-of-your-programming-career</guid>
      <description>&lt;p&gt;There is one remarkably simple trick you can learn in only a few minutes that will be useful for the rest of your future as a programmer. And there's a critical reason why this one small trick is so significant that is important to understand&lt;/p&gt;

&lt;h2&gt;
  
  
  The 10 Tab Rule
&lt;/h2&gt;

&lt;p&gt;In programming, you're going to run into problems, error messages, and situations in which your program isn't doing what you think it should. How you react to these scenarios will be the difference between being an okay programmer and an amazing one.&lt;/p&gt;

&lt;p&gt;The “10 Tab Rule” is a simple process that can solve almost every problem you'll encounter as a programmer. What's the rule?&lt;/p&gt;

&lt;h3&gt;
  
  
  When problems arise, do these 3 things:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Articulate the problem in a well-thought-out search query&lt;/li&gt;
&lt;li&gt;Search it using Google (or another popular search engine)&lt;/li&gt;
&lt;li&gt;Open each of the top 10 results in new tabs. Read or skim each of the tabs, then return to your code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This simple routine– which will take roughly 10 to 15 minutes– will help you solve almost all of your problems as a developer. The difference between experienced and &lt;a href="https://studywebdevelopment.com/programming-languages-for-beginners.html"&gt;inexperienced developers&lt;/a&gt; is this: experienced developers immediately acknowledge what they don't know and set out to find the answers, while inexperienced developers often times don't have the knowledge nor the humility to begin looking for answers.&lt;/p&gt;

&lt;p&gt;It's a subtle mentality switch, but it's important. Beginners often have the mentality of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I don't know, and I feel stupid because of it.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;However, experienced developers have an entirely different mentality…&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I don't know, let's figure this out as quickly as possible.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And it turns out, with Google, nearly all of the questions you could have about anything are at the touch of your fingertips.&lt;/p&gt;

&lt;p&gt;Turning to Google sounds easy in theory, but it's pretty unlikely that going to Google's homepage will answer your question. Instead, a huge part of being a good developer is coming up with a reasonably effective twenty- to fifty-character description of your problem.&lt;/p&gt;

&lt;p&gt;20–50 letters isn't a lot of room to communicate the problem. And searches like, “my app doesn't work anymore” might be 26 letters, but won't lead you any closer to a meaningful solution to your problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you are able to use the internet to solve your problems, you need to fully understand the problem first.
&lt;/h2&gt;

&lt;p&gt;The most important skill that software developers &lt;a href="http://learntocodewith.me/posts/ten-thousand-hours/"&gt;cultivate over time&lt;/a&gt; is the ability to solve problems using two specific steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, fully understanding the problem with your code.&lt;/li&gt;
&lt;li&gt;Second, looking for the solution to the problem based on your understanding.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's far too common to look for the solution to a problem before you fully understand it, and doing so will likely be a frustrating process. If you encounter an error message you've never seen before, a quick search for the text of the message can give you a lot of the context around the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  When writing complex algorithms and business logic, there is one specific problem that will account for nearly every single error message you'll see.
&lt;/h2&gt;

&lt;p&gt;And this problem plagues both those starting out and people who have been programming for decades.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;It is incredibly common to think your computer program is doing one thing when it's actually doing something else.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's your job as a programmer to make no assumptions about what your program is doing, and use all the tools available to you to verify that each of the many assumptions you have about how your program is working is true.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thinking that a variable is set to one thing when it's actually something else is very common.&lt;/li&gt;
&lt;li&gt;Thinking a certain method returns a certain value when it actually returns a different one is common, too.&lt;/li&gt;
&lt;li&gt;Thinking a function does one thing when it does something different altogether is another common one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;They're all variations of the same problem: thinking your code works one way when it works in a different way.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When this happens, it is your job to put on your detective hat and determine exactly which line of code is doing the wrong thing.&lt;/p&gt;

&lt;p&gt;In ruby, you can use tools like puts, bye_bug, or pry.&lt;/p&gt;

&lt;p&gt;In &lt;a href="http://blog.thefirehoseproject.com/posts/nodejs-vs-rails/?utm_source=devto&amp;amp;utm_medium=site&amp;amp;utm_campaign=unpaid&amp;amp;utm_content=10_minutes"&gt;JavaScript&lt;/a&gt;, you can use console.log to get the job done.&lt;/p&gt;

&lt;p&gt;Nearly every &lt;a href="http://stories.thefirehoseproject.com/coders-compass/7-most-in-demand-programming-languages?utm_source=devto&amp;amp;utm_medium=site&amp;amp;utm_campaign=unpaid&amp;amp;utm_content=10_minutes"&gt;programming language&lt;/a&gt; has tools built into it to allow you to figure out which line of code isn't behaving the way you think it should.&lt;/p&gt;

&lt;h2&gt;
  
  
  A HUGE part of &lt;a href="http://www.thefirehoseproject.com?utm_source=devto&amp;amp;utm_medium=site&amp;amp;utm_campaign=unpaid&amp;amp;utm_content=10_minutes"&gt;becoming a software developer&lt;/a&gt; is understanding the tools at your disposal for understanding why you are having a problem.
&lt;/h2&gt;

&lt;p&gt;Once you identify the disconnect between what you think the code is doing and what the code is actually doing, fixing the problem is usually pretty straightforward. And the ultimate solution: figuring out the line of code you don't understand, and doing effective searches to research what is actually happening in your code.&lt;/p&gt;

&lt;p&gt;As you grow as a developer, the “10 tab rule” will become the “8 tab rule,” and eventually just turn into one or two Google searches that you need to execute to find the solutions to your problems.&lt;/p&gt;

&lt;p&gt;But the important lesson to take away is that understanding the problem is usually the hard part.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Once you understand the part of your program that isn't doing what you think it is, finding the solution becomes pretty easy.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks for reading this post! If you liked it, I'd appreciate it if you shared this post on Facebook or Twitter!
&lt;/h2&gt;

&lt;p&gt;FYI: &lt;a href="http://blog.thefirehoseproject.com/posts/10-minutes-learn-programming/"&gt;This post&lt;/a&gt; originally appeared on the &lt;a href="http://ift.tt/1L2P6yH"&gt;Firehose blog&lt;/a&gt;, where I write stories about, learning to code, career advice, and making it happen.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
