Interfaces

Agent NAS uses files for the data plane and tools for the control plane: bytes travel over mounts, Git and S3; authorization, approval, memory, search and explanation go through MCP, HTTP and a CLI. Every interface is a projection of the same data, and differences in semantics are expressed as explicit errors instead of being pretended away.

v0.2 Draft specification Updated

Principles

  1. Files for the data plane, tools for the control plane. Bytes travel over mounts, Git and S3; authorization, approval, memory, search and explanation go through MCP, HTTP and a CLI.
  2. Gateways are stateless. Authorization happens at exactly one point in the Trust layer.
  3. Every interface is a projection. Differences in semantics are expressed through explicit error mappings (for example “gate pending” maps to an EACCES with an explanatory file), and S3 is not pretended to have branches.
  4. A narrow tool surface. No more than 10 MCP tools face agents; actions for people and operators live in a separate operator interface.
  5. Adapters isolate protocol change. Version changes in MCP and A2A only affect the adapters.

Interface matrix

InterfacePlaneAimed atMappingLevel
Mount (FUSE, NFS, SMB)DataAgents, people, any programA branch view; error mapping belowL0
Git (SSH, HTTPS)DataAgents, people, CIA run branch is a Git branch; an Agent PR is a merge requestL0
S3-compatibleDataData pipelines, batch jobsA bucket maps to a branch view of one tree; a version ID is a commitL0 (optional)
WebDAVDataPeople (Finder, Explorer)A read-only activity viewL0 (optional)
CLI nasControlPeople, scriptsOne to one with the HTTP APIL0
HTTP APIControlOrchestrators, the control roomAll POST with JSON; fields in snake_caseL1
MCPControlAgentsNine tools (below)L1, L2
A2AControlOther agentsA task maps to inbox/ and outbox/L4 (optional)

The MCP tool surface

Only nine tools face agents:

ToolWhat it doesLease action neededNote
nas_listList a directory, with labels and review statelistPaths outside the lease are invisible.
nas_readBudgeted read: view, range, budgetreadBudgeted Reads
nas_searchSearch (full-text, optionally vector), returning snippets and pointersreadQuarantine is excluded by default.
nas_writeWrite a file inside the branch, with an optional intentwriteMost runtimes use the mount directly and do not need it.
nas_branchCreate, checkpoint, restore and list brancheswriteAgent Branch
nas_proposeCreate an Agent PRproposeMay trigger a gate.
nas_leaseRequest a narrower child lease; query the current lease and budgets; request wider authority (via a gate)NoneCapability Lease
nas_rememberWrite a note, with sources and kindwriteAgent Memory
nas_recallRecall notes: budgeted, with sources and review statereadAgent Memory

Actions for people and operators only

explain, gate approve/deny, forget, trash restore, label admin, lease revoke and policy edit are not exposed to agents. These actions change the guarantees themselves and should not be callable by the party being constrained. An agent may request some of them (wider authority, forgetting) but cannot execute them.

Mount semantics

  • A mount binds one branch and one lease; when the lease expires the mount turns read-only and is then unmounted.
  • Automatic commits (debounced, for example after 5 quiet seconds); fsync triggers a commit.
  • Paths outside the lease do not appear in directory listings: this reduces information leakage and shrinks the attack surface for prompt injection.
  • Sandbox-friendly: no root needed; FUSE or NFS, one of the two, with no kernel module; read-only mounts are possible.
SituationPOSIX errorNote
A path outside the leaseENOENT (EACCES when visible but refused)The refusal is recorded.
Quota or budget exhaustedEDQUOTLets the run throttle itself.
Gate pendingEACCES, with an explanation in /.nas/pendingKeeps the agent from retrying forever.
Lease expiredESTALE, then read-onlyThe branch is kept until its own TTL expires.

Git

  • Run branches are named <role>/<run_id>; main is protected, and a server-side pre-receive hook rejects direct pushes.
  • nas propose creates an Agent PR.
  • Commits automatically carry trailers such as Run:, Lease: and Principal:.

S3

  • A bucket corresponds to a branch view of one tree; an object version ID is a commit.
  • Semantics S3 lacks, such as branches, are expressed with a bucket prefix or a request header (x-nas-branch). This is a degraded projection: data pipelines can read and write, but do not get the full branch experience.
  • Leases are passed as STS-style temporary credentials.

A2A (optional)

  • Incoming tasks land as task files in inbox/; deliverables go into outbox/.
  • The Agent Card declares the role’s skills and the leases it needs.
  • The NAS is not an A2A participant; the runtime acting for the role is. The NAS only stores tasks and deliverables, handoff bundles and leases.

HTTP API conventions

  • **Every endpoint uses POST, with parameters in a JSON body;** response fields are always snake_case.
  • Paths are versioned: /v1/....
  • Idempotency: write operations accept an idempotency_key.
  • Pagination: cursor plus limit.
  • Budgets and rate limits are fed back in response headers (bytes left, requests left) so runtimes can throttle themselves.

A budgeted read request and response look roughly like this:

Budgeted read
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" }
  ] }

Errors use one uniform structure:

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

Discovery

  • The machine-readable entry points are the same as on this site: /.well-known/ai-catalog.json, the MCP Server Card and llms.txt.
  • An endpoint that resolves and verifies nas:// evidence pointers.
  • MCP server/discover.

Cite this page

Stable addresses and a suggested citation for people, search engines and agents.

Suggested citation
Agent NAS project. “Interfaces.” agentnas.com, 2026-11-11. https://agentnas.com/interfaces/