# barteq.eu — pełna treść (2 posty) > Wariant `llms-full.txt`: cała treść bloga w jednym pliku markdown. > Autor: barteq (pseudonim). Licencja: Treść: CC BY-NC 4.0, chyba że zaznaczono inaczej. --- # Agenci AI czytają sieć i nikt im tego nie ułatwia > HTML dla ludzi, markdown dla agentów — ten sam tekst, jedno źródło. Pokazuję, jak to zrobić trzema nagłówkami i sprawdzić jednym curl-em. _13 września 2026 · 2 minuty czytania · tagi: HTTP, agenci AI, bezpieczeństwo, llms.txt_ Agent AI wchodzi na twoją stronę tak samo jak przeglądarka: wysyła żądanie HTTP i dostaje odpowiedź. Różnica jest w tym, co z nią robi. Przeglądarka renderuje. Agent musi **wywnioskować**, gdzie w tym HTML-u jest treść. I tu zaczyna się zabawa, bo większość stron odpowiada mu komunikatem „radź sobie”. ## Problem w jednym zdaniu Strona dla ludzi ma nawigację, stopkę, baner cookies, trzy skrypty analityczne i „polecane artykuły”. Strona dla agenta powinna mieć tekst. To nie znaczy, że trzeba budować dwa serwisy — wystarczy powiedzieć agentowi, że wariant istnieje. ## Trzy nagłówki, które to załatwiają **Pierwszy: `Vary: Accept`.** Mówi cache'om, że odpowiedź zależy od nagłówka `Accept`, więc nie wolno im podać wariantu HTML temu, kto prosił o markdown. **Drugi: `Content-Type: text/markdown`** w wariancie tekstowym. Nie `text/plain`, nie `application/octet-stream`. Markdown ma własny typ. **Trzeci: `Link: …; rel="alternate"`.** To ten sam mechanizm, którego używa się do kanałów RSS — wskazówka „jest inna wersja tego zasobu i tu jest jej adres”. Razem wygląda to tak: ```http GET /blog/agenci-ai-czytaja-siec/ HTTP/1.1 Accept: text/markdown ``` ```http HTTP/1.1 200 OK Content-Type: text/markdown; charset=utf-8 Vary: Accept Link: ; rel="alternate"; type="text/markdown" X-Robots-Tag: noindex ``` To ostatnie jest celowe. Wariant markdown ma być dostępny, ale nie ma po co konkurować z HTML-em w indeksie wyszukiwarki. Dla agenta to nie problem — agent nie czyta indeksu, tylko nagłówki. ## Skąd agent ma wiedzieć, że to istnieje Dobrą odpowiedzią jest plik, który opisuje blog maszynowo. Nazywa się `llms.txt` i jest w tym samym miejscu, w którym `robots.txt` był od zawsze: w katalogu głównym. ![Rysunek ołówkiem: mały robot zaglądający przez bramę do ogrodu, obok tabliczka z adresem llms.txt](/media/img/2026/09/agenci-ai-czytaja-siec/aa8e57a0-post-agent.webp "Mały robot czyta tabliczkę przy bramie — wariant dla maszyn jest zwykle obok tego dla ludzi.") W moim wydaniu ten plik zawiera: - jednozdaniowy opis bloga i informację, że autor pisze pod pseudonimem, - listę najnowszych postów z linkiem HTML **i** linkiem `.md`, - tabelę „jak pobrać treść”: HTML, `.md`, negocjacja przez `Accept`, pełny dump, sitemap, - sekcję z uwagami — na przykład to, że treść jest edukacyjna i nie jest zaproszeniem do testowania niczyich systemów. Kluczowe: **jeden plik mówi wszystko**. Agent nie musi zgadywać konwencji ani próbować pięciu URL-i, żeby sprawdzić, który odpowie. ## Sprawdź to w pięć sekund ```bash # wariant dla ludzi curl -sI https://barteq.eu/blog/agenci-ai-czytaja-siec/ | grep -i vary # wariant dla agentów curl -s -H 'Accept: text/markdown' \ https://barteq.eu/blog/agenci-ai-czytaja-siec/ | head -5 # bezpośredni adres, bez negocjacji curl -sI https://barteq.eu/blog/agenci-ai-czytaja-siec.md | grep -i content-type # manifest curl -s https://barteq.eu/llms.txt | head -20 ``` Cztery komendy i wiesz, czy strona jest czytelna dla maszyny. Jeśli trzecia zwraca HTML, to znaczy, że ktoś uznał, że to niepotrzebne. ## Jedno źródło, dwa opakowania Łatwo tu o błąd: trzymać HTML w bazie i konwertować go do markdownu „w locie”. Wtedy masz dwa generatory i dwa różne teksty — ten sam problem, który mają wszystkie systemy tłumaczące treść tam i z powrotem. Moje podejście jest odwrotne: markdown jest źródłem, HTML jest **pochodną**, renderowaną raz przy publikacji. Wariant `.md` to dokładnie ten sam tekst, który poszedł do HTML-a, zapisany bajt w bajt. Nie ma czego rozjeżdżać, bo nie ma drugiego generatora. ## Po co to komu Bo agent, który nie musi parsować HTML-a, robi trzy rzeczy lepiej: 1. **Cytuje dokładniej** — nie gubi fragmentu, bo nawigacja wypadła w środku akapitu. 2. **Kosztuje mniej** — mniej tokenów na to samo. 3. **Rzadziej się myli** — mniej „nie wiem, który to był akapit”. A dla autora jest jeszcze jedna korzyść: jak napiszesz wariant maszynowy raz, to przestajesz się zastanawiać, co zobaczy wyszukiwarka, a co robot. Oba widzą to samo, tylko w innym opakowaniu. --- # Wystartowało, czyli po co komu kolejny blog > Nowy blog o bezpieczeństwie IT: bez marketingowego tła, na publicznych materiałach, w dwóch wariantach — dla ludzi i dla agentów. _11 września 2026 · 2 minuty czytania · tagi: bezpieczeństwo, blog, meta_ Zaczynam pisać. Nie dlatego, że brakuje blogów o bezpieczeństwie — brakuje takich, które da się zweryfikować w pięć minut. ## Po co to komu Większość tekstów o bezpieczeństwie IT, które czytam, ma ten sam problem: są albo marketingiem, albo streszczeniem cudzego streszczenia. Trzeci poziom kopiowania. Nikt już nie pamięta, jakie było źródło, a źródło i tak było artykułem sponsorowanym. Ten blog działa na jednej zasadzie: **wszystko, co opisuję, da się sprawdzić na materiałach publicznych**. Patenty, RFC, dokumentacje producentów, otwarte repozytoria, komunikaty CERT. Jeśli czegoś nie mogę pokazać, to o tym nie piszę albo piszę wprost, że to moje przypuszczenie i dlaczego. ## Co tu będzie - **Sieć i HTTP** — nagłówki, cache, content negotiation, rzeczy które wyglądają na magię, dopóki nie zobaczysz żądania i odpowiedzi obok siebie. - **WAF i filtry** — jak działają, jak się je czyta i czego o nich nie mówi dokumentacja. - **Agenci AI w sieci** — jak roboty czytają strony, czym się różni „dla ludzi” od „dla maszyny” i dlaczego większość stron jest dla nich nieczytelna. - **Inżynieria odwrotna na papierze** — analiza publicznych dokumentów: patentów, specyfikacji, zrzutów z komunikacji. ## Czego tu nie będzie - List „10 najlepszych narzędzi”, z których dziewięć to to samo narzędzie. - Straszenia. Bezpieczeństwo to inżynieria, nie horror. - Zachęt do testowania niczyich systemów bez zgody. To nie jest miejsce, w którym dostaniesz gotowy skrypt na cudzą infrastrukturę. - Moich danych osobowych. Piszę jako **barteq**. Pseudonim. Koniec listy. ## Jak to jest zbudowane Blog jest statyczno-dynamiczny: treść siedzi w bazie na brzegu sieci, ale każdy post istnieje w dwóch wariantach — HTML dla ludzi i markdown dla agentów. Ten sam tekst, jedno źródło, zero konwersji w locie. Pierwszy wariant dla ciekawych: ```bash curl -s https://barteq.eu/blog/wystartowalo/ | head -20 ``` Drugi, ten dla robotów: ```bash curl -s -H 'Accept: text/markdown' https://barteq.eu/blog/wystartowalo/ ``` Trzeci, najprostszy: ```bash curl -s https://barteq.eu/blog/wystartowalo.md ``` Wszystkie trzy zwracają to samo, tylko w innym opakowaniu. Jeśli agent ma czytać twój blog, to niech czyta go bez zgadywania, gdzie w HTML-u kończy się nawigacja, a zaczyna tekst. ## Co dalej Posty będą wychodzić wtedy, kiedy będę miał coś do powiedzenia i czymś to poprę. Bez harmonogramu, bez „content planu”, bez serii „część 1 z 7”, której nigdy nie skończę. Do zobaczenia w pierwszym prawdziwym tekście.