# Uploads



**Uploads** sits in the Connections panel but is not a connection. It opens a
dialog, and the dialog has three tabs: **Upload files**, **Paste text** and
**Paste URL**. All three go through the same pipeline and land in the same
place.

## The Limits [#the-limits]

|                |                                                 |
| -------------- | ----------------------------------------------- |
| **File types** | `.pdf` · `.md` · `.markdown` · `.txt` · `.docx` |
| **Size**       | 25 MB per file                                  |
| **Batch**      | 20 files at a time                              |

Anything else is rejected before it uploads.

## Where It Lands, and What Happens After [#where-it-lands-and-what-happens-after]

Two things happen, and it is worth keeping them apart:

1. **The source stays in `Uploads/`**, as a dated Markdown file. That is the
   record of what you gave Surface, unchanged.
2. **Reusable information is extracted into the folders agents actually read**:
   `Company/` for a document that updates what you do, `Agent notes/` for team
   knowledge, `Agent notes/Style learnings.md` for voice rules, `Competitors/`
   for a competitor document. The extraction is planned, merged and then
   verified by a separate read-only pass before anything commits.

The dialog says this itself: &#x2A;"Sources stay in Uploads/. The agent adds
reusable information to Agent notes/."*

**Paste text is not authoring.** It builds a synthetic file from what you
pasted and puts it through the same route, so it lands in `Uploads/` like
everything else. To write a document directly, use
[apply\_vault\_changes](https://www.withsurface.com/docs/mcp-server/vault) or edit in the app.

## Uploads/ Is Read-only to Agents [#uploads-is-read-only-to-agents]

This is enforced in code, not asked for in a prompt. A write to `Uploads/`, or
to any root-level file, comes back as `READ_ONLY_PATH`. Every other folder,
including one that does not exist yet, is writable: folders are created
implicitly with their first document.

<Info>
  Every uploaded document is treated as untrusted input by the ingestion
  pipeline: the planner, the merger and the verifier are each told the source is
  data and never instructions. That is a defence against a PDF that tells an
  agent what to do, not against a PDF that is simply wrong. See
  [a wrong document is worse than a missing one](https://www.withsurface.com/docs/platform/vault/agents).
</Info>

## Split Before You Upload [#split-before-you-upload]

A 60-page brand book arrives as one enormous document, and an agent asked for
your voice rules has to pull all of it. The same content as eight documents is
cheaper to read and much easier to correct later.

[Getting docs in →](https://www.withsurface.com/docs/platform/vault/getting-docs-in) ·
[Folder structure](https://www.withsurface.com/docs/platform/vault/structure)
