Security
Last updated: July 13, 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.
- 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.
- Provider keys are stored in a separate local
secrets.jsonApp data file and are never synced by Koe. - That file currently relies on macOS user-account and filesystem protection; it is not backed by the macOS Keychain. Do not share your macOS account or App data directory with untrusted users.
- Authentication sessions are persisted locally by the Supabase client so signed-in users can refresh their session.
Moving provider keys into OS-backed secret storage is tracked security work. This page deliberately describes the current boundary rather than a planned one.
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.