---
title: "CLI reference"
description: "Every flag of findplate create, and the mode for scripts and coding agents."
url: https://plate.findmalek.engineer/docs/cli
markdown: https://plate.findmalek.engineer/docs/cli.md
group: "CLI"
---

# CLI reference

```bash
findplate create [dir] [options]
```

`create` is the default command, so `findplate [dir]` works too.

## Flags

| Flag | Description |
| --- | --- |
| `[dir]` | target directory. Also the project name when `--name` is not set |
| `--name <name>` | project name. Becomes the package scope, titles and database name |
| `--pitch <text>` | one-line pitch shown on the generated landing page |
| `--preset <id>` | design preset, see [presets](https://plate.findmalek.engineer/docs/presets.md). Default `monochrome` |
| `--profile <id>` | `minimal`, `standard` or `everything`, see [profiles](https://plate.findmalek.engineer/docs/modules.md#profiles). Default `standard` with `-y` |
| `--modules <a,b>` | exact modules to include, see [modules](https://plate.findmalek.engineer/docs/modules.md). Wins over `--profile`. Pass an empty value for none |
| `--no-install` | skip `pnpm install` |
| `--no-git` | skip `git init` and the first commit |
| `--no-agents` | skip generating agent rules, see [agents](https://plate.findmalek.engineer/docs/agents.md) |
| `--no-skills` | skip installing the recommended public skills |
| `--github`, `--no-github` | create the GitHub repo, board and rules after the first commit, see [GitHub setup](https://plate.findmalek.engineer/docs/github.md). Asked when interactive |
| `-y`, `--yes` | no prompts, use defaults |
| `-h`, `--help` | show help |
| `-v`, `--version` | show the version |

Project names are lowercase letters, digits and dashes, 3 to 40 characters. The target directory must be missing or empty.

## Interactive mode

Without `-y`, in a terminal, the cli asks for:

1. the name, pitch and design preset
2. a profile: Minimal, Standard, Everything or Custom
3. a checklist of modules grouped by purpose, pre-ticked from the profile. Space toggles one module or a whole group. A module that needs another one ticks it for you and says so
4. a short "Keys you will need" note for the modules you kept, each key with the page to get it from
5. the keys themselves, hidden as you type. Every one is optional

Keys you skip are listed under "Still to set in .env" when the cli finishes, and `findplate doctor` warns about them later. Ctrl+C at any prompt cancels without creating anything. Re-running `create` in an unfinished project resumes with the profile and modules you chose the first time.

## Agent mode

Coding agents and scripts have no tty. Pass `-y` and everything you want as flags, and nothing is ever prompted:

```bash
bunx findplate create my-app \
  --pitch "Invoices for freelancers" \
  --preset monochrome \
  --modules storage,ai,docs \
  -y
```

- `--name` or `[dir]` is required with `-y`
- without `--profile` or `--modules`, `-y` uses the `standard` profile
- `--modules` wins when both are given
- `--modules ""` generates a project with no optional modules
- unknown presets, profiles or modules fail with the list of valid ids

Add `--no-install --no-git` when the agent will run those steps itself.

## What it does

1. validates the name and target
2. copies the template, renames `acme` to your project, removes the modules you turned off
3. replaces the theme tokens with the preset's `theme.css`
4. writes `.env` with generated secrets and an admin password
5. `pnpm install`, `pnpm check`, then `git init` with a first commit

## Git

The first commit lands on your `init.defaultBranch` (or `main` when unset). The step is skipped, with a note, when git isn't installed or when the target already sits inside a git repository, so a project generated into a monorepo never commits to the outer repo. The GitHub step needs its own repo, so pass `--no-github` there.

## Exit codes

| Code | Meaning |
| --- | --- |
| `0` | done, or you cancelled a prompt |
| `1` | a step failed, or `doctor` found a failing check |
| `2` | usage error, such as a missing `--name` without a terminal, an unknown preset, profile or module |
| `3` | `findplate add` or `findplate remove` refused because the git tree has uncommitted changes, see [add and doctor](https://plate.findmalek.engineer/docs/add-doctor.md) |

## Other commands

| Command | What it does |
| --- | --- |
| `findplate add <module...>` | add modules to a generated project, see [add and doctor](https://plate.findmalek.engineer/docs/add-doctor.md) |
| `findplate remove <module...>` | remove modules from a generated project, see [add and doctor](https://plate.findmalek.engineer/docs/add-doctor.md#findplate-remove) |
| `findplate doctor` | check env, database, tools, dns and deploys, see [add and doctor](https://plate.findmalek.engineer/docs/add-doctor.md) |
| `findplate update` | three-way merge of the newest template into your project, see [updates](https://plate.findmalek.engineer/docs/updates.md) |
| `findplate github` | repo, board, labels, milestones and rules on GitHub, see [GitHub](https://plate.findmalek.engineer/docs/github.md) |
| `findplate provision` | Dokploy, S3, DNS, turbo cache and backups, see [provision](https://plate.findmalek.engineer/docs/provision.md) |
| `findplate config` | per-user settings in `~/.config/findplate/config.json` |

Re-running `findplate create` in an unfinished project resumes it from `.findplate/state.json`.
