hachiflow.com

Ten wpis dotyczy Buzz, naszego wcześniejszego produktu. Dziś tworzymy Waggle.

Agenci

Rotacja to ponowna publikacja

Zaproponowaliśmy dziś NIP-AK w upstreamie Buzz (block/buzz PR #6011): pieczętowane przez właściciela pęki kluczy z poświadczeniami, które podążają za agentem wszędzie i rotują jedną publikacją. To historia o tym, jak tydzień kopania znalazł brakującą nogę, i o tym, dlaczego poprawka mieści się w jednym zdaniu.

Jak do tego doszło

Zaczęło się od zazdrości. Agenci GrokBot od xAI są zawsze włączeni, a są zawsze włączeni dlatego, że każdy login, którego potrzebują, czeka gotowy na chmurowym komputerze. Doświadczenie jest słuszne. Powiernictwo nie: te loginy żyją w centrum danych, którego nigdy nie zobaczysz. Chciałem tego doświadczenia z granicą powiernictwa poprowadzoną wokół właściciela, więc przez tydzień przekopywałem prawdziwy kod Buzz, żeby zobaczyć, ile z tego już istnieje.

Więcej, niż się spodziewałem. Tożsamość już podróżuje: agent Buzz to para kluczy, a NIP-OA dołącza moją podpisaną atestację klucza publicznego agenta do każdego zdarzenia, które agent publikuje, ważną z dowolnej maszyny. Pamięć też już podróżuje: NIP-AE przechowuje stan agenta jako zaszyfrowane zdarzenia, których klucz deszyfrujący wywodzi się z własnego klucza agenta, więc nowa sesja na nowej skrzynce pobiera tę samą pamięć. Dwie z trzech rzeczy, których agent potrzebuje, były przenośne, zanim napisałem choć linijkę.

Potem dwa niewygodne odkrycia w naszym własnym wdrożeniu. Po pierwsze, poświadczenie narzędzia zostało przemycone do jednego z naszych agentów przez ręcznie napisany skrypt-wrapper: uprawnienie, którego żaden interfejs nie potrafił wyświetlić ani odebrać. Po drugie, ekonomia. Token OAuth, który wydaje subskrypcja Claude, sam jest przenośny i daje o rząd wielkości więcej inferencji za dolara niż cennik API, a to marża, której brak pogrzebał kilka startupów agentowych. Ostatnią kotwicą były poświadczenia. Wszystko inne już podążało za kluczem.

Poprawka w jednym zdaniu

Rotacja to ponowna publikacja. To cała poprawka. NIP-AK przechowuje każde uprawnienie z poświadczeniem jako zaszyfrowane zdarzenie adresowalne autorstwa właściciela, kind 30180, pod własnym zaślepionym adresem, a najnowszy head pod danym adresem to aktualne poświadczenie. Żadnego protokołu synchronizacji. Żadnego wektora wersji. Żadnego przebiegu uzgadniania. Przekaźnik już teraz trzyma tylko najnowsze zdarzenie pod danym adresem; specyfikacja się na tym opiera i na tym kończy.

Oto pętla. Uruchamiam ponownie /login na laptopie. Watcher zauważa nowy token i w ciągu kilku sekund ponownie publikuje zapieczętowany head. Każdy wykonawca zbiega się przez push; wykonawca, który trafi na błąd auth, leczy się sam, odpytując ponownie head przed kolejną próbą; agent, który przespał pięć rotacji, budzi się do jednego headu, bez żadnego protokołu nadrabiania. Jedna publikacja, wszędzie.

Całość trzyma jedna zasada: zdarzenia pęku kluczy tworzy wyłącznie właściciel. Pęk kluczy ja zapisuję, a agent czyta, więc przejęty agent nie przyzna sobie nowego poświadczenia, szerszej listy dozwolonych ani cudzych kluczy. A lista uprawnień MCP to nie podpowiedź, tylko uwidoczniona lista dozwolonych narzędzi agenta. To, co przyznano, to dokładnie to, co agent może trzymać.

Twój laptop /login watcher pieczętuje · publikuje Twój przekaźnik jeden adres · najnowszy wygrywa head n head n+1 push mac mini pod kubernetes sandbox fountain błąd auth · odpytaj ponownie
Oś czasu. Jedno /login na laptopie staje się jednym zapieczętowanym headem pod jednym adresem, a każdy wykonawca się do niego zbiega: pushem, gdy jest online, ponownym odpytaniem po błędzie auth, jednym headem po dowolnej liczbie pominiętych rotacji.

Dlaczego tego potrzebujemy

Panel pęku kluczy kończy erę skryptów-wrapperów. Żadne poświadczenie nie trafia do agenta inaczej niż przez pęk kluczy, a pęk kluczy jest widoczny: każde uprawnienie, skąd pochodzi, kiedy ostatnio przeszło rotację, na jednym panelu. Przemycony klucz z naszego własnego wdrożenia nie miał nigdzie swojego wiersza. Pod NIP-AK nie zostaje miejsce, w którym mógłby przetrwać ten rodzaj obejścia.

Maszyna staje się jednorazowa. Utwórz agenta na mac mini na moim biurku, w kontenerze floty, w podzie Kubernetes, w sandboksie Fountain: ten sam klucz, te same uprawnienia. Tożsamość podąża za kluczem. Pamięć podąża za kluczem. Teraz poświadczenia podążają za kluczem, a to, gdzie proces się budzi, przestaje być decyzją architektoniczną.

I wreszcie zgadza się ekonomia. Twój agent to dwa klucze: klucz tożsamości, który podpisuje jego pracę, i klucz inferencji, który płaci za jego myślenie, i oba podróżują. Agenci wydają subskrypcję swojego właściciela, a nie marżę pośrednika. To różnica między biznesem opartym na agentach a przepalaniem gotówki.

Gdzie jesteśmy

NIP-AK to szkic poddany pod rozwagę w block/buzz PR #6011. Idzie za precedensem samego Buzz: NIP-AE weszło najpierw jako specyfikacja, a implementacja przyszła później, i ta propozycja idzie tą samą drogą. Specyfikacja jest celowo mała: kind, schemat slugów, wyprowadzenie zaślepionego adresu i zasada rotacji.

Jeden przypis z tego tygodnia. Szkic zmienił numer w trakcie, z kind 30176 na kind 30180, bo zespoły w upstreamie zajęły 30176 i sąsiednie numery, gdy jeszcze pisaliśmy. To nie jest drobna niedogodność. To zasada „najpierw rejestr” w praktyce: zarezerwuj swój kind w rejestrze, zanim zaczniesz na nim budować, bo inaczej zrobi to ktoś inny.

To trzecia z rzędu notatka z terenu o tym samym pomyśle. Tekst Twój agent to klucz uzasadnił tożsamość. Tekst Maszyna jest jednorazowa nazwał brakującą nogę. Ten proponuje poprawkę w upstreamie. Przeczytaj szkic, szukaj dziur i powiedz nam, gdzie rotacja się sypie. Specyfikacja, której nikt nie naginał, to specyfikacja, której nikt nie przetestował.

← Wszystkie notatki