# Get started


> Install, log in, and do something real in four commands.
Install it, log in, and the rest of this page is things worth actually running.

```bash
brew tap screenly/screenly-cli
brew install screenly-cli
screenly login
```

Other install routes are in [Install the CLI](/docs/developers/cli/overview/install/).

## Which screens are down

The one that earns the install:

```bash
screenly screen list -o json | jq -r '.[] | select(.status.is_online == false) | .name'
```

Nothing else in your toolchain answers that in one line. Swap `jq` for `-o table` when a person is reading it, or `-o csv` when somebody asks for a fleet inventory and you would rather not build one.

## Put something on a screen

Three commands from nothing to playing:

```bash
screenly asset add https://example.com/dashboard "Ops dashboard"
screenly playlist create "Reception"
screenly playlist append $PLAYLIST_ID $ASSET_ID 30
```

`append` takes the duration in seconds as its last argument. `prepend` does the same at the front, which is the one you want for something urgent.

## Pair a screen without a browser

```bash
screenly screen add k7ptqz34 "Line 4 Andon"
```

The pairing code comes off the display. In a rollout, this plus a list of codes and names is the whole provisioning script.

## Set up an authenticated page

The five asset commands that make the CLI worth using over the dashboard for this:

```bash
screenly asset basic-auth $ASSET_ID "user=s3cret"
screenly asset bearer-auth $ASSET_ID "eyJhbG..."
screenly asset inject-js $ASSET_ID close-cookie-banner.js
```

Also `set-headers` and `update-headers`. All of it is scriptable and reviewable, which clicking is not. See [Authenticated pages](/docs/content/web-pages/authenticated-pages/).

## Ship an app

```bash
screenly edge-app validate
screenly edge-app run --generate-mock-data
screenly edge-app deploy
```

Build locally against mock data, then deploy to every screen running it. See [Edge apps](/docs/developers/edge-apps/).

## Then

[The command surface](/docs/developers/cli/overview/commands/) for what else is there, [Scripting](/docs/developers/cli/guides/scripting/) for output formats and pipes, and [Running in CI](/docs/developers/cli/guides/ci-pipelines/) for the pipeline.

Or `screenly mcp`, and let an assistant do it. See [MCP server](/docs/developers/mcp/).