jot-gemini-transcribe-macOS README

The project's README from github.com/google-gemini/jot-gemini-transcribe-macOS. As one markdown file: README.md.

Jot

Jot

Gemini 3.5 Transcribe Demo. Hold a key. Speak. It types.

Smart dictation for macOS that puts polished text wherever your cursor is.

Created by Ammaar Reshi · Apache 2.0 licensed

This is not an officially supported Google product.


What it is

Hold fn, say the thing, let go. A moment later your words are in the app you were already using — punctuated, filler words removed, cleaned up. No window to switch to, no transcript to copy, no account to make.

Jot preview

It is deliberately small: a menu bar icon, a pill at the bottom of your screen while you talk, and a History window that proves nothing was ever lost.

The three gestures

Gesture What happens
Hold fn Records while held. Release and the text lands at your cursor.
fn + tap Space Hands-free: keeps recording after you let go. Tap fn to finish.
Esc Cancels. Anything over 10 seconds is still kept in History.

The key is rebindable in Settings → General if fn is spoken for.

What makes it different

It follows a change of mind. Say "let's meet at 1pm — actually, no, make it 2pm" and Jot writes "Let's meet at 2pm." That is the whole pitch, and onboarding makes you do it once so you believe it.

It never loses your words. Audio goes to disk from the first millisecond, so a crash, a kill -9, or a flat battery costs you nothing — the recording is recovered on next launch. Offline, dictations queue and land when you reconnect. Every failure is retryable from History. Release the key mid-word and it keeps listening until you actually stop.

It is private by architecture. Your voice goes from your Mac straight to the Gemini API with your key. No middleman server, no account, no analytics, no screenshots, no keystroke logging — one network host, and you can read every line of the code that talks to it. See PRIVACY.md.

Your jargon, spelled right. Names and product terms go in the Dictionary and ride along with the audio, so the model hears "Kubernetes" instead of guessing "cooper netties" — corrected at the source, not patched afterwards. Tone matching for email vs. chat vs. code is available too, in Settings → Dictation.

Install

  1. Download the latest Jot-x.y.z.dmg from Releases.
  2. Drag Jot into Applications and launch it from there — apps run from a mounted disk image are sandboxed by macOS and the permissions you grant will not stick.
Drag Jot to Applications

Setup takes about two minutes and the app walks you through it:

  1. Paste a Gemini API key — get one at Google AI Studio. It is stored in your macOS Keychain and only ever sent to Google.
  2. Allow the microphone — say hello and it advances by itself.
  3. Allow Accessibility — macOS requires this for any app that types into another app.
  4. Hold fn and talk.

Cost: you pay Google for what you dictate at Gemini API pricing; a free tier exists and a typical dictation is a few seconds of audio. Jot itself is free and has no account.

Model: Jot runs on Gemini's specialist transcription model, gemini-3.5-transcribe. Your key needs access to it; setup tells you up front if it does not, instead of failing on your first dictation.

How it works

fn down ─▶ capture (CAF on disk from t=0) ─▶ fn up ─▶ FLAC ─▶ Gemini transcribe
                                                                    │
   cursor ◀─ insert (AX → paste → clipboard) ◀─ [validate ◀─ tone pass] ─┘
                                              (optional, off by default)
                                                    │
                                              History (SQLite)

A few decisions worth knowing about, because they are what make it feel solid:

The full design specs — including the failure matrix the reliability work is built from — are in docs/design/.

Development

Requires macOS 14+, Xcode 16+, and xcodegen. The .xcodeproj is generated, not checked in.

brew install xcodegen
./scripts/build.sh          # xcodegen generate + xcodebuild
./scripts/test.sh           # swift test on JotCore
open Jot.xcodeproj          # or work in Xcode

Debug builds sign ad-hoc, so a clean clone needs no Apple account, certificate, or team membership — ./scripts/build.sh works as-is. To build under your own team instead: ./scripts/build.sh DEVELOPMENT_TEAM=XXXXXXXXXX. Only release builds (scripts/release.sh) need a real Developer ID.

App/            menu bar item, HUD pill, windows, design tokens, icon + sounds
JotCore/        all engine logic, headless and testable
  HotkeyEngine/     CGEventTap + the pure hold/lock/cancel grammar
  AudioEngine/      crash-safe CAF capture, device changes, prewarming
  TranscriptionClient/  Gemini calls, timeouts, retries, FLAC
  FormattingPipeline/   cleanup prompt, validation gate, dictionary rules
  InsertionEngine/      the AX → paste → clipboard ladder
  HistoryStore/         GRDB index, recovery, retry queue, retention
scripts/        build, test, icon, DMG, release
docs/           privacy, releasing, design specs, research

Useful while hacking:

# every surface is reachable headlessly
open "jot://settings/about"      # or /general /dictation /privacy /advanced
open "jot://history"  "jot://dictionary"  "jot://onboarding/5"

# watch it work
log show --last 5m --info --predicate 'subsystem == "com.ammaar.jot"'

Transcript text is logged as private and never appears in those logs.

Releasing

./scripts/release.sh archives, signs with Developer ID, notarizes, staples, and builds the installer DMG. It refuses to produce a shareable DMG that is not notarized. See docs/RELEASING.md for the certificate setup.

License

Apache License 2.0 — see LICENSE. Bundled fonts (Google Sans Flex, Google Sans Code) are SIL OFL 1.1. The earcons are original works covered by the same Apache 2.0 license. Details in THIRD_PARTY_NOTICES.md.

jot-gemini-transcribe-macOS (google-gemini/jot-gemini-transcribe-macOS)

Searching Database…

Что это?Jot — приложение для macOS, которое превращает вашу речь в чистый текст с пунктуацией прямо там, где стоит курсор: удерживайте хоткей, говорите, и оно набирает результат с помощью модели транскрибации Gemini от Google.
Это отдельное приложение или библиотека, которую я встроил бы в свой проект?Jot — отдельное приложение для macOS с иконкой в строке меню и маленькой «пилюлей» записи; SDK встраивать не нужно — просто скачайте, установите и удерживайте клавишу, чтобы диктовать.
Как установить и настроить?Скачайте Jot-x.y.z.dmg со страницы Releases, перетащите Jot в Applications (запуск прямо из смонтированного образа ломает права доступа), затем вставьте API-ключ Gemini, разрешите доступ к микрофону и к Accessibility — вся настройка занимает около двух минут.
Нужен ли свой API-ключ Gemini?Да — при настройке вы вставляете API-ключ Gemini из Google AI Studio, причём ключу нужен доступ именно к модели gemini-3.5-transcribe; Jot проверяет это заранее, вместо того чтобы падать на вашей первой диктовке.
Работает ли он без подключения к интернету?Не для живой транскрибации — ваш голос отправляется в Gemini API по сети. Если вы офлайн, диктовки встают в очередь и отправятся после переподключения, а всё неудавшееся можно повторить из History.
Куда на самом деле уходят мои голосовые данные?Напрямую с вашего Mac в Gemini API с вашим собственным ключом — ни посредника-сервера, ни аккаунта, ни аналитики, ни логирования нажатий клавиш, а код, который общается с API, можно прочитать.
Как он обрабатывает поправки вроде «хотя нет, давай в 14:00»?Jot отслеживает смену решения во время диктовки: фраза «давай встретимся в 13:00 — хотя нет, давай в 14:00» даёт итоговый исправленный текст «Let's meet at 2pm», и онбординг однажды это демонстрирует, чтобы вы ему доверяли.
Что будет, если приложение упадёт посреди записи?Аудио пишется на диск с первой миллисекунды записи, так что падение, kill -9 или севшая батарея ничего не потеряют — запись автоматически восстановится при следующем запуске.
Как он не коверкает технический жаргон и имена?Вы добавляете термины в словарь Dictionary в настройках, и эти записи отправляются вместе с аудио, чтобы модель слышала правильное написание (например, «Kubernetes»), а не угадывала фонетически.
Size
5 MB
Stars
493
Age
1mo
Commits · 90 Days