Arquitectura
Agent NAS tiene cuatro capas y una capa de sincronización opcional: Interface proyecta las capacidades en interfaces existentes, Trust es el único punto de autorización, Memory convierte las notas en conocimiento consultable y Store guarda un árbol con historial. La capa Memory se puede borrar y reconstruir entera, y Store simplemente usa almacenamiento maduro.
Cuatro capas y sincronización opcional
- Interface (interfaz)
Proyecta las capacidades en interfaces que los agentes, las personas y las herramientas ya usan. Las pasarelas no tienen estado y nunca deciden quién puede hacer qué.
- Montaje (FUSE, NFS, SMB)
- Git
- Compatible con S3
- WebDAV
- MCP
- API HTTP
- CLI
- A2A (opcional)
- Trust (confianza)
El único punto de autorización. Un motor de políticas determinista sin ningún modelo en la decisión; primero se registra y después se actúa.
- Sujetos y ejecuciones
- Capability Lease
- Motor de políticas
- Human Gate
- Trust Labels
- Credential Broker
- Flight Recorder
- Memory (memoria)
Convierte las notas en conocimiento consultable y legible con presupuesto. Todo se puede reconstruir a partir de la capa inferior.
- Convenciones de notas
- Índices (texto completo, vectorial, grafo)
- Budgeted Reads
- Tareas de mantenimiento
- Linaje
- Cascade Forget
- Store (almacén)
Un árbol con historial, sobre instantáneas maduras del sistema de archivos, Git o almacenamiento de objetos versionado. No entiende la memoria ni las etiquetas.
- Tree
- Commit
- Agent Branch
- Instantáneas del sistema de archivos
- Git
- Almacenamiento de objetos
Replicación y uso compartido entre nodos. Va al final a propósito: primero hay que dejar bien un solo nodo.
- Remotos de Git
- Transferencia de instantáneas
- Enlaces de concesión
- Paquetes de traspaso
- La capa Memory es reconstruible. Borra todos los índices y reconstruye, y las notas de Store siguen siendo totalmente legibles.
- Las pasarelas no tienen estado. Todo el estado persistente está en Store y en los registros de Trust; una pasarela puede reiniciarse libremente y escalar en horizontal.
- Trust es el único punto de autorización. Eso incluye las tareas en segundo plano del propio NAS (indexación, mantenimiento): también se ejecutan como principals
svc:*con concesiones. - Store no entiende la memoria ni la semántica de las etiquetas. Solo guarda un árbol con metadatos.
- Primero se registra, después se actúa. Una operación con consecuencias debe escribir antes un registro de intención.
La cintura estrecha: seis sustantivos
Todo el diseño depende de seis sustantivos; las etiquetas, las compuertas, la memoria y los manifiestos de lectura son convenciones construidas encima.
| Sustantivo | Significado | Invariante clave |
|---|---|---|
| Tree | Un árbol de directorios con historial. | Cualquier commit se puede reproducir; hay un hash de contenido o una detección de cambios equivalente. |
| Commit | Un cambio inmutable. | Lleva metadatos de procedencia: principal, on_behalf_of, run, lease. |
| Principal | Una entidad que puede autenticarse y rendir cuentas. | El tipo es human, agent, service o node; un agent pertenece a un rol, no a una ejecución. |
| Run | Una ejecución con principio, fin, propósito y un responsable. | Tiene una concesión raíz; es dueña de una rama. |
| Lease | La autorización de una ejecución. | Tiene caducidad; solo se puede acotar más; es revocable; lleva presupuestos. |
| Record | Un registro de solo anexado. | Encadenado por hashes; primero se registra, después se actúa. |
La capa Store: contrato y motores opcionales
El contrato de Store lo proporciona un motor o lo emula la pasarela. Una implementación puede combinar motores, por ejemplo Git para el texto e instantáneas para los archivos grandes; el contrato no prescribe el motor, la función hash ni el formato en disco.
- Commits atómicos.
- Bifurcaciones baratas: idealmente cercanas a O(1); en el peor caso degradándose a una copia, y entonces las cuotas y un TTL son obligatorios.
- Instantáneas inmutables.
- Detección de cambios: un hash de contenido o un equivalente.
- La diferencia entre dos commits.
- Exportación completa en un formato estándar: un directorio, el historial de Git y los metadatos
.nas/en texto plano.
| Motor | Adecuado para | Coste de bifurcar | Nota |
|---|---|---|---|
| Git (con worktrees) | Texto, memoria, habilidades, bases de código pequeñas | Bajo | Los archivos grandes necesitan LFS o almacenamiento externo; las fusiones binarias son malas. |
| Instantáneas y clones del sistema de archivos (ZFS, btrfs, APFS) | Directorios grandes, archivos mixtos | Cercano a O(1) | Depende del sistema de archivos; copiar entre máquinas necesita send/receive. |
| Almacenamiento de objetos versionado (forks de Tigris, lakeFS, S3 más un manifiesto) | Conjuntos de datos, archivos grandes | Cercano a O(1) | Necesita que la pasarela ofrezca una vista de archivos. |
| Directorio normal más copia | Empezar con Lite | O(n) | Solo para datos pequeños; las cuotas y un TTL son obligatorios. |
La vía de recuperación queda fuera del radio de impacto
Las instantáneas y las copias de seguridad están en manos del principal propietario, y ninguna concesión puede incluir “borrar una instantánea” ni “borrar una copia de seguridad”. Es la lección más directa del incidente de abril de 2026: la vía de recuperación debe quedar fuera del radio de impacto de lo que protege.
- El cifrado en reposo viene de la capa inferior; la clase de retención
sensitiveusa su propio dominio de claves, de modo que se puede destruir eliminando la clave. - La deduplicación y la destrucción entran en conflicto: la clase
sensitiveno se deduplica entre dominios de claves.
El recorrido de una ejecución
- Solicitar. El orquestador (o el propietario) solicita una concesión para una ejecución: rutas, acciones, caducidad, propósito. Dentro del sobre de políticas se emite de forma automática; fuera de él pasa a una Human Gate.
- Empezar. El NAS crea el
runy la rama<role>/<run_id>y entrega la concesión a la ejecución; el sandbox monta la rama (o hace ungit clone). - Trabajar. El agente lee y escribe con herramientas de archivos normales. Las lecturas se acumulan en el manifiesto de lectura y la contaminación de la sesión se actualiza con ellas; el acceso fuera de los límites se rechaza y se registra.
- Hacer commit. Los cambios se confirman con un commit de forma automática (con retardo) o explícita, y cada commit lleva metadatos de procedencia.
- Proponer.
proposecrea un Agent PR: el diff, la intención, un resumen del manifiesto de lectura, los resultados de las comprobaciones y un resumen de etiquetas. - Decidir. El motor de políticas decide: si las comprobaciones pasan y el riesgo es bajo, se fusiona de forma automática; si hay datos protegidos, una acción hacia el exterior o una violación de la Rule of Two, pasa a una Human Gate; si está claramente prohibido, se rechaza.
- Fusionar y registrar. La fusión crea un commit con procedencia y escribe un Record.
- Cerrar. La concesión caduca; la rama se recicla tras su TTL; los manifiestos de lectura y los Records se conservan según la política de retención.
La ruta de lectura: solicitud, comprobación de la concesión, comprobación de etiquetas (¿permite la contaminación actual de la sesión esta lectura?), recuento del presupuesto, lectura desde Store, anotación en el manifiesto de lectura, y devolución del contenido y de los punteros de evidencia.
Primero se registra, después se actúa
Una operación con consecuencias (fusionar, borrar, compartir, enviar al exterior, cambiar una concesión) debe escribir antes un registro de intención; si no se puede escribir, la operación falla (fail closed). Las lecturas van al manifiesto de lectura, que se vuelca por lotes y no necesita ser síncrono en cada lectura.
Formas de despliegue
| Forma | Descripción | Adecuado para |
|---|---|---|
| Lite | Una sola máquina y un solo usuario: un proceso de pasarela más almacenamiento local (Git o instantáneas del sistema de archivos); L0 a L1. | Particulares y desarrolladores que lo prueban. |
| Overlay | Deja en paz el NAS o el almacén de objetos existente: una pasarela se coloca delante y gestiona solo un directorio o un bucket; los montajes y la vista S3 pasan por la pasarela. | El punto de partida más realista: quien ya tiene un equipo. |
| Team | Varios usuarios y agentes, un servidor o un clúster pequeño; L0 a L3; notificaciones de compuertas y una sala de control. | Equipos pequeños. |
| Cloud | Un servicio alojado multiinquilino con aislamiento fuerte; L0 a L3. | Quien no tiene hardware propio. |
El principio: no se necesita hardware especial y vale cualquier máquina siempre encendida; los aceleradores son opcionales, porque bastan modelos pequeños para los embeddings y los resúmenes, y también se pueden llamar servicios externos.
Construir una v0 con piezas existentes
| Capacidad | Piezas que puedes usar hoy |
|---|---|
| Store y ramas | Git y worktrees; instantáneas de btrfs o ZFS; o Tigris y lakeFS (almacenamiento de objetos). |
| Línea principal protegida | Protección de ramas en Forgejo, Gitea o GitHub; o ramas protegidas de lakeFS. |
| Concesiones | Un servidor de autorización OAuth (por ejemplo Keycloak) con intercambio de tokens, y un servidor de recursos que compruebe el prefijo de la ruta y la acción; o un servicio de firma de unos cientos de líneas. |
| Registros | Una tabla SQLite de solo anexado más un hash diario; trailers de Git en los commits; exportación con OpenTelemetry. |
| Compuertas | Revisión de PR más una notificación push; la CLI nas gate approve. |
| Memoria | Markdown bajo memory/ más SQLite FTS5; un almacén vectorial se añade después. |
| Etiquetas | Marca el directorio de importación como external; guarda la contaminación de sesión de cada ejecución en la pasarela. |
| Interfaces | Un montaje NFS, SMB o FUSE; Git sobre SSH o HTTPS; una pasarela S3; un pequeño servidor MCP. |
Lo que dice esta tabla: L0 y L1 no necesitan ninguna invención nueva. Lo nuevo es el contrato que los combina y las pruebas que lo verifican; consulta la especificación.
Operación
- Copias de seguridad: 3-2-1; las instantáneas y las copias de seguridad pertenecen al principal propietario y ninguna concesión puede tocarlas; haz un simulacro de restauración cada trimestre y guarda un registro.
- Actualizaciones: las pasarelas no tienen estado y se pueden actualizar de forma gradual; cualquier cambio de formato de Store debe llevar un plan de migración y de reversión; la capa Memory se puede reconstruir entera.
- Supervisión: tasas de emisión y denegación de concesiones; longitud de la cola de compuertas y tasa de aprobación (una tasa de aprobación que se mantiene por encima del 95 % indica que las compuertas son demasiado frecuentes y conviene fusionarlas o endurecer la política); número y antigüedad de las ramas; frescura de los índices; verificación de la cadena de registros; cuotas.
- Capacidad: las ramas tienen un TTL y cuotas; la papelera tiene un período de retención; los datos derivados tienen un presupuesto.
La sala de control
La interfaz para las personas puede ser una página web, una CLI o un chatbot. No es esencial: L0 a L1 pueden funcionar por completo con una CLI y una plataforma Git existente.
- Línea de actividad: agregada por ejecución: quién hizo qué y qué leyó.
- Bandeja de compuertas: acciones pendientes de aprobación, mostradas como Gate Cards.
- Directorio de roles: el Home de cada rol, sus concesiones, presupuestos y ejecuciones recientes.
- Explorador de memoria: notas y fuentes, la cuarentena de notas sin revisar, propuestas de mantenimiento.
- Ramas y PR: ramas sin fusionar y la papelera.
- Consola de olvido: solicitudes, vista previa del linaje e informes.
Las personas también pueden mirar directamente por SMB o WebDAV: /humans/<user>/Agent Activity/ es una vista de actividad de solo lectura hecha de archivos normales.
Citar esta página
Direcciones estables y una cita sugerida para personas, buscadores y agentes.
- URL canónica
- https://agentnas.com/es/architecture/
- Versión en Markdown
- https://agentnas.com/es/architecture/index.md
- Cita sugerida
- Agent NAS project. “Arquitectura.” agentnas.com, 2026-11-11. https://agentnas.com/es/architecture/