Security
Two of the lines below are generated from the release record of MicJot 0.3.1 (2026-10-28) every time this site is built, so they cannot say more than is true.
Status of this release
- Signing and notarization. MicJot 0.3.1 is a private-beta build signed with a local development identity. It is not notarized, so macOS will not open it without the Open Anyway step, and the public site offers no download. The public release will be a Developer ID build that has passed Apple's notarization.
- Updates. No update feed is published yet, and this build makes no update requests. The app already contains an Ed25519 verifier (
UpdateFeed) and refuses any feed whose signature does not check out; when the feed goes live with the first public release, each release will carry a signature the app verifies before anything installs.
Where keys live
- Customer builds store no API key. In the QA builds of the private beta, the tester's own Anthropic key is stored in
secrets.json, a file in MicJot's support folder readable only by you, and sent only to Anthropic, over HTTPS; Settings → Writing → QA build only shows whether a key is set, never the key.
- The event log redacts every interpolated string unless the call site marks it public, so neither dictation text nor keys nor selections can reach a log line. Provider error bodies are neither shown nor logged.
- Prompts to Anthropic wrap text from your screen in collision-free data blocks, so text in a field cannot close a block or forge an instruction, and a reply that is not a cleaned transcript (an answer, a preamble, a different language) is rejected before anything is inserted.
What the app never does
- No telemetry, analytics or crash uploading, and no accounts in 0.3.1. The only network requests are the ones listed on the privacy page.
- Nothing dictated into a password field, under Secure Event Input or into an excluded app is stored, kept for ⌃⌘V or saved as pending audio.
- Keystrokes seen by the event tap are acted on only when they are MicJot's own keys and are never stored.
The build
Release builds are signed with the hardened runtime and a secure timestamp (codesign --options runtime --timestamp) when a Developer ID certificate is present; the status lines above say which identity the current build carries. Every disk image ships with a .sha256 file, and the app refuses an update download whose checksum differs from the signed feed entry.
The planned backend
Accounts and MicJot AI arrive with the public release. Their design, in brief, so it can be held to account:
- No passwords anywhere: sign-in by a six-digit email code or link, Google, or Apple.
- The owner's Anthropic key is a write-only Worker secret; the proxy injects it per request, forwards the body and forgets it. Invocation logs are off on that route and no log line ever receives a body.
- Tokens are stored as SHA-256 hashes; webhooks from the payment provider are verified with HMAC and a timing-safe compare; every cookie-authenticated state change requires a same-origin
Originheader; the only third-party script (the payment overlay) runs on a host of its own that never holds the account session cookie. - Per-plan daily token budgets bound what any account can spend; a chargeback puts a hold on the account.
This website
Static files, served with Content-Security-Policy: default-src 'none' plus 'self' for scripts, styles and images, X-Frame-Options: DENY, Referrer-Policy: strict-origin-when-cross-origin, a restrictive Permissions-Policy, and HTTPS with HSTS at the edge. No cookies, no third-party requests.
Reporting a vulnerability
Write to [email protected] and include the MicJot version (About window) and steps to reproduce. Please do not include dictation text or API keys. A machine-readable contact is at /.well-known/security.txt. You will get an acknowledgement, a fix or a reasoned answer, and credit if you want it.