| Provider | IMAP | SMTP |
|---|---|---|
| Gmail / Workspace | imap.gmail.com | smtp.gmail.com |
| Fastmail | imap.fastmail.com | smtp.fastmail.com |
| mailbox.org | imap.mailbox.org | smtp.mailbox.org |
| Migadu | imap.migadu.com | smtp.migadu.com |
| Zoho Mail | imap.zoho.com | smtp.zoho.com |
| iCloud+ | imap.mail.me.com | smtp.mail.me.com |
Self-host your assistant
Uruchom asystenta u siebie
The whole agent is one Docker container. No account with us, no dashboard, no telemetry. You bring a dedicated mailbox for it and an OpenRouter key, and everything it learns stays on your machine.
Cały agent to jeden kontener Dockera. Bez konta u nas, bez panelu, bez telemetrii. Ty dajesz dedykowaną skrzynkę dla niego i klucz OpenRouter, a wszystko, czego się nauczy, zostaje na Twojej maszynie.
Self-hosting means you are the operator: you own the updates and the backups. That is the deal. This page is the shortest honest path through it.
Self-hosting znaczy, że jesteś operatorem: aktualizacje i backupy są na Twojej głowie. Taki jest układ. Ta strona to najkrótsza uczciwa droga przez ten proces.
01 What you needCo jest potrzebne
A dedicated mailbox
Dedykowana skrzynka
The agent gets its own address — never your personal inbox. Any mailbox with IMAP and SMTP will do: one from a mail provider, or one on a server you run.
Agent dostaje własny adres — nigdy Twoją prywatną skrzynkę. Nada się dowolna skrzynka z IMAP i SMTP: od dostawcy poczty albo na serwerze, który sam prowadzisz.
OpenRouter API key
The only external service it calls. Create a key, set a monthly spend limit, keep it near-empty. Everything else is local.
Jedyna zewnętrzna usługa, do której się odzywa. Załóż klucz, ustaw miesięczny limit wydatków i trzymaj go niemal pustym. Reszta jest lokalna.
Docker
A VPS, a home server, a NAS, a Raspberry Pi — anything that runs Docker. The agent opens no ports; it only connects out.
VPS, serwer domowy, NAS, Raspberry Pi — cokolwiek, co uruchomi Dockera. Agent nie otwiera żadnych portów; tylko łączy się na zewnątrz.
A dedicated address at a mail provider
Dedykowany adres u dostawcy poczty
Create a separate address for the agent at your mail provider — or a new one. No server to run, no DNS to edit. About 15 minutes, start to first reply.
Załóż osobny adres dla agenta u swojego dostawcy poczty — albo u nowego. Żadnego serwera do prowadzenia, żadnego DNS-u do edycji. Około 15 minut od startu do pierwszej odpowiedzi.
-
Get an OpenRouter key
Załóż klucz OpenRouter
Create an account at openrouter.ai, add a small amount of credit, and create a key with a monthly limit. That limit is your blast radius if anything goes wrong.
Załóż konto na openrouter.ai, doładuj niewielką kwotę i stwórz klucz z miesięcznym limitem. Ten limit to maksymalny zasięg ewentualnej wpadki.
-
Create the agent's own mailbox
Załóż skrzynkę dla agenta
Create a separate, dedicated address for the agent (e.g.
[email protected]). Do not use your personal inbox. Turn on IMAP/SMTP access and create an app password — never your main login password.Załóż osobny, dedykowany adres dla agenta (np.
[email protected]). Nie używaj prywatnej skrzynki. Włącz dostęp IMAP/SMTP i wygeneruj hasło aplikacji — nigdy głównego hasła do logowania.Common providers and their servers:
Popularni dostawcy i ich serwery:
Gmail: app passwords only appear after you turn on 2-Step Verification. Use port 465 (SSL) or 587 (STARTTLS).Gmail: hasła aplikacji pojawiają się dopiero po włączeniu weryfikacji dwuetapowej. Użyj portu 465 (SSL) albo 587 (STARTTLS). -
Install Docker
Zainstaluj Dockera
Follow the official instructions for your system at docs.docker.com. You need the
docker composeplugin (v2).Postępuj zgodnie z oficjalną instrukcją dla swojego systemu na docs.docker.com. Potrzebujesz wtyczki
docker compose(v2). -
Download the compose file and fill it in
Pobierz plik compose i wypełnij go
mkdir -p ~/uff-agent/brain && cd ~/uff-agent curl -O https://raw.githubusercontent.com/worotyns/uff-agent/main/docker-compose.yml nano docker-compose.yml
Everything is set in the
environment:block — there is no separate.envfile. The values that matter:Wszystko ustawiasz w bloku
environment:— nie ma osobnego pliku.env. Wartości, które mają znaczenie:OPENROUTER_KEY: sk-or-v1-... EMAIL_USER: [email protected] # dedicated mailbox EMAIL_PASSWORD: your-app-password EMAIL_IMAP_HOST: imap.yourdomain.com EMAIL_SMTP_HOST: smtp.yourdomain.com EMAIL_OWNER: [email protected] # only this address may write USER_LANGUAGE: pl USER_TIMEZONE: Europe/Warsaw
EMAIL_OWNERis the security boundary. Only this address can talk to the agent. Mail from anyone else is logged and dropped.EMAIL_OWNERto granica bezpieczeństwa. Tylko z tego adresu można rozmawiać z agentem. Poczta od kogokolwiek innego trafia do logów i jest odrzucana. -
Start it
Uruchom
docker compose up -d docker compose logs -f
You should see the config load, the IMAP listener connect, and the scheduler start. It then sits quietly, polling the inbox.
Powinieneś zobaczyć wczytanie konfiguracji, połączenie listenera IMAP i start schedulera. Potem siedzi cicho i odpyta skrzynkę.
-
Test it — allowed and denied
Przetestuj — dozwolony i odrzucony
Send an email from
EMAIL_OWNERto the agent's address, e.g. “Summarize this thread and list the next steps.” A reply should arrive in the same thread.Wyślij maila z adresu
EMAIL_OWNERna adres asystenta, np. „Streszcz ten wątek i wypisz kolejne kroki.” Odpowiedź powinna wrócić w tym samym wątku.Then send one from a different address. Nothing should happen to you — the agent ignores it and the log shows “ignored email … (not in whitelist)”. That is the whole access-control model, and it is worth seeing it work once.
Potem wyślij wiadomość z innego adresu. Nic do Ciebie nie wróci — agent ją zignoruje, a w logu pojawi się „ignored email … (not in whitelist)”. To cały model kontroli dostępu i warto go raz zobaczyć w działaniu.
Where did the test mail go? By defaultEMAIL_DELETE_AFTER_READ=true, so the agent removes each message from its inbox once processed. Set it tofalseif you want them kept.Gdzie zniknął testowy mail? DomyślnieEMAIL_DELETE_AFTER_READ=true, więc agent usuwa każdą wiadomość ze swojej skrzynki po przetworzeniu. Ustawfalse, jeśli chcesz je zachować. -
Keep it alive
Utrzymaj to przy życiu
# update to the latest image docker compose pull && docker compose up -d # back up everything it knows tar czf uff-brain-$(date +%F).tar.gz brain/
brain/is the entire state: memory, threads, indexed documents, its config and its personality. It is the only thing worth backing up.brain/to cały stan: pamięć, wątki, zindeksowane dokumenty, konfiguracja i osobowość. Tylko to warto backupować.
02 GotchasPułapki
What actually breaks
Co sprawia najczęściej kłopoty
-
[!]
Your main password in the compose file. Use an app password, scoped to mail, revocable on its own. You will paste this file into terminals.
Główne hasło w pliku compose. Użyj hasła aplikacji, ograniczonego do poczty, odwoływalnego osobno. Ten plik będziesz wklejać do terminala.
-
[!]
No backups.
brain/is months of accumulated memory. Losing it is losing the assistant's whole history. Back it up like it matters.Brak backupów.
brain/to miesiące zgromadzonej pamięci. Utrata tego to utrata całej historii asystenta. Backupuj tak, jakby naprawdę miało znaczenie.
Or let us run it
Albo pozwól, że my to poprowadzimy
Same assistant, no VPS, no DNS, no 3 a.m. mail-deliverability debugging. We keep it updated and encrypted; you just write to it.
Ten sam asystent, bez VPS-a, bez DNS-u, bez debugowania dostarczalności poczty o trzeciej w nocy. My trzymamy go aktualnym i zaszyfrowanym, Ty tylko piszesz.
Get your address Załóż swój adresQuestions about self-hosting? Write to [email protected].
Pytania o self-hosting? Napisz na [email protected].