Skip to content
Rambleproof

Security model

Fail closed where dictation can hurt.

Dictation touches a microphone, focused controls and the clipboard. The safe failure is recoverable text, never text inserted into an unverified target.

Trust boundaries

  • Local mode keeps audio, transcripts, dictionary processing and cleanup on the Mac.
  • Cloud mode uses API keys stored in macOS Keychain and sends only the data required by the selected transcription or cleanup provider.
  • The app does not take screenshots and does not read window titles or the contents of other fields and windows. With learning from corrections on (the default), it reads the one editable field it just inserted into, locally and in memory, for up to two minutes, and keeps only short correction pairs. Secure fields are never watched. App identifiers and supported browser hosts can be inspected locally for formatting.
  • Secure fields are refused. The original app, window and editable element must still match at commit time.
  • Pasted text is marked concealed and auto-generated so clipboard managers that honor the nspasteboard convention do not keep it.

Safe fallback behavior

  • Slow or failed cloud transcription can race a local fallback instead of stranding the dictation.
  • Cleanup that changes protected facts or fails validation is rejected in favor of transcript-level deterministic cleanup.
  • Unsupported or changed insertion targets receive no synthetic typing. The result is copied and the user is notified.
  • Completed, copied and cancelled sessions lose journal audio immediately. Optional failed audio expires after 24 hours. The separate Recordings folder in Documents, on by default, keeps a copy of the audio and text of each dictation until you delete it or turn it off; see the privacy page for the iCloud caveat.

Release controls

Production builds are configured to require Developer ID signing, hardened runtime, notarization, stapling and Gatekeeper verification. App updates use Sparkle and remain disabled unless an HTTPS feed and EdDSA public key are configured. The update feed is EdDSA-signed end to end and the app requires a signed feed (SURequireSignedFeed). Release scripts stop when credentials or update configuration are missing.

Third-party notices ship in the app, under Settings, Advanced, About.

Website controls

Form and demo endpoints enforce same-origin requests, strict body limits, timeouts and distributed rate limits. They fail closed when storage, providers or rate limiting are not configured. The demo checks audio container signatures and rejects risky cleanup. Security headers deny framing and unnecessary browser capabilities.

Report a vulnerability

Please use the contact formand put “Security” at the start of the message. Do not include credentials, transcripts or private customer data. We will provide a secure follow-up channel when needed.

Last updated: 31 August 2026.