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.
Principios
- 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.
- Las pasarelas no tienen estado. La autorización ocurre en un único punto de la capa Trust.
- 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
EACCEScon un archivo explicativo), y no se finge que S3 tenga ramas. - 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.
- 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
| Interfaz | Plano | Dirigida a | Asignación | Nivel |
|---|---|---|---|---|
| Montaje (FUSE, NFS, SMB) | Datos | Agentes, personas, cualquier programa | Una vista de rama; asignación de errores más abajo | L0 |
| Git (SSH, HTTPS) | Datos | Agentes, personas, CI | Una rama de ejecución es una rama de Git; un Agent PR es una solicitud de fusión | L0 |
| Compatible con S3 | Datos | Canalizaciones de datos, trabajos por lotes | Un bucket se asigna a una vista de rama de un árbol; un ID de versión es un commit | L0 (opcional) |
| WebDAV | Datos | Personas (Finder, Explorador) | Una vista de actividad de solo lectura | L0 (opcional) |
CLI nas | Control | Personas, scripts | Uno a uno con la API HTTP | L0 |
| API HTTP | Control | Orquestadores, la sala de control | Todo POST con JSON; campos en snake_case | L1 |
| MCP | Control | Agentes | Nueve herramientas (más abajo) | L1, L2 |
| A2A | Control | Otros agentes | Una tarea se asigna a inbox/ y outbox/ | L4 (opcional) |
La superficie de herramientas MCP
Solo nueve herramientas miran a los agentes:
| Herramienta | Qué hace | Acción de concesión necesaria | Nota |
|---|---|---|---|
nas_list | Lista un directorio, con etiquetas y estado de revisión | list | Las rutas fuera de la concesión son invisibles. |
nas_read | Lectura con presupuesto: vista, rango, presupuesto | read | Budgeted Reads |
nas_search | Busca (texto completo, opcionalmente vectorial) y devuelve fragmentos y punteros | read | La cuarentena se excluye por defecto. |
nas_write | Escribe un archivo dentro de la rama, con un intent opcional | write | La mayoría de los runtimes usan el montaje directamente y no lo necesitan. |
nas_branch | Crea, marca puntos de control, restaura y lista ramas | write | Agent Branch |
nas_propose | Crea un Agent PR | propose | Puede activar una compuerta. |
nas_lease | Solicita una concesión hija más estrecha; consulta la concesión y los presupuestos actuales; solicita más autoridad (mediante una compuerta) | Ninguna | Capability Lease |
nas_remember | Escribe una nota, con fuentes y tipo | write | Agent Memory |
nas_recall | Recupera notas: con presupuesto, con fuentes y estado de revisión | read | Agent 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);
fsyncactiva 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ón | Error POSIX | Nota |
|---|---|---|
| Una ruta fuera de la concesión | ENOENT (EACCES cuando es visible pero está denegada) | El rechazo se registra. |
| Cuota o presupuesto agotados | EDQUOT | Permite que la ejecución se autolimite. |
| Compuerta pendiente | EACCES, con una explicación en /.nas/pending | Evita que el agente reintente para siempre. |
| Concesión caducada | ESTALE, y después solo lectura | La rama se conserva hasta que caduca su propio TTL. |
Git
- Las ramas de ejecución se llaman
<role>/<run_id>;mainestá protegida y un hookpre-receiveen el servidor rechaza los push directos. nas proposecrea un Agent PR.- Los commits llevan automáticamente trailers como
Run:,Lease:yPrincipal:.
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 aoutbox/. - 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 siempresnake_case. - Las rutas llevan versión:
/v1/.... - Idempotencia: las operaciones de escritura aceptan una
idempotency_key. - Paginación:
cursormáslimit. - 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í:
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:
{
"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 yllms.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.
- URL canónica
- https://agentnas.com/es/interfaces/
- Versión en Markdown
- https://agentnas.com/es/interfaces/index.md
- Cita sugerida
- Agent NAS project. “Interfaces.” agentnas.com, 2026-11-11. https://agentnas.com/es/interfaces/