# Upload

> Connect Upload to LightHouse: the ways to connect, the read-only scopes, where the credential is held, and what is indexed.

**Built in the engine, as a folder.** The engine reads every file dropped into a folder you name. Anything that arrives as files lands there the same way: documents you copy in, a synced Drive or SharePoint library, meeting transcripts, an export from another system.

Uploading files through LightHouse itself is \[Coming]: there is no upload page or upload route yet.

## The ways to connect

- **In LightHouse**: \[Coming]. The card says your engineer configures it in your deployment.
- **From a terminal**: \[Coming].
- **In code**: a `folder` source card, below.

## Connect in code

```yaml
- id: shared-drop
  purpose: Read the shared drop folder into the knowledge base.
  executor: python
  target: aal_engine.ingest.connector:run_card
  overseer: ops@example.com
  budget_usd: 0
  effect: internal
  source:
    kind: folder
    path: drop
    label: standard
    requires:
      reads: [the shared drop folder]
      reason: the support agents answer from these guides
```

`path` is relative to the deployment’s working directory, or absolute. The source is named `folder-<directory name>` unless you give it a `name`.

A file may set its own title and class in front matter; your label scheme still decides whether that class is readable:

```markdown
---
title: Onboarding guide
doc_class: standard
---
# Welcome
Start here.
```

Run it, and the run’s note says what happened. With two files in `drop/`:

```text
written 2, unchanged 0, quarantined 0, removed 0
```

Delete one and run again:

```text
written 0, unchanged 0, quarantined 0, removed 1
```

## File types and size limits

| Type                  | How it is read                                                                                |
| --------------------- | --------------------------------------------------------------------------------------------- |
| `.md`, `.txt`, `.vtt` | As text                                                                                       |
| `.pdf`                | Through `pdftotext -layout`, which must be installed in the image; at most 300 seconds a file |

Any other type **fails the pull**, naming the file: a format the engine cannot read is a gap you need to hear about, not one to skip silently. Change `suffixes` to accept fewer types. Files whose names start with `.` are ignored. There is no size limit per file.

## Permissions

The engine needs read access to the folder and nothing else. No credential is involved.

## Where the files are held

In your own account: the folder, and the corpus the engine writes from it, are on your deployment’s storage.

## What is indexed

Every file of an accepted type, in the folder and its subfolders. A file is read again only when its content changes (its SHA-256); a file that disappears is removed from the corpus, so an agent never cites a document you have withdrawn.

## Check it worked

- The run note, as above.
- **Agents → Knowledge**: documents from `folder-<name>`.
- Each item is a Markdown file under `corpus/folder-<name>/` in the deployment’s working directory.

## Removing it

Remove the card. Documents already written stay in the corpus until you delete them.

Source: https://docs.atlanticagenticlabs.com/connect/upload/
