Obserwuj strony internetowe pod kątem zmian według harmonogramu¶
Zbuduj agenta, który pobiera niewielki zestaw stron, przechowuje krótkie podsumowanie tego, co zobaczył, i przy następnym runie mówi, co się zmieniło - albo że nic się nie zmieniło. Przykład obserwuje dwie strony, których nie kontrolujesz, ale które zmieniają się rzadko: stronę wydań GitHuba pewnego projektu oraz example.com. To instrukcja wykonania, z dwoma zapisanymi odpaleniami jako punktem odniesienia.
Dwa odpalenia dowodzą dwóch różnych rzeczy. Run now dowodzi, że logika porównania działa. Nie dowodzi, że prawdziwa zmiana zostanie kiedykolwiek wychwycona - pokazuje to dopiero odpalenie, które nastąpi już po faktycznej zmianie strony, a tej strony nie da się zapisać na żądanie.
Czego potrzebujesz¶
- Działająca instalacja z profilem modelu.
- Żadnej kolekcji wiedzy, żadnego połączenia MCP i żadnego połączenia sandboksa: workspace, którego używa ten przepis, niczego z tego nie potrzebuje. Zobacz niżej.
Dlaczego nie pliki pamięci¶
Oczywistą capability dla „zapamiętaj, co widziałem ostatnio” są pliki pamięci. Tutaj to nie działa, a powód warto poznać, zanim sięgniesz po nie w harmonogramie.
Odpalenie triggera działa z rolą i uprawnieniami swojego twórcy, ale nie jako on w kwestii pamięci: odbiorca runa - kto usłyszy odpowiedź - jest celowo pusty na powierzchni schedule, więc nienadzorowany run nie może czytać ani zapisywać osobistych notatek twórcy. write_memory i read_memory odpowiadają tym samym:
This conversation has no memory. It has no identified person and is not a
group chat, so a note would have to land somewhere other people read. Answer
from what you have rather than saving.
Ten sam agent, zapytany o to samo w zwykłym czacie, zapisuje notatkę bez przeszkód - magazyn tam istnieje, bo słucha prawdziwy człowiek. W harmonogramie nikt nie słucha.
Czego użyć zamiast tego¶
Workspace sandboksa zakresowany na conversation przetrwa każde odpalenie jednego triggera, bo trigger otwiera jedną rozmowę na całe swoje życie i dopisuje do niej każde odpalenie - conversation_id, na którym opiera się workspace, nie zależy od tego, kto słucha. Backend state nie potrzebuje połączenia sandboksa: to mały magazyn we własnej bazie danych tego wdrożenia, bez powłoki i bez kontenera.
Zbuduj agenta¶
- Utwórz agenta w Agents → New agent i wybierz swój profil modelu.
- W Toolbox włącz Web fetch. Ogranicz
allowed_domainsdogithub.comiexample.com, żeby nie dało się poprosić agenta o pobranie czegokolwiek innego. - Włącz Files & shell. Zostaw backend na Files (backend
state- bez powłoki, bez połączenia sandboksa) i zakres na This conversation - domyślne ustawienia to dokładnie to, czego potrzebuje ten przepis. - Ustaw budżet i limit kroków na czas próby. Każde zapisane odpalenie kosztowało około 0,07-0,14 USD.
- Wpisz poniższe instrukcje, a potem Publish.
You watch two pages for changes, once per run:
- https://github.com/vstorm-co/agenticos/releases
- https://example.com/
Each run:
1. Fetch both pages with web_fetch.
2. For the GitHub page, keep only the latest (topmost) release: its tag and
title. For example.com, keep its heading and first paragraph. Ignore
everything else on each page - star counts, timestamps, navigation.
3. Look for a file named watch-state.txt in your workspace.
4. If it does not exist, write it now with today's two summaries, one line
per page, and report that you recorded a baseline - not a change.
5. If it exists, read it and compare each page's new summary to the line
stored for it. Report, page by page, either the old and new value or
"no change". Then overwrite watch-state.txt with the new summaries.
Never say a page changed unless the two lines you compared actually differ.
Utwórz harmonogram¶
Otwórz Routines → New schedule albo zakładkę Availability agenta, wybierz agenta i ustaw dzienną kadencję. Prompt musi tylko nazwać zadanie:
Uruchom¶
Naciśnij Run now na harmonogramie dwa razy, w odstępie kilku minut. Pierwsze odpalenie nie znajduje watch-state.txt i zapisuje punkt odniesienia. Drugie odczytuje go z powrotem i porównuje.
Opublikowanie poprawki nie przenosi na nią działającego harmonogramu
Publikowanie tworzy nową wersję, ale nie przestawia środowiska,
z którego czyta harmonogram, chyba że to środowisko śledzi najnowszą wersję - a
production domyślnie tego nie robi. Jeśli edytujesz agenta po utworzeniu
triggera, przenieś nową wersję na to środowisko (Promote v2 to…,
z Twoim numerem wersji) przed kolejnym Run now,
albo odpalenie nadal uruchomi wersję, którą właśnie zastąpiłeś.
Sprawdź wynik¶
| Sprawdzenie | Kryterium |
|---|---|
| Pierwsze Run now | Zgłasza punkt odniesienia, nie zmianę, i żadna strona nie jest opisana jako różna |
watch-state.txt po pierwszym odpaleniu |
Istnieje, z jedną linią na stronę |
| Drugie Run now | Odczytuje ten sam plik z powrotem i zgłasza „no change” dla obu stron |
| Strona, którą edytowałeś między dwoma odpaleniami | Zgłasza starą i nową wartość tylko dla tej strony |
| Powierzchnia runa w Activity | schedule dla obu odpaleń, ten sam trigger, ta sama rozmowa dziennika runów |
Run z web_fetch skierowanym na trzecią domenę |
Odrzucony - allowed_domains jej nie obejmuje |
Zapisano na v0.0.504, 25 września 2026
Model: Claude Sonnet 4.6 przez OpenRouter. Pierwsze Run now wywołało
web_fetch na obu stronach, potem read_file na watch-state.txt, co się
nie powiodło, bo plik jeszcze nie istniał, a potem write_file. Zgłosiło
najnowsze wydanie strony GitHuba jako v0.0.504 oraz nagłówek i akapit
example.com, i powiedziało, że to punkt odniesienia. Koszt: 0,13 USD. Drugie
Run now, około minutę później, odczytało ten sam plik z powrotem,
dopasowało oba podsumowania i zgłosiło „No change” dla obu stron, a potem
nadpisało plik tą samą treścią. Koszt: 0,14 USD.
Pierwsza próba użyła memory_files zamiast sandboksa, dokładnie tak, jak
ostrzega ta strona: oba odpalenia wywołały read_memory i dostały powyższą
odmowę „no memory”, a agent poprawnie powiedział osobie czytającej raport,
że nie może zapisać punktu odniesienia - zamiast twierdzić, że to zrobił.
Gdy coś pójdzie nie tak¶
- Każde odpalenie mówi „no prior state”, nigdy porównania. Workspace się nie utrzymuje. Sprawdź, czy zakres to This conversation, a nie Nobody - zakres
runotwiera przy każdym odpaleniu świeży, pusty workspace. - W transkrypcie w ogóle pojawia się
read_memoryalbowrite_memory. Pliki pamięci są nadal przypisane. Usuń je; nie mogą wykonać tego zadania w harmonogramie. - Prawdziwa zmiana strony nie jest zgłaszana. Wychwytuje ją dopiero odpalenie, które nastąpi po zmianie i po odpaleniu, które zapisało wcześniejszy stan. Sprawdź w Activity oba odpalenia po obu stronach zmiany, nie tylko ostatnie.
- Każde odpalenie zgłasza zmianę, nawet gdy nic się nie ruszyło. Podsumowanie jest zbyt szerokie - surowe pobranie strony obejmuje liczby gwiazdek, względne znaczniki czasu albo zmieniający się nonce, który różni się przy każdym pobraniu. Zawęź w instrukcjach to, co ma znaczenie, do jednego istotnego faktu.
- Odpalenie nadal zachowuje się jak stara wersja po ponownym opublikowaniu. Zobacz ostrzeżenie o środowisku powyżej.
Zapisz próbę¶
Zachowaj oba adresy URL stron, instrukcje, wersję agenta, watch-state.txt po każdym odpaleniu i każdy run w Activity z jego powierzchnią i kosztem. Człowiek nadal decyduje, co liczy się jako zmiana warta działania, i obserwuje pierwsze odpalenie, które nastąpi po prawdziwej edycji, żeby potwierdzić, że porównanie ją wychwytuje - para Run now dowodzi tylko logiki, nigdy tego odpalenia.