Dos patas ya están en producción
Un agente de Buzz es un par de claves Nostr, y ya conté lo que eso aporta en tu agente es una llave. La identidad ya viaja: la atestación que firmo sobre la clave pública del agente va en cada evento que publica, y el relay comprueba la firma del agente, mi firma y mi membresía antes de que nadie vea una palabra. Esa comprobación funciona desde cualquier máquina. Nada en ella sabe ni le importa dónde despertó el proceso.
La memoria también viaja ya. Las memorias de un agente son eventos cifrados en el relay, y la llave de descifrado se deriva de la clave privada del agente más mi clave pública, así que la memoria central se obtiene y se inyecta en cada sesión nueva dondequiera que esté la llave. Lo que sigue a la llave sobrevive a la máquina. Dos patas del taburete ya están en producción. La tercera sigue atornillada a mi portátil.
La tercera pata está pegada a la máquina
La tercera pata son las credenciales. El token de suscripción de Claude, el que genera claude setup-token para que un agente cargue el uso a mi plan en lugar de al contador de la API, vive en el entorno de una sola máquina. Igual que las claves API de las herramientas. Igual que los permisos de los servidores MCP. La identidad es portable, la memoria es portable, y todo lo que el agente necesita para trabajar de verdad está grapado a la caja que configuré primero.
Aquí va la confesión de nuestro propio despliegue. Una clave API de una herramienta llegaba a uno de nuestros agentes a través de un script envoltorio escrito a mano, colado a espaldas del producto. Ninguna superficie podía listar ese permiso. Nada podía auditarlo. Nada podía rotarlo. Funcionaba, que es lo peor, porque un apaño que funciona en silencio acaba convertido en infraestructura. Un permiso que no puedes listar es un permiso que no puedes revocar.
La rotación es donde la molestia se convierte en caída. Vuelvo a ejecutar /login en mi portátil y el token que guarda cada copia remota de cada agente deja de valer, en silencio, sin nada que me diga quién se ha quedado tirado. La pata de la identidad se cura sola. La pata de la memoria se cura sola. La pata de las credenciales simplemente se rompe, máquina a máquina.
El llavero: rotar es republicar
NIP-AK, redactado hoy, es la tercera pata: llaveros de agente como eventos cifrados, escritos por el dueño, en el relay. Cada permiso vive en su propia dirección, un slug como key/claude-sub o key/mcp/blotato, y las direcciones se ocultan con un HMAC para que el relay no aprenda nada de lo que guarda. Los permisos tienen tipo: env, oauth, mcp, file. Y la lista de permisos MCP no es una pista: es la lista de herramientas permitidas del agente.
Rotar es republicar. Publico un head nuevo en la misma dirección y todos los consumidores convergen en él. Un watcher del lado del dueño detecta el /login local y republica en segundos, sin ninguna ceremonia por mi parte. Los consumidores leen los heads al arrancar, mantienen una suscripción viva para recibir el push y, ante cualquier fallo de autenticación, vuelven a consultar los heads antes de reintentar, así que un ejecutor que se había quedado tirado se cura solo. Un agente que durmió durante cinco rotaciones despierta con un solo head, sin protocolo para ponerse al día. Y los consumidores rechazan los heads más antiguos que el último que aceptaron, así que un permiso caducado que alguien reenvíe no hace retroceder a nadie. Revocar es rotar a una lápida.
Una regla sostiene el modelo: los agentes no pueden escribir eventos del llavero. El llavero lo escribo yo y ellos lo leen. Un agente comprometido no puede concederse una clave nueva, una lista de permitidos más amplia ni las credenciales de nadie más. Puede gastar lo que yo le concedí, hasta que yo rote. Y rotar es una sola publicación.
Lo que muestra el panel
La especificación codifica una regla de UX, y esa regla es lo importante: ninguna credencial llega a un agente si no es a través del llavero, y el llavero está a la vista. Cada agente tiene un panel: cada permiso, de dónde vino, cuándo rotó por última vez y lo fresca que está la copia de cada ejecutor. Las fuentes sincronizables son casillas por agente. Marca una y la suscripción sigue a ese agente; desmárcala y la siguiente rotación deja atrás al agente.
Pon ese panel al lado del script envoltorio de nuestro propio despliegue. La clave colada no tenía fila en ningún sitio, y toda esa clase de apaños desaparece porque ya no queda ningún sitio donde puedan vivir. Lo que muestra el panel es lo que tiene el agente. Si no está en el panel, el agente no lo tiene.
Por qué esto lo es todo
Tu agente son dos llaves: una llave de identidad y una llave de inferencia, y las dos viajan. La llave de identidad firma su trabajo. La llave de inferencia paga lo que piensa. Todo lo demás, memoria, herramientas, membresía, cuelga de una de las dos.
La llave de inferencia es también la economía. Una suscripción de Claude de $200 al mes lleva un orden de magnitud más de inferencia que el mismo gasto a precios de API, y la sangría que acabó con una serie de startups de agentes fue revender inferencia de API por debajo del precio de una suscripción. Los sistemas construidos sobre esa sangría no pueden competir con agentes que gastan la suscripción de su dueño. Las ventanas de uso no son una molestia. Son el presupuesto natural por persona.
Con tres patas debajo, la máquina deja de importar. Crea un agente en cualquier parte: el mac mini de mi escritorio, un contenedor de la flota, un pod de Kubernetes, un sandbox de Fountain. La identidad sigue a la llave. La memoria sigue a la llave. Ahora la suscripción y las herramientas también siguen a la llave. La máquina es desechable. Trátala como tal.