Interfaces

Agent NAS usa archivos para el plano de datos y herramientas para el plano de control: los bytes viajan por montajes, Git y S3; la autorización, la aprobación, la memoria, la búsqueda y las explicaciones pasan por MCP, HTTP y una CLI. Cada interfaz es una proyección de los mismos datos, y las diferencias de semántica se expresan como errores explícitos en lugar de disimularlas.

v0.2 Borrador de especificación Actualizado

Principios

  1. Archivos para el plano de datos, herramientas para el plano de control. Los bytes viajan por montajes, Git y S3; la autorización, la aprobación, la memoria, la búsqueda y las explicaciones pasan por MCP, HTTP y una CLI.
  2. Las pasarelas no tienen estado. La autorización ocurre en un único punto de la capa Trust.
  3. Cada interfaz es una proyección. Las diferencias de semántica se expresan con asignaciones de error explícitas (por ejemplo, “compuerta pendiente” se asigna a un EACCES con un archivo explicativo), y no se finge que S3 tenga ramas.
  4. Una superficie de herramientas estrecha. No más de 10 herramientas MCP miran a los agentes; las acciones para personas y operadores viven en una interfaz de operador aparte.
  5. Los adaptadores aíslan el cambio de protocolo. Los cambios de versión de MCP y A2A solo afectan a los adaptadores.

Matriz de interfaces

InterfazPlanoDirigida aAsignaciónNivel
Montaje (FUSE, NFS, SMB)DatosAgentes, personas, cualquier programaUna vista de rama; asignación de errores más abajoL0
Git (SSH, HTTPS)DatosAgentes, personas, CIUna rama de ejecución es una rama de Git; un Agent PR es una solicitud de fusiónL0
Compatible con S3DatosCanalizaciones de datos, trabajos por lotesUn bucket se asigna a una vista de rama de un árbol; un ID de versión es un commitL0 (opcional)
WebDAVDatosPersonas (Finder, Explorador)Una vista de actividad de solo lecturaL0 (opcional)
CLI nasControlPersonas, scriptsUno a uno con la API HTTPL0
API HTTPControlOrquestadores, la sala de controlTodo POST con JSON; campos en snake_caseL1
MCPControlAgentesNueve herramientas (más abajo)L1, L2
A2AControlOtros agentesUna tarea se asigna a inbox/ y outbox/L4 (opcional)

La superficie de herramientas MCP

Solo nueve herramientas miran a los agentes:

HerramientaQué haceAcción de concesión necesariaNota
nas_listLista un directorio, con etiquetas y estado de revisiónlistLas rutas fuera de la concesión son invisibles.
nas_readLectura con presupuesto: vista, rango, presupuestoreadBudgeted Reads
nas_searchBusca (texto completo, opcionalmente vectorial) y devuelve fragmentos y punterosreadLa cuarentena se excluye por defecto.
nas_writeEscribe un archivo dentro de la rama, con un intent opcionalwriteLa mayoría de los runtimes usan el montaje directamente y no lo necesitan.
nas_branchCrea, marca puntos de control, restaura y lista ramaswriteAgent Branch
nas_proposeCrea un Agent PRproposePuede activar una compuerta.
nas_leaseSolicita una concesión hija más estrecha; consulta la concesión y los presupuestos actuales; solicita más autoridad (mediante una compuerta)NingunaCapability Lease
nas_rememberEscribe una nota, con fuentes y tipowriteAgent Memory
nas_recallRecupera notas: con presupuesto, con fuentes y estado de revisiónreadAgent Memory

Acciones solo para personas y operadores

explain, gate approve/deny, forget, trash restore, label admin, lease revoke y policy edit no se exponen a los agentes. Estas acciones cambian las propias garantías y no debería poder invocarlas la parte a la que se restringe. Un agente puede solicitar algunas (más autoridad, olvido), pero no ejecutarlas.

