Диктування, яке витримує термінал
Вставлення диктування мовчки збоїть у терміналах, SSH, tmux і не-QWERTY розкладках. Чому там не працює буфер обміну й що робить режим набору.
Розробники, які пробують інструменти диктування, часто натрапляють на збій дуже специфічної форми. Інструмент чудово працює в демонстрації. Він працює в Notes, у Slack, у браузері. А тоді ви фокусуєте термінал, диктуєте речення — і або нічого не з’являється, або з’являється щось не те, що ви сказали, або з’являється половина, а друга половина тепер загадковим чином опинилася у вашому буфері обміну. Іноді все працює локально й помирає тієї миті, коли ви заходите на машину через SSH.
Ця закономірність достатньо стала, щоб я не вважав її вадою якогось одного продукту. Це наслідок того, як уся категорія вставляє текст, — і він дає збій рівно в тих місцях, де живе розробник.
Зараз це важить більше, ніж два роки тому. Якщо ви керуєте Claude Code голосом — робочий процес, який я описав у керуванні Claude Code голосом, — то термінал не є одним застосунком з-поміж багатьох. Він і є тим самим застосунком. Саме туди потрапляють ваші промпти, саме там агенти чекають на скерування, саме там уся ця історія з паралельними доріжками або працює, або ні. Інструмент диктування, ненадійний у терміналах, для vibe-кодера ненадійний у своїй єдиній роботі.
Чому вставлення ламається саме там, де живуть розробники
Ось механіка на рівні категорії. Більшість інструментів диктування вставляють текст однаково: кладуть транскрибоване речення в системний буфер обміну, а тоді синтезують натискання Cmd+V у застосунку з фокусом. Це розумний типовий вибір — вставлення миттєве, воно працює майже в будь-якому графічному текстовому полі й майже не потребує інженерної роботи під кожен застосунок.
Проблема — в усьому тому, від чого це припущення тихо залежить.
Воно залежить від того, чи трактує застосунок із фокусом Cmd+V як «вставити». Термінали часто ні: багато з них використовують Cmd+V для чогось іншого або ні для чого, tmux і vim мають власні уявлення про те, що означає вставлення, а віддалена SSH-сесія може витлумачити сплеск вставленого тексту так, як локальна машина передбачити не може. Bracketed paste, режим копіювання, режим вставки проти звичайного режиму: світ терміналів повний станів, у яких синтетичне вставлення потрапляє не туди або нікуди.
Воно залежить від того, чи буфер обміну доступний і не захищений. Менеджери буфера обміну його переписують. Менеджери паролів навмисно його очищають або захищають — функція безпеки, що мовчки перетворює «встав моє диктування» на «встав нічого». І навіть коли все спрацювало, інструмент щойно перезаписав те, що ви скопіювали. SHA коміту, який ви несли між вікнами, зник — його замінило ваше ж речення. Для того, хто жонглює кількома доріжками, це не подряпина: буфер обміну виконував роботу.
І воно залежить — ось це людей дивує — від вашої розкладки клавіатури. Коли інструмент відкочується до симуляції натискань клавіш, наївний спосіб — надсилати коди клавіш: фізичні позиції. Коди клавіш перетворюються на символи через вашу розкладку. На QWERTY код для «V» дає V. На Dvorak та сама фізична позиція — це інша літера. Тож інструмент, що симулює скан-коди на розкладці Dvorak, AZERTY чи Colemak, видає текст, який має вигляд шифру простої заміни. Користувачі повідомляють про абракадабру й припускають, що зламалося розпізнавання мовлення. Ні — мовлення розпізналося ідеально, його переплутало вставлення.
У цьому немає ані злого умислу, ані чиїхось лінощів. Вставлення через буфер обміну — правильний типовий вибір для 90% випадків. Просто розробники проводять день в інших 10%.
Що насправді означає «надрукуй це натомість»
У Keebye є налаштування insert_mode з двома значеннями: paste — типове — і type.
Режим набору не вставляє. На macOS він використовує CGEventKeyboardSetUnicodeString — API, що прикріплює сам текст у Unicode до синтетичної події клавіші. Символ несеться в самій події, а не шукається через вашу розкладку клавіатури. Це робить його незалежним від розкладки за конструкцією: Dvorak, AZERTY, Colemak — на чому б ви не друкували, надходить саме той текст, який було транскрибовано, бо перетворення скан-коду на символ, яке можна зіпсувати, тут ніколи не було.
Друга властивість режиму набору — та, що цікавить користувачів терміналів: він ніколи не чіпає буфер обміну. Нуль операцій із буфером обміну на цьому шляху коду. Вміст вашого буфера обміну залишається вашим — SHA виживає, менеджеру паролів немає від чого захищатися, менеджеру буфера обміну немає чого записувати.
А оскільки термінали й віддалені сесії можуть захлинатися текстом, що надходить швидше, ніж друкує людина, режим набору свідомо тримає темп: текст іде частинами по 16 символів із проміжком у 4 мілісекунди між частинами. Достатньо швидко, щоб речення надійшло значно менш ніж за секунду; достатньо розмірено, щоб панель tmux через SSH отримала його як натискання клавіш, за якими встигає, а не як згусток, який треба тлумачити.
Режим вставлення нікуди не подівся й лишається типовим, бо він справді швидший для великих блоків тексту у звичайних графічних застосунках — повідомлення у Slack на три абзаци надходить одним вставленням, а не потоком частин. Утім, урок про розкладки засвоїв і режим вставлення: синтетичне Cmd+V використовує фізичний код клавіші V, тож саме вставлення не ламається на розкладках, відмінних від QWERTY, так, як це буває з підходами через пошук символів.
Практичне налаштування для роботи з агентами просте: перемкніть insert_mode на type, сфокусуйте термінал із запущеним Claude Code, утримайте клавішу, скажіть скерування, відпустіть. Промпт надійде так, як надійшли б натискання клавіш, бо, з погляду термінала, це вони і є. Покроковий варіант цього налаштування, включно з особливостями SSH і tmux, є в голосовому диктуванні для терміналу macOS.
Чесні обмеження
Режим набору повільніший за вставлення на довгих текстах — це арифметика, а не дефект. Натискання клавіш частинами з проміжками для темпу тривають довше, ніж одна подія вставлення, і якщо ви диктуєте кілька абзаців у документ, режим вставлення відчуватиметься жвавішим. Саме тому вставлення лишається типовим, а режим набору вмикаєте ви самі в налаштуваннях: правильний режим залежить від того, куди прямує ваш текст.
Деякі застосунки обмежують частоту синтетичного введення або фільтрують його, зазвичай з міркувань безпеки, і жодна стратегія вставлення від цього повністю не втече — застосунок, який відмовляється приймати синтетичні події, відмовляє їх кожному інструменту диктування.
І щоб прямо сказати, про що ця стаття і про що вона ні: скарга «вставлення ламається в терміналах» — це закономірність по всій категорії диктування, а не вада, притаманна якомусь конкретному конкурентові. Інші інструменти мають власні відповіді й власні сильні сторони — ми написали чесні порівняння Keebye vs Superwhisper і Keebye vs Wispr Flow, включно з тим, де кожен із них може пасувати вам краще.
Вставлення — це неефектна половина диктування
Уся увага дістається розпізнаванню мовлення: назви моделей, заяви про точність, кількість мов. Але в інструмента диктування дві роботи: правильно вас почути — а тоді доставити текст туди, де стоїть курсор, не втративши й не спотворивши його. Друга робота звучить тривіально, і саме на ній категорія тихо підводить розробників, бо друга робота легка в TextEdit і важка в панелі tmux на віддаленій машині під розкладкою Dvorak.
Якщо ваші промпти потрапляють у термінали — а якщо ви керуєте агентами для коду, то потрапляють, — вставлення не є виноскою. Це різниця між інструментом, який ви демонструєте, і інструментом, яким ви користуєтеся. До речі, споріднені режими збою мають той самий присмак: з’їдене перше слово диктування через холодний старт мікрофона — це ще одна скарга рівня категорії з механічним поясненням, і про неї ми написали в чому застосунки диктування з’їдають ваше перше слово.
Keebye перебуває в ранньому доступі для macOS. Якщо ваше диктування бодай раз зникало десь між вашим ротом і терміналом, почніть безкоштовний пробний період нижче, увімкніть режим набору й повторіть той самий промпт. Скопійований SHA залишиться в буфері обміну, поки слова надходитимуть як надрукований Unicode.
Перевірте свій найважчий шлях у терміналі
Почніть безкоштовний пробний період, увімкніть режим набору й спробуйте той промпт у SSH чи tmux, на якому зазвичай ламається вставлення.
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.
Читати далі
Диктування промптів паралельним агентам, доріжка за доріжкою
Два-три агенти для коду одночасно — і промпт стає вузьким місцем. Голосовий процес, щоб годувати паралельні доріжки, не покидаючи поточну.
Claude Code голосом: розробка паралельними доріжками
ШІ-агенти зробили набір тексту вузьким місцем. Практичний процес диктування промптів, рев’ю та скерувань у паралельних доріжках агентів на macOS.
Кажи те, що я сказав: диктування без переписування від ШІ
ШІ переписує диктування: губить уточнення, перевертає зміст. Чому шліфування через LLM переказує вас і чому Keebye лишається дослівним.