Pliki workspace: skąd agent wie, kim jest i co pamięta
Agent po restarcie pyta Cię o imię, bo ma pusty workspace. To katalog kilku plików Markdown wstrzykiwanych do promptu na starcie każdej sesji, z twardym budżetem znaków i kilkoma regułami, których nikt nie tłumaczy po polsku.
Co agent czyta, zanim przeczyta Twoją wiadomość
Na starcie sesji OpenClaw wstrzykuje do promptu komplet plików Markdown z katalogu workspace. To AGENTS.md, SOUL.md, IDENTITY.md, USER.md, przy pierwszym uruchomieniu BOOTSTRAP.md, a w sesji głównej także MEMORY.md. Agent nie pamięta niczego sam z siebie. Dostaje te pliki na wejściu, dokładnie tak samo jak Twoją wiadomość.
Budżet jest twardy i liczony w znakach, nie w tokenach. Pojedynczy plik przycina agents.defaults.bootstrapMaxChars z domyślną wartością 20000, a sumę wszystkich wstrzykiwanych plików — agents.defaults.bootstrapTotalMaxChars z wartością 60000. Dokumentacja liczy około czterech znaków na token, więc pełny komplet to mniej więcej 15 tysięcy tokenów doliczanych do każdej sesji. Przy trzydziestu sesjach dziennie to już pozycja w rachunku, a nie drobiazg.
Przekroczenie budżetu niczego nie kasuje na dysku. Plik zostaje w całości tam, gdzie leżał, przycięta jest wyłącznie kopia trafiająca do kontekstu. Dokumentacja traktuje to jako sygnał, żeby szczegóły przenieść do memory/*.md albo świadomie podnieść limity. Nie jako błąd, który sam zniknie.
Jedna rzecz zaskakuje ludzi najczęściej. MEMORY.md ładuje się wyłącznie w sesji głównej i prywatnej, więc agent na serwerze Discorda nie widzi jej wcale. Jeśli w firmowej grupie odpowiada „nie mam takiej informacji”, a na priv odpowiada poprawnie, to dlatego, że w kontekście guildu MEMORY.md w ogóle nie jest wstrzykiwana.
- AGENTS.md — instrukcje operacyjne, zasady i priorytety; ładowany w każdej sesji
- SOUL.md — charakter, ton i granice
- IDENTITY.md — imię, emoji, awatar; powstaje w rytuale pierwszego uruchomienia
- USER.md — Twoje preferencje; opcjonalny, z osobnym budżetem 4000 znaków, pomijany, gdy go nie ma
- MEMORY.md — trwałe fakty i decyzje; tylko sesja główna i prywatna
- BOOTSTRAP.md — jednorazowy rytuał pierwszego startu, kasowany po wykonaniu
- memory/YYYY-MM-DD.md — dzienne notatki, pobierane na żądanie przez narzędzia pamięci
openclaw config get agents.defaults.workspace
openclaw config get agents.defaults.bootstrapMaxChars
openclaw config get agents.defaults.bootstrapTotalMaxCharsGdzie leży workspace i dlaczego potrafi zniknąć
Domyślna ścieżka to ~/.openclaw/workspace. Zmienia ją klucz agents.defaults.workspace, a dla pojedynczego agenta — agents.entries.*.workspace. Nadrzędna wobec obu jest zmienna środowiskowa OPENCLAW_WORKSPACE_DIR.
Jest jeszcze OPENCLAW_PROFILE i to ona odpowiada za większość zgłoszeń typu „agent zapomniał wszystkiego”. Ustawiona na wartość inną niż default przesuwa ścieżkę na ~/.openclaw/workspace-<profil>. Pliki nie zniknęły. Agent po prostu czyta inny katalog, a Ty patrzysz na ten stary. Sprawdzenie zajmuje jedną komendę i potrafi oszczędzić godzinę.
Klucz agents.defaults.skipBootstrap ustawiony na true wyłącza automatyczne tworzenie plików startowych. Ma sens wtedy, gdy workspace przyjeżdża z repozytorium i nie chcesz, żeby cokolwiek dopisywało się samo. Bez tego świeży start dołoży brakujące pliki z szablonów, co przy odtwarzaniu instancji bywa mylące — masz plik, którego nie pisałeś.
Poza plikami startowymi w workspace mieszkają katalogi skills/ i canvas/. Skille z workspace mają najwyższy priorytet przy kolizji nazw, więc to właściwe miejsce na wersję zmienioną pod Twoją firmę. Katalog canvas/ obsługuje pliki wyświetlane w interfejsie i przy backupie raczej Cię nie interesuje.
openclaw config get agents.defaults.workspace
ls ~/.openclaw/workspace*IDENTITY.md: pięć pól i żadnego wypracowania
IDENTITY.md odpowiada na pytanie, kim jest ta rzecz, z którą piszesz. Szablon ma pięć pól: Name, Creature, Vibe, Emoji i Avatar. Theme nie jest polem szablonu — to wartość w konfiguracji agenta, którą automatyka zapisuje sama i która przy synchronizacji wygrywa z Creature i Vibe. Awatar wskazujesz ścieżką w workspace, adresem URL albo data URI. Plik leży w katalogu głównym workspace i nie ma powodu, żeby był dłuższy niż kilkanaście linii.
Parser ignoruje podpowiedzi w nawiasach, więc szablon zostawiony bez zmian nie wprowadzi agenta w błąd — po prostu nic z niego nie zapisze. Automatyka synchronizująca tożsamość do konfiguracji agenta zapisuje z powrotem tylko Name, Theme, Emoji i Avatar. Creature i Vibe są wejściem wyłącznie do odczytu, więc nie zdziw się, że po zmianie Vibe w konfiguracji nic nie drgnęło.
Przy ustalaniu efektywnej wartości tożsamości pierwszeństwo ma Theme, potem Creature, na końcu Vibe. Wypełnienie wszystkich trzech różnymi rzeczami daje wynik, którego się nie spodziewasz. W praktyce wystarczy wypełnić jedno pole porządnie i zostawić resztę.
Kuszące jest pisanie tu literatury i akurat to bym odradził. Dokumentacja sama nazywa ten plik początkiem ustalania, kim jesteś, i na tym poprzestaje — reszta charakteru należy do SOUL.md, a zadania do AGENTS.md. Pole Emoji brzmi jak ozdobnik, ale to ono odróżnia dwie instancje agenta w jednym Slacku, gdy obie odpowiadają w tym samym wątku.
# ~/.openclaw/workspace/IDENTITY.md
Name: Ada
Creature: asystentka biura
Emoji: 📌
Avatar: ./canvas/ada.pngSOUL.md: charakter i granice na jednej stronie
SOUL.md trzyma osobowość, ton i granice. Oficjalny szablon ma cztery części: Core Truths, Boundaries, Vibe i Continuity. Całość to celowo krótki manifest zamiast regulaminu — sam szablon mieści się na jednej stronie.
Core Truths opisuje zasady zachowania: pomagać naprawdę zamiast produkować uprzejmości, mieć zdanie, zamiast zgadzać się ze wszystkim, radzić sobie samodzielnie, zasługiwać na zaufanie kompetencją. Boundaries to twarde granice wokół prywatności, czynności wykonywanych na zewnątrz, jakości wysyłanych wiadomości i sposobu zabierania głosu w grupie. Vibe to jedno zdanie o tonie.
Ostatnia część, Continuity, mówi rzecz, którą łatwo przegapić: ten plik jest pamięcią agenta o sobie samym między sesjami i ma być aktualizowany, gdy podejście się zmienia. Jeśli po miesiącu agent zachowuje się inaczej, niż chcesz, poprawka idzie tutaj, a nie do kolejnej wiadomości zaczynającej się od „pamiętaj, żeby”. Wiadomość znika razem z sesją. Plik nie.
Dłuższy SOUL.md nie znaczy lepszy, a rozstrzyga o tym arytmetyka budżetu znaków. Przy 60000 znaków na wszystkie pliki startowe każde tysiąc znaków wylanych na ogólniki to tysiąc znaków mniej dla MEMORY.md. Cztery konkretne granice biją dwadzieścia wartości firmowych przepisanych ze strony o nas.
AGENTS.md i USER.md: regulamin kontra Twoje przyzwyczajenia
AGENTS.md to instrukcja operacyjna i najdłuższy z plików startowych. Szablon układa ją wokół warstwy pamięci: dzienne notatki w memory/YYYY-MM-DD.md, stabilne dyrektywy użytkownika w USER.md, trwałe fakty w MEMORY.md. Jest tam też sekcja Red Lines z pięcioma ograniczeniami — wyciek danych, komendy niszczące, zmiany konfiguracji, bezpieczeństwo plików i postępowanie w niepewności. Osobne części opisują zachowanie w grupie oraz różnicę między czynnością wykonywaną samodzielnie a taką, która wymaga zgody.
Jedno zdanie z tego szablonu tłumaczy całą resztę lekcji: „Mental notes don't survive session restarts; files do” (szablon AGENTS.md).
USER.md trzyma to, co dotyczy Ciebie, a nie agenta. Format dyrektywy jest ścisły: komentarz HTML z datą obserwacji i statusem, a pod nim jedno zdanie w trybie rozkazującym, zaczynające się od Always, Never albo Prefer. Jedna dyrektywa na wpis. Ten plik ma osobny budżet 4000 znaków i jest pomijany, gdy go nie ma.
Gdy preferencja się zmienia, starego wpisu nie kasujesz — oznaczasz go jako superseded i piszesz nową wersję obok. Dokumentacja mówi wprost, żeby nie trzymać dwóch sprzecznych dyrektyw w statusie active. Przez pierwszy tydzień wygląda to na biurokrację. Potem ratuje Cię, gdy agent robi coś dziwnego, a Ty chcesz wiedzieć, od kiedy i dlaczego.
# ~/.openclaw/workspace/USER.md
<!-- observed: 2026-07-14 | status: active -->
- Never send anything to clients without my approval.
<!-- observed: 2026-03-02 | status: superseded -->
- Prefer English for client emails.MEMORY.md kontra memory/YYYY-MM-DD.md: dwie różne pamięci
MEMORY.md to pamięć wyselekcjonowana — trwałe fakty i decyzje, które mają wracać w każdej sesji głównej. Katalog memory/ z plikami nazwanymi datą to warstwa robocza, czyli surowe notatki z dnia. Podział istnieje z jednego powodu: żeby dziennik nie puchł w prompcie.
Dzienne notatki nie są wstrzykiwane przy każdej turze. Dzisiejsza i wczorajsza ładują się automatycznie po zwykłym /new albo /reset, reszta jest pobierana na żądanie narzędziami memory_search i memory_get. Trzecie narzędzie, intent, obsługuje stałe intencje uruchamiane zdarzeniem.
Przenoszeniem materiału z notatek dziennych do MEMORY.md zajmuje się domyślnie włączony przegląd, który dokumentacja nazywa dreamingiem. Promuje wpisy przez bramki oceny, częstości przywoływania i różnorodności zapytań, a podsumowania faz zapisuje do DREAMS.md, żeby dało się je przejrzeć ludzkim okiem. Można to wyłączyć konfiguracją, tylko zwykle nie ma po co.
Reguła podziału jest prosta i działa bez czytania dokumentacji. Jeśli fakt będzie prawdziwy za pół roku, idzie do MEMORY.md. Jeśli to szczegół z konkretnego dnia, idzie do notatki dziennej. Nazwisko osoby decyzyjnej u największego klienta należy do pierwszej kategorii. Ustalenie z wtorkowej rozmowy o terminie wysyłki do drugiej.
ls ~/.openclaw/workspace/memory/ | tail -5
wc -c ~/.openclaw/workspace/MEMORY.mdHEARTBEAT.md już nie mieszka w workspace
Jeśli przechodziłeś ścieżkę Podstaw, w lekcjach pierwszej i piątej heartbeat pojawia się jako pobudka co pół godziny — sam mechanizm działa dalej, zmieniło się tylko miejsce, w którym leżą instrukcje. HEARTBEAT.md nie jest już używany w nowych workspace'ach OpenClaw, bo instrukcje cyklicznych pobudek przeniosły się do notatnika crona należącego do systemowego monitora, trzymanego we wspólnej bazie stanu. Tę zmianę przegapia większość polskich poradników.
Jeśli masz starszą instalację z tym plikiem, migrację robi openclaw doctor --fix. Importuje instrukcje do notatnika monitora, zamienia poprawne wpisy tasks: na zadania crona, archiwizuje oryginał w katalogu stanu i usuwa plik z workspace. Niczego nie trzeba przepisywać ręcznie, a stara wersja zostaje na wypadek, gdyby konwersja coś zgubiła.
Domyślny odstęp między pobudkami to 30 minut, a przy uwierzytelnianiu Anthropic przez OAuth lub token — godzina. Ustawiasz go kluczem agents.*.heartbeat.every. Gdy nie ma nic do zgłoszenia, agent odpowiada HEARTBEAT_OK i milknie.
Sam mechanizm pobudek, jego odstępy i rachunek za nie rozbiera lekcja dwudziesta czwarta. Dla workspace'u kończy się to na jednym zdaniu: w katalogu nie ma już czego szukać.
openclaw doctor --fixJak pisać te pliki, żeby agent nie zgadywał
Zgadywanie bierze się z dwóch rzeczy: braku daty i braku trybu rozkazującego. „Klient woli maile po polsku” to obserwacja, którą agent może zważyć albo zignorować. „Never write to this client in English” to dyrektywa. Szablony OpenClaw są tu konsekwentne — dyrektywy zaczynają się od Always, Never albo Prefer i noszą datę obserwacji.
Druga zasada: jedna informacja, jedno miejsce. Imię agenta należy do IDENTITY.md, ton do SOUL.md, zakaz wysyłki bez akceptacji do AGENTS.md, Twoja strefa czasowa do USER.md. Gdy ta sama rzecz stoi w dwóch plikach, prędzej czy później zaczną się różnić, a Ty nie będziesz wiedzieć, która wersja wygrała.
Trzecia: workspace trzymaj w prywatnym repozytorium git. FAQ projektu zaleca to wprost i przy tej samej okazji ostrzega, żeby nigdy nie commitować katalogu ~/.openclaw — w środku są poświadczenia kanałów, sesje, tokeny i zaszyfrowane payloady sekretów. Historia zmian bywa cenniejsza niż samo archiwum, bo widać w niej, kiedy agent zmienił zdanie na swój temat.
Jeśli nie chcesz pisać tych plików od zera, w ClawLabs wybiera się szablon agenta, pliki startowe generują się same, a potem edytujesz je w panelu. Sam OpenClaw jest darmowy i otwarty, więc to wybór wygody, nie funkcji — pliki są dokładnie te same i tak samo je psujesz, gdy wpiszesz w SOUL.md pięć stron wartości.
cd ~/.openclaw/workspace
git init
git add AGENTS.md SOUL.md IDENTITY.md USER.md MEMORY.md memory/
git commit -m "workspace: stan poczatkowy"Co warto zapamiętać
- Pliki startowe przycina agents.defaults.bootstrapMaxChars z domyślną wartością 20000 na plik oraz agents.defaults.bootstrapTotalMaxChars z wartością 60000 na całość — przy około czterech znakach na token to mniej więcej 15 tysięcy tokenów doliczanych do każdej sesji.
- MEMORY.md ładuje się wyłącznie w sesji głównej i prywatnej. W kontekście guildu nie jest wstrzykiwana w ogóle, więc agent w kanale grupowym po prostu jej nie ma.
- Szablon IDENTITY.md ma pięć pól: Name, Creature, Vibe, Emoji i Avatar; Theme żyje w konfiguracji agenta, a efektywną tożsamość ustala kolejność Theme, potem Creature, potem Vibe. Automatyka zapisuje z powrotem tylko Name, Theme, Emoji i Avatar, a efektywną tożsamość ustala kolejność Theme, potem Creature, potem Vibe.
- SOUL.md to krótki manifest w czterech częściach: Core Truths, Boundaries, Vibe i Continuity. Dłuższy plik zjada budżet, który przyda się MEMORY.md.
- HEARTBEAT.md nie jest już używany w nowych workspace'ach — openclaw doctor --fix przenosi instrukcje do notatnika crona monitora, zamienia wpisy tasks: na zadania crona i usuwa plik z workspace.
- Dyrektywy w USER.md piszesz w trybie rozkazującym, z datą obserwacji i statusem active albo superseded. Starych wpisów się nie kasuje, tylko oznacza jako zastąpione.
Częste pytania
Czy agent zapamięta coś, jeśli po prostu napiszę mu to w czacie?+
Tylko do końca sesji. Trwała pamięć to pliki: MEMORY.md dla faktów, które mają wracać zawsze, USER.md dla Twoich preferencji zapisanych jako dyrektywy z datą, memory/YYYY-MM-DD.md dla notatek z konkretnego dnia. Materiał z notatek dziennych trafia z czasem do MEMORY.md przez domyślnie włączony przegląd, który dokumentacja nazywa dreamingiem, a podsumowania lądują w DREAMS.md. Wiadomość rzucona w rozmowie nie przeżywa restartu.
Dlaczego agent na Discordzie nie pamięta ustaleń z prywatnej rozmowy?+
Bo MEMORY.md ładuje się wyłącznie w sesji głównej i prywatnej. W kontekście guildu ten plik nie jest wstrzykiwany do promptu, więc agent nie ma z czego pamiętać. To ustawienie chroni Cię przed wyciekiem prywatnych ustaleń do kanału z trzydziestoma osobami. Jeśli jakiś fakt ma być dostępny również w grupie, jego miejsce jest w AGENTS.md, a nie w MEMORY.md.
Czy mogę wrzucić workspace do repozytorium git?+
Tak i FAQ projektu wprost to zaleca, pod warunkiem że repozytorium jest prywatne — to tam żyją pamięć agenta oraz pliki AGENTS.md, SOUL.md i USER.md. Czego nie wolno commitować, to katalog ~/.openclaw: są w nim poświadczenia kanałów, sesje, tokeny OAuth i zaszyfrowane payloady sekretów. Do pełnej kopii katalogu stanu służy openclaw backup create z flagą --verify. To dwie osobne lokalizacje i każda ma własną procedurę.
Mam stary workspace z plikiem HEARTBEAT.md — trzeba coś zrobić?+
Uruchom openclaw doctor --fix. Komenda zaimportuje instrukcje do notatnika crona systemowego monitora, przekonwertuje poprawne wpisy tasks: na zadania crona, zarchiwizuje oryginał w katalogu stanu i usunie plik z workspace. Ręczne przepisywanie nie jest potrzebne. Sam mechanizm pobudek działa dalej i konfigurujesz go kluczem agents.*.heartbeat.every, domyślnie co 30 minut.
Źródła danych z tej lekcji
- OpenClaw Docs — Agent workspace (pliki startowe, budżety, ścieżki)
- OpenClaw Docs — Memory overview (MEMORY.md, notatki dzienne, dreaming, DREAMS.md)
- OpenClaw Docs — szablon IDENTITY.md
- OpenClaw Docs — szablon SOUL.md
- OpenClaw Docs — szablon USER.md (format dyrektyw)
- OpenClaw Docs — HEARTBEAT.md: migracja do notatnika crona monitora
- OpenClaw Docs — Heartbeat (domyślny odstęp 30m, cel dostarczenia, koszt przebiegu)
- OpenClaw Docs — Token use and costs (bootstrapMaxChars 20000, bootstrapTotalMaxChars 60000)
- OpenClaw Docs — FAQ (workspace w prywatnym repozytorium git)
- ClawLabs — pliki workspace OpenClaw po polsku
Chcesz to przećwiczyć na żywo?
Uruchom własnego agenta i wypróbuj to, o czym przed chwilą przeczytałeś. Pierwsza subskrypcja pakietu Premium ma 5 dni za darmo, a kurs czytasz dalej niezależnie od tego.
Zobacz plany