# Instrukcja dla agentow AI Ten projekt jest terminalowym narzedziem do pracy na kontach Google Ads. Agent AI nie uzywa API modeli. Agent uruchamia komendy terminalowe, czyta pliki z tego katalogu i prowadzi uzytkownika etapami. ## Najwazniejszy przeplyw Uzytkownik nie ma pamietac nazw technicznych zadan. Gdy uzytkownik napisze: ```text analiza-zadania ``` uruchom: ```powershell python gads.py analiza-zadania ``` Pokaz uzytkownikowi pelna liste zadan z podzialem na grupy i opcje zbiorcze, a potem popros o numer. Nie wolno pomijac listy zadan ani zastepowac jej samym komunikatem typu `wybierz numer`. Jesli wynik komendy zostal skrocony przez narzedzie terminalowe, odczytaj go ponownie albo pokaz liste zadan z `config/tasks.toml`. Nie koncz odpowiedzi po komunikacie narzedzia typu `... +86 lines` albo `ctrl+t to view transcript`. Jesli interfejs zwinal wynik, przepisz w odpowiedzi pelna liste zadan i opcji zbiorczych na podstawie widocznego wyniku albo `config/tasks.toml`, a dopiero potem popros o numer. Po wyborze zadania w trybie `analiza-zadania` obsluguj klientow pojedynczo. Nie wolno uruchomic zadania dla wszystkich klientow, a potem pokazac jednej zbiorczej tabeli `Podsumowanie po klientach` jako glownego wyniku. Dla kazdego klienta osobno: 1. uruchom plan-only dla wybranego zadania, 2. odczytaj plan tego klienta, 3. pokaz konkretne problemy, rekomendacje i ewentualne zmiany dla tego jednego klienta, 4. zapytaj uzytkownika, co zrobic z tym klientem, 5. dopiero po decyzji uzytkownika przejdz do kolejnego klienta. Jesli zadanie nie ma zmian do wdrozenia, nadal pokaz pelna liste problemow i rekomendacji dla tego klienta, a potem zapytaj, czy przejsc do kolejnego klienta. Nie zastepuj tego zbiorczym podsumowaniem wszystkich klientow. Gdy uzytkownik napisze: ```text analiza-klienta ``` uruchom: ```powershell python gads.py analiza-klienta ``` Pokaz uzytkownikowi liste klientow i popros o numer. Liste klientow pokazuj jako tabele terminalowa z kolumnami `Nr` i `Domena`, np.: Zawsze pokazuj pelna liste klientow widoczna w terminalu. Nie streszczaj jej tekstem typu `Masz 10 klientow`. Nie ukrywaj listy za komunikatem o rozwinieciu wyniku narzedzia, np. `+24 lines` albo `ctrl+o to expand`. Jesli wynik komendy zostal skrocony przez narzedzie terminalowe, odczytaj go ponownie albo uruchom komende tak, zeby pokazac uzytkownikowi cala tabele klientow. ```text ┌────┬──────────────────────┐ │ Nr │ Domena │ ├────┼──────────────────────┤ │ 1 │ aruba.rzeszow.pl │ └────┴──────────────────────┘ ``` Po wyborze numeru klienta uruchom: ```powershell python gads.py analiza-klienta --client-number ``` Pokaz uzytkownikowi liste zadan. Zadania musza byc prezentowane z podzialem na grupy nadrzedne, np. `KAMPANIE PLA`, `WYKLUCZENIA`, `KAMPANIE SEARCH`. Nie wolno pokazywac samej tabeli zadan bez naglowka grupy. Nawet gdy jest tylko jedna grupa i jedno zadanie, pokaz naglowek grupy. Nie wolno laczyc zadan i opcji zbiorczych w jednej tabeli. Zadania sa w tabelach pod naglowkami grup, a opcje zbiorcze sa w osobnej sekcji `Opcje zbiorcze`. Nie pokazuj tak: ```text ┌─────┬─────────────────────────────────┐ │ Nr │ Zadanie │ ├─────┼─────────────────────────────────┤ │ 1.1 │ Synchronizacja kampanii PLA_CL1 │ │ 1.2 │ Sprawdzenie ustawien │ │ 1.0 │ Wszystkie z grupy PLA │ │ ALL │ Wszystkie zadania │ └─────┴─────────────────────────────────┘ ``` To jest bledne, bo miesza pojedyncze zadania z wyborami zbiorczymi i usuwa naglowek grupy. Format listy zadan: ```text Klient: investagd.pl ======================================================================== KAMPANIE PLA ======================================================================== ┌────┬─────────────────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────┐ │ Nr │ Zadanie │ Opis │ ├────┼─────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────┤ │ 1.1 │ Synchronizacja kampanii PLA_CL1 │ Porownuje kampanie [PLA_CL1] z produktami w adsPRO i przygotowuje plan zmian grup reklam. │ └────┴─────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────┘ ``` W kazdej grupie pokazuj zadania jako tabele terminalowa z kolumnami `Nr`, `Zadanie`, `Opis`. Po tabelach zadan pokaz tez `Opcje zbiorcze`: ```text Opcje zbiorcze ┌─────┬────────────────────────────────────────────┐ │ Nr │ Zakres │ ├─────┼────────────────────────────────────────────┤ │ 1.0 │ Wszystkie zadania z grupy: Kampanie PLA │ ├─────┼────────────────────────────────────────────┤ │ ALL │ Wszystkie zadania ze wszystkich grup │ └─────┴────────────────────────────────────────────┘ ``` Numeracja ma format `grupa.zadanie`. Przyklad: `1.1` to pierwsze zadanie w pierwszej grupie, `2.3` to trzecie zadanie w drugiej grupie. Opcja zbiorcza grupy zawsze konczy sie na `.0`, np. `1.0`, `2.0`. `ALL` pokazuj tylko raz na koncu listy opcji zbiorczych. Jesli uzytkownik wybierze numer pojedynczego zadania, uruchom tylko to zadanie. Jesli uzytkownik wybierze `1.0`, `2.0` itd., uruchom wszystkie zadania z tej grupy po kolei. Jesli uzytkownik wybierze `ALL`, uruchom wszystkie zadania ze wszystkich grup po kolei. W trybie zbiorczym NIE zbieraj wszystkich planow do jednej wspolnej decyzji. Kazde zadanie obsluguj osobno: 1. uruchom `--plan-only` dla pierwszego zadania, 2. przeczytaj plan pierwszego zadania, 3. pokaz krotka analize pierwszego zadania, 4. zapytaj, czy wdrozyc ten jeden plan, 5. po decyzji uzytkownika wdroz albo pomin ten jeden plan, 6. dopiero potem przejdz do kolejnego zadania. Nie pytaj: `Czy wdrozyc oba plany?`. Pytaj: `Czy wdrozyc plan zadania 1/2?`. Po wyborze numeru zadania uruchom najpierw tylko przygotowanie planu: ```powershell python gads.py analiza-klienta --client-number --task-number --plan-only ``` Preferowana komenda dla wyboru z listy: ```powershell python gads.py analiza-klienta --client-number --select --plan-only ``` Po wyborze calej grupy uruchom: ```powershell python gads.py analiza-klienta --client-number --select 1.0 --plan-only ``` Po wyborze wszystkich grup uruchom: ```powershell python gads.py analiza-klienta --client-number --select ALL --plan-only ``` Zadania zbiorcze musza isc sekwencyjnie: nastepne zadanie startuje dopiero po zakonczeniu poprzedniego, lacznie z decyzja uzytkownika o wdrozeniu albo pominieciu planu. Nastepnie odczytaj zapisany plan z: ```text clients//plans/ ``` Przeanalizuj plan krotko i konkretnie. Nie wdrazaj zmian bez zgody uzytkownika. Po akceptacji uzytkownika uruchom wdrozenie dokladnie zapisanego planu: ```powershell python gads.py analiza-klienta --client-number --task-number --apply-plan --confirm-apply TAK ``` Po wykonaniu zadania, odrzuceniu planu albo decyzji o niewdrazaniu zmian zapytaj uzytkownika, co dalej: ```text Co dalej? 1. Lista zadan tego samego klienta 2. Lista klientow 3. Zakoncz ``` Popros uzytkownika tylko o numer. Po wyborze: - `1` pokaz liste zadan tego samego klienta, - `2` pokaz liste klientow, - `3` zakoncz. ## Raport klienta Gdy uzytkownik poprosi o raport klienta albo poda komende w stylu: ```text analiza-klienta aruba.rzeszow.pl 02-2026 ``` uruchom: ```powershell python gads.py analiza-klienta aruba.rzeszow.pl 02-2026 ``` To jest alias dla generowania miesiecznego raportu HTML klienta. Obslugiwane sa formaty miesiaca `MM-YYYY`, `MM.YYYY` i `YYYY-MM`. Jesli uzytkownik napisze tylko: ```text raport-klienta ``` uruchom: ```powershell python gads.py raport-klienta ``` Pokaz uzytkownikowi liste klientow i popros o numer. Po wyborze klienta oraz miesiaca uruchom: ```powershell python gads.py raport-klienta --client-number --month ``` Komenda najpierw pobiera dane i zatrzymuje sie przed generowaniem HTML. Tworzy plik roboczy: ```text scripts/reports/output/__recommendations.json ``` Wnioski i rekomendacje przygotowuje agent AI, nie skrypt. Agent ma przeczytac dane raportu i kontekst w pliku rekomendacji, uzupelnic `recommendations` konkretnymi wnioskami, pokazac je uzytkownikowi i zapytac o akceptacje. Wnioski pisz z perspektywy osoby, ktora obsluguje konto Google Ads klienta. Nie pisz do klienta, ze `warto cos sprawdzic`, `trzeba zweryfikowac` albo `nalezy przeanalizowac`, jakby decyzja byla po jego stronie. Pisz decyzyjnie: co robimy, co zostawiamy, co ograniczamy, co kontrolujemy i jaki jest nastepny krok po naszej stronie. Unikaj bezosobowych, nijakich rekomendacji. W tekstach raportu dla klienta uzywaj poprawnych polskich znakow. Dotyczy to szczegolnie tytulow, wnioskow i rekomendacji w pliku `recommendations`. Nie zapisuj tam wersji bez ogonkow typu `zwiekszamy`, `wartosc`, `srednia`, jezeli tekst trafi do HTML widocznego dla klienta. Po akceptacji wnioskow uruchom: ```powershell python gads.py raport-klienta --client --month --confirm-recommendations TAK ``` Dopiero wtedy komenda generuje lokalny raport HTML w: ```text scripts/reports/output///index.html ``` Jeżeli klient ma w `config/clients.toml` ustawione `sales_history_sheet`, historia sprzedaży miesięcznej oraz trzy kafelki w sekcji `E-commerce — Sprzedaż` mają pochodzić z tego arkusza Google Sheet. Arkusz powinien zawierać kolumny: `Miesiąc`, `Transakcje`, `Przychody`, `Średnia wartość koszyka`. Nie zastępuj tych danych GA4, jeżeli arkusz jest skonfigurowany. Po wygenerowaniu raportu pokaz uzytkownikowi sciezke do pliku i popros o akceptacje przed wysylka na serwer. Nie wysylaj raportu bez jasnej zgody uzytkownika. Po akceptacji uruchom upload: ```powershell python gads.py raport-klienta --client --month --confirm-upload TAK ``` Po wysylce podaj URL: ```text https://adspro.projectpro.pl/raporty/// ``` ## Zasady komunikacji - Pisz po polsku. - Prowadz uzytkownika etapami: klient -> grupa zadan -> zadanie -> plan -> akceptacja -> wdrozenie. - Nie wymagaj od uzytkownika zapamietywania technicznych identyfikatorow zadan. - Nie uzywaj skrotow bez potrzeby. Pisz `grupa reklam`, nie `AG`. - Pisz `wdrozenie zmian`, nie `mutacja`. - Pisz `Docelowy ROAS`, nie `tROAS`, chyba ze cytujesz nazwe techniczna. - Odpowiedzi analityczne maja byc krotkie: co zostanie zrobione, ile elementow, jakie ryzyko, czy rekomendujesz wdrozenie. - Odpowiedzi analityczne po odczytaniu planu musza zawierac tabele. Nie streszczaj planu samymi punktami. Minimalny format analizy planu: ```text Zadanie 1/2: Synchronizacja kampanii PLA_CL1 Podsumowanie po kampaniach ┌──────────────────────┬────────┬───────┬───────────┬─────────────┐ │ Kampania │ Utworz │ Wlacz │ Wstrzymaj │ Zmien nazwe │ ├──────────────────────┼────────┼───────┼───────────┼─────────────┤ │ [PLA_CL1] pozostale │ 0 │ 1 │ 0 │ 0 │ │ [PLA_CL1] worki │ 0 │ 8 │ 0 │ 0 │ └──────────────────────┴────────┴───────┴───────────┴─────────────┘ Najwazniejsze dzialania ┌────┬─────────────────────┬────────────────────────────────────────┐ │ Nr │ Kampania │ Dzialanie │ ├────┼─────────────────────┼────────────────────────────────────────┤ │ 1 │ [PLA_CL1] pozostale │ Wlacz grupe reklam: nazwa grupy │ └────┴─────────────────────┴────────────────────────────────────────┘ Ryzyko: niskie. Rekomendacja: wdrozyc. ``` Jesli lista dzialan jest dluga, pokaz tabele z pierwszymi 10 pozycjami i dopisz liczbe pozostalych. Nadal pokaz pelne podsumowanie po kampaniach. ## Bezpieczenstwo - Najpierw zawsze tworz plan przez `--plan-only`. - Nie wdrazaj planu, dopoki uzytkownik jasno nie zaakceptuje. - Wdrazaj tylko plan zapisany w pliku JSON. - Po wdrozeniu sprawdz i podaj sciezki historii: - `clients//history/YYYY-MM-DD.jsonl` - `clients//changes/YYYY-MM-DD.md` - Po wykonaniu albo odrzuceniu zadania zawsze zaproponuj powrot do listy zadan albo listy klientow. ## Konfiguracja zadan Lista grup i zadan jest w: ```text config/tasks.toml ``` Dodawaj nowe zadania do odpowiednich grup, z czytelna nazwa dla uzytkownika. Szczegolowa instrukcja rozbudowy narzedzia jest w: ```text DEVELOPMENT.md ``` ## Zadania: Produkty Grupa `Produkty` jest podzielona na trzy osobne zadania: - `Optymalizacja tytulow produktow` pobiera z adsPRO tylko produkty bez zoptymalizowanego tytulu. - `Optymalizacja kategorii Google` pobiera z adsPRO tylko produkty bez kategorii Google. - `Uzupelnienie unit pricing` pobiera z adsPRO tylko produkty bez unit pricing. Nie mieszaj tych zakresow w jednym planie. Tytuly produktow wybiera agent AI po analizie produktu, tytulu bazowego, strony produktu albo kontekstu klienta. Kategorie Google wybiera agent AI po analizie produktu, tytulu, strony produktu albo kontekstu klienta. Skrypt nie wybiera automatycznie tytulow ani kategorii Google. Przed wdrozeniem tytulow agent musi uzupelnic docelowe wartosci tytulow w zapisanym planie JSON i dopiero wtedy zapytac uzytkownika o zgode. Przed wdrozeniem kategorii agent musi uzupelnic docelowe wartosci kategorii w zapisanym planie JSON i dopiero wtedy zapytac uzytkownika o zgode. Unit pricing moze byc proponowany przez skrypt, jezeli da sie go jednoznacznie odczytac z nazwy produktu. ## Reczne przypisywanie regul Gdy uzytkownik napisze: ```text Przypisz regule: - tresc reguly do oceny ``` agent ma potraktowac to jako prosbe o kuracje pojedynczej reguly wiedzy. Kolejnosc pracy: 1. Sprawdz aktualne grupy i zadania w `config/tasks.toml`. 2. Nie przywracaj usunietych zadan ani grup. Jesli lista zadan jest ograniczona, uznaj to za swiadoma decyzje uzytkownika. 3. Ocen, czy regule warto dodac do narzedzia. 4. Zaproponuj docelowe brzmienie reguly: `condition`, `recommendation`, `risk`, `rule_type`, `topic`, `confidence` i docelowe `task_ids`. 5. Zaproponuj policzalny `machine_condition` i `machine_effect`, jezeli regule da sie bezpiecznie zastosowac w skrypcie na danych pobieranych przez dane zadanie. 6. `machine_condition` ma uzywac tylko pol, ktore naprawde istnieja w planie danego zadania, np. `channel_type`, `conversions_30d`, `bidding_strategy_type`, `budget_context`, `search_budget_lost_impression_share`. 7. Jesli nie da sie zbudowac bezpiecznego warunku maszynowego, napisz to wprost i zaproponuj zapis reguly bez automatycznego wplywu, jako kontekst dla agenta AI/czlowieka. 8. Uzywaj tylko istniejacych identyfikatorow zadan z `config/tasks.toml`. 9. Jesli nie ma dobrego zadania, powiedz, ze regule lepiej odlozyc albo dodac dopiero po utworzeniu nowego zadania. 10. Nie zapisuj reguly do `knowledge/rules.jsonl`, dopoki uzytkownik jasno nie odpowie `Dodaj`. 11. Po odpowiedzi `Dodaj` dopisz jedna kompletna linie JSONL do `knowledge/rules.jsonl`. Przy zapisie do `knowledge/rules.jsonl` uzupelnij pola: `id`, `status`, `topic`, `task_ids`, `suggested_task_ids`, `rule_type`, `condition`, `recommendation`, `risk`, `source`, `source_file`, `confidence`, `duplicate_of`, `supersedes`, `text`, `created_at`, `updated_at`. Jezeli regula ma dzialac automatycznie, dodaj tez `machine_condition` i `machine_effect`. Przyklad policzalnej czesci reguly: ```json { "machine_condition": { "all": [ {"field": "channel_type", "op": "eq", "value": "SEARCH"}, {"field": "conversions_30d", "op": "lt", "value": 15}, {"field": "bidding_strategy_type", "op": "in", "value": ["MAXIMIZE_CONVERSIONS", "TARGET_CPA", "MAXIMIZE_CONVERSION_VALUE", "TARGET_ROAS"]} ] }, "machine_effect": { "level": "ostroznie", "action": "nie przechodz na automatyzacje konwersyjna", "reason_prefix": "Regula wiedzy" } } ``` Ten tryb jest reczna alternatywa dla komendy: ```powershell python gads.py wiedza przypisz ``` ## Reguly i wyjatki klientow Ustawienia globalne i wyjatki per klient sa w: ```text config/clients.toml ``` Przyklad globalnych regul dla kampanii PLA: ```toml [global_rules.pla_settings] require_presence_only = true require_high_priority = true ``` Wyjatek per klient: ```toml [clients."example.pl".pla_settings] require_high_priority = false ``` Jesli klient ma wylaczona regule, agent nie powinien sugerowac wdrozenia tej zmiany.