Sobota s AI: osmnáct sessions, osmnáct PR
Co všechno se dnes na serveru změnilo, když jsem celý den pracoval s Claude Code. Od studené trubky u kotle po nový vzhled tohohle webu.
Dnes jsem s Claude Code strávil skoro celý den. Osmnáct sessions, osmnáct zmergovaných pull requestů ve třech repozitářích. Tohle je výpis toho, co se změnilo, v pořadí, v jakém to přicházelo.
Ráno: kotel#
Začalo to studenou trubkou. Kotel topí, čerpadlo běží, ale přívod do radiátorů je studený už u kotle. Dvě fotky rozvodů, pár otázek, a k tomu jedna nová věc: AI se od rána umí zeptat Home Assistanta, a ten vidí na kotel. Takže místo „přečti mi displej" jsem dostal stav kotle z dat.
Výsledek je diagnóza (do topné větve neproudí voda, podezřelý filtr na zpátečce nebo trojcestný ventil) a koncept e-mailu servisu.
Dopoledne: otázky a úklid#
Fronta otázek, kterou si AI vede, mi připomněla dálniční známku. Ukázalo se, že letos jsem ji nejspíš nezaplatil: potvrzení z předchozích let v poště jsou, letošní chybí. Známku kupuju sám, AI peníze nehýbe. Umí ale připravit odkaz tak, že zbývá jen zaplatit.
Vedle toho pár drobností: smazat omylem uložený snímek Steamu a uklidit stará rozhodnutí, která už neplatí.
Hlídač zdravotních dat#
Hodinky posílají data na server přes automatizaci v telefonu. Čtyřikrát
to vypadlo a pokaždé se to poznalo až tím, že jsem se zeptal. Od dneška
běží ráno health-watch: když data mlčí, založí otázku do fronty a ta se
mi ozve v chatu nebo na Discordu. Když data znovu přijdou, otázku sám
zruší.
Bezpečnostní audit konzole#
Na tajném URL mám přehled o AI na serveru. Požádal jsem o bezpečnostní kontrolu a vyšly tři věci:
- Služba poslouchala na lokálním portu bez hesla. Heslo bylo jen v nginx, takže každý lokální účet na serveru četl transkripty a paměť napřímo. Teď běží přes unixový socket, ke kterému se dostane jen nginx.
- Prohlížeč souborů ukazoval i to, co git ignoruje. Přesně tam se
ukládají tajemství. Pod
~/gitteď vidí jen soubory, které git sleduje. - Hádání hesla nikdo nebrzdil. Přibyl fail2ban: pět špatných hesel za deset minut a hodina banu. Jail čte vlastní error log konzole, aby omylem nezabanoval adresy Cloudflare, přes které jde tenhle web.
Pauza#
Poobědová cesta vlakem tři zastávky a zpět pěšky, cca 4 km příjemné procházky se ženou a psem.
Revize štítků v Gmailu#
Měsíc přijaté pošty proti pravidlům filtrů. Několik pravidel se rozšířilo, jedno vzniklo nové. To je to, o kterém jsem psal dnes odpoledne.
Při té práci padla otázka, jestli máme nějaký kalendář na věci, které se mají udělat později. Neměli jsme. Do večera byl.
Kalendář odložené práce#
Práce, kterou AI dluží k určitému dni (za týden zkontroluj, jestli štítky sedí), žila jen v próze poznámek a sama se neozvala. Teď je to položka v kalendáři. Ráno v sedm ji AI připraví v bezobslužném běhu a pošle mi na Discord jednu otázku. Zkušební položka proběhla dnes v pět odpoledne, zpráva dorazila. Původně měl běh startovat v půl čtvrté ráno, ale to by mě budil, tak se posunul na sedmou.
Web dostal vzhled#
Tenhle web byl za heslem, protože byl škaredý. Návrh vznikl v Claude Designu, vybral jsem variantu „Deník výpravy" a AI ji převedla do Huga: titulka jako deník po dnech, vlastní stránka zápisu, stránka hry jako deník zúžený na jednu hru, nové barvy a písma Alegreya přímo ze serveru.
Pak přišlo kolo připomínek, každá jako samostatný PR: rámy obrázků podle hry (první verze byla hodně dětská, druhá se kreslila v Claude Designu a teprve pak nasadila), stránka Teď, čas a hra a titulek na jednom řádku, a řádek „podle tématu" počítaný z posledních deseti zápisů.
K tomu dvě hlášky, obě o AI. A na závěr samostatný redakční worker jen pro tenhle web, aby nemusel tahat celou paměť hlavního asistenta.
Nástroje po kategoriích#
Stránka Nástroje v konzoli vypisovala jeden plochý seznam a nešlo z něj poznat, co všechno setup má. Teď je šest sekcí podle toku dat: sběr, zpracování, hledání a přehledy, otázky a hlídání, výstup ven, provoz. Zařazení nese každý nástroj sám v hlavičce, takže dělení nezastará s příštím nástrojem. Test hlídá, že žádný nástroj nezůstal bez kategorie.
Hodiny pro model#
Tohle mě dnes bavilo nejvíc. Model nemá hodiny. Po denní pauze vidí tentýž transkript jako po pěti minutách a klidně mi znovu řekne „zmerguj tu větev", i když jsem ji zmergoval včera. V literatuře se tomu říká temporal blindness a časová značka v promptu to sama o sobě moc nespraví.
Změny jsou dvě. Hook, který ke každé mé zprávě přidá aktuální čas a dobu od poslední odpovědi. A pravidlo ve smlouvě: když minulý obrat skončil žádostí na mě, nejdřív si ověř příkazem, jestli se to nestalo, a teprve pak žádost opakuj. Nezávisle na tom, kolik času uplynulo.
Co z toho plyne#
Nejvíc oprav dnes nebylo v kódu, ale v pravidlech. „Návod je checklist a jeden krok, ne odkaz do README." „Než se zeptáš, ověř, jestli to už není hotové." „Zadáno znamená udělej."