Semántica del montaje

  • Un montaje enlaza una rama y una concesión; cuando la concesión caduca, el montaje pasa a solo lectura y después se desmonta.
  • Commits automáticos (con retardo, por ejemplo tras 5 segundos de calma); fsync activa un commit.
  • Las rutas fuera de la concesión no aparecen en los listados de directorio: esto reduce la fuga de información y la superficie de ataque de la inyección de prompts.
  • Apto para sandboxes: no hace falta root; FUSE o NFS, uno de los dos, sin módulo del kernel; son posibles los montajes de solo lectura.
SituaciónError POSIXNota
Una ruta fuera de la concesiónENOENT (EACCES cuando es visible pero está denegada)El rechazo se registra.
Cuota o presupuesto agotadosEDQUOTPermite que la ejecución se autolimite.
Compuerta pendienteEACCES, con una explicación en /.nas/pendingEvita que el agente reintente para siempre.
Concesión caducadaESTALE, y después solo lecturaLa rama se conserva hasta que caduca su propio TTL.

Git

  • Las ramas de ejecución se llaman <role>/<run_id>; main está protegida y un hook pre-receive en el servidor rechaza los push directos.
  • nas propose crea un Agent PR.
  • Los commits llevan automáticamente trailers como Run:, Lease: y Principal:.

S3

  • Un bucket corresponde a una vista de rama de un árbol; el ID de versión de un objeto es un commit.
  • La semántica que S3 no tiene, como las ramas, se expresa con un prefijo de bucket o una cabecera de solicitud (x-nas-branch). Es una proyección degradada: las canalizaciones de datos pueden leer y escribir, pero no obtienen la experiencia completa de ramas.
  • Las concesiones se pasan como credenciales temporales al estilo STS.

A2A (opcional)

  • Las tareas entrantes llegan como archivos de tarea en inbox/; los entregables van a outbox/.
  • La Agent Card declara las habilidades del rol y las concesiones que necesita.
  • El NAS no es un participante de A2A; lo es el runtime que actúa por el rol. El NAS solo almacena tareas y entregables, paquetes de traspaso y concesiones.

Convenciones de la API HTTP

  • **Todos los endpoints usan POST, con los parámetros en un cuerpo JSON;** los campos de respuesta son siempre snake_case.
  • Las rutas llevan versión: /v1/....
  • Idempotencia: las operaciones de escritura aceptan una idempotency_key.
  • Paginación: cursor más limit.
  • Los presupuestos y los límites de frecuencia se devuelven en las cabeceras de la respuesta (bytes restantes, solicitudes restantes) para que los runtimes puedan autolimitarse.

Una solicitud y una respuesta de lectura con presupuesto se ven más o menos así:

Lectura con presupuesto
POST /v1/files/read
{ "path": "/agents/cleo/memory/notes/customer-acme.md",
  "view": "outline", "budget_tokens": 400 }

200 OK
{ "view": "outline", "tokens": 212, "generated": false, "truncated": false,
  "content": "# Acme\n## Renewal (L12-L18)\n## Contacts (L19-L31)\n## Open issues (L32-L40)",
  "evidence": [
    { "pointer": "nas://home-box/agents/cleo/memory/notes/customer-acme.md@9f2c1de#L1-L40" }
  ] }

Los errores usan una estructura uniforme:

Respuesta de error
{
  "error": {
    "code": "gate_required",
    "message": "This merge requires human approval.",
    "retryable": false,
    "request_id": "req_01JB7W2X4N",
    "details": { "gate_id": "gt_2Mx4" }
  }
}

Descubrimiento

  • Los puntos de entrada legibles por máquinas son los mismos que en este sitio: /.well-known/ai-catalog.json, la Server Card de MCP y llms.txt.
  • Un endpoint que resuelve y verifica los punteros de evidencia nas://.
  • MCP server/discover.

Citar esta página

Direcciones estables y una cita sugerida para personas, buscadores y agentes.

Cita sugerida
Agent NAS project. “Interfaces.” agentnas.com, 2026-11-11. https://agentnas.com/es/interfaces/