Rocky 34be2e8dd1 feat(polish): add context safeguards, layered prompts, and output validation
Use redacted cursor neighborhood and pause-aware chunks for more natural polish,
validate protected terms with retry/local fallback, and structure bilingual prompts
for consistency and provider prefix caching.
2026-07-29 17:45:11 +08:00
2026-06-17 23:08:58 +08:00

OSGKeyboard

Speak it. It's typed.

Voice input for iPhone, iPad, and Mac. Speak in any app — polished text lands at your cursor.

Platform Platform Swift Version License

Website · 中文 README · Privacy Policy


Why OSGKeyboard

  • Works everywhere — Messages, Notes, Notion, Cursor, Mail, WeChat — wherever you type
  • Speak, don't edit — tap (iOS) or hold Option (Mac); AI adds punctuation and structure for you
  • On-device by default — local recognition on iOS; optional local models on Mac. Cloud upload only when you opt in
  • Bring your own LLM — built-in polish out of the box, or plug in DeepSeek, OpenAI, Anthropic, OpenRouter, and more
  • Mac global dictation — menu-bar app, bottom overlay with live feedback, inserts into the frontmost app

Three steps

  1. Install & authorize — add the iOS keyboard with Full Access; grant mic + Accessibility on Mac
  2. Pick an engine — local ASR + built-in polish (zero config), or your own API keys
  3. Start talking — switch to OSGKeyboard, or hold Option on Mac

Platforms

iOS / iPadOS macOS
Keyboard / global hotkey hold Option
Local speech recognition SpeechAnalyzer SenseVoice / Qwen3
AI polish
Post-polish translation
Personal dictionary iCloud sync
Dictation history
Live UI Dynamic Island floating pill

Privacy

Speech is transcribed on-device by default. Polish sends text only — the transcript and a small amount of nearby cursor text for continuity, never raw audio. Cursor context is not logged or saved to voice history, and secure fields are never captured. See the Privacy Policy.


Build from source

Requires macOS with Xcode 26 and XcodeGen.

git clone https://github.com/hkgood/OSGKeyboard.git
cd OSGKeyboard
./Scripts/generate-xcodeproj.sh
open OSGKeyboard.xcodeproj

Run tests:

xcodebuild test -project OSGKeyboard.xcodeproj -scheme OSGKeyboard \
  -destination 'platform=iOS Simulator,name=iPhone 17'

Architecture (brief)

OSGKeyboard/          Main iOS app (Flow session host)
OSGKeyboardExt/       Custom keyboard extension
OSGKeyboardMac/       macOS menu-bar app
OSGKeyboardShared/    Shared framework (ASR, LLM, sync, design system)

Flow session model (iOS): the host app keeps a long-lived audio session; the keyboard sends start/stop signals via App Group; polished text is delivered back for insertion.

Engine modes:

  • local — on-device ASR; built-in polish (or your own LLM key)
  • cloud — uploads audio to your configured ASR provider, then polishes via LLM

See CHANGELOG.md for release history and CONTRIBUTING.md for PR guidelines.


Adding an LLM provider

Append a preset in OSGKeyboardShared/Models/LLMProvider.swift — any OpenAI-compatible /chat/completions endpoint works out of the box.


License

Source Available License — personal, non-commercial use only. Commercial licensing: rocky.hk@gmail.com.

S
Description
No description provided
Readme 57 MiB
Languages
Swift 93.7%
Python 4.6%
Shell 0.8%
HTML 0.5%
Objective-C++ 0.3%