Każde połączenie, jakie Saykeep może nawiązać.

Saykeep ma zamknięty kod, więc zamiast „przeczytaj kod” dajemy Ci coś, co sprawdzisz na łączu: ta strona wymienia każdy serwer, z którym aplikacja może się połączyć, kiedy to robi i co wysyła. Uruchom monitor sieci na swoim Macu i porównaj.

Saykeep nie wysyła telemetrii, analityki ani raportów o awariach i nie ma własnych mechanizmów do ich zbierania. Na Macu niektóre z dołączonych bibliotek open source mogą raportować użycie. Biblioteka etykiet mówców (pyannote) ma to włączone domyślnie, a Saykeep wyłącza to, zanim ją załaduje. Biblioteka pobierania modeli (huggingface_hub) ma flagę raportowania, której Saykeep jeszcze nie wyłącza: nic w Saykeep nie wywołuje jej funkcji raportującej, ale zapytania o pobranie modeli, które wysyła do huggingface.co, mogą nieść w nagłówku numery wersji (jej własnej, Pythona i torch). Lista poniżej wymienia każdą z nich i to, co robi z nią wersja, którą pobierasz.

Kiedy się łączy?

Każdy przewód to serwer z listy poniżej, z podpisem, co nim płynie. Wybierz moment, a podświetlą się tylko te, z którymi Saykeep łączy się właśnie wtedy.

Twój MacNagrywanie nie potrzebuje sieci

  1. Pierwsze uruchomienie

    huggingface.co pobieranie, około 4,7 GB, jednorazowo

    models.saykeep.app pobieranie, ~30 MB, jednorazowo, jeśli etykiety mówców są włączone

  2. Raz dziennie, jeśli się zgodzisz

    saykeep.app Twoja wersja, najwyżej raz dziennie; tylko jeśli zgodzisz się przy konfiguracji (domyślnie zaznaczone „Tak”)

  3. Po rozmowie, jeśli ustawisz serwer podsumowań

    Twój serwer podsumowań tekst transkrypcji oraz, jeśli je wpiszesz, Twoje imię i notatka „o Tobie”

  4. Aktualizacja

    dl.saykeep.app podpisany plik aktualizacji, gdy klikniesz Install Update

  5. Gdy nagrywa

    Nagrywanie nie potrzebuje połączenia, a Twój dźwięk nigdy nie jest wysyłany. W trakcie nagrywania spotkania Saykeep nie sprawdza aktualizacji — nawet po wybraniu Check for Updates… w menu. W tym czasie, jeśli modele są już pobrane, wysyłane jest tylko to, co ustawisz albo o co poprosisz — na przykład tekst transkrypcji wcześniejszej rozmowy trafiający do Twojego serwera podsumowań (a jeśli je wpiszesz, także Twoje imię i notatka „o Tobie”) albo zapytanie wysłane po otwarciu panelu lub kliknięciu Test czy Install Update.

Lista

huggingface.co i jego serwery pobierania
KiedyZa pierwszym razem, gdy dany model mowy jest potrzebny: przy pierwszym uruchomieniu, a później gdy wybierzesz w ustawieniach model lub silnik, którego jeszcze nie ma na Twoim Macu. Jeśli dodano token Hugging Face (domyślnie żadnego nie ma), także za każdym razem, gdy etykiety mówców powstają bez pobranego modelu.
Co jest wysyłaneZwykłe zapytanie o pobranie modeli mowy (razem około 4,7 GB); jeśli dodasz token, także token. Nagłówek zapytania może podawać wersje biblioteki pobierającej, Pythona i torcha (zobacz „Dołączone biblioteki”). Od wersji 0.4.1 model, który jest już na dysku, ładuje się bez żadnego zapytania. Jak przy każdym zapytaniu w sieci, serwer widzi Twój adres IP.
Czy są w tym Twoje dane?Nie. To pobieranie na Twojego Maca; nie jest wysyłany żaden dźwięk ani transkrypcja.
Czy można tego uniknąć?Nie przy pierwszej instalacji. Model, który jest już na dysku, nie jest pobierany ponownie.
models.saykeep.app
KiedyRaz: przy pierwszym uruchomieniu albo przy następnym starcie Saykeep po tym, jak pierwszy raz włączysz etykiety mówców (domyślnie są włączone).
Co jest wysyłaneAnonimowe pobranie modelu etykiet mówców (~30 MB), sprawdzanego sumą kontrolną przed instalacją. Jak przy każdym zapytaniu w sieci, serwer widzi Twój adres IP.
Czy są w tym Twoje dane?Nie. Nie jest wysyłane nic o Tobie ani o Twoim Macu.
Czy można tego uniknąć?Tak: wyłącz etykiety mówców w Settings ▸ Transcription ▸ Speaker labels. Po instalacji model nie jest pobierany ponownie.
saykeep.app
KiedyNajwyżej raz dziennie, jeśli zgodzisz się na to przy konfiguracji (domyślnie zaznaczone „Tak”).
Co jest wysyłaneZapytanie o mały podpisany plik z numerem aktualnej wersji. Zawiera nagłówek User-Agent z nazwą aplikacji i jej wersją (Saykeep/<wersja> Sparkle/2.9.6): bez identyfikatora komputera, konta, klucza licencyjnego i plików cookie. Z tego samego serwera działa ta strona. Jak przy każdym zapytaniu w sieci, serwer widzi Twój adres IP.
Czy są w tym Twoje dane?Twoja wersja Saykeep i to, że jakaś kopia sprawdza aktualizacje. Nic więcej o Tobie.
Czy można tego uniknąć?Tak: wybierz „Nie” przy konfiguracji albo wyłącz to w Settings ▸ App & Updates ▸ Updates. Check for Updates… w menu sprawdza wtedy tylko, gdy go wybierzesz.
dl.saykeep.app
KiedyGdy instalujesz aktualizację: klikasz Install Update.
Co jest wysyłanePobranie podpisanej aktualizacji, którą znalazło sprawdzanie. Jak przy każdym zapytaniu w sieci, serwer widzi Twój adres IP.
Czy są w tym Twoje dane?Nie. To pobieranie na Twojego Maca.
Czy można tego uniknąć?Tak: nie instaluj aktualizacji.
Serwer podsumowań, który wskażesz
KiedyTylko gdy go ustawisz (domyślnie żaden nie jest ustawiony): przy każdym otwarciu panelu na pasku menu lub kliknięciu Test oraz przy każdym podsumowaniu.
Co jest wysyłaneZapytanie o listę modeli, z Twoim kluczem API, jeśli jest zapisany; a gdy powstaje podsumowanie, tekst transkrypcji spotkania oraz, jeśli je wpiszesz, Twoje imię i notatka „o Tobie”. Jak przy każdym zapytaniu w sieci, serwer widzi Twój adres IP.
Czy są w tym Twoje dane?Tak: tekst transkrypcji (a jeśli je wpiszesz, także Twoje imię i notatka „o Tobie”), tylko do serwera, który wybierzesz. Jeśli to serwer na Twoim Macu, wszystko trafia tylko tam.
Czy można tego uniknąć?Tak: nie ustawiaj serwera. Nagrywanie, transkrypcja i etykiety mówców działają w pełni.
download.pytorch.orgTylko WindowsSaykeep na Windows nie jest jeszcze dostępny.
KiedyDomyślnie nigdy: tylko gdy klikniesz Download w Settings ▸ Transcription ▸ NVIDIA GPU support for speaker labels.
Co jest wysyłaneDwa przypięte pliki (wersje CUDA bibliotek torch i torchaudio), każdy sprawdzany sumą sha256. Jak przy każdym zapytaniu w sieci, serwer widzi Twój adres IP.
Czy są w tym Twoje dane?Nie. Nie jest wysyłane nic o Tobie ani o Twoim komputerze.
Czy można tego uniknąć?Tak: nie klikaj Download; etykiety mówców działają wtedy na procesorze.

Pięć pierwszych wierszy to cała lista na Macu; ostatni dotyczy tylko wersji na Windows. Jeśli zobaczysz połączenie, którego tu nie ma, to błąd — daj nam znać.

Dołączone biblioteki, które potrafią raportować użycie

Saykeep korzysta z bibliotek open source, a kilka z nich ma własne raportowanie użycia. Oto każda z nich, z podziałem na platformy, i to, co robi z nią Saykeep 0.4.3.

pyannote.audioMac i Windows · etykiety mówców

Jej metryki użycia są domyślnie włączone. Saykeep wyłącza je, zanim biblioteka się załaduje.

huggingface_hubMac i Windows · pobieranie modeli

Jej flaga użycia nie jest wyłączona w 0.4.3: Saykeep jeszcze nie ustawia tego przełącznika. Nic w Saykeep nie wywołuje jej funkcji raportującej, ale zapytania o pobranie modeli, które wysyła do huggingface.co, mogą nieść w nagłówku numery wersji: jej własny, Pythona i torcha.

ONNX RuntimeMac i Windows · raportuje tylko na Windows

Na Macu ładuje ją biblioteka etykiet mówców. Według jej własnej dokumentacji raportowanie użycia istnieje tylko w jej wersjach na Windows i w oficjalnych wydaniach jest domyślnie włączone; Saykeep jeszcze go nie wyłącza. Saykeep na Windows nie jest jeszcze dostępny.

Jak to sprawdzić

  1. Zainstaluj monitor sieci. LuLu (darmowy) albo Little Snitch pokazuje każde połączenie aplikacji, serwer po serwerze.
  2. Używaj Saykeep przez dzień. Dyktuj, nagraj rozmowę i zrób podsumowanie, jeśli masz ustawiony serwer.
  3. Porównaj. Każdy serwer, który monitor pokaże przy Saykeep, powinien być na liście powyżej. Jeśli zobaczysz taki, którego tu nie ma, to błąd — daj nam znać.

Dokument źródłowy, przytoczony słowo w słowo

Aneks poniżej przytaczamy w oryginale, po angielsku i słowo w słowo — to kanoniczny artefakt zaufania, którego nie zmieniamy nawet tłumaczeniem.

Pokaż dokument źródłowy (po angielsku, słowo w słowo)
Uwaga o nazwie kodowej: poniższy dokument to wewnętrzny artefakt zaufania aplikacji, przytoczony słowo w słowo. Używa wewnętrznej nazwy kodowej „Whisperer” — to ta sama aplikacja, którą publicznie nazywamy Saykeep.
# NETWORK.md — every connection Whisperer can make

Whisperer is a **local-first** application. Your audio, recordings and transcripts are processed on your machine. This document is an exhaustive, behavior-verifiable inventory of **every** network connection the app is capable of making. You do not have to take our word for it: run a network monitor (Little Snitch on macOS, a firewall log on Windows) and confirm the app opens only the connections listed here.

*This file is kept in sync with the code. If you find an outbound connection not listed here, that is a bug — please report it.*

## The complete list

| # | Host | When | What is sent | Contains your data? | Avoidable? |
|---|------|------|--------------|---------------------|------------|
| 1 | **The LLM endpoint you configure** (`llm.endpoint_url`; **no default** — until you set one, summaries are off and nothing is sent) | When a meeting summary is generated, and a `/models` request each time you open the menu-bar panel (0.4.3) or press Test in Settings ▸ Summaries & AI — carrying your API key if you stored one, nothing else | The meeting **transcript text** (for summarization) or a models list request (for the probe) — plus your name and “about you” note, if you filled them in | **Yes — transcript text, plus your name and “about you” note if you filled them in.** It goes only to the endpoint *you* set. Out of the box no endpoint is set, so nothing is sent at all; point it at a server on your own Mac and it all goes only there. If you point it at a cloud API, your transcript goes there **by your choice** | Yes — disable summaries / leave the endpoint unset. Meetings still record and transcribe fully locally |
| 2 | **huggingface.co** and its download servers (the Hub's CDN) | First time a model is needed: the Whisper-family speech-to-text models, and — only if you opt in to the Parakeet engine in Settings ▸ Transcription — the Parakeet-TDT-0.6B-v3 weights from the Hub repos `mlx-community/parakeet-tdt-0.6b-v3` (macOS) or `istupakov/parakeet-tdt-0.6b-v3-onnx` plus the `istupakov/silero-vad-onnx` segmenter it needs for long audio (Windows), each pinned to a fixed revision; and, only if you choose the graphics-card Whisper runtime on Windows, the GGML Whisper weights from `ggerganov/whisper.cpp` and the Silero voice-detection model from `ggml-org/whisper-vad`, each pinned to a fixed revision and checked against its sha256. Diarization models come from here **only if you added a Hugging Face token** (optional fallback — the default path is row 5) | A standard model **download** request; for the diarization models, your Hugging Face **token** in an `Authorization` header (only if you provide one) | No — these are downloads *to* your machine. Your token authenticates the download; no audio or transcript is sent | Partly — once models are cached locally they are not re-downloaded. Diarization is optional |
| 3 | **huggingface.co/api** (token check) | Only when you click "Test" on the optional Hugging Face token field in Settings ▸ Diarization | Your HF token in an `Authorization` header, to verify it can access the diarization model | No | Yes — it only runs when you test the token |
| 4 | **saykeep.app** (the update appcast) | At most once a day, if you said yes at first run (Yes is pre-selected). Never while a meeting is recording, a dictation key is held or a transcript is still being made: a check that falls due then is not made (the update engine's delegate refuses it), and no update installs then either. | A GET of a static XML file. The request carries a standard User-Agent naming the app and its version — `Saykeep/<version> Sparkle/2.9.6` — and nothing else: no machine id, no account, no licence key, no cookie, no identifier that could single you out or link two requests together, beyond the IP address any web request shows. The update itself downloads from **dl.saykeep.app** (the signed DMG, row 4a), only when you click **Install Update** | Your Saykeep version, and that a copy of Saykeep is checking. Nothing else about you or your machine | Turn it off in Settings ▸ App & Updates ▸ Updates and no request is made, unless you choose **Check for Updates…** in the menu yourself |
| 4a | **dl.saykeep.app** (the update download) | Only when you install an update: you click **Install Update** on an update that row 4 found | A download request for the signed update file (the DMG the appcast names) | No — this is a download *to* your machine; no audio, transcript or identifier is sent | Yes — never install an update and no request is made |
| 5 | **models.saykeep.app** (the speaker-label model mirror) | Once, only if speaker labels (diarization) are enabled and the model is not yet on disk — shown in the "Getting Saykeep ready" download window | An anonymous GET of a static ~30 MB tarball (`diarization-v1.tar.gz`) — no machine id, account, token, or any identifier (the request carries only a generic HTTP-client name). The file is checksum-verified before it is installed | Nothing about you or your machine is sent | Yes — turn speaker labels off (Settings ▸ Transcription ▸ Speaker labels) and no request is ever made; once installed it is never re-downloaded |
| 6 | **download.pytorch.org** (the PyTorch project's wheel index) — **Windows only** | Only when you click **Download** under Settings ▸ Transcription ▸ NVIDIA GPU support for speaker labels (Windows, on a PC with an NVIDIA card) — never automatically | Two anonymous GETs of pinned files: the CUDA 12.8 build of torch 2.11.0 (2.75 GB) and of torchaudio (1.7 MB) — no machine id, account, token or any identifier (the request carries only a generic HTTP-client name). Each file is checked against its pinned sha256 and tested on your card before it is installed | Nothing about you or your machine is sent | Yes — never click Download and no request is ever made; speaker labels keep running on the CPU. Once installed it is never re-downloaded |

*Row 2 note (2026-09-05): 0.4.0 also made one small metadata request to huggingface.co each time a cached Whisper model loaded (when the app started, when the meeting model loaded, and on every switch between the two) — the loader was handed a Hub repo name instead of the on-disk path. Found and proved on the wire while fact-checking the website, disclosed here the same day, and **fixed in 0.4.1**: a cached model now loads from its local snapshot with no request (wire proof: three requests → none across load → meeting → dictation). It carried no token and no identifier. If you are still on 0.4.0, update, or block huggingface.co — the model loads from disk either way.*

*Row 4 note: say No at first run, or switch it off later, and no request is made — the menu's **Check for Updates…** asks only when you choose it.*

*Row 4 honesty note (corrected 2026-08-30): this row previously claimed the check sends "no version string". That was wrong — the update engine (Sparkle) sends its standard User-Agent, which names the app version, and nothing in the app overrides it. The row now states what actually goes over the wire. Verify it yourself with Little Snitch or `tcpdump` per the "watch it live" section below — that is the point of this document.*

*Row 5 note: this is the token-free replacement for the Hugging Face diarization download (rows 2–3). Those two rows now apply only if you chose to add a token yourself.*

*Row 6 note: the files come straight from the PyTorch project, pinned by exact version and sha256, and install into Saykeep's own app-data folder (never the install folder). Remove them from the same Settings row.*

That is the entire list.

## What Whisperer **never** does

- **Saykeep sends no telemetry, analytics or crash reports, and has none of its own.** On the Mac, some of the open-source libraries it bundles can report usage. The speaker-label library (pyannote) has it on by default, and Saykeep switches it off before loading it. The model-download library (huggingface_hub) has a usage flag Saykeep does not yet switch off: nothing in Saykeep calls its reporting helper, but the model-download requests it makes to huggingface.co can carry version numbers in a header (its own, Python’s and torch’s). saykeep.app/network lists each library and what the version you download does about it.
- **No accounts, no login.** There is no Whisperer server that receives your files.
- **Your recordings, transcripts, and summaries are never sent anywhere** except the transcript text (with your name and “about you” note, if you filled them in) to the LLM endpoint *you* configured (row 1).
- **No license phone-home.** License keys are verified **offline** against a compiled-in public key — no activation server, no network call.
- **The diagnostics export** (Settings ▸ App & Updates ▸ Diagnostics) writes a **local file** you choose whether to share; it makes no network call, and it redacts secrets.

## Local helpers are not network connections

Whisperer runs some local subprocesses — the bundled `whisperer-syscapture` (macOS system audio), `osascript`/`caffeinate` (macOS), and your OS's file-reveal command. These are **on-device** and open no network sockets.

**Neither is the system web view.** The Settings, Recordings and meeting-saved windows are local HTML that the app hands to the web view built into your operating system — WKWebView on macOS, WebView2 on Windows — **as a string**, not fetched from anywhere. Rendering them makes no network request: the pages carry their own CSS and JavaScript, and a test pins that they reference **no remote resource** at all (on Windows that test is load-bearing, because the page is loaded with no origin to resolve a remote reference against). The **Microsoft Edge WebView2 runtime** on Windows is a Windows component maintained by Microsoft's Edge Update — Saykeep neither installs, downloads nor updates it, and if it is absent Saykeep simply opens its older windows instead.

## How to verify

1. **Watch it live:** macOS → Little Snitch; Windows → Resource Monitor / firewall log. With summaries pointed at a local endpoint and models already cached, the only connection you will see during normal use is the **update check** — at most one request a day to the Saykeep appcast, and only if you said yes to it at first run (row 4). You will see your Saykeep version in that request's User-Agent, and nothing else identifying. The one other connection you may see is a **single** download of the speaker-label model the first time you open Saykeep with speaker labels enabled (row 5); it never repeats once the model is on disk. Whatever you have switched on, the only connections you will see are the ones in the table; compare what your monitor shows with the rows above.
2. **Inspect your config:** Settings ▸ App & Updates ▸ Diagnostics ▸ "Export diagnostics…" shows your resolved `llm.endpoint_url` (credentials redacted) so you can confirm where summaries would go.
3. **Hold us to the contract:** Whisperer is closed-source, so instead of "read the code," this file *is* the auditable surface — the only things that ever open a socket are the rows above. If you ever observe a connection that is not listed here, that is a bug; report it and we will treat it as one.