MemPalace na Windows (dual boot z Linuksem)
Ten dokument opisuje, jak w Claude Code na Windows korzystać z tego samego pałacu, który żyje na Linuksie. Nie zakładamy drugiego pałacu ani kopii: kopia żyje własnym życiem i rozjeżdża się z oryginałem. Dokument uzupełnia Konfigurację MemPalace, która opisuje stronę Linuksa.
Warunek wstępny: partycja Linuksa jest widoczna w Windows z włączonym zapisem, zgodnie z Partycją Linuksa (btrfs) z Windows. ChromaDB zapisuje w bazie już przy jej otwarciu, więc dostęp tylko do odczytu nie wystarczy.
Znaczniki użyte w dokumencie
| Znacznik | Co to jest | Przykład postaci |
|---|---|---|
<litera_btrfs> |
Litera partycji Linuksa w Windows | F |
<użytkownik_linux> |
Konto na Linuksie | — |
<pałac_linux> |
Ścieżka pałacu na Linuksie | /home/<użytkownik_linux>/AI/MemPalace |
<pałac_win> |
Ta sama ścieżka widziana z Windows | <litera_btrfs>:\home\<użytkownik_linux>\AI\MemPalace |
<python_win> |
Pełna ścieżka do python.exe na Windows |
%LOCALAPPDATA%\Programs\Python\Python3XX\python.exe |
<wersja_…> |
Wersja pakietu odczytana na Linuksie | patrz punkt 1 |
0. Zasady
- Jeden pałac. Windows wskazuje bezpośrednio na katalog pałacu na partycji Linuksa.
- Nigdy oba systemy naraz. Przy dual boocie to się dzieje samo, ale nie montuj tej partycji w maszynie wirtualnej, kiedy Linux działa.
- Backup przed pierwszym otwarciem z Windows. Na Linuksie, przy zatrzymanym procesie
mempalace, skopiuj cały katalog pałacu (
cp -a). Samchroma.sqlite3nie jest backupem.
1. Wersje muszą być identyczne
To najważniejszy punkt tego dokumentu. Windows i Linux pracują na tych samych plikach bazy, więc muszą używać tych samych wersji bibliotek. Nie instaluj „najnowszych”, tylko dokładnie te, które są na Linuksie:
| Pakiet | Dlaczego wersja musi się zgadzać |
|---|---|
mempalace |
Format metadanych, logika szuflad i closetów, ścieżki pomocnicze |
chromadb |
Nowsza wersja potrafi po cichu zmigrować schemat bazy przy otwarciu. Po takiej migracji starsza wersja na Linuksie może już bazy nie otworzyć. |
onnxruntime, tokenizers |
Liczą embeddingi. Inna wersja może dać inne wektory dla tego samego tekstu. |
huggingface-hub |
Pobiera model embeddingów i układa go w cache. Różne wersje używają różnego układu cache, a nie każdy działa z danym onnxruntime (objaw w punkcie 6). |
Ta sama zasada dotyczy wersji Pythona, przynajmniej major.minor, np. 3.14.
Odczyt wersji na Linuksie:
python3 --version
python3 -m pip list 2>/dev/null | grep -iE '^(mempalace|chromadb|onnxruntime|tokenizers|huggingface.hub) '
Po każdej aktualizacji MemPalace na Linuksie powtórz instalację z punktu 3 na Windows, z nowymi wersjami.
2. Python na Windows
Zainstaluj Pythona w tej samej wersji major.minor co na Linuksie, z python.org, tylko dla
bieżącego konta. Najprościej przez winget:
- Używaj pełnej ścieżki
<python_win>, a nie samegopython. Na Windowspythonmoże wskazywać na alias ze sklepu Microsoft Store, na inną wersję albo na aktywny venv. - Serwer MCP działa niezależnie od venvów projektów: Claude Code uruchamia go poleceniem zapisanym w konfiguracji, czyli właśnie pełną ścieżką.
3. Instalacja pakietów
Tak jak na Linuksie, instalacja „systemowa” dla użytkownika (--user), bez venv,
z wersjami z punktu 1:
& "<python_win>" -m pip install --user `
mempalace==<wersja_mempalace> chromadb==<wersja_chromadb> `
onnxruntime==<wersja_onnxruntime> tokenizers==<wersja_tokenizers> `
huggingface-hub==<wersja_huggingface_hub>
& "<python_win>" -m pip check
Ostrzeżenia o katalogu Scripts spoza PATH można zignorować, bo serwer uruchamiamy przez
python -m.
⚠ Pakiety --user znikają przy python -I, python -s i przy ustawionej zmiennej
PYTHONNOUSERSITE. Nie używaj tych opcji w konfiguracji MCP ani w testach.
4. Konfiguracja ~/.mempalace
Ścieżka %USERPROFILE%\.mempalace\config.json jest w MemPalace zaszyta na sztywno.
Flaga --palace jej nie zmienia, a z tego pliku pochodzi m.in. model embeddingów.
- Skopiuj
config.jsonz Linuksa (/home/<użytkownik_linux>/.mempalace/config.json) do%USERPROFILE%\.mempalace\config.jsoni zmień tylkopalace_pathna<pałac_win>. Kluczembedding_modelmusi zostać taki sam jak na Linuksie. - Skopiuj
known_entities.json. To lista osób i projektów używana przy indeksowaniu i sprawdzaniu faktów. Plik nie synchronizuje się sam.
Czego nie kopiować z ~/.mempalace na Linuksie:
| Plik / katalog | Dlaczego |
|---|---|
locks/, hook_state/, wal/ |
Stan lokalny maszyny |
palace/ |
Domyślny pałac demo, nieużywany przy --palace |
knowledge_graph.sqlite3 |
Przy uruchomieniu z --palace graf wiedzy leży w <pałac>/knowledge_graph.sqlite3, czyli w samym pałacu, wspólny dla obu systemów. Plik w ~/.mempalace jest używany tylko bez --palace. |
5. Rejestracja serwera MCP
Globalnie, dla wszystkich projektów, odpowiednik wpisu w ~/.claude.json z setup.md:
claude mcp add --scope user mempalace -- "<python_win>" -m mempalace.mcp_server --palace "<pałac_win>"
claude mcp get mempalace
Oczekiwany status to ✔ Connected. Sprawdź też, czy żaden projekt nie ma lokalnego
nadpisania (.mcp.json albo projects.*.mcpServers.mempalace w ~/.claude.json), bo
lokalna konfiguracja po cichu wygrywa z globalną.
Narzędzia mcp__mempalace__* są widoczne dopiero w nowej sesji albo po /mcp → Reconnect.
Po każdej zmianie pakietów zrestartuj serwer tak samo, bo działający proces ma stare
biblioteki w pamięci.
6. Model embeddingów
Przy pierwszym wyszukiwaniu serwer pobiera model (dla embeddinggemma ok. 330 MB) do
%USERPROFILE%\.cache\huggingface\hub.
Objaw rozjechanego huggingface-hub: wyszukiwanie zwraca
[ONNXRuntimeError] : 1 : FAIL : External data path validation failed for initializer ...
External data path: "model_quantized.onnx_data" (resolved path: "...\hub\blobs\xx\...")
escapes both model directory: "...\snapshots\...\onnx" and real model directory: "...\hub\blobs\yy"
Przyczyna: wersja huggingface-hub układa cache we wspólnym magazynie hub\blobs\xx\,
z podwójnymi dowiązaniami symbolicznymi. Plik modelu i plik z wagami trafiają wtedy do
różnych katalogów, a onnxruntime ze względów bezpieczeństwa wymaga, żeby wagi leżały
obok modelu.
Naprawa:
- Zainstaluj
huggingface-hubw tej samej wersji co na Linuksie (punkt 1). - Usuń z
%USERPROFILE%\.cache\huggingface\hubkatalogi pobrane przez złą wersję. Sprawdź najpierw daty, czy nie ma tam modeli innych programów. -
Pobierz model ponownie i sprawdź embeddingi bez otwierania pałacu:
import numpy as np from mempalace.embedding import get_embedding_function, current_model_name print("model:", current_model_name()) a, b, c = get_embedding_function()(["jeden wspólny pałac dla wszystkich projektów", "one shared palace for all projects", "przepis na pierogi z kapustą"]) cos = lambda x, y: float(np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))) print("wymiar:", len(a), "| PL~EN:", round(cos(a, b), 3), "| PL~inne:", round(cos(a, c), 3))Model wielojęzyczny daje wysokie podobieństwo zdania polskiego do jego tłumaczenia i wyraźnie niższe do zdania niezwiązanego. 4. Zrestartuj serwer MCP (
/mcp→ Reconnect).
7. Weryfikacja
mempalace_status: zgodnypalace_path,sqlite_integrity.ok = true, wersje wlibrary_versionstakie jak na Linuksie.-
Liczba wpisów.
statusliczy tylko szuflady, a pełną liczbę daje zapytanie do obu kolekcji, w trybie tylko do odczytu:import sqlite3 db = sqlite3.connect(r"file:<pałac_win>/chroma.sqlite3?mode=ro", uri=True) for name, n in db.execute("""select c.name, count(e.id) from collections c join segments s on s.collection = c.id join embeddings e on e.segment_id = s.id group by c.name"""): print(name, n)Wynik musi się zgadzać z tym samym zapytaniem na Linuksie. 3. Zapytanie w języku treści, bez filtra
wing, o coś, co na pewno jest w pałacu. Trafienie na #1 i niezerowycloset_boostprzy wynikach z closetów. Zły model daje dla closetów po cichucosine_sim = 0.0, bez błędu.
8. Praca na co dzień — pułapki
-
ChromaDB zapisuje przy samym otwarciu bazy:
chroma.sqlite3i pliki segmentów HNSW zmieniają się nawet przy samym czytaniu. Na Linuksie z SELinux te pliki dostają typunlabeled_t, więc po sesji z Windows uruchom na Linuksie: -
Nie indeksuj (
mine) z Windows.source_filezapisałby się jako ścieżka windowsowa, amempalace sync --applyna Linuksie uznałby te pliki za zniknięte i skasował ich szuflady. Indeksowanie rób na Linuksie. Zapis pojedynczych wpisów (add_drawer,kg_add,diary_write) z Windows jest w porządku. - Nie weryfikuj pałacu przez md5. Pliki zmieniają się przy każdym odczycie, a to zachowanie ChromaDB, nie uszkodzenie.
9. Pliki kontekstowe asystenta (wzór)
Zasady pracy z pałacem są w ~/.claude/CLAUDE.md na Linuksie (zob. setup.md).
Na Windows nie kopiuj ich, tylko importuj. Claude Code obsługuje w CLAUDE.md składnię
@ścieżka, więc jedno źródło zasad obsługuje oba systemy.
%USERPROFILE%\.claude\CLAUDE.md:
# Środowisko AI — Windows
Zasady wspólne z Linuksem są na partycji Linuksa i są tu importowane, a nie kopiowane:
@<litera_btrfs>:/home/<użytkownik_linux>/.claude/CLAUDE.md
Jeśli powyższy import nie dał treści, partycja Linuksa nie jest zamontowana. Wtedy pałac
też jest niedostępny. Zgłoś to zamiast działać bez zasad.
## Mapowanie ścieżek Linux → Windows
| Linux | Windows |
|---|---|
| `/home/<użytkownik_linux>/...` | `<litera_btrfs>:\home\<użytkownik_linux>\...` |
## MemPalace na Windows
- Serwer MCP: `<python_win> -m mempalace.mcp_server --palace <pałac_win>`.
Pakiety `--user`. Bez `python -I`/`-s` i bez `PYTHONNOUSERSITE`.
- Wersje pakietów takie same jak na Linuksie, także `huggingface-hub`.
- Nie indeksować (`mine`) z Windows. Po sesji z zapisami: `restorecon -R <pałac_linux>` na Linuksie.
- Nigdy nie przemontowywać partycji btrfs w locie (`fsutil volume dismount`): BSOD.
Przy pierwszym uruchomieniu Claude Code może zapytać o zgodę na import pliku spoza
projektu. Załadowane pliki pokazuje polecenie /memory.
Edycja linuksowego CLAUDE.md z Windows też odbiera mu etykietę SELinux. Po takiej zmianie
uruchom restorecon także na nim.