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ć.
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ł.