Skip to content

mean-weasel/groqtalk

Repository files navigation

GroqTalk

macOS menu bar speech-to-text powered by Groq Whisper.

Demo media has not been published yet.

Install

GroqTalk is still in beta. Verify the release artifact for the version you want before treating the install paths below as public-ready.

Manual: Download GroqTalk-VERSION-macos.dmg from Releases, verify the checksum published with that release, open it, and drag GroqTalk into Applications.

Install via Homebrew

brew tap mean-weasel/groqtalk
brew install --cask groqtalk

Setup

  1. Get a free API key from console.groq.com
  2. Launch GroqTalk — it lives in your menu bar
  3. In the first-run setup window, click Add API Key and save/test your key
  4. Open Accessibility settings from GroqTalk and enable the current GroqTalk app
  5. Open Microphone settings from GroqTalk and allow microphone access
  6. Use the setup test to confirm the app is ready

GroqTalk is a menu bar app (LSUIElement), so it does not keep a normal Dock window open. The built app includes macOS AppIcon assets for Finder, Applications, and DMG presentation; the menu bar itself uses SF Symbol state icons.

Local Development

Requirements:

  • Xcode with macOS 14+ SDK support
  • Node.js and npm for release tooling
npm ci
make setup-local-signing
make build
make install
make start
make test

By default, local builds use the GroqTalk Local Code Signing identity when it exists, falling back to ad-hoc signing otherwise. Stable local signing keeps the app's Accessibility permission attached across rebuilds. make setup-local-signing creates that identity once in a dedicated local keychain and removes stale GroqTalk-local copies from the login keychain.

Local Permission State Repair

During development, macOS can keep Accessibility or Input Monitoring rows for an older local build. When that happens, System Settings may show GroqTalk enabled while the current app still cannot use the permission. Run:

make prepare-local-permissions-qa

Then launch GroqTalk, enable the newly opened GroqTalk row in System Settings, and restart the app. To inspect local permission state without changing it, run:

make prepare-local-permissions-qa-check

For a Developer ID install, pass your signing identity and team:

make install SIGN_IDENTITY="Developer ID Application" DEVELOPMENT_TEAM=YOURTEAMID

Release DMG notarization uses App Store Connect API key secrets:

  • DEVELOPER_ID_CERT_BASE64
  • DEVELOPER_ID_CERT_PASSWORD
  • APPLE_TEAM_ID
  • APP_STORE_CONNECT_KEY_ID
  • APP_STORE_CONNECT_ISSUER_ID
  • APP_STORE_CONNECT_PRIVATE_KEY

If the certificate files are in ~/Desktop/apple-developer-certificates, run:

make setup-release-secrets

Features

  • Hold-to-record — hold Right Command, Right Option, or Globe/Fn to record, release to transcribe
  • Toggle mode — press once to start, again to stop
  • Auto-paste — by default, sends a paste command to the app active when transcription finishes
  • Return to starting app — optional experimental paste routing that lets you dictate in one app, move on, and paste back where recording started
  • Try background paste — optional experimental paste method for app-specific testing; disabled by default because it relies on lower-level macOS behavior and command-posted results are not fully verifiable
  • Clipboard safety — by default, GroqTalk restores the previous clipboard after posting paste; Settings can keep final text on the clipboard instead
  • 3 audio formats — M4A (smaller), WAV (lossless), FLAC (lossless, smaller)
  • Language selection — hint Whisper for better accuracy in 12 languages
  • Cleanup modes — optionally clean up or rewrite transcripts after Whisper; if cleanup fails after Whisper succeeds, GroqTalk uses the raw transcript
  • Transcription history — browse, search, edit, export, copy, paste, delete, and retry past transcriptions

Privacy

  • API keys are stored in the macOS Keychain. Older plaintext API-key files are migrated on read when possible.
  • Transcription history stays on this Mac in Application Support. Retention can be set to off, 100, 500, or 1000 records.
  • Successful audio files are deleted after transcription.
  • Failed audio may be retained locally only for retryable transcription failures. Clearing history deletes retained retry files.
  • Local diagnostics are redacted before writing and should not include API keys, transcript text, raw audio, or clipboard contents. Diagnostics are enabled by default for supportability; set GROQTALK_DIAGNOSTICS=0 to disable local diagnostic logging.

Paste Caveats

macOS paste automation depends on Accessibility permission and target-app behavior. GroqTalk distinguishes verified direct insertion, command-posted paste, window-choreography paste, and clipboard fallback internally. A command being posted does not prove every target app accepted it; use History or the clipboard fallback when a target blocks paste automation.

Try background paste is off by default. It uses lower-level macOS routing when available and should be treated as an experimental compatibility option, not as the default reliability path.

Troubleshooting

Invalid API key: Use Add Key or Settings → Transcription → Change API Key. GroqTalk validates the key before saving when the network is available. If validation fails because Groq cannot be reached, you can save the key anyway and run the setup check later.

Microphone not available: Open System Settings → Privacy & Security → Microphone and allow GroqTalk. Use Run Check after changing the permission.

Accessibility or hotkey not working: Open System Settings → Privacy & Security → Accessibility and allow GroqTalk. If GroqTalk is already enabled but still cannot record from the hotkey or paste text, remove the old GroqTalk row, reopen GroqTalk, enable the new row, and restart the app.

Paste command sent but no text appears: The target app may block synthetic paste events. Open History to copy or paste the transcript again. If GroqTalk reports clipboard fallback, the transcript is on the clipboard.

Cleanup failed: Whisper transcription succeeded, but the cleanup model did not return usable text. GroqTalk uses the raw transcript and keeps going.

Recording too long: GroqTalk stops oversized recordings before upload to avoid runaway memory use and Groq request-size failures. Try a shorter recording.

Requirements

  • macOS 14+ (Sonoma)
  • Groq API key (free tier available)
  • Accessibility permission (for global hotkey and paste automation)
  • Microphone permission (for recording)

License

MIT

About

Native macOS voice-to-paste with Groq, local whisper.cpp, custom OpenAI-compatible transcription, and reliable paste delivery

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors