# Quickstart (/docs/quickstart)

> Scaffold a project, validate it, run it with a model, and approve a tool call in Studio.

`create-plico` generates the internal-ops starter and the `plico` CLI validates, runs and serves
it. Steps 1 and 2 take a few minutes and need no API key. You need Node 22.18 or later and, to chat with
a model in steps 3 to 5, an API key.

> **Note:** Plico is a developer preview (`0.1`). The HTTP API under `/v1` takes additive changes only; the
> TypeScript exports can change in any `0.x` minor release.

### Create a project

```bash
npm create plico@latest my-agent -- --provider anthropic
cd my-agent
npm install
```

`--provider` is `anthropic`, `openai`, `google` or `openai-compatible` (Ollama, OpenRouter,
LiteLLM). Run `create-plico` with no directory to be asked for the directory, name and
provider, where you can also pick no provider. With a directory and no `--provider`, the
project has no model and runs `--dry` only. The
scaffold has the project folders, a `package.json` with `dev`, `validate` and `eval`
scripts, a `.env.example` and a `.gitignore`.

### Validate and dry run

```bash
npm run validate
npx plico run --dry .
```

`plico validate` prints `Valid Plico project: .` and otherwise names the file at fault. A dry
run uses a scripted model, so it needs no key, and ends with `run.completed: completed`.

### Add your key

```bash
cp .env.example .env
```

Put the key in `.env`. Plico loads it for `plico run`, `plico serve` and `plico readiness`.
`npx plico readiness .` tells you what is still missing. See [Providers](/docs/providers).

### Open Studio and chat

```bash
npm run dev
```

`plico serve` prints `Serving Plico at http://127.0.0.1:3000`. Open that address, start a
thread, ask for something, and watch the run's events stream in. If the port is taken, add
`--port 3001`. `http://127.0.0.1:3000/health` answers `{ "ok": true, ... }` when the server is up. See [Studio](/docs/studio) and [Threads](/docs/threads).

### Approve a tool call

Add a tool with `approval: { required: true }` (see [Tools](/docs/tools)). When the model
calls it, the run waits and Studio shows the request. Approve it and the run continues. To try
it with no key, see [Try it without a key](/docs/approvals#try-it-without-a-key). The
[internal-ops example](https://github.com/ITZSHOAIB/plico/tree/main/examples/internal-ops-agent)
has a `close_ticket` tool that does this.

### Check it in CI

```bash
npm run eval
```

Evals run scripted cases with no provider. The scaffold ships one case, `evals/smoke.script.json`,
and the command prints `1/1 passed, 0 failed`. Add your own with [`--from-run`](/docs/cli#turn-a-run-into-a-case).
See [Evals](/docs/evals), or build a whole agent in [Example: a refund agent](/docs/refund-agent).

Using Claude Code or Cursor? See [Build with an AI coding agent](/docs/agents).

If something fails, see [Troubleshooting](/docs/troubleshooting).