Privacy policy
Effective 2026-10-31
1. Who and what this covers
Homelab Karlsson is a private home lab run by Alexandre Karlsson ("the owner") for personal use. Its Google OAuth app, "Homelab Karlsson", connects the owner's own Google account to software running on the owner's own computers at home. It is not offered to the public: the owner is its only user, and nobody else's Google account is connected.
The owner's mailbox and calendar naturally contain information about other people (the senders, recipients and contents of messages, event organizers). That information is processed only as part of the owner's own mail and calendar, as described below.
2. Google data accessed
| API and scope | What is read |
|---|---|
Gmail APIhttps://www.googleapis.com/auth/gmail.readonly |
Recent messages: sender name and address, subject, date, thread, label names, and the plain-text body (HTML and quoted replies removed, cut at 4,000 characters); the mailbox's label names. |
Google Calendar APIhttps://www.googleapis.com/auth/calendar.readonly |
Granted with the same consent, read only once the owner sets up a calendar source. Then: upcoming events: title, start and end, organizer address, status, visibility, location, and the description as plain text (cut at 1,000 characters). |
Access is read-only. The app requests only the read-only scopes above, and the software has no code that sends, modifies, labels, moves or deletes mail or changes the calendar.
3. How OAuth tokens are stored
- The OAuth client secret and the refresh token are kept only in Rasurix, the credential store on one of the owner's home servers: an encrypted vault (XChaCha20-Poly1305, key derived from the owner's passphrase with Argon2id). The vault is sealed after every restart until the owner unlocks it. Its backups are encrypted copies of the same vault, on the same server.
- The refresh token is sent nowhere but Google's token endpoint
(
oauth2.googleapis.com), which is the only token host the store allows. - Other components never see the refresh token or the client secret. They receive a short-lived access token (about one hour), held in memory only; the fetch job that calls Gmail gets one for that job alone.
4. How mail is processed
- Racoursix, the owner's data collector, calls the Gmail API from a throwaway, sandboxed container (rootless Podman, read-only file system, no privileges, no access to the rest of the system) that exists for one fetch.
- The result is cleaned (HTML removed, links checked, suspicious content withheld) and cached in a local SQLite database on the same home server. Cached items are deleted automatically after 90 days.
- The home monitoring service sees counts of each fetch only (how many items, how large), never the text.
- The owner reads the data in a private web console that is reachable only through an SSH connection, not from the internet.
5. AI processing
Local models. The assistant uses open-weight language models (Qwen3, run with llama.cpp) on two of the owner's own computers on the home network. Mail and calendar data reaches these models to: answer the owner's questions; write the daily report (for mail: the sender and subject of new messages, never the body); and, at night, extract facts about people and their relations from new mail into the owner's private memory database. Facts extracted this way stay unconfirmed until the owner reviews them. None of this leaves the home network.
External provider: Anthropic. The owner can use Anthropic's Claude (Claude Code) on the home server. When the owner does, Claude can read the cached mail through a read-only tool, and requests sent to Claude by the owner or on the owner's behalf may contain text taken from mail. What Claude reads or is sent goes to Anthropic and is processed under Anthropic's terms and privacy policy. This happens only when the owner uses it. No other AI provider receives Google data.
Google data is not used to develop, improve or train generalized AI or machine-learning models.
6. Where data goes
- Discord. The assistant talks to the owner through the owner's own Discord channel. Its answers and the spoken daily report (an audio file) can contain information taken from mail or calendar, for example a sender and subject. Discord stores these messages under its own privacy policy.
- Anthropic, only as described in section 5.
- Cloudflare serves these public pages. When the owner connects from outside the home, the owner's SSH connection passes through Cloudflare encrypted; Cloudflare cannot read it. No Google data is sent to Cloudflare in readable form.
Google data is not sold, not used for advertising, not shared with data brokers and not transferred to anyone else, except where the law requires it. No person other than the owner reads it.
7. Limited Use
Homelab Karlsson's use and transfer to any other app of information received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements.
8. Retention
| Data | Kept |
|---|---|
| Cached mail and calendar items | 90 days, then deleted automatically |
| Refresh token, client secret | Until the owner removes them or access is revoked |
| Access tokens | In memory, about one hour |
| Spoken reports (on the home server) | 14 days |
| Facts in the memory database | Until the owner removes them; removed facts are closed and kept as history in the same local database (daily local backups, the last 7 kept) |
| Messages posted to Discord | As kept by Discord, until the owner deletes them |
9. Revoking access and deleting data
- Access can be revoked at any time at myaccount.google.com/permissions (Third-party apps & services → Homelab Karlsson → remove access). Fetching stops at the next attempt.
- The owner can delete the stored credential in the credential store and the mail source in the data collector; the cache of a removed source is deleted, and anything left expires within 90 days.
- Anyone whose information appears in the owner's mail and who wants it removed can write to the contact address below.
10. Security
The home computers have no open ports on the internet. Outside access goes through an outbound Cloudflare tunnel; remote shell access needs Cloudflare Access and SSH keys, and the services that hold mail and credentials are not published through the tunnel. Each service runs as its own system user with only the permissions and network access it needs. Credentials are encrypted at rest and unlocked by the owner's passphrase.
11. Children
This is a personal system, not a service for children or for anyone else.
12. Changes
When this policy changes, the new version is published on this page with a new effective date.
13. Contact
Alexandre Karlsson · alexandre.karlsson@gmail.com