Agent jest zainstalowany, rozmawia z lokalnym modelem i odpowiada na Telegramie. Czas dać mu pracę. W tej części zbudujesz trzy automatyzacje, które na co dzień oszczędzają najwięcej czasu, każdą z granicami bezpieczeństwa dopasowanymi do ryzyka.
Raport z homelabu co rano
Cel: codziennie o 7:00 dostajesz na Telegram krótkie podsumowanie stanu labu. Pule ZFS, wolne miejsce, zatrzymane maszyny, ostatnie backupy i aktualizacje, a przy problemie — co dokładnie wymaga uwagi.
Nie dajemy agentowi konta na serwerze. Proxmox udostępni jeden skrypt tylko do odczytu, a klucz SSH agenta nie pozwoli uruchomić niczego innego — nawet jeśli model źle zrozumie polecenie albo ktoś spróbuje go zmanipulować.
Skrypt raportu na Proxmoxie
#!/usr/bin/env bash# Raport stanu homelabu — wyłącznie odczyt.# Uruchamiany przez klucz SSH z wymuszonym poleceniem (command=... w authorized_keys).set -uo pipefail
section() { printf '\n## %s\n' "$1"; }
echo "# $(hostname -f) — $(date '+%F %T')"
section "Uptime i obciążenie"uptime
section "ZFS"zpool status -xzpool list -o name,size,alloc,free,cap,frag,health
section "Magazyny Proxmox"pvesm status
section "Maszyny wirtualne"qm list
section "Kontenery LXC"pct list
section "Snapshoty (Sanoid)"sanoid --monitor-snapshots 2>&1 || true
section "Ostatnie backupy vzdump"for log in $(ls -1t /tank/backup/dump/*.log 2>/dev/null | head -5); do printf '%s: %s\n' "$(basename "$log")" "$(tail -n 1 "$log")"done
section "Aktualizacje"echo "Pakiety do aktualizacji: $(apt list --upgradable 2>/dev/null | tail -n +2 | wc -l)"
section "SMART"for disk in /dev/disk/by-id/ata-* /dev/disk/by-id/nvme-*; do [[ -e "$disk" && "$disk" != *-part* ]] || continue printf '%s: %s\n' "$(basename "$disk")" \ "$(smartctl -H "$disk" 2>/dev/null | awk -F': *' '/overall-health|Health Status/ {print $2}')"donechmod 755 /usr/local/bin/lab-status/usr/local/bin/lab-status # sprawdź, czy wszystkie sekcje działająProxmox codziennie odświeża listę pakietów (pve-daily-update), więc sekcja aktualizacji jest aktualna bez uruchamiania apt update w skrypcie.
Klucz z wymuszonym poleceniem
Na stacji roboczej wygeneruj osobny klucz dla agenta. Hasło zostaw puste — agent działa bez nadzoru, a klucz i tak pozwoli tylko na jeden skrypt:
ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\hermes_lab" -C "hermes-raport"Get-Content "$env:USERPROFILE\.ssh\hermes_lab.pub"Na Proxmoxie dopisz klucz publiczny do /root/.ssh/authorized_keys z ograniczeniami przed kluczem:
restrict,command="/usr/local/bin/lab-status",from="192.168.1.50" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...reszta-klucza hermes-raportcommand="…"— niezależnie od tego, co klient chce uruchomić, serwer wykona tylko skrypt raportu.restrict— wyłącza przekierowanie portów, agenta SSH, X11 i terminal. Klucz nie posłuży nawet do tunelu.from="…"— klucz działa tylko z adresu stacji roboczej (wstaw jej adres w LAN).
Wpis w konfiguracji SSH na stacji roboczej skraca polecenie do jednego słowa:
Host pve1-raport HostName 192.168.1.10 User root IdentityFile ~/.ssh/hermes_lab IdentitiesOnly yesssh pve1-raport # wypisze raportssh pve1-raport hostname # też wypisze raport, a nie nazwę hosta — polecenie klienta jest ignorowaneZadanie w harmonogramie
Najpierw sprawdź zadanie ręcznie w rozmowie z agentem:
Uruchom polecenie `ssh pve1-raport` i na podstawie wyniku przygotuj krótki raport o stanie homelabu.Przy pierwszym uruchomieniu Hermes może zapytać o zgodę na polecenie — wybierz zawsze, żeby dopisać je do listy dozwolonych. Zadania z harmonogramu działają z cron_mode: deny i nie mają kogo zapytać, więc bez tego wpisu zostałyby zablokowane.
Teraz harmonogram:
hermes cron create "every day at 7am" "Uruchom polecenie 'ssh pve1-raport' i przeanalizuj wynik. Wyślij raport po polsku, maksymalnie 8 linii. Na początku jedno słowo: OK, UWAGA albo AWARIA. Wymień tylko to, co wymaga działania: pule ZFS inne niż healthy lub zajęte powyżej 80%, zatrzymane maszyny z onboot, nieudane backupy, dyski z SMART innym niż PASSED/OK, więcej niż 20 aktualizacji. Jeśli wszystko jest w porządku, napisz tylko: OK — homelab działa poprawnie." --deliver telegram
hermes cron listTreść zadania to prompt dla modelu. Im precyzyjniej opiszesz progi i format, tym bardziej przewidywalny raport. Bramka musi działać (hermes gateway start), żeby wynik dotarł na Telegram.
Pomoc przy kodzie
Hermes czyta i edytuje pliki, uruchamia testy i polecenia gita. Z lokalnym modelem 12B najlepiej sprawdza się w małych, dobrze opisanych zadaniach: napisanie funkcji, test do istniejącego kodu, wyjaśnienie modułu, refaktoryzacja jednego pliku, skrypt administracyjny.
Zasady, które oszczędzają frustracji:
- Zawsze pracuj na gałęzi i czystym drzewie gita. Zanim zaczniesz:
git switch -c agent/opis-zadania. Zmiany agenta ocenisz przezgit diffi odrzucisz jednymgit restore .. - Uruchamiaj agenta w katalogu projektu (
cd D:\projekty\moj-projekt; hermes), a w poleceniu podawaj ścieżki plików. Model 12B nie przeszuka sprawnie dużego repozytorium „na ślepo”. - Jedno zadanie na sesję. Długa rozmowa zjada kontekst 64K. Po zakończeniu zadania zacznij nową sesję.
- Weryfikacja należy do Ciebie. Poproś agenta o uruchomienie testów, ale przeczytaj diff przed commitem.
Przykładowe polecenie, które działa dobrze:
Przeczytaj src/utils/posts.ts. Funkcja readingTime liczy słowa w blokach kodu jako połowę.Dodaj obsługę bloków MDX (komponenty <ProductBox> i <Callout>) tak, żeby tekst wewnątrz Calloutbył liczony normalnie, a same znaczniki pomijane. Nie zmieniaj innych funkcji.Na koniec pokaż mi git diff.Konkretny plik, konkretna funkcja, jasne kryterium i ograniczenie zakresu — to różnica między agentem, który pomaga, a agentem, który „poprawia” pół projektu.
Przetwarzanie dokumentów
To zastosowanie, w którym lokalny model ma największą przewagę nad chmurą: umowy, faktury, notatki ze spotkań, dokumentacja medyczna — nic nie opuszcza komputera.
Utwórz katalog roboczy, np. D:\Dokumenty\do-przejrzenia, i rozmawiaj z agentem w terminalu na stacji roboczej, nie przez Telegram — treść dokumentów nie powinna przechodzić przez serwery komunikatora.
Przeczytaj wszystkie pliki .md i .txt w D:\Dokumenty\do-przejrzenia\notatki.Dla każdego napisz trzy zdania streszczenia i listę zadań do zrobienia z terminami.Zapisz wynik w D:\Dokumenty\do-przejrzenia\podsumowanie.md.W katalogu D:\Dokumenty\do-przejrzenia\skany są zdjęcia paragonów.Odczytaj z każdego datę, sklep i kwotę brutto i zapisz jako CSVw D:\Dokumenty\do-przejrzenia\wydatki.csv. Jeśli czegoś nie da się odczytać, wpisz BRAK.Gemma 4 rozumie obrazy, więc zdjęcia i skany odczyta bezpośrednio. Pliki PDF z warstwą tekstową najprościej przekonwertować wcześniej do tekstu. Wyniki traktuj jak pracę stażysty: szybko, ale sprawdź kwoty i daty, zanim na ich podstawie cokolwiek zapłacisz lub wyślesz.
Pamięć agenta
Hermes zapamiętuje ustalenia między sesjami: preferencje, nazwy maszyn, konwencje w projektach. Ułatw mu to od razu, np. poleceniem: „Zapamiętaj: mój homelab to Proxmox pve1 (192.168.1.10) z pulą ZFS tank. Raporty i odpowiedzi piszemy po polsku, krótko. Kod formatuję tabulatorami.” Kolejne rozmowy nie będą wymagały powtarzania kontekstu.
Zawartość pamięci możesz w każdej chwili przejrzeć i poprawić — to zwykłe pliki w %LOCALAPPDATA%\hermes\.
Podsumowanie serii
Masz kompletny, lokalny stos AI:
- Gemma 4 12B w całości w 16 GB VRAM z kontekstem 64K, z zapasem pamięci,
- LM Studio jako serwer API działający w tle,
- Hermes Agent z pamięcią, zatwierdzaniem poleceń i dostępem z telefonu,
- automatyzacje z granicami dopasowanymi do ryzyka: raport z homelabu przez klucz z wymuszonym poleceniem, praca z kodem na gałęziach gita, dokumenty tylko lokalnie.
Wszystko bez abonamentu i bez wysyłania prywatnych danych do chmury. Ta sama maszyna w wolnych chwilach zamienia się w domowy serwer gier — o tym w następnej kategorii.