# ScreenRig

> Canonical HTML: https://screenrig.ai/
> Last-reviewed: 2026-08-14 · Phase: prerelease localhost v1 · API contract: OpenAPI 0.2.0

ScreenRig is an agent-operated digital-signage service: an agent uses the CLI and REST API to upload content, assemble a looping playlist, pair a browser screen, and observe the result.

The complete CLI-to-API-to-Player lifecycle is verified on a three-replica localhost stack. The public ScreenRig marketing and documentation site is live and verified over HTTPS. The ScreenRig service API, Player, release hosts, protected content delivery, and full production application stack remain undeployed and unverified; npm packages remain unpublished. This is not an uptime, SLA, customer, or traffic claim.

## Start here

Prerequisites: Linux, a non-root user able to run Docker, Docker Compose v2, Node.js 20.11 or newer, Go 1.26, Python 3, Bash, curl, and jq.

```sh
# Build the source-checkout CLI
npm --prefix packages/sdk ci
npm --prefix packages/sdk run build
npm --prefix packages/cli ci
npm --prefix packages/cli run sync:sdk
npm --prefix packages/cli run build

# Start the private local stack
make local-up
make smoke

# Initialize and authenticate
screenrig() { node packages/cli/dist/bin.js "$@"; }
screenrig --api-url http://api.screenrig.localhost:8088 \
  account create --email agent-owner@example.com --json
screenrig auth status --json

# Open http://play.screenrig.localhost:8088, then claim its code
screenrig screen pair --code ABCDEF --label "Lobby" --json

# Package, upload, and wait for publication
screenrig app upload ./path/to/built-webapp --json
```

Expected success: account and auth checks succeed; pairing returns a screen; application upload waits for its durable publication operation to reach a terminal state. `ABCDEF` and the directory are placeholders. Never paste credentials or live pairing codes into logs.

## Agent workflow

1. Discover from [llms.txt](https://screenrig.ai/llms.txt), the [downloadable skill](https://screenrig.ai/skill/SKILL.md), and the [API reference](https://screenrig.ai/docs/api.md).
2. Package an already-built static directory. ScreenRig does not build or execute uploaded source.
3. Publish immutable releases and media, then create a playlist that pins their IDs.
4. Pair a browser Player with its six-character code and assign the playlist using the current screen revision.
5. Follow durable operations and events; treat SSE cursors as opaque.

## Trust boundary

Account bearer tokens stay with the CLI and account API. Player cookies and runtime grants remain on the trusted Player origin. Uploaded applications run on isolated release origins with placement-scoped capability.

ScreenRig is not public file hosting. Protected releases, media, and K/V require current screen-manifest authority. Knowing an ID, path, upload, or object key never authorizes a read, and there is no arbitrary listing or public-download API.

## Implemented and gated

Verified on localhost: account bootstrap, application and media publication, playlists, pairing, protected playback, page advance, K/V, durable operations/events, SSE resume, and routing through three interchangeable backends.

Android `standard`, `managed`, and `amazon` source flavors, the hardened full-viewport container, Player bridge, and native manifest-authorized content cache are implemented. Unit, lint, debug, R8 release, and Player integration matrices pass. Instrumentation was blocked by the absence of KVM; no personal Pixel, managed physical device, or Amazon Signage Stick was validated. The app is not store-published, and native caching is not a general offline-playback guarantee.

Deferred beyond v1: MCP, billing/payments, screenshot capture, email recovery, and a management dashboard. Android physical/store validation and a general offline-playback guarantee remain gated.

## Discovery

- [Product docs](https://screenrig.ai/docs.md)
- [API reference](https://screenrig.ai/docs/api.md)
- [Raw OpenAPI YAML](https://screenrig.ai/docs/api/openapi.yaml)
- [Raw OpenAPI JSON](https://screenrig.ai/docs/api/openapi.json)
- [Agent skill](https://screenrig.ai/skill/SKILL.md)
- [Implementation status](https://screenrig.ai/status.md)
- [Sitemap](https://screenrig.ai/sitemap.md)
