# Commands

URL: https://developers.uidu.org/docs/tools/cli/commands

> The uidu CLI command reference — entities (list/get/create), CMS, provisioning, and scaffolding.

All commands accept `--json` for machine-readable output (what AI agents parse), `--workspace`
to override the workspace, and `--first <n>` for list page size.

## Entities

Most scopes are exposed through a uniform verb set:

```bash
uidu <entity> list [--first 50]
uidu <entity> get <id>
uidu <entity> create --attributes '<json>'        # write — needs a Bearer token
uidu <entity> update <id> --attributes '<json>'   # write
uidu <entity> delete <id>                          # write
```

| Entity                | list | get | create | update | delete |
| --------------------- | :--: | :-: | :----: | :----: | :----: |
| `events`              |   ✓  |  ✓  |    ✓   |    ✓   |    —   |
| `attendances`         |   —  |  —  |    ✓   |    —   |    —   |
| `stories`             |   ✓  |  ✓  |    ✓   |    ✓   |    —   |
| `donations`           |   ✓  |  ✓  |    ✓   |    ✓   |    ✓   |
| `courses`             |   ✓  |  ✓  |    ✓   |    ✓   |    ✓   |
| `forms`               |   ✓  |  ✓  |    ✓   |    ✓   |    ✓   |
| `contacts`            |   ✓  |  ✓  |    ✓   |    —   |    ✓   |
| `deals`               |   ✓  |  ✓  |    ✓   |    ✓   |    —   |
| `goals`               |   ✓  |  ✓  |    —   |    ✓   |    —   |
| `timeframes`          |   ✓  |  —  |    —   |    —   |    —   |
| `employees`           |   ✓  |  —  |    ✓   |    ✓   |    —   |
| `employments`         |   —  |  —  |    ✓   |    ✓   |    ✓   |
| `offices`             |   ✓  |  —  |    —   |    —   |    —   |
| `roles`               |   ✓  |  —  |    —   |    —   |    —   |
| `ccnls`               |   ✓  |  —  |    ✓   |    —   |    —   |
| `bookings`            |   ✓  |  ✓  |    —   |    —   |    —   |
| `calls`               |   ✓  |  ✓  |    —   |    —   |    —   |
| `jobs`                |   ✓  |  ✓  |    —   |    —   |    —   |
| `applications`        |   ✓  |  —  |    ✓   |    —   |    —   |
| `campaigns`           |   ✓  |  ✓  |    —   |    —   |    —   |
| `kb-collections`      |   ✓  |  ✓  |    ✓   |    ✓   |    ✓   |
| `kb-articles`         |   ✓  |  ✓  |    ✓   |    ✓   |    ✓   |
| `channel`             |   ✓  |  ✓  |    ✓   |    ✓   |    ✓   |
| `time-clocks`         |   —  |  —  |    ✓   |    —   |    —   |
| `compensations`       |   —  |  —  |    ✓   |    ✓   |    ✓   |
| `tasks`               |   —  |  —  |    ✓   |    ✓   |    ✓   |
| `benefits`            |   —  |  —  |    ✓   |    —   |    —   |
| `benefit-enrollments` |   —  |  —  |    ✓   |    —   |    —   |
| `notes`               |   —  |  —  |    ✓   |    ✓   |    ✓   |
| `projects`            |   ✓  |  —  |    —   |    —   |    —   |
| `sites`               |   —  |  —  |    ✓   |    —   |    —   |
| `spaces`              |   —  |  —  |    ✓   |    ✓   |    ✓   |

```bash
uidu events list --first 20 --json
uidu stories get Z2lkOi8v… --json
uidu events create --name "Launch party" --json
uidu channel update Z2lkOi8v… --attributes '{"name":"Help center"}' --json
uidu tasks delete Z2lkOi8v… --json
```

<Callout type="info" title="Capability varies by entity">
  The table reflects what the backend exposes. A verb the entity doesn't support fails with
  `<entity> does not support <verb>` — see the [authoring reference](https://developers.uidu.org/docs/foundations/writes.md)
  for the write model.
</Callout>

## All other commands

Every command outside the entity registry, generated from the CLI's own `--help`:

| Command                      | What it does                                                     |
| ---------------------------- | ---------------------------------------------------------------- |
| `uidu pages list`            | List CMS pages                                                   |
| `uidu page get <slug>`       | Fetch one CMS page                                               |
| `uidu page create`           | Create a page (--name --slug \| --attributes \<json>)            |
| `uidu block create`          | Create a page block (--attributes \<json>)                       |
| `uidu field create`          | Create a field value (--attributes \<json>)                      |
| `uidu workspace create`      | Create a workspace (--name \| --attributes \<json>)              |
| `uidu workspace credentials` | Generate workspace API credentials                               |
| `uidu project create`        | Create a project (--attributes \<json>)                          |
| `uidu tools call <key>`      | Run one action (--attributes \<json>, associations as GlobalIDs) |

## CMS

Pages are project-scoped — pass `--project <id>` or set `UIDU_PROJECT_ID`.

```bash
uidu pages list --project proj_xyz --json
uidu page get home --project proj_xyz --json
uidu page create --name Home --slug home --attributes '{"projectId":"proj_xyz"}'
uidu block create --attributes '<json>'
uidu field create --attributes '<json>'
```

## Provisioning

```bash
uidu workspace create --name "Acme"
uidu workspace credentials          # rotate/return the workspace api key + secret
uidu project create --attributes '<json>'
uidu spaces create --name "Team"
uidu tasks create --name "Do the thing"
uidu notes create --attributes '{"body":"…"}'
```

<Callout type="info" title="Attributes shape">
  `create` commands send the mutation's `attributes` input. Use `--name` / `--slug` for common
  fields, or `--attributes '<json>'` for the full object. The command returns the mutation payload
  including an `errors` array — always non-empty on validation failure (the CLI exits non-zero).
</Callout>

## Scaffold

```bash
uidu create my-app                  # interactive
uidu create my-app -t events        # pick a template (delegates to create-uidu-app)
```

## Composed example — zero to site

```bash
uidu login --workspace acme
uidu workspace credentials --json          # capture publicToken for the app
uidu page create --name Home --slug home --attributes '{"projectId":"proj_xyz"}'
uidu create acme-site -t minimal           # scaffold a Next.js app wired to the workspace
```
