Si det jeg sa: diktering uten AI-omskrivingen
AI-diktering skriver om det du sa: forbehold forsvinner, meningen snus. Hvorfor LLM-polering parafraserer deg og Keebye holder seg bokstavelig.
Det finnes en klage på AI-forbedret diktering som høres paradoksal ut helt til du har levd den: transkripsjonen var fin — det var det som skjedde etter transkripsjonen som ødela den. Du sa én ting, og verktøyet leverte en polert, selvsikker, litt annen ting. Et forbehold stille fjernet. En reservasjon strøket. En setning bygget om til noe du aldri ville sagt. Og i mønsterets verste versjon — den som får folk til å forlate et verktøy på flekken — snus meningen. «Ikke deploy før testene går gjennom» kommer ut i den andre enden som en instruksjon om å deploye, minus ikke.
For diktering nå og da er dette et irritasjonsmoment. For måten jeg faktisk bruker diktering på — å mate prompter til Claude Code, arbeidsflyten fra å styre Claude Code med stemmen — er det gift. En kodeagent tar ordene dine som en spesifikasjon. Den vet ikke at dikteringsverktøyet ditt parafraserte deg. Hvis forbeholdet som gjorde instruksjonen trygg, ble glattet bort mellom munnen din og terminalen, kjører agenten muntert den utglattede versjonen. Presisjon er hele poenget med en prompt, og et lag med AI-omskriving er en maskin for å fjerne presisjon samtidig som resultatet ser mer gjennomtenkt ut.
Hvorfor skriver AI-dikteringsverktøy om det du sa?
Svaret på kategorinivå er ikke at noen satte seg ned for å forvrenge tale. Det er at «rydd opp i denne transkripsjonen» er en genuint tiltalende funksjon, og den åpenbare måten å bygge den på er å kjøre råtranskripsjonen gjennom en språkmodell.
Rå tale er rotete — fyllord, feilstarter, gjentatte ord, manglende tegnsetting. En LLM som blir bedt om å pynte på det, produserer vakre resultater. Problemet er at en språkmodell ikke redigerer, slik en menneskelig korrekturleser som stryker «um» redigerer. Den genererer på nytt. Resultatet er en ny tekst som modellen mener er en god versjon av det du ga den, og «god» er der intensjonen din lekker ut. Modeller trent mot hjelpsomhet og flyt har meninger: reservasjoner ser ut som støy, forbehold ser ut som rot, en klønete-men-presis formulering ser ut som noe å forbedre. Som oftest er omskrivingen harmløs. Men den er sannsynlighetsbasert, og du kan ikke se på resultatet hvilke setninger som ble transkribert og hvilke som ble komponert. Poleringen er jevn; trofastheten er det ikke.
Det er det dype problemet med LLM-poleringer: de svikter stille og selvsikkert. En talegjenkjenner som hører feil, produserer som regel noe synlig galt. Et omskrivingslag som svikter deg, produserer noe synlig riktig — grammatisk, plausibelt, ikledd stemmen din — og det er nøyaktig derfor den snudde «ikke deploy» blir sendt i stedet for fanget opp.
Bokstavelig som standard
Keebyes holdning er enkel: det tale-til-tekst-modellen hørte, er det som lander ved markøren din. Som standard sitter det ingen språkmodell mellom transkripsjonen og terminalen din og komponerer en bedre versjon av deg — standardtrinnet for polering er en kort liste med deterministiske regler, og det er alt.
Det er et bevisst veddemål, og det kommer fra bruken innen vibe coding. Når dikteringen din er styrekanalen for kodeagenter, er verktøyets jobb transport, ikke forfatterskap. Du er forfatteren; agenten er publikum; dikteringslaget skal ikke ha meninger. Den arbeidsflyten — å snakke hele prompter i stedet for å skrive dem — er beskrevet i stemmediktering for AI-prompter.
Det finnes en LLM-polering i Keebye — jeg kommer til den — men den er valgfri, den kjører helt på maskinen din, og den jobber under en kontroll laget for å avvise vanlige former for glidning, løpsk utvidelse og gjentakelse. Hvis resultatet stryker på den sjekken, faller Keebye tilbake på reglene. Standard forblir regler.
Så hva gjør oppryddingen egentlig?
Bokstavelig trenger ikke bety rå. Keebye leverer et valgfritt oppryddingstrinn — forbedring, på som standard og overstyrbar per app — men det er regelbasert, ikke en modell, og hele listen over hva det gjør får plass i ett avsnitt.
Den fjerner frittstående fyllord (um, uh, erm, you know). Den slår sammen umiddelbare ordgjentakelser — «the the» blir «the». Den slår sammen blanktegn. Den setter stor forbokstav, og den legger til punktum til slutt hvis du ikke gjorde det. Det er hele listen. Reglene er deterministiske og snevert avgrenset; de omorganiserer ikke setningsledd bevisst, fjerner ikke negasjoner og bytter ikke ut synonymer.
Før oppryddingen kjører, brukes erstatningene fra ordlisten din — brukerdefinerte utbytter for sjargongen og egennavnene talemodeller mishandler, slik at «pnpm» og modulnavnene dine kommer frem stavet slik kodebasen din staver dem.
Og hvis selv det regelbaserte trinnet er mer inngrep enn du vil ha, slår du av forbedringen, så setter Keebye inn talemodellens rå transkripsjon: fyllord, gjentakelser og alt. For enkelte sammenhenger — å sitere noen, å diktere inn i et felt der punktumet til slutt ødelegger noe — er råtranskripsjonen det bedre valget, og overstyringen per app lar deg velge den.
Poleringen du velger til, og trofasthetskontrollen rundt den
Nå til LLM-en jeg lovet å komme til. For dem som faktisk vil ha smartere opprydding, tilbyr Keebye en valgfri poleringsmodus (polish_mode satt til local_llm): en liten Qwen3-modell som kjører på enheten via llama.cpp, Metal-akselerert, ingenting sendes noe sted. Instruksjonene dens er den snevre versjonen av polering — rett tegnsetting og store bokstaver, fjern fyllord, behold brukerens eksakte ord, språk og mening, bevar kode og filnavn ordrett. Genereringen er deterministisk (grådig sampling, samme inndata → samme utdata) og har tak; hvis modellen henger seg opp forbi en tidsfrist på to sekunder, forkastes resultatet.
Men instruksjoner er håp, og denne artikkelen finnes fordi håp ikke er garantier. Så hvert LLM-polerte resultat går gjennom en trofasthetskontroll før det får røre markøren din. Resultatet må beholde minst 50 % av tokenene i den opprinnelige transkripsjonen. Det må ikke svulme opp — alt forbi omtrent dobbel opprinnelig lengde (pluss fire tokens) stryker. Løpsk gjentakelse blir oppdaget. Hvis det polerte resultatet stryker på én av de sjekkene, forkaster Keebye det og faller tilbake på den regelbaserte oppryddingen i stedet.
Den kontrollen fanger opp kraftig tokentap, løpsk utvidelse og gjentakelse før modellens resultat kan erstatte den regelryddede transkripsjonen. Den er en heuristikk, ikke et semantisk bevis: en kort omskriving eller en endret negasjon kan fortsatt passere tersklene. Hvis et forbehold ikke har råd til å gli, hold AI-poleringen av, og gå gjennom den innsatte teksten før du sender den.
De ærlige grensene
Bokstavelig betyr bokstavelig. Hvis du sludrer, lander sludringen din — selv den valgfrie poleringen er instruert og bevoktet mot opprydding, ikke komposisjon, så Keebye gjør ikke en vandrende tanke om til en skarp instruksjon. Disiplinen med å si det du mener, blir hos deg.
Den regelbaserte oppryddingen er bevisst dum. Den fjerner «um»; den fikser ikke grammatikken din, bygger ikke om en løpende setning og legger ikke merke til at du motsa deg selv. Noe smartere ville gjeninnført nettopp de skjønnsvurderingene dette designet finnes for å unngå.
Og trofasthet beskytter mot omskriving, ikke mot feiltolkning. Hvis talemodellen hører «cache» som «cash», blir den feilen trofast bevart — kontrollen aner ikke hva du mente å si, bare hva som ble transkribert. Bokstavelig diktering flytter tillitsgrensen til tale-til-tekst-modellen; den fjerner den ikke. (Beslektet: hvis problemet ditt er at modellen transkriberer på helt feil språk, er det en annen svikt med en annen løsning — fest dikteringsspråket ditt.)
Til slutt innrammingen på kategorinivå: AI-polering er ingen svindel, og mange brukere foretrekker genuint tekst som leses jevnere enn de snakker. Er det deg, lener andre verktøy seg godt inn i det, og sammenligningene våre sier det ærlig — Keebye vs. Wispr Flow og Keebye vs. Superwhisper har begge en ekte seksjon om «når det andre verktøyet passer bedre».
Transport, ikke forfatterskap
Avtalen Keebye tilbyr, er snever med vilje: du snakker, og en lett ryddet transkripsjon lander der markøren din er. Når de ordene er prompter til en agent som kommer til å handle bokstavelig på dem, er snevert en funksjon. Det dyreste et dikteringsverktøy kan gjøre mot en utvikler, er ikke en skrivefeil. Det er en flytende setning du aldri sa.
Keebye er i tidlig tilgang for macOS. Start den gratis prøveperioden nedenfor, dikter «Ikke deploy før testene går gjennom», og sjekk om nøyaktig den begrensningen overlever oppryddingen. Den testen er hele produktet.
Test instruksjonen som ikke har råd til å gli
Start den gratis prøveperioden din, og dikter en prompt med et kritisk forbehold — særlig et «ikke» — og se så på hva som kommer frem.
Start free trialEarly access: we'll email you the moment the macOS build is ready — your 14 days start when you first sign in from the app.
Les videre
Å diktere prompter til parallelle agenter, lane for lane
Kjører du to eller tre kodeagenter samtidig, blir prompting flaskehalsen. En stemmearbeidsflyt for å mate parallelle lanes uten å forlate den du står i.
Å styre Claude Code med stemmen: bygging i parallelle lanes
AI-kodeagenter gjorde skriving til flaskehalsen. En praktisk flyt for å diktere prompter, gjennomganger og kursendringer i parallelle agent-lanes på macOS.
Diktering som overlever terminalen
Innliming av diktering svikter stille i terminaler, SSH, tmux og ikke-QWERTY-oppsett. Hvorfor utklippstavlen svikter der, og hva skrivemodus gjør.