Security
Last updated: October 1, 2026
Koe is designed so that you can choose the processing boundary that fits the work you are doing. This page states what each mode protects, where its boundary ends, and which controls exist today.
Processing boundaries
Local transcription
Microphone → Koe on your Mac → local model → local history (if enabled) → target app
No transcription request leaves the Mac
- Audio is captured and transcribed on the Mac with a downloaded model.
- Each model download is checked against a SHA-256 checksum shipped with the App before it is installed. A file that does not match is deleted.
- No audio or transcript is sent to a Koe transcription service or an AI provider for this step.
- Audio buffers are held for processing and released when the operation ends.
- Optional cloud transformations are a separate step and follow their own BYOK or Pro boundary.
BYOK transcription
Microphone → Koe on your Mac → provider selected by you → Koe on your Mac → target app
Koe servers are not in this request path
- The App connects directly to the provider configured for the selected model.
- Koe does not proxy the audio, transcript, or provider key for a BYOK request.
- The provider's security, logging, and retention terms apply.
- Provider keys are excluded from cloud settings sync.
Pro transcription
Microphone → Koe on your Mac → Koe API → selected provider → Koe API → App → target app
Content handled in transit; not written to Koe's product database
- A Supabase token and subscription claim authorize the request.
- Koe enforces request-size, timeout, and rate limits before forwarding to a configured provider.
- Audio and the returned transcript exist in process memory while the request is handled.
- Koe does not intentionally persist audio or transcript content from the request to its product database.
- The selected provider still receives the content and applies its own service terms.
Transformations
A transformation can send transcript text, transformation instructions, and relevant dictionary terms to a provider. BYOK transformations connect directly to the configured provider. Pro transformations pass through Koe to OpenRouter and the configured model. Audio is not included in the transformation request.
Local data and secrets
- Transcription history is stored in a local SQLite database when history saving is enabled. It is enabled by default and can be disabled, cleared, or edited from the App.
- Preferences, hooks, dictionary data, and bounded diagnostic logs are local App data.
- Hooks run only the commands and URLs listed in
~/.koe/hooks.json. A command or URL added from inside the App is written there only after you approve it in a native macOS dialog; entries you edit into the file yourself are trusted as written. - Provider keys are stored in the macOS Keychain, as a single item of the App, and are never synced by Koe.
- Earlier versions kept them in a local
secrets.jsonApp data file. The first launch after updating copies them to the Keychain, reads them back, and only then deletes them from that file. If the Keychain refuses, they stay in the file and the move is tried again at the next launch. Backups made before the update can still contain the old file. - Authentication sessions are persisted locally by the Supabase client so signed-in users can refresh their session.
Remote data
For email-authenticated accounts, Supabase stores the account email, authentication records, subscription/profile fields, and a limited set of preferences. Stripe handles payment details and sends Koe subscription state. Koe does not sync transcripts, audio, dictionary terms, custom prompts, hooks, provider keys, or diagnostic logs.
The App ships without remote product analytics, remote application logs, or remote crash reporting. A root privacy gate rejects known telemetry transports and legacy analytics writes during CI.
Network and web controls
- Koe Site and API traffic use HTTPS in production.
- API routes validate authentication where required and apply bounded input, timeout, and rate limits.
- BYOK provider destinations are allowlisted by the desktop application's network capability configuration.
- Site responses set a Content Security Policy plus frame, MIME-sniffing, referrer, permissions, and transport protections.
- The browser microphone permission is only requested when you start the optional live demo.
App distribution and updates
- Release builds are code-signed and notarized for macOS.
- Apple Silicon and Intel artifacts are published separately.
- The updater verifies signed update metadata before installing an update.
- Production smoke tests verify public manifests and download assets after releases.
What Koe does not claim
- Local transcription does not make a later cloud transformation local.
- A BYOK provider can process and retain data under its own terms even though Koe is not in the request path.
- Pro content is handled by Koe and a provider in transit; it is not the same boundary as local mode.
- Local files are not protected from someone who already controls your macOS account.
- No software or hosted service can promise absolute security.
Vulnerability disclosure
If you believe you found a security issue, email hi+koe@gwendall.com with reproduction steps, affected versions, and impact. Please do not include real customer audio, transcripts, credentials, or other sensitive data in a report.
We will acknowledge a valid report as quickly as practical, investigate it, and coordinate remediation and disclosure when appropriate. We do not currently promise a fixed response time or operate a paid bug-bounty program.
Privacy details
See the Privacy Policy for the complete data inventory, local history behavior, service providers, retention boundaries, and deletion process.