/home, part of the same file tree as the project context, and it is private to that user in that project.
Two things use it:
- Attachments - files you add to a message land in
/home/uploads. - Saved results - exports and intermediate results the agent writes, so they outlive the chat.
Permanent storage is configured once for the whole deployment with
NAO_STORAGE_BACKEND (see Configuring storage). It defaults to local. When it is set to none, the agent has no write tool and file attachments are off - only images still work.Attaching files
Add files the same way you add images: Attach file in the+ menu of the chat input, drag and drop, or paste.
Documents and images reach the model very differently. An image is inlined into the request so the model can look at it. A document is only ever handed over as a path in
/home/uploads - never its contents - so a large spreadsheet costs nothing until the agent actually opens it.
What the agent does with a file
readextracts the text of a PDF page by page. On an.xlsxit returns the workbook outline instead of the cells - every sheet in tab order with its row and column counts - so the agent knows which sheet it wants before querying. Parquet and Word documents are not text, soreadrefuses them.searchfinds files by name, andgreplooks inside them (on S3 backends, where files are not on a local disk,grepis unavailable and the agent falls back tosearchplusread).execute_sqlqueries tabular files in place - see below.execute_sandboxed_codemounts a/homepath into the micro-VM through itsstorage_filesargument, for anything the other tools cannot parse.
Querying files with SQL
nao ships its own DuckDB engine alongside your warehouses, addressed as the database idduckdb_local. It is always available, and it is the only way to query a file or to join one against an earlier query result.
It can:
- read CSV, JSON, Parquet, and Excel files by their
/homepath, - expose every earlier
execute_sqlresult as a table named after its query id, - join the two together - for example a spreadsheet someone uploaded against last quarter’s revenue from the warehouse.
duckdb_local is a reserved database id. A warehouse configured under that name in nao_config.yaml would be unreachable.Saving results
The agent writes to/home when you ask it to keep, export, or update something.
save_toonexecute_sqlwrites aduckdb_localresult straight to a file, ascsv(for a file someone opens) orparquet(which keeps column types, so the result can be queried again later). The rows still come back in the chat as usual.- The
writetool saves anything else./homeis the only writable place in the tree; everything else is read-only.
Your own storage
Open Settings -> Storage to see how much space your files take in the current project. You get your own space in every project you belong to, and nobody else can read it.Configuring storage
Storage is set through environment variables, not the UI. Admins can review the resolved configuration, a reachability check, and per-project usage under Settings -> Storage.- Local disk
- S3
- Off
NAO_STORAGE_MAX_FILE_SIZE_MB (default 10) caps the largest single file that can be written, on every backend. A bigger file is rejected before anything is stored.
Next steps
Tools, MCPs, Skills
The full list of tools the agent can call
Deployment guide
Mount a durable volume when self-hosting