MemoryAI Local
by cenkierpiotr
README.md
# MemoryAI Local (Windows)
W pełni lokalna, offline wersja MemoryAI, trwała pamięć długoterminowa
dla Claude Desktop, dystrybuowana jako jeden instalator `.exe` dla Windows.
Bez Dockera, bez Postgresa, bez terminala. Dane nigdy nie opuszczają dysku,
chyba że użytkownik świadomie włączy opcjonalny tryb chmurowy.
## Po co to jest, w praktyce
Zastanawiałeś się kiedyś, dlaczego Claude zapomina wszystko, o czym
rozmawialiście wczoraj? Domyślnie każda nowa rozmowa zaczyna się od zera, za każdym razem musisz od nowa tłumaczyć swój projekt, przypominać podjęte
decyzje i powtarzać swoje preferencje. MemoryAI Local to rozwiązuje: daje
Claude prawdziwą, długoterminową pamięć oraz możliwość czytania Twoich
własnych dokumentów, całkowicie offline i bez konfigurowania czegokolwiek.
**Planowanie projektu.** Zanim: pracowałeś z Claude nad pomysłem na biznes
cały weekend, a w poniedziałek otwierasz nową rozmowę i asystent nie
pamięta niczego, trzeba znowu opisywać założenia od podstaw. Po: piszesz
po prostu "kontynuujmy pracę nad biznesplanem", a Claude sam wraca do
tematu, dokładnie tam, gdzie skończyliście w weekend.
**Szukanie w swoich dokumentach.** Zanim: chcesz zapytać o konkretny
fragment własnego pliku PDF, musisz go ręcznie otworzyć, znaleźć akapit,
skopiować i wkleić do czatu. Po: wskazujesz folder ze swoimi plikami raz,
przy pierwszym uruchomieniu, i od tej pory pytasz wprost: "sprawdź w moich
dokumentach, jakie były założenia budżetu na ten rok", a Claude sam
znajduje właściwą treść.
**Zero konfiguracji.** Nie musisz znać się na programowaniu. Pobierasz
jeden plik instalacyjny, klikasz kilka razy "Dalej" i gotowe, bez
terminala, bez dodatkowych narzędzi. Wszystko liczy się na Twoim własnym
komputerze, a Twoje pliki i wspomnienia z rozmów nigdy nie opuszczają dysku.
## Dla kogo to jest
Dla użytkownika Claude Desktop, który chce, żeby Claude pamiętał rozmowy
między sesjami i umiał przeszukiwać jego własne dokumenty, ale nie chce (i
nie musi umieć) instalować Node.js, Pythona, Dockera ani edytować plików
konfiguracyjnych ręcznie. Cała instalacja to pobranie jednego pliku,
kilka kliknięć "Dalej" i restart Claude Desktop.
## Co robi
- **Trwała pamięć rozmów**: zapis, wyszukiwanie hybrydowe (wektorowe +
pełnotekstowe) i automatyczna dystylacja sesji do zwięzłych wspomnień.
- **Lokalny RAG na własnych dokumentach**: wskazujesz jeden folder
(`.doc`, `.docx`, `.pdf`, `.txt`), a MemoryAI Local go indeksuje i
pilnuje na bieżąco (nowe/zmienione/usunięte pliki), żeby Claude mógł
przeszukiwać jego treść w rozmowie.
- **Panel ustawień w zasobniku systemowym**: bo Claude Desktop sam w sobie
nie ma miejsca na onboarding ani konfigurację MCP.
- **Opcjonalny tryb chmurowy**: jeśli wolisz oddać dystylację/embedding
zewnętrznemu dostawcy (Anthropic/OpenAI/Gemini) zamiast liczyć lokalnie,
możesz to włączyć w ustawieniach; klucze API trzymane są w Windows
Credential Manager, nigdy plaintext w plikach configu.
- **Drugie, niezależne wyszukiwanie w sieci (opcjonalne)**: narzędzie MCP
`web_search_gemini` odpytuje Google Search przez oficjalne, darmowe API
Gemini (Google AI Studio) - przydatne obok wbudowanego wyszukiwania Claude
Desktop (opartego o Brave), gdy chcesz zestawić wynik z dwóch niezależnych
wyszukiwarek. Włącza się automatycznie, gdy w ustawieniach zapisano klucz
API dla dostawcy "Google Gemini" (ten sam klucz co dla trybu chmurowego
wyżej) - bez klucza narzędzie zwraca czytelną instrukcję zamiast błędu.
- **Web chat (opcjonalne, eksperymentalne)**: zestaw narzędzi MCP, które
odpytują realne, zalogowane sesje webowe zamiast płatnych API - kosztem
znacznie wolniejszej odpowiedzi (dziesiątki sekund do kilku minut) i
jednorazowego pobrania przeglądarki Chromium (ok. 150-200 MB, osobno od
instalatora - patrz ekran "Web chat" w ustawieniach). Każdy dostawca wymaga
osobnego, ręcznego zalogowania się w widocznym oknie przeglądarki przy
pierwszym uruchomieniu:
- `ask_gemini_web` - pyta czat webowy Gemini (gemini.google.com/app),
inny model/jakość niż darmowe API w `web_search_gemini` wyżej.
- `generate_gemini_web_image` - prosi Gemini web o wygenerowanie obrazu z
opisu tekstowego, zapisywanego jako lokalny plik.
- `ask_perplexity_web` - pyta czat webowy Perplexity (perplexity.ai),
odpowiedzi zwykle z cytowanymi źródłami z żywego wyszukiwania, dobre
jako niezależne zestawienie z Gemini.
- `notebooklm_generate` - wgrywa źródło (URL lub tekst) do nowego
notatnika w NotebookLM i generuje z niego audio overview (podcast MP3),
skrót do nauki (study guide) lub streszczenie; najwolniejsze z tej
grupy (realnie minuty, nie sekundy).
**Automatyzacja czatu webowego może naruszać regulamin danego serwisu -
to najbardziej opcjonalny tryb ze wszystkich, świadomie oznaczony jako
eksperymentalny i używany na własne ryzyko, na własnym koncie.**
Domyślnie wszystko (modele, baza, indeks dokumentów) działa lokalnie, bez
połączenia z internetem po jednorazowym pobraniu wag modeli - poza tymi
jawnie opt-in wyjątkami opisanymi wyżej.
## Instalacja
Pobierz najnowszy instalator (`MemoryAI.Local_<wersja>_x64-setup.exe`) z zakładki
[Releases](https://github.com/cenkierpiotr/memoryai-local-windows2/releases)
i uruchom instalator. Nie wymaga uprawnień administratora.
Instalator jest celowo mały (kilkadziesiąt MB). Modele (embedding +
dystylacja) pobiera przy pierwszym uruchomieniu kreator pierwszego
uruchomienia, z obsługą wznawiania przerwanego pobierania i weryfikacją
SHA-256 każdego pliku. Przeglądarka Chromium potrzebna do opcjonalnego
"Web chat (Gemini)" (patrz wyżej) pobiera się dopiero po świadomym włączeniu
tej funkcji w ustawieniach - nie jest częścią instalatora ani kreatora
pierwszego uruchomienia.
**Wymagania:** Windows 10 (22H2+) lub Windows 11, x64. Nie wymaga
zainstalowanego Node.js, Pythona ani VC++ Redistributable, instalator
zawiera własny prywatny runtime Node oraz (jako zabezpieczenie) VC++
Redistributable x64.
**Aktualizacje:** brak automatycznego mechanizmu aktualizacji (świadomie,
nie planowane), nowa wersja to ręczne pobranie i uruchomienie kolejnego
instalatora z zakładki Releases, gdy się pojawi. Instalacja nowszej wersji
nie usuwa istniejącej bazy pamięci ani pobranych modeli (żyją osobno w
`%APPDATA%`).
### Ostrzeżenie Windows SmartScreen
Przy pierwszym uruchomieniu instalatora Windows może pokazać niebieski ekran
"Windows chronił Twój komputer" / "Nierozpoznana aplikacja". To **nie jest
wykrycie złośliwego oprogramowania**: to domyślne zachowanie SmartScreen dla
każdego nowego pliku `.exe`, który nie ma jeszcze podpisu cyfrowego (Authenticode)
opłaconego u zaufanego wystawcy certyfikatów. Instalator nie jest obecnie
podpisany (świadoma decyzja poza zakresem v1, patrz `docs/project-plan.md`),
więc ostrzeżenie pojawi się niezależnie od tego, jak bezpieczny jest kod w
środku.
Aby kontynuować instalację:
1. Na ekranie ostrzeżenia kliknij **"Więcej informacji"** ("More info").
2. Pojawi się nazwa pliku i przycisk **"Uruchom mimo to"** ("Run anyway"), kliknij go.
Jeśli chcesz zweryfikować integralność pobranego pliku przed uruchomieniem,
porównaj sumę SHA-256 z plikiem `.sha256.txt` dołączonym do tego samego
wydania w sekcji Releases (checksuma jest liczona i publikowana
automatycznie przy każdym tagowanym wydaniu przez
`.github/workflows/desktop-windows.yml`, budowana na realnym `windows-latest`
runnerze, nie cross-compile).
### Ostrzeżenia antywirusowe
Niezależnie od SmartScreen, program antywirusowy (Windows Defender lub inny
zainstalowany) może dodatkowo oznaczyć instalator lub proces w tle jako
podejrzany, z tego samego powodu (brak podpisu cyfrowego), a czasem też
dlatego, że aplikacja uruchamia lokalny model AI (wzorzec zachowania podobny
do niektórych narzędzi typu "cheat"/"stealer" dla silników heurystycznych
AV, mimo że kod nie robi nic złośliwego). Jeśli AV zablokuje lub usunie
plik, to fałszywy alarm (false positive), nie realne zagrożenie. Sprawdź
sumę SHA-256 z Releases, żeby potwierdzić, że plik nie został podmieniony,
i dodaj wyjątek w swoim AV dla folderu instalacji. Protokół testów pod
popularne silniki AV (Defender + 2 inne) jest udokumentowany w
[`docs/av-tests.md`](docs/av-tests.md), obecnie jako procedura do wykonania
przy pierwszym dostępie do licencji testowych (patrz "Status projektu"
niżej), nie jako już potwierdzony wynik.
### Pierwsze uruchomienie
Po instalacji kreator (Tauri, React) przeprowadza przez:
1. wybór tieru modelu dystylacji (`3b` dla maszyn z <16GB RAM, `7b` dla
≥16GB, przełączalne później w ustawieniach),
2. pobranie modeli (embedding ModernBERT ~68M param. + dystylacja Qwen2.5,
GGUF, kwantyzowane),
3. opcjonalny wybór folderu do indeksowania RAG,
4. automatyczne dopisanie wpisu serwera MCP do `claude_desktop_config.json`
metodą merge (istniejące wpisy innych serwerów MCP zostają nietknięte),
5. restart Claude Desktop.
## Architektura
Trzy niezależne procesy komunikujące się wyłącznie przez współdzieloną bazę
SQLite (WAL), żaden z nich nie jest właścicielem długo żyjącego stanu, który
inne muszą znać w czasie rzeczywistym poza pollingiem tabeli `settings`:
```
MemoryAI Tray (Tauri/Rust, autostart) MemoryAI Ingest Worker (Node)
- ikona w zasobniku, panel ustawień - chokidar na folderze RAG
- kreator pierwszego uruchomienia - kolejka, chunking, embedding
- zarządza cyklem życia workera - kończy się po bezczynności
- Windows Credential Manager, autostart (domyślnie 5 min)
| |
'-------------------- SQLite (WAL) --------------------'
|
MemoryAI MCP Server (Node)
- spawnowany on-demand przez Claude Desktop (stdio)
- narzędzia: memory_save, memory_search,
memory_get_context, entity_save, entity_get,
session_end, rag_search, web_search_gemini,
ask_gemini_web, ask_perplexity_web,
notebooklm_generate, generate_gemini_web_image
- zero RAM gdy Claude Desktop nie jest uruchomiony
```
Silnik inferencji to `node-llama-cpp` (GGUF, CPU-only) dla obu modeli:
embedding `PKOBP/embed-modernbert-68m` (512-dim, ~300MB RAM) oraz dystylacja
`qwen2.5-instruct` w tierach `3b`/`7b`. Storage to SQLite + `sqlite-vec`
(wektory) + FTS5 (pełny tekst), łączone przez RRF (Reciprocal Rank Fusion), lokalny odpowiednik produkcyjnego stosu Postgres+pgvector+Redis.
Pełne uzasadnienie decyzji architektonicznych (framework UI, silnik
inferencji, format storage, model procesów) znajdziesz w
[`docs/project-plan.md`](docs/project-plan.md).
## Struktura repozytorium
Monorepo pnpm workspaces (Node 24+) z jednym podprojektem Rust wewnątrz
aplikacji desktop.
```
memoryai-local-windows/
├─ packages/
│ ├─ core/ # logika bez I/O procesowego: db, search (vec+FTS5+RRF),
│ │ # llm (wrapper node-llama-cpp), dystylacja, chunking,
│ │ # adaptery chmurowe, config, logging - reużywane
│ │ # identycznie w mcp-server i ingest-worker
│ ├─ mcp-server/ # entrypoint stdio, definicje narzędzi MCP
│ ├─ ingest-worker/ # chokidar + kolejka + parsery (pdf-parse, mammoth) + embedding
│ ├─ model-manager/ # downloader modeli: HTTP Range, SHA-256, retry, mirror
│ └─ claude-config/ # merge wpisu MCP do claude_desktop_config.json
├─ apps/
│ └─ desktop/ # Tauri v2: tray, kreator, panel ustawień (React + TS)
│ └─ src-tauri/ # Rust: tray, single-instance, autostart, Credential Manager
├─ docs/ # plan architektury, testy chaosu/AV/wydajności, runbook
├─ tools/ # konwersja modeli HF→GGUF, generowanie manifestu, publikacja
└─ tests/e2e/ # scenariusze na czystej maszynie/VM
```
`packages/core` celowo nie importuje niczego procesowo-specyficznego (bez
`process.stdin`, bez chokidar, bez Tauri), dzięki temu ten sam kod
wyszukiwania i dystylacji działa identycznie w MCP serverze i w workerze, a
testy jednostkowe nie wymagają uruchamiania procesów.
## Rozwój / budowanie ze źródeł
```bash
pnpm install --frozen-lockfile
pnpm run build # build wszystkich pakietów workspace
pnpm run test # testy jednostkowe (vitest), wszystkie workspace'y
pnpm run typecheck # tsc --noEmit dla wszystkich workspace'ów
pnpm run lint # eslint .
```
Pełny instalator `.exe` (NSIS, przez Tauri) wymaga realnego Windows z
toolchainem Rust (MSVC target), budowany automatycznie w CI na
`windows-latest` (zobacz niżej), nie jest częścią standardowego `pnpm run build`
na innych platformach.
**Pułapka przy lokalnym/ręcznym buildzie Tauri po zmianie w `packages/mcp-server`:**
bundlowanie serwera MCP przez esbuild (`node scripts/bundle.mjs` w
`packages/mcp-server`, wynik: `dist-bundle/mcp-server.js`) to **osobny, ręczny
krok**, którego `pnpm run build` w `apps/desktop` NIE wywołuje (tam jest tylko
`tsc --noEmit && vite build` frontendu). `tauri.conf.json` traktuje
`apps/desktop/src-tauri/resources/mcp-server.js` jako statyczny plik zasobów,
nie jako wynik builda — trzeba go ręcznie nadpisać świeżym bundlem przed każdym
buildem Tauri, który dotyka kodu `packages/mcp-server`:
```bash
cd packages/mcp-server && node scripts/bundle.mjs
cp dist-bundle/mcp-server.js ../../apps/desktop/src-tauri/resources/mcp-server.js
```
Pominięcie tego kroku daje build, który wygląda na aktualny (kompiluje się,
testy przechodzą), ale niesie stary bundle serwera MCP w środku instalatora —
zdarzyło się to realnie 04.09.2026 (zob. `docs/runbook.md`).
### CI
- [`ci.yml`](.github/workflows/ci.yml), na każdy push: build, test, lint,
typecheck równolegle na `ubuntu-latest` i `windows-latest`. To jedyne
miejsce, gdzie kod jest realnie sprawdzany na prawdziwym Windows przy
bieżącej pracy. Testy przechodzące lokalnie na Linuksie nie gwarantują
przejścia na Windows (różnice w semantyce systemu plików, blokadach
uchwytów itp.), dlatego ten job jest obowiązkowy przy każdej zmianie.
- [`desktop-windows.yml`](.github/workflows/desktop-windows.yml), pełny
build instalatora NSIS na `windows-latest`, uruchamiany **wyłącznie** na
tagach `v*` oraz ręcznie (`workflow_dispatch`). Świadomie nie na każdym
pushu. Pełny build Tauri kosztuje realne minuty Actions. Przy tagu
publikuje `.exe` + `.sha256.txt` bezpośrednio do GitHub Release.
## Prywatność i dane
- Baza pamięci i indeks RAG żyją w `%APPDATA%` użytkownika, w SQLite.
- Domyślnie żadne dane nie opuszczają maszyny, modele liczą lokalnie (CPU).
- Tryb chmurowy jest opt-in, wyłączony domyślnie; klucze API są trzymane w
Windows Credential Manager, nigdy w plikach konfiguracyjnych plaintext.
- **Deinstalacja**: przycisk "Odinstaluj" w panelu ustawień (zakładka
Advanced) lub standardowa deinstalacja z Windows uruchamiają ten sam
deinstalator NSIS. Domyślny deinstalator usuwa tylko katalog instalacji
(pliki programu), NIE dane użytkownika. Baza wspomnień i pobrane modele
leżą osobno w `%APPDATA%`. Zaraz po zakończeniu deinstalacji pojawia się
osobne okno Tak/Nie: "Czy chcesz również usunąć dane aplikacji (baza
wspomnień i pobrane modele AI)? Tej operacji NIE MOŻNA cofnąć", domyślnie zaznaczone "Nie", żeby przypadkowe kliknięcie nie skasowało
danych (`apps/desktop/src-tauri/nsis-hooks.nsh`).
## Najczęstsze problemy
Skrót: pełna lista objaw → przyczyna → naprawa jest w
[`docs/runbook.md`](docs/runbook.md).
- **Claude Desktop po restarcie nie widzi MemoryAI Local**: sprawdź, czy
wpis pojawił się w `claude_desktop_config.json` (kreator dopisuje go
automatycznie po pierwszym uruchomieniu); jeśli plik był otwarty w innym
edytorze w trakcie instalacji, zapis mógł się nie powieść. Uruchom
ponownie kreator z panelu ustawień w zasobniku.
- **Ikona w zasobniku systemowym nie pojawia się po restarcie komputera**: sprawdź w Menedżerze zadań (zakładka Uruchamianie), czy autostart
MemoryAI Local jest włączony; można go też włączyć ręcznie w panelu
ustawień.
- **Pobieranie modeli w kreatorze się zatrzymuje/nie startuje**: najczęściej
to tymczasowy problem sieci lub blokada przez firewall/AV; pobieranie
wznawia się automatycznie od miejsca przerwania po ponownym uruchomieniu
kreatora, nie zaczyna od zera.
- **Wyszukiwanie w RAG nie zwraca nic z nowo dodanego pliku**: Ingest
Worker indeksuje pliki asynchronicznie w tle; dla dużych plików (duże
PDF-y) to może potrwać dłużej niż jedno odświeżenie. Sprawdź status
indeksowania w panelu ustawień, zanim uznasz to za błąd.
## Status projektu
Fazy 0-6 planu (`docs/project-plan.md`) ukończone w zakresie osiągalnym bez
fizycznego dostępu do zewnętrznego sprzętu Windows/licencji AV/testerów
zewnętrznych, CI zielone na Linux i Windows. Świadomie zamrożone jako
udokumentowane wyjątki v1 (procedury gotowe do wykonania przy pierwszym
dostępie do takich zasobów):
- pełna matryca sprzętowa (kombinacje Win10/11, RAM, SSD/HDD, ścieżki z
polskimi znakami, OneDrive on-demand), [`docs/test-matrix.md`](docs/test-matrix.md),
- testy antywirusowe (Defender + 2 popularne AV), [`docs/av-tests.md`](docs/av-tests.md),
- beta z realnymi nietechnicznymi testerami.
Poza zakresem v1 świadomie: wiele folderów RAG jednocześnie, reranker,
podpis cyfrowy instalatora, macOS/Linux, synchronizacja między urządzeniami,
GPU-first inference, UI wielojęzyczne (tylko PL + EN), automatyczne
aktualizacje.
Diagnostyka i znane problemy: [`docs/runbook.md`](docs/runbook.md), lista
objaw → przyczyna → naprawa, gotowa do wklejenia w odpowiedzi na zgłoszenie.
## O tym repozytorium
To publiczny snapshot projektu MemoryAI Local, aktualizowany okresowo (nie
przy każdym commicie) z prywatnego repozytorium rozwojowego. Historia gita
tutaj jest świadomie uproszczona do pojedynczych, czystych commitów per
wydanie, zamiast pełnej historii commitów roboczych.
## Licencja
Zobacz plik [`LICENSE`](LICENSE).
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues