macOS menu-bar app · 100% on device

Your work context, collected on device.

Chronica transcribes your microphone and your system audio continuously, right on your Mac — meetings, calls, videos. A searchable journal, export, a local API. No account, no cloud, no telemetry.

Version 0.1.0 is signed ad-hoc and not notarized yet, so Gatekeeper blocks the first launch. There is a one-time fix — see Install.

macOS 14.0+Apple SiliconMIT licence~640 MB model downloaded on first run

25languages recognised, Russian included
2audio tracks transcribed in parallel
0bytes of telemetry, ever
The Chronica menu-bar popover, ready to record: microphone and system toggles, a 24-hour activity chart and the record button.

What it does

A record of your workday that never leaves the Mac.

Chronica listens to both sides of your work — what you say and what you hear — turns it into searchable text, and hands the data back in whatever shape you need.

Two tracks at once

Your microphone (mic) and the system output (remote — the other side of a call, a video, a meeting) are transcribed in parallel and stored as timestamped intervals in SQLite.

Recognition on device

Parakeet TDT 0.6b v3 by default: 25 languages including Russian, detected automatically. Prefer Whisper? 33 ggml variants run on whisper.cpp with Metal. Nothing is sent anywhere to be recognised.

One journal, fully searchable

Activities and transcript live in a single feed with session separators, a period picker and full-text search across everything you have ever recorded.

Optional screen journal

Off by default. When you turn it on, a local vision model in Ollama looks at a still frame and describes the work in progress. Only the text is kept — screenshots are never stored, anywhere.

Your data, given back

Export any period to JSON or Markdown, query the local HTTP API, or read the very same SQLite file with the chronica command-line tool while the app is closed.

Out of your way

A background agent in the menu bar: no Dock icon, no window to close. The interface ships in English and Russian and follows the system language, down to plural forms and date formats.

Privacy

Three network calls exist. You start all three.

Audio, screen frames and transcripts never leave the machine. There is no telemetry, no analytics, no crash reporting, no update check and no account — not switchable on, not switchable off. Simply absent.

Every outbound request Chronica can make, and the exact condition for it.
Where When What exactly
Wherehuggingface.co WhenOnly when you press Download next to a model What exactlyASR weights (Parakeet or Whisper) and the 1.8 MB Silero VAD file, over HTTPS, verified by sha256 wherever the digest is known. A plain GET: no install id, no account, none of your data.
WhereOllama WhenOnly while the screen journal is enabled — and it is off by default What exactlyOne request per tick to http://127.0.0.1:11434 by default: a downscaled JPEG and a short prompt. No audio, no transcripts, no databases. Unchanged frames skip the model entirely.
WhereLocal HTTP API WhenOnly if you switch it on in Settings — it is off by default What exactlyServes your own data to your own machine on 127.0.0.1:8765. It refuses to start on a non-loopback address unless you set a Bearer token.
WhereAnywhere else WhenNever What exactlyNo telemetry, no analytics, no crash reports, no update checks, no account. There is no server side to this product.

The Ollama address is yours to choose, and yours to be responsible for. The default is loopback and nothing leaves the machine. The field is free text and is not validated: point it at a remote host and base64 frames will travel there over plain HTTP.

Audio is never written to disk — PCM lives in a ten-second ring buffer in memory and is discarded after recognition. The screen-journal database has no BLOB column at all. Everything is stored under ~/Library/Application Support/Chronica/, and deleting that folder deletes everything. Read the full privacy document.

Screenshots

A popover for every day, one window for the rest.

The menu-bar popover carries the whole daily loop. Behind it sits a single window with the journal, the models and the settings.

The Chronica popover in the idle state: the microphone and system sources, an empty 24-hour activity chart, and a purple Start recording button.

Ready to record

Two source toggles, the 24-hour activity chart, the live feed, and one big button. Nothing else to learn.

The Chronica popover while recording: a red status line with a timer, the activity chart filling up, and the live transcript feed.

Recording

Recognised lines appear in the feed as intervals close; the chart shows when there was actually speech.

The Chronica window on the Models section: Parakeet TDT 0.6b v3 marked as active at 639 MB, with a list of Whisper variants below it.

Models, downloaded on your command

No weights ship with the app. Pick a model, watch the progress bar, switch whenever you like — sizes and language counts are right there in the list.

The screenshots show the Russian interface; Chronica ships in English too and follows your system language.

For developers

Your whole day, one request away.

The same SQLite file is reachable two ways: over a loopback HTTP API while the app runs, and through a small binary when it does not.

Local HTTP API v1

Disabled by default. Once enabled it listens on 127.0.0.1:8765 and refuses to start on a non-loopback address without a Bearer token. Endpoints cover engine state, intervals, a stitched transcript, full-text search, voice-activity buckets and journal export; GET /api/v1/openapi.json serves the machine-readable spec.

curl -s -H "Authorization: Bearer $TOKEN" \
  "http://127.0.0.1:8765/api/v1/transcript?from=2026-09-03&to=2026-09-04"

Command line chronica

Reads the same database and does not need the app to be running — handy for scripts and for piping a whole day into a language model. Commands: today, transcript, search, stats, sessions, export, db.

chronica today
chronica search "release" --from 2026-09-01 --limit 5
chronica export --from 2026-09-01 --to 2026-09-03 -o journal.json

Install

Four steps, about a minute.

There is no Homebrew cask yet and no in-app updater: new versions come from the Releases page.

  1. Download the DMG and drag the app to Applications

    Grab Chronica-<version>.dmg from the Releases page. A .sha256 checksum sits next to it if you want to verify the download.

  2. Clear the quarantine flag — first launch only

    0.1.0 is signed ad-hoc, so Gatekeeper blocks it. Run this once, then open the app normally. Without a terminal: try to open it once, then click Open Anyway in System Settings → Privacy & Security.

    xattr -dr com.apple.quarantine /Applications/Chronica.app
  3. Launch it and download the model

    Chronica appears in the menu bar — there is no Dock icon. On the first run the popover offers exactly one thing to do: download Parakeet TDT 0.6b v3 (int8), about 640 MB. Silero VAD comes along automatically.

  4. Press record and grant the permissions

    macOS will ask for Microphone access, and for Screen & System Audio Recording for the system track. Decline the microphone and the popover offers a shortcut to the right settings pane instead of failing silently.

About the 0.1.0 signature — plainly

This first release is signed ad-hoc rather than with a Developer ID certificate, and it is not notarized by Apple. Signed, notarized releases will follow once a certificate is in place. Until then macOS will say either “Chronica.app is damaged and can't be opened” or “Apple cannot check it for malicious software”, and right-click → Open no longer works around this on macOS 15+. Step 2 above is the fix; building from source is always an option.