Cómo se encontró
Empezó con envidia. Los agentes GrokBot de xAI están siempre activos, y lo están porque cada inicio de sesión que necesitan está listo en una máquina en la nube. La experiencia es la correcta. La custodia no: esos inicios de sesión viven en un centro de datos que nunca verás. Yo quería esa experiencia con la línea de custodia trazada alrededor del dueño, así que pasé una semana excavando en el código real de Buzz para ver cuánto de eso ya existía.
Más de lo que esperaba. La identidad ya viaja: un agente de Buzz es un par de claves, y NIP-OA lleva mi atestación firmada sobre la clave pública del agente en cada evento que publica, válida desde cualquier máquina. La memoria también viaja: NIP-AE guarda el estado de un agente como eventos cifrados cuya clave de descifrado se deriva de la propia clave del agente, así que una sesión nueva en una máquina nueva recupera la misma memoria. Dos de las tres cosas que necesita un agente ya eran portátiles antes de que yo escribiera una línea.
Luego, dos descubrimientos incómodos en nuestro propio despliegue. Primero, una credencial de herramienta se había colado en uno de nuestros agentes a través de un script wrapper escrito a mano: una concesión que ninguna interfaz podía listar ni revocar. Segundo, la economía. El token OAuth que emite una suscripción de Claude es portátil en sí mismo, y rinde un orden de magnitud más de inferencia por dólar que los precios de la API, el margen por cuya falta murieron varias startups de agentes. La última ancla eran las credenciales. Todo lo demás ya seguía a la clave.
El arreglo de una frase
Rotar es republicar. Ese es todo el arreglo. NIP-AK guarda cada concesión de credencial como un evento direccionable cifrado y escrito por el dueño, kind 30180, en su propia dirección cegada, y el head más reciente en una dirección es la credencial vigente. Sin protocolo de sincronización. Sin vector de versiones. Sin pasada de reconciliación. El relay ya guarda solo el evento más nuevo por dirección; la especificación se apoya en eso y ahí se detiene.
Este es el ciclo. Vuelvo a ejecutar /login en mi portátil. Un watcher detecta el token nuevo y republica el head sellado en cuestión de segundos. Cada ejecutor converge por push; un ejecutor que se topa con un fallo de auth se cura solo reconsultando el head antes de reintentar; un agente que durmió durante cinco rotaciones despierta ante un solo head, sin protocolo de puesta al día. Una publicación, en todas partes.
Una regla lo sostiene todo: los eventos del llavero solo los escribe el dueño. El llavero es mío para escribirlo y del agente para leerlo, así que un agente comprometido no puede concederse una credencial nueva, una lista de permitidos más amplia ni las claves de nadie más. Y la lista de concesiones MCP no es una pista, es la lista de herramientas permitidas del agente hecha visible. Lo concedido es exactamente lo que el agente puede tener.
Por qué lo necesitamos
El panel del llavero pone fin a la era de los scripts wrapper. Ninguna credencial llega a un agente salvo a través del llavero, y el llavero es visible: cada concesión, de dónde vino, cuándo rotó por última vez, en un solo panel. La clave colada en nuestro propio despliegue no tenía fila en ninguna parte. Con NIP-AK ya no queda ningún sitio donde pueda vivir ese tipo de apaño.
La máquina se vuelve desechable. Crea un agente en el mac mini de mi escritorio, en un contenedor de la flota, en un pod de Kubernetes, en un sandbox de Fountain: la misma clave, las mismas concesiones. La identidad sigue a la clave. La memoria sigue a la clave. Ahora las credenciales siguen a la clave, y el lugar donde despierta el proceso deja de ser una decisión de arquitectura.
Y por fin cuadran las cuentas. Tu agente son dos claves: una clave de identidad que firma su trabajo y una clave de inferencia que paga lo que piensa, y las dos viajan. Los agentes gastan la suscripción de su dueño, no el margen de un revendedor. Esa es la diferencia entre un negocio de agentes y una tasa de quema.
En qué punto está
NIP-AK es un borrador en consideración en block/buzz PR #6011. Sigue el precedente del propio Buzz: NIP-AE entró primero como especificación y la implementación vino después, y esta propuesta toma el mismo camino. La especificación es deliberadamente pequeña: un kind, un esquema de slugs, una derivación de dirección cegada y la regla de rotación.
Una nota al pie de la semana. El borrador se renumeró en pleno vuelo, del kind 30176 al kind 30180, porque equipos upstream reclamaron el 30176 y sus vecinos mientras aún lo estábamos escribiendo. Eso no es una molestia. Es la regla de registrar primero demostrando su valor: reclama tu kind en el registro antes de construir sobre él, o lo hará otro.
Esta es la tercera nota de campo seguida sobre la misma idea. Tu agente es una llave defendió la identidad. La máquina es desechable nombró la pata que faltaba. Esta propone el arreglo upstream. Lee el borrador, búscale fallos y dinos dónde se rompe la rotación. Una especificación que nadie ha forzado es una especificación que nadie ha probado.