# geni project files

> A project's shared files. List them, pull them down, push a directory up, or remove one.

Source: https://docs.generalinput.com/cli/project/files



Shared files are human input: reference documents, brand guides, spreadsheets, anything the project's chats should be able to read. Every chat in the project mounts them read-only at `project/`. Agents never write here; their durable output belongs in project memory.

Reads need access to the project; `push` and `rm` need edit access.

## list [#list]

```sh
geni project files list <projectId> [--json]
geni project files ls <projectId>
```

```
PATH              BYTES   UPDATED
brand/voice.md    3120    2026-08-30T09:00:00.000Z
pricing.xlsx      48211   2026-08-12T14:20:00.000Z
```

## pull [#pull]

```sh
geni project files pull <projectId> [--dir <path>] [--force]
```

Downloads every file into a directory (default cwd). Refuses a directory that already holds files unless `--force` is passed.

| Flag           | Notes                                      |
| -------------- | ------------------------------------------ |
| `--dir <path>` | Destination directory. Defaults to cwd.    |
| `--force`      | Overwrite existing files in the directory. |

## push [#push]

```sh
geni project files push <projectId> [--dir <path>] [--json]
```

Uploads a directory. Paths it carries are added or replaced; everything else in the project stays put. Bytes move as one tar bundle, so binary files are preserved.

| Flag           | Notes                              |
| -------------- | ---------------------------------- |
| `--dir <path>` | Source directory. Defaults to cwd. |
| `--json`       | Machine-readable output.           |

```
✓ Pushed /work/brand into project proj_01HX… (7 file(s) now in the project)
```

## rm [#rm]

```sh
geni project files rm <projectId> <path> [--json]
```

Removes one file by its relative path.

```
✓ Removed brand/old-voice.md from project proj_01HX…
```
