Ditado que sobrevive ao terminal

Colar ditado falha em silêncio em terminais, SSH, tmux e layouts não QWERTY. Por que a área de transferência falha ali e o que faz o modo de digitação.

Teodor Deleanu10 de julho de 20268 min de leitura

Desenvolvedores que experimentam ferramentas de ditado costumam esbarrar em uma falha com um formato bem específico. A ferramenta funciona lindamente na demo. Funciona no Notas, no Slack, no navegador. Aí você foca um terminal, dita uma frase e ou nada aparece, ou aparece algo que não é o que você disse, ou metade aparece e a outra metade está agora misteriosamente na sua área de transferência. Às vezes funciona localmente e morre no instante em que você entra por SSH em uma máquina.

O padrão é consistente o suficiente para eu não achar que seja um bug de um produto qualquer. É uma consequência de como a categoria insere texto — e ela falha exatamente nos lugares onde um desenvolvedor vive.

Isso importa mais agora do que importava dois anos atrás. Se você dirige o Claude Code por voz — o fluxo que descrevi em Dirigindo o Claude Code com a sua voz —, então o terminal não é um app entre muitos. É o app. É onde os seus prompts caem, onde os seus agentes esperam redirecionamentos, onde a coisa toda das lanes paralelas funciona ou não funciona. Uma ferramenta de ditado instável em terminais é, para um vibecoder, instável no seu único trabalho.

Por que a colagem quebra exatamente onde os desenvolvedores vivem?

Aqui está a mecânica no nível da categoria. A maioria das ferramentas de ditado insere texto do mesmo jeito: coloca a sua frase transcrita na área de transferência do sistema e depois sintetiza um Cmd+V no app em foco. É um padrão sensato — colar é instantâneo, funciona em quase todo campo de texto de interface gráfica e não exigiu praticamente nenhuma engenharia por app.

O problema é tudo aquilo de que essa suposição depende silenciosamente.

Ela depende de o app em foco tratar Cmd+V como "colar". Terminais muitas vezes não tratam — vários usam Cmd+V para outra coisa ou para nada, tmux e vim têm as próprias ideias sobre o que significa colar, e uma sessão remota de SSH pode interpretar uma rajada de texto colado de formas que a máquina local não consegue prever. Bracketed paste, copy-mode, modo de inserção versus modo normal: o mundo dos terminais é cheio de estados em que uma colagem sintética cai errado ou não cai em lugar nenhum.

Ela depende de a área de transferência estar disponível e desprotegida. Gerenciadores de área de transferência a reescrevem. Gerenciadores de senha deliberadamente a limpam ou protegem — um recurso de segurança que transforma "cole o meu ditado" em "cole nada", em silêncio. E mesmo quando tudo funciona, a ferramenta acabou de sobrescrever o que você tinha copiado. O SHA do commit que você carregava entre janelas sumiu, substituído pela sua própria frase. Para quem faz malabarismo com várias lanes, isso não é um arranhão; a área de transferência estava fazendo um trabalho.

E ela depende — esta é a que surpreende as pessoas — do seu layout de teclado. Quando uma ferramenta cai para simular toques de tecla, o jeito ingênuo é enviar códigos de tecla: as posições físicas das teclas. Códigos de tecla mapeiam para caracteres através do seu layout. Em QWERTY, o código do "V" produz um V. Em Dvorak, essa mesma posição física é outra letra. Então uma ferramenta que simula scancodes em um layout Dvorak, AZERTY ou Colemak produz um texto que parece ter passado por uma cifra de substituição. Os usuários relatam que saiu embaralhado e presumem que o reconhecimento de fala falhou. Não falhou — a fala estava perfeita, a inserção é que a embaralhou.

Nada disso é maldade ou preguiça de ninguém. Colar pela área de transferência é o padrão certo para os 90% dos casos. Só que os desenvolvedores passam o dia nos outros 10%.

O que "digitar em vez de colar" significa de fato

O Keebye tem um ajuste chamado insert_mode com dois valores: paste, que é o padrão, e type.

O modo de digitação não cola. No macOS ele usa CGEventKeyboardSetUnicodeString — uma API que anexa o texto Unicode real a um evento sintético de tecla. O caractere é carregado dentro do próprio evento, não consultado através do seu layout de teclado. Isso o torna independente de layout por construção: Dvorak, AZERTY, Colemak, seja qual for o seu layout, o texto que chega é o texto que foi transcrito, porque nunca houve uma tradução de scancode para caractere para dar errado.

A segunda propriedade do modo de digitação é a que interessa a quem usa terminal: ele nunca toca na área de transferência. Zero operações de área de transferência nesse caminho de código. O conteúdo da sua área de transferência continua seu — o SHA sobrevive, o gerenciador de senhas não tem contra o que se defender, o gerenciador de área de transferência não tem o que registrar.

E porque terminais e sessões remotas podem engasgar com texto chegando mais rápido do que qualquer humano digita, o modo de digitação se dosa deliberadamente: o texto entra em fragmentos de 16 caracteres com um intervalo de 4 milissegundos entre eles. Rápido o suficiente para uma frase cair em bem menos de um segundo; comedido o suficiente para um painel de tmux sobre SSH receber isso como toques de tecla que ele consegue acompanhar, e não como um bloco que precisa interpretar.

O modo de colar continua lá, e continua sendo o padrão, porque é genuinamente mais rápido para grandes blocos de texto em apps gráficos comuns — uma mensagem de Slack de três parágrafos chega como uma colagem só, em vez de um fluxo de fragmentos. Mesmo assim, o modo de colar também aprendeu a lição do layout: o Cmd+V sintético usa o keycode físico do V, então colar em si não quebra em layouts não QWERTY como quebram as abordagens baseadas em consulta de caractere.

A configuração prática para trabalho com agentes é simples: mude o insert_mode para type, foque o terminal rodando o Claude Code, segure a tecla, diga o redirecionamento, solte. O prompt chega do jeito que toques de tecla chegariam, porque, até onde o terminal consegue perceber, é isso que eles são. Existe uma versão passo a passo dessa configuração, incluindo as especificidades de SSH e tmux, em ditado por voz para o terminal do macOS.

Os limites honestos

O modo de digitação é mais lento que colar para textos longos — isso é aritmética, não defeito. Toques de tecla fragmentados com intervalos de dosagem demoram mais do que um único evento de colagem, e se você está ditando vários parágrafos em um documento, o modo de colar vai parecer mais ágil. É exatamente por isso que colar continua sendo o padrão e o modo de digitação é algo que você ativa nos ajustes; o modo certo depende de para onde o seu texto está indo.

Alguns aplicativos limitam a taxa ou filtram entrada sintética, normalmente por motivos de segurança, e nenhuma estratégia de inserção escapa totalmente disso — um app que recusa eventos sintéticos os recusa de toda ferramenta de ditado.

E para deixar claro o que este artigo afirma e o que não afirma: a queixa de que colar quebra em terminais é um padrão de toda a categoria de ditado, não um defeito exclusivo de algum concorrente. Outras ferramentas têm as próprias respostas e os próprios pontos fortes — escrevemos comparações honestas em Keebye vs Superwhisper e Keebye vs Wispr Flow, incluindo onde cada uma delas pode servir melhor a você.

A inserção é a metade sem glamour do ditado

O reconhecimento de fala leva toda a atenção — nomes de modelo, afirmações de precisão, contagem de idiomas. Mas uma ferramenta de ditado tem dois trabalhos: ouvir você corretamente e depois levar o texto até onde o seu cursor está sem perdê-lo nem estropiá-lo. O segundo trabalho soa trivial e é onde a categoria falha silenciosamente com os desenvolvedores, porque o segundo trabalho é fácil no TextEdit e difícil em um painel de tmux em uma máquina remota sob um layout Dvorak.

Se os seus prompts caem em terminais — e se você dirige agentes de código, eles caem —, a inserção não é uma nota de rodapé. É a diferença entre uma ferramenta que você demonstra e uma ferramenta que você usa. Modos de falha relacionados têm o mesmo sabor, aliás: a primeira palavra de um ditado sendo comida pelo cold start do microfone é outra queixa de toda a categoria com uma explicação mecânica, e escrevemos sobre ela em por que apps de ditado comem a sua primeira palavra.

O Keebye está em acesso antecipado para macOS. Se o seu ditado já sumiu em algum ponto entre a sua boca e um terminal, comece o teste grátis abaixo, ative o modo de digitação e repita o mesmo prompt. O SHA que você copiou fica na área de transferência enquanto as palavras chegam como Unicode digitado.

Teste o seu caminho de terminal mais difícil

Comece o teste grátis, ative o modo de digitação e experimente o prompt de SSH ou tmux que costuma quebrar a colagem.

Start free trial

Early access: we'll email you the moment the macOS build is ready — your 14 days start when you first sign in from the app.

Continue lendo