Jak zainstalować Hister: własna wyszukiwarka lokalna
Dowiedz się jak uruchomić Hister na VPS za pomocą Docker lub binariów. Skonfiguruj TLS, autoryzację oraz endpoint MCP, aby indeksować własne pliki i historię przeglądania.
Czym jest Hister, a czym nie jest
Hister to osobista wyszukiwarka z możliwością samodzielnego hostowania. Indeksuje ona pełną treść odwiedzonych stron oraz przechowywanych plików, umożliwiając przeszukiwanie tej kolekcji za pomocą interfejsu WWW, klienta terminalowego, API HTTP lub asystenta opartego na AI (sztucznej inteligencji). Hister odpowiada na jedno pytanie: gdzie to czytałem.
Większość użytkowników poznaje tę koncepcję poprzez SearXNG, jednak oba narzędzia nie są tym samym. SearXNG to proxy typu metasearch. Zapytanie trafia do niego, ono w imieniu użytkownika odpytuje inne wyszukiwarki i zwraca wyniki z usuniętymi elementami śledzącymi. Indeks należy do tych wyszukiwarek. Hister buduje własny indeks z treści dostarczonych przez użytkownika: stron przechwyconych przez rozszerzenie przeglądarki, zaimportowanej historii przeglądania, zaindeksowanych adresów URL oraz plików w wskazanych katalogach. Własna instancja SearXNG zapewnia prywatny dostęp do publicznej sieci. Hister umożliwia przeszukiwanie własnych zasobów. Zadania te różnią się, dlatego uruchomienie obu narzędzi na jednym serwerze jest typową praktyką.
Hister to wolne oprogramowanie na licencji AGPLv3 (GNU Affero General Public License, wersja 3) lub nowszej. Nie posiada telemetrii i nie wymaga usług chmurowych. Niniejszy przewodnik odnosi się do wersji v0.17.0, która była aktualnym wydaniem w dniu 2026-07-28. Przed skopiowaniem jakichkolwiek poleceń należy sprawdzić stronę wydań w celu ustalenia aktualnego tagu, a następnie użyć znalezionej wersji.
Dlaczego warto hostować Hister samodzielnie na VPS
Indeks jest użyteczny tylko wtedy, gdy jest kompletny, a staje się kompletny tylko wtedy, gdy serwer działał w trakcie czytania. Laptop przechodzi w stan uśpienia przez połowę dnia. Strony otwierane na telefonie w tym czasie nigdy do niego nie dotrą, a import zaplanowany na noc nigdy się nie rozpocznie. Serwer VPS (virtual private server) działa nieprzerwanie, dzięki czemu każde posiadane urządzenie przesyła dane do tego samego indeksu, a crawler pracuje, gdy użytkownik śpi.
Drugim powodem jest separacja. Ustawienie user_handling: true w sekcji app nadaje każdemu kontu własne dane uwierzytelniające oraz własną kolekcję dokumentów w ramach jednej instancji. Jeden serwer może zatem obsługiwać gospodarstwo domowe lub mały zespół bez ryzyka, że ktokolwiek będzie przeszukiwał zasoby czytane przez innych.
Trzecim powodem jest infrastruktura. Serwer VPS posiada już publiczną nazwę hosta oraz certyfikat, co jest niezbędne, aby rozszerzenie przeglądarki mogło połączyć się z serwerem z sieci, nad którą użytkownik nie ma kontroli.
Instalacja ścieżką pierwszą: plik binarny wydania
Hister dostarcza jeden plik binarny na platformę. Pobierz go wraz z plikiem sum kontrolnych i zweryfikuj przed instalacją.
cd /tmp
curl -LO https://github.com/asciimoo/hister/releases/download/v0.17.0/hister_0.17.0_linux_amd64
curl -LO https://github.com/asciimoo/hister/releases/download/v0.17.0/hister_0.17.0_checksums.txt
sha256sum --ignore-missing -c hister_0.17.0_checksums.txtPoprawny wynik to pojedyncza linia hister_0.17.0_linux_amd64: OK. Linia FAILED oznacza, że pobrany plik jest uszkodzony lub zmodyfikowany, dlatego należy pobrać go ponownie zamiast przeprowadzać instalację.
Zainstaluj plik binarny, a następnie utwórz konto systemowe oraz katalogi, z których będzie korzystać.
sudo install -m 755 /tmp/hister_0.17.0_linux_amd64 /usr/local/bin/hister
sudo useradd --system --home-dir /var/lib/hister --shell /usr/sbin/nologin hister
sudo install -d -o hister -g hister -m 750 /var/lib/hister
sudo install -d -m 755 /etc/hister
sudo hister create-config /etc/hister/config.ymlcreate-config tworzy domyślny plik konfiguracyjny i potwierdza, że plik binarny uruchamia się na danej maszynie. Pobranie wersji dla niewłaściwej architektury zakończy się w tym miejscu błędem cannot execute binary file: Exec format error.
Edytuj kluczowe ustawienia. Pozostała część wygenerowanego pliku może pozostać bez zmian.
app:
directory: /var/lib/hister
access_token: 'paste-a-long-random-string-here'
server:
address: 127.0.0.1:4433
base_url: https://hister.example.comWygeneruj token za pomocą openssl rand -hex 32. Plik zawiera teraz poświadczenia, dlatego należy ograniczyć do niego dostęp przed uruchomieniem usługi.
sudo chown root:hister /etc/hister/config.yml
sudo chmod 640 /etc/hister/config.ymlUruchamianie w ramach systemd
Utwórz plik /etc/systemd/system/hister.service:
[Unit]
Description=Hister personal search engine
After=network-online.target
Wants=network-online.target
[Service]
User=hister
Group=hister
Environment=HISTER_CONFIG=/etc/hister/config.yml
ExecStart=/usr/local/bin/hister listen
Restart=on-failure
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/hister
[Install]
WantedBy=multi-user.targetHISTER_CONFIG to udokumentowana zmienna środowiskowa dla ścieżki konfiguracji, dzięki czemu jednostka nie zależy od katalogu domowego konta hister. ProtectSystem=strict ustawia cały system plików w tryb tylko do odczytu dla tej usługi, dlatego ReadWritePaths musi wskazywać katalog danych. ProtectHome=yes ukrywa /home przed usługą, więc katalog monitorowany wewnątrz /home będzie dla indeksatora wyglądał na pusty. Usuń tę linię, jeśli zachodzi potrzeba indeksowania plików w tej lokalizacji.
sudo systemctl daemon-reload
sudo systemctl enable --now hister
systemctl status hister --no-pager
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:4433/Dowolny kod stanu HTTP zwrócony przez ostatnie polecenie oznacza, że proces nasłuchuje. curl: (7) Failed to connect oznacza brak nasłuchiwania, a journalctl -u hister -n 50 --no-pager wskaże przyczynę.
Druga ścieżka instalacji: Docker Compose
Obraz jest publikowany w rejestrze kontenerów GitHub, z jednym tagiem na każde wydanie.
services:
hister:
image: ghcr.io/asciimoo/hister:v0.17.0
container_name: hister
user: '1000:1000'
restart: unless-stopped
environment:
- HISTER__SERVER__ADDRESS=0.0.0.0:4433
- HISTER__SERVER__BASE_URL=https://hister.example.com
- HISTER__APP__ACCESS_TOKEN=${HISTER_ACCESS_TOKEN}
volumes:
- ./data:/hister/data
ports:
- 127.0.0.1:4433:4433Każdy klucz konfiguracyjny posiada odpowiednik w zmiennych środowiskowych w formacie HISTER__<SECTION>__<KEY>, gdzie separatorem są dwa znaki podkreślenia, dzięki czemu wdrożenie kontenerowe nie wymaga montowania pliku konfiguracyjnego. Przechowuj HISTER_ACCESS_TOKEN w pliku .env obok pliku compose. Jeśli wolisz edytować plik, polecenie docker run --rm ghcr.io/asciimoo/hister:v0.17.0 create-config > config.yml wyświetli wartości domyślne.
Powyższe dwie linie łatwo błędnie zinterpretować, a obie są istotne dla zrozumienia działania.
Adres wewnątrz kontenera musi być ustawiony na 0.0.0.0:4433. Kontener posiada własną przestrzeń nazw sieci, więc proces powiązany z 127.0.0.1 jest osiągalny tylko z wnętrza tego kontenera, a opublikowany port nie ma dokąd przekierować ruchu.
Opublikowany port zapisuje się jako 127.0.0.1:4433:4433, a nie 4433:4433. Docker publikuje porty poprzez wstawianie własnych reguł netfilter, które są oceniane przed regułami ufw. Dlatego zwykłe 4433:4433 pozostaje osiągalne z Internetu nawet na serwerze, gdzie ufw status wskazuje, że port jest zamknięty. Powiązanie strony hosta z 127.0.0.1 sprawia, że jedyną drogą dostępu pozostaje reverse proxy. Ta sama pułapka dotyczy każdego kontenera na serwerze, a artykuł Docker Compose na VPS omawia pozostałe aspekty tego zagadnienia.
Domyślny obraz działa z UID 1000 oraz GID 1000, więc ./data musi być zapisywalny dla tego konta, w przeciwnym razie kontener zatrzyma się przy starcie z błędem uprawnień. Polecenie sudo chown -R 1000:1000 ./data rozwiązuje ten problem. Jeśli te numery są nieznane, najpierw przeczytaj z jakim UID i GID kontener zapisuje pliki.
Dlaczego osobisty indeks wyszukiwania jest najgorszym elementem do udostępnienia
Hister domyślnie nasłuchuje na 127.0.0.1:4433 i jest to wybór celowy. Należy rozważyć, co zawiera indeks po miesiącu użytkowania: wewnętrzne strony wiki, faktury, zgłoszenia do pomocy technicznej otwarte po zalogowaniu, strony resetowania haseł oraz pełną treść wszystkiego, co zostało przeczytane. Dokumentacja projektu stwierdza to wprost: "Hister przesyła całą historię przeglądania, wraz z zawartością stron, do i z serwera".
Wyciekła baza danych haseł nadal wymaga złamania. Wyciekły indeks osobisty jest tekstem jawnym i już przeszukiwalnym, dlatego wymaga większej ochrony niż niewielka aplikacja self-hosted, na którą wygląda.
Wynikają z tego dwa fakty. Hister nie wymaga uwierzytelniania w konfiguracji domyślnej, więc sam reverse proxy publikuje przeszukiwalną kopię historii przeglądania każdemu, kto pozna nazwę hosta. Punkt końcowy MCP jest również domyślnie serwowany pod /mcp i bez tokena każdy klient, który uzyska do niego dostęp, może przeszukiwać indeks.
Skonfiguruj uwierzytelnianie, zanim usługa po raz pierwszy opuści localhost. Pojedynczy użytkownik potrzebuje tylko app.access_token, jednego współdzielonego sekretu przesyłanego przez rozszerzenie przeglądarki, klienta terminalowego oraz dowolnego klienta MCP. Dla kilku osób ustaw user_handling: true i utwórz konta:
sudo -u hister hister create-user alice --admin --config /etc/hister/config.ymlPolecenie wyświetli monit o podanie hasła o długości co najmniej 8 znaków. Każde konto otrzymuje własne dokumenty oraz osobisty token API, który właściciel może wygenerować ponownie na stronie profilu lub za pomocą flagi --regen-token w hister update-user. Wygenerowanie nowego tokena natychmiast unieważnia poprzedni, więc każde urządzenie korzystające z tego konta musi zostać po tym fakcie zaktualizowane.
Pozostaw app.public bez zmian, chyba że jest to zamierzone działanie. Tryb publiczny umożliwia nieuwierzytelnione wyszukiwanie, podglądy, serwowanie plików oraz wyszukiwanie przez MCP, blokując jednocześnie zapisywanie danych, dostęp do historii oraz operacje administracyjne.
Reverse proxy, TLS i firewall
Hister nie obsługuje samodzielnie protokołu HTTPS, dlatego terminację TLS (transport layer security) należy przeprowadzić przed nim. Caddy stanowi najkrótszą drogę, ponieważ automatycznie żąda i odnawia certyfikaty za pośrednictwem ACME (automatic certificate management environment).
hister.example.com {
reverse_proxy 127.0.0.1:4433
}Przeładuj konfigurację za pomocą sudo systemctl reload caddy. Aby certyfikat mógł zostać wystawiony, muszą zostać spełnione dwa warunki: rekord A dla hister.example.com musi wskazywać na ten serwer, a port 80 musi być otwarty, ponieważ to na nim następuje odpowiedź na wyzwanie HTTP-01. W przypadku braku któregokolwiek z nich, przeglądarka zamiast strony wyświetli błąd TLS, a dziennik Caddy będzie powtarzał informację o nieudanym wyzwaniu.
Następnie zamknij wszystkie pozostałe porty.
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw statusPort 4433 został celowo pominięty na tej liście.
server.base_url musi być zgodne z adresem wpisywanym w przeglądarce, wliczając w to schemat. W przypadku braku zgodności interfejs załaduje się bez stylów i obrazów, ponieważ serwer buduje odnośniki do zasobów na podstawie base_url, a przeglądarka próbuje pobrać je z adresu, który nie odpowiada. Ten sam adres URL należy wprowadzić w rozszerzeniu przeglądarki.
Wypełnianie indeksu
Rozszerzenie przeglądarki jest głównym narzędziem zbierającym dane. Należy je zainstalować z Mozilla Add-ons lub Chrome Web Store, otworzyć stronę opcji, ustawić adres URL serwera na https://hister.example.com i wkleić token dostępu. Rozszerzenie przechwytuje tytuł, pełny tekst, kod HTML oraz favicon każdej odwiedzanej strony i przesyła je na serwer. Ekstrakcja odbywa się po stronie klienta, wewnątrz przeglądarki. Rozszerzenie nie kontaktuje się z żadnymi stronami trzecimi, a jedyne zewnętrzne żądanie dotyczy pobrania faviconu strony.
Ekstrakcja po stronie klienta umożliwia stworzenie prywatnego indeksu. Rozszerzenie widzi stronę dokładnie tak samo jak użytkownik, po zalogowaniu i wyrenderowaniu treści, dzięki czemu wewnętrzne strony wiki czy płatne artykuły są indeksowane poprawnie, a serwer nie wymaga posiadania danych uwierzytelniających. Oznacza to również, że każda przeglądana treść jest kandydatem do indeksowania, dlatego reguły pomijania (skip rules) są przetwarzane przed dodaniem zawartości.
Reguły pomijania znajdują się w rules.json w instalacjach jednoosobowych lub są przechowywane w bazie danych dla każdego użytkownika. Najwygodniejszym sposobem ich edycji jest zakładka Rules w interfejsie webowym. Są to wyrażenia regularne Go dopasowywane do pełnego adresu URL:
^https://mail\.example\.com
^https://bank\.example\.com
.*?utm_source=Wzorzec taki jak ^mail.example.com nigdy nie zostanie dopasowany, ponieważ testowany ciąg znaków zaczyna się od https://. Końcowy znak $ również spowoduje niepowodzenie w przypadku każdego adresu URL zawierającego ciąg zapytania (query string), ponieważ parametry zapytania są zachowywane podczas dopasowywania.
Istniejąca historia przeglądania jest importowana poprzez odczyt bazy danych przeglądarki. Polecenie to należy uruchomić na maszynie, na której znajduje się profil przeglądarki, czyli na laptopie, a nie na VPS. Należy zainstalować tam ten sam plik binarny i wskazać adres serwera:
export HISTER_TOKEN='your-access-token'
hister import browser firefox -u https://hister.example.com -t "$HISTER_TOKEN"Import działa jako wznawialne zadanie o nazwie browser-import-YYYY-MM-DD, więc można je przerwać i uruchomić ponownie w późniejszym czasie. Serwisy zakładek importuje się w ten sam sposób, w tym Linkwarden, Karakeep, Wallabag, Linkding, Readeck oraz Shaarli. Powtórny import pobiera tylko te elementy, które są nowsze od ostatnio zaimportowanych.
Pliki na serwerze są indeksowane poprzez wskazanie katalogów w konfiguracji:
indexer:
directories:
- path: '/var/lib/hister/documents'
label: 'documents'
filetypes: ['pdf', 'docx', 'md', 'txt']Pliki PDF, DOCX, Markdown, Org mode oraz poprawne pliki tekstowe UTF-8 są odczytywane jako pełny tekst. Zdjęcia i wideo nie znajdują się na tej liście, dlatego biblioteka zdjęć wymaga serwera, który indeksuje twarze, miejsca i daty, a nie tekst. PhotoPrism i Immich to dwa rozwiązania, które zazwyczaj są porównywane pod kątem tego zadania. Pojedynczą stronę można dodać za pomocą hister index https://example.com. Przekształcanie całych witryn w czysty tekst dla innych narzędzi to oddzielne zadanie, obsługiwane przez samodzielnie hostowane crawlery konwertujące strony na czysty tekst.
Wyszukiwanie jest oparte na polach, dlatego warto poświęcić dziesięć minut na zapoznanie się z językiem zapytań:
"connection reset" domain:github.com added:<30d
title:(wireguard|nftables) -tutorial sort:-visitsSkierowanie agenta programistycznego na własny indeks przez MCP
MCP (model context protocol) to interfejs, którego asystent używa do wywoływania narzędzi na serwerze. Hister udostępnia go pod adresem POST /mcp w ramach tego samego bazowego URL, poprzez strumieniowy protokół HTTP, oraz eksponuje search, get_preview i get_history. Uwierzytelnianie odbywa się przy użyciu tego samego tokena bearer, co w reszcie API.
{
"mcpServers": {
"hister": {
"url": "https://hister.example.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_ACCESS_TOKEN"
}
}
}
}Nagłówek X-Access-Token działa jako alternatywa dla Authorization.
Wartość tego rozwiązania tkwi w zakresie wyszukiwania agenta. Otwarta wyszukiwarka internetowa zwraca wyniki aktualnie najwyżej oceniane, co w przypadku szybko zmieniającego się oprogramowania często oznacza dokumentację wersji, której nie używasz. Twój własny indeks zwraca stronę, którą już przeczytałeś i zdecydowałeś się zachować, a get_preview serwuje zapisaną kopię, dzięki czemu odpowiedź pozostaje dostępna nawet po zniknięciu oryginalnej strony z sieci. Jeśli potrzebujesz również wyników publicznych, udostępnij agentowi oba źródła: umiejętność wyszukiwania w przeglądarce wspierana przez SearXNG dodaje otwarty internet jako osobne narzędzie. Gdy uruchomisz więcej niż jeden z tych punktów końcowych, warto przeczytać hosting serwerów MCP na VPS, ponieważ każdy z nich współdzieli ten sam problem z ekspozycją.
Dysk, kopie zapasowe i utrzymanie
Dokumentacja szacuje jedną zaindeksowaną stronę na około 100 KB, wliczając skompresowany podgląd, więc sto tysięcy stron zajmuje w przybliżeniu 10 GB. System limitów (quota) nie istnieje. Dwa ustawienia są często mylone: indexer.max_file_size_mb (domyślnie 1 MiB) ogranicza pojedynczy monitorowany plik, a server.max_batch_body_size (domyślnie 40 MiB) ogranicza pojedyncze żądanie API.
Katalog wskazany przez app.directory zawiera index.db z plikami indeksów dla poszczególnych języków, db.sqlite3 dla kont i zadań, data/html/ dla podglądów oraz rules.json. Kopia zapasowa to zatrzymana usługa oraz kopia całego tego katalogu wraz z plikiem konfiguracyjnym. hister export backup.json zapisuje dokumenty w formacie JSON na potrzeby migracji i nie stanowi kopii zapasowej serwera.
Warto znać dwa polecenia konserwacyjne. hister reindex przebudowuje indeksy wyszukiwania, co jest wymagane po zmianie ustawień indeksatora. Jeśli zużycie pamięci rośnie podczas dużego importu, należy ustawić detect_languages: false w sekcji indexer i ponownie zaindeksować dane. hister cleanup usuwa osierocone pliki podglądów i ikon favicon, które pozostały po usunięciu stron.
Usuwanie jest operacją typu zapytanie, dlatego najpierw należy uruchomić je w trybie testowym (dry mode):
hister delete 'domain:example.com' --dry --verboseUsunięta strona powróci, jeśli kolektor nadal będzie ją przesyłał, dlatego przed usunięciem należy dodać regułę pomijania (skip rule).
Licencja AGPLv3 ma znaczenie tylko w przypadku modyfikacji kodu. Uruchamianie niezmodyfikowanej kopii na własny użytek nie nakłada żadnych zobowiązań. Jeśli zmodyfikujesz Hister i udostępnisz innym osobom możliwość korzystania z Twojej wersji przez sieć, licencja wymaga udostępnienia im zmodyfikowanego kodu źródłowego.
Tryby awarii i komunikaty, które zobaczysz
Serwer nie uruchamia się. Port 4433 jest już zajęty lub plik konfiguracyjny zawiera błąd składni YAML. sudo ss -lntp | grep 4433 wskazuje proces blokujący port, a journalctl -u hister -n 50 --no-pager wyświetla błąd parsowania.
Interfejs ładuje się, ale wygląda na uszkodzony. Pomieszany tekst i brakujące obrazy oznaczają, że server.base_url nie pasuje do adresu URL w pasku przeglądarki. Końcowy ukośnik jest traktowany jako niezgodność.
Rozszerzenie nie łączy się. Adres URL serwera w rozszerzeniu musi być identyczny z base_url, serwer musi działać i być aktualny, a firewall znajdujący się pomiędzy nimi może blokować połączenie bez wyświetlania komunikatu na stronie. Firefox przechowuje logi rozszerzeń poza standardową konsolą: otwórz about:debugging#/runtime/this-firefox i sprawdź rozszerzenie Hister.
Kontener wyłącza się przy starcie. Błąd uprawnień do ./data oznacza, że katalog jest własnością UID innego niż 1000, który jest kontem użytkownika wewnątrz domyślnego obrazu.
Błąd 403 Forbidden przy próbie dostępu do ścieżki administratora. POST /api/reindex oraz POST /api/cleanup są dostępne wyłącznie dla administratorów, gdy obsługa użytkowników jest włączona, dlatego zwykłe konto otrzymuje odmowę dostępu.
Zużycie pamięci rośnie podczas importu. Przyczyną jest zazwyczaj wykrywanie języka w obszernej historii. Ustaw detect_languages: false i uruchom następnie hister reindex.
FAQ
Czym Hister różni się od SearXNG?
SearXNG to metawyszukiwarka typu proxy: przekazuje zapytanie do publicznych wyszukiwarek i zwraca wyniki z usuniętymi elementami śledzącymi, więc indeks należy do tych wyszukiwarek. Hister przechowuje własny indeks pełnotekstowy odwiedzonych stron oraz przechowywanych plików, dzięki czemu odpowiada na pytanie „gdzie to czytałem”, podczas gdy SearXNG odpowiada na pytanie „co mówi sieć”. Rozwiązują one różne problemy i wielu użytkowników uruchamia oba narzędzia na jednym serwerze.
Czy przechowywanie całej historii przeglądania na VPS jest bezpieczne?
Tylko pod warunkiem wcześniejszego zabezpieczenia dostępu. Hister domyślnie nasłuchuje na 127.0.0.1:4433 i nie wymaga uwierzytelniania. Należy ustawić app.access_token lub user_handling: true, umieścić przed nim reverse proxy z obsługą TLS i zablokować port 4433 na firewallu. Indeks pełnotekstowy historii czytania jest zapisany w postaci zwykłego tekstu, więc każdy, kto uzyska dostęp do portu, może odczytać wszystko bez konieczności łamania zabezpieczeń.
Czy potrzebuję rozszerzenia przeglądarki, czy mogę po prostu zaimportować historię?
Import jest jednorazowym uzupełnieniem danych. Odczytuje on własną bazę danych historii przeglądarki, więc proces ten uruchamia się na komputerze, na którym znajduje się profil przeglądarki, a nie na serwerze. Rozszerzenie dba o aktualność indeksu od tego momentu i przechwytuje strony wymagające logowania, ponieważ wyodrębnia treść w przeglądarce po wyrenderowaniu strony. Typowa konfiguracja obejmuje jednorazowy import, a następnie korzystanie z rozszerzenia.
Czy agent programistyczny może przeszukiwać mój indeks Hister?
Tak. Hister jest serwerem MCP (model context protocol) dostępnym pod adresem POST /mcp w ramach Twojego bazowego adresu URL, udostępniającym search, get_preview oraz get_history. Należy wskazać klientowi adres https://your-host/mcp z nagłówkiem Authorization: Bearer zawierającym token dostępu. Agent przeszukuje wtedy dokumentację, którą faktycznie przeczytałeś, w wersji, w której ją czytałeś, zamiast polegać na tym, co aktualnie znajduje się wysoko w rankingach publicznych wyszukiwarek.