# CI and Non-Interactive Use

When stdout is not a terminal (or the `CI` environment variable is set), the CLI prints plain text and never prompts. Combine:

- [`CROWDIN_PERSONAL_TOKEN`](/serverless-apps/reference/configuration/) for authentication,
- the app link: `CROWDIN_APP_ID` in the app's [`.env` file](/serverless-apps/reference/configuration/#the-apps-env-file) - the starters gitignore `.env`, so a fresh CI checkout is unlinked; run `link --app-id <id>` in the pipeline (or write the `.env` line yourself),
- `--yes` to confirm actions (e.g. `publish --yes`),
- `--json` / `--print` for machine-readable `list` output.

```bash title="Publish from CI"
export CROWDIN_PERSONAL_TOKEN=***
crowdin-serverless-apps link --app-id 123
crowdin-serverless-apps publish --yes
```

[`manifest validate`](/serverless-apps/reference/cli-commands/#manifest) is the exception: it needs no token and no app link, so it runs in a bare checkout and works as a pre-commit hook or a pull-request gate. It exits with code 1 when `manifest.json` is invalid or is not valid JSON.

```bash title="Gate a pull request"
crowdin-serverless-apps manifest validate
```

With Crowdin Enterprise, also set `CROWDIN_BASE_URL` (e.g. `https://<org>.api.crowdin.com`) when authenticating with a personal token.

## Accessibility mode

The `--lite` global flag forces the same minimal output in a regular terminal.