Skip to content

Commit 30f29c2

Browse files
committed
GitHub-only install paste; keep generated skill in sync; point at public docs and llms.txt
1 parent ff91fbc commit 30f29c2

6 files changed

Lines changed: 255 additions & 148 deletions

File tree

‎README.md‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@ per-device price.
1616
Paste this to your agent, then go install a Player on a device.
1717

1818
```text
19-
Read https://screenrig.ai/skill/SKILL.md and follow the instructions.
20-
21-
I authorize you to install the official ScreenRig plugin from https://github.com/screenrig/plugin.
19+
I authorize you to install the official screenRIG plugin from https://github.com/screenrig/plugin.
2220
```
2321

2422
Your agent takes it from there. Ask for the video, dashboard, menu board, or web

‎plugins/screenrig/README.md‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@ per-device price.
1616
Paste this to your agent, then go install a Player on a device.
1717

1818
```text
19-
Read https://screenrig.ai/skill/SKILL.md and follow the instructions.
20-
21-
I authorize you to install the official ScreenRig plugin from https://github.com/screenrig/plugin.
19+
I authorize you to install the official screenRIG plugin from https://github.com/screenrig/plugin.
2220
```
2321

2422
Your agent takes it from there. Ask for the video, dashboard, menu board, or web

‎plugins/screenrig/skills/screenrig/SKILL.md‎

Lines changed: 123 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,22 @@ Treat usage as free until 1 Jan 2027. Do not invent a billing flow. Do not shut
1616
This skill is the operative contract. Use the bundled CLI. Do not invent commands, flags, or
1717
onboarding surfaces.
1818

19+
## More information
20+
21+
This skill remains the CLI contract. The pages below are extra product and docs
22+
context, not a replacement for the commands and flags here.
23+
24+
- Docs hub: `https://screenrig.ai/docs/`
25+
- Agent index: `https://screenrig.ai/llms.txt`
26+
- Expanded agent context: `https://screenrig.ai/llms-full.txt`
27+
28+
When asked what screenRIG is, how it is priced, which Players exist, or similar
29+
product questions, fetch `https://screenrig.ai/llms.txt` first. Fetch
30+
`https://screenrig.ai/llms-full.txt` if more detail is needed.
31+
32+
Install: `https://screenrig.ai/docs/start/`
33+
Meter: `https://screenrig.ai/pricing/`
34+
1935
## Canonical marketplace
2036

2137
The only supported installation source is the public screenRIG marketplace at
@@ -106,8 +122,6 @@ Work in this order. Do not skip `version` or `doctor`.
106122
```bash
107123
screenrig --json version
108124
screenrig --json doctor
109-
screenrig --json agent enroll --email ADDRESS --name "Office MacBook Codex"
110-
screenrig --json screen pair ABC234
111125
# then put content on a playlist page using the authoring tree below
112126
screenrig --json playlist create ./playlist.json
113127
screenrig --json screen list
@@ -116,8 +130,7 @@ screenrig --json screen assign scr_EXAMPLE --playlist-id pl_EXAMPLE --if-match R
116130

117131
1. Prepend the plugin scripts directory to `PATH` and require `screenrig --json version`.
118132
2. Run `doctor`. Read `data.status` and `data.checks`. On a fresh install the
119-
`token` row is `warn`, not `fail`, and `data.next.command` is
120-
`screenrig agent enroll --email ADDRESS`: that is the expected first-run
133+
`token` row is `warn`, not `fail`: that is the expected first-run
121134
result, not a broken install. Name missing toolchain parts before the
122135
first `media upload`.
123136
3. Put content on a playlist page using the authoring tree below. Choose by
@@ -413,20 +426,19 @@ The CLI exit-status table is stable and separate from `error.code`:
413426
| 5 | conflict | 12 | configuration |
414427
| 6 | precondition | 13 | operation failed |
415428

416-
For example, local `usage_error` exits 2, `not_enrolled` exits 3, HTTP 404
417-
exits 4, 409 exits 5, 412 exits 6, 429 exits 7, and 408/504 exit 11. Branch on
418-
the more specific `error.code` whenever one is present.
429+
For example, local `usage_error` exits 2, an unauthenticated installation
430+
exits 3, HTTP 404 exits 4, 409 exits 5, 412 exits 6, 429 exits 7, and
431+
408/504 exit 11. Branch on the more specific `error.code` whenever one is
432+
present.
419433

420-
### Secret dashboard and connection URLs
434+
### Secret dashboard URLs
421435

422436
The URL minted by `dashboard --print-url` is a credential. Under `--json` it
423437
appears on **stdout** inside `data.url`, where ordinary agent stdout capture
424438
may log it. Route it only to the intended browser, exclude that command's
425439
stdout from logs, and never paste, persist, or repeat the URL. If `dashboard`
426440
cannot open a browser, its fallback can put the same field on stdout even
427-
without `--print-url`. By contrast, `agent connect` delivers its approval URL
428-
on **stderr** (as a JSON line under `--json`). Treat the relevant stream as
429-
sensitive for either command.
441+
without `--print-url`. Treat that stream as sensitive.
430442

431443
Never pass a bearer, token flag, or pasted secret on the command line. The
432444
credential is a user-private file outside the
@@ -485,11 +497,7 @@ Read `data.status` and `data.checks`. Each check is `pass`, `warn`, or `fail`.
485497
Only `fail` changes the exit code. `data.status` is the worst row. A success
486498
envelope with `data.status` `warn` is a usable host, not a broken install.
487499

488-
Run `doctor` before enrolling. On a fresh install the `token` row is `warn`
489-
with detail `(none); this installation is not enrolled`, the row carries
490-
`next.command` `screenrig agent enroll --email ADDRESS`, and the same `next`
491-
is repeated at `data.next`. A disconnected installation or one with a pending
492-
approval warns the same way with `screenrig agent connect`. `fail` is
500+
On a fresh install the `token` row is `warn`, not `fail`. `fail` is
493501
reserved for damage: a config file other users can read
494502
(`config_permissions`), a Node below 20, a missing `ffmpeg`/`ffprobe` or
495503
`libx264`, or a control plane that does not answer. Read the `ready` row's
@@ -644,21 +652,26 @@ screenrig --json media list --tag TAG --primitive image
644652
`compose catalog` prints the fail-closed page language: page keys
645653
`width`/`height`/`font`/`background`/`brand`/`text`/`image`/`video`/`motion`/`pages`/`viewing`/`logo`,
646654
regions `fullpage|left|right|left-third|middle-third|right-third|middle-half|top-half|bottom-half|top|bottom`,
647-
and inner fields `title|subtitle|text|footer|image|video|iframe|webapp|cards|card|table`
655+
and inner fields `eyebrow|title|subtitle|text|footer|image|video|iframe|webapp|cards|card|table`
648656
plus `enter`/`stagger`/`motion`/`align`/`valign`/`fill`/`color`/`z`/`shadow`/`outline`.
649657
Author only catalog fields. Unknown keys fail the whole spec. Do not author
650658
`fontSize`. Do not author `x`/`y`. Do not author Frame trees, recipes, or
651659
`.layout.json`. On the page, `text` is the copy color. In a
652660
region, `text` is body copy (a string or an array of lines). Type size is
653661
procedural from `min(width, height)` and optional `viewing` `near|mid|far`
654-
(default `mid`). Titles default to `brand`. Body (`subtitle`, `text`, `footer`)
655-
defaults to `text`. Optional region or `card` `color` overrides every role in
656-
that box. Text over a page `image` or `video` with no `fill` gets a 1 px
657-
unblurred drop shadow (`#000000E6` on light type, `#FFFFFFE6` on dark type).
658-
Set `shadow` to `"none"` or `{ x, y, color }` to override. `outline` is
659-
`{ width: 0.5-12, color }` and is off unless set. A card plate is backing, so
660-
type on a card does not get the automatic shadow.
661-
On 1920×1080 mid, body wish is about 45 px and title wish is 86 px. A region
662+
(default `mid`). Parse order is `eyebrow`, `title`, `subtitle`, `text`, then
663+
image/cards/table, footer last. `eyebrow` is the kicker above the headline and
664+
defaults to `brand`. Region `title` defaults to page `text`. Body `text` uses
665+
muted (mixed from `text` toward `background`). `subtitle` and `footer` use
666+
`text`. Card-item titles, prices, and table headers stay `brand`. Optional
667+
region or `card` `color` overrides every role in that box. Text over a page
668+
`image` or `video` with no `fill` gets a 1 px unblurred drop shadow
669+
(`#000000E6` on light type, `#FFFFFFE6` on dark type). Set `shadow` to
670+
`"none"` or `{ x, y, color, blur? }` to override (`blur` 0–32, omit is 0).
671+
`outline` is `{ width: 0.5-12, color }` and is off unless set. A card plate is
672+
backing, so type on a card does not get the automatic shadow.
673+
On 1920×1080 mid, body wish is about 45 px, title wish is 130 px, and eyebrow
674+
wish is 32 px. A region
662675
then applies one scale (about 0.65–1.35) so type fills the box; a single line
663676
is not grown. Footer stays on the bottom edge. If the region holds image or a
664677
placeholder, type stays at scale 1 and media takes the leftover. Copy that
@@ -673,7 +686,7 @@ column's body length.
673686
`card` (singular) is a plate. `card.fit` is `region` (default: fill the whole
674687
region rect) or `ink` (hug measured type plus 24 px pad, placed with the
675688
region's `align`/`valign`). Default fill is the page background + B3 (30%
676-
transparency). Override with `card.fill`. Inner fields: `title`, `subtitle`,
689+
transparency). Override with `card.fill`. Inner fields: `eyebrow`, `title`, `subtitle`,
677690
`text`, `footer`, `image`, `cards`, `table`, `fill`, `color`, `fit`. `cards`
678691
(plural) is `[{ title, subtitle?, text?, price?, image? }]` and can sit inside
679692
`card`. No nested `card`. Sibling `title`/`text`/`cards` are not allowed next
@@ -742,8 +755,9 @@ enter/motion enums, viewing, installed fonts, and examples in this language.
742755

743756
### Compose a deck with fewer corrective steps
744757

745-
Prefer region `title`/`text`/`cards`/`table` for titles, copy, cards and
746-
tables so type fitting, font checks and safe-area diagnostics still run.
758+
Prefer region `eyebrow`/`title`/`text`/`cards`/`table` for kickers, titles,
759+
copy, cards and tables so type fitting, font checks and safe-area diagnostics
760+
still run.
747761
Keep illustrations as image assets in a region. A deck is `{ "pages": [ {
748762
"id": "intro", ...page overrides, regions } ] }`. `compose render` of that
749763
file is enough. `compose batch` adds a contact sheet and `--only ID`.
@@ -832,51 +846,63 @@ Codes worth acting on:
832846
adjacent playlist pages show the same media at the same rects; vary the
833847
layout or content when the repeat is accidental.
834848

835-
### Slide, overlay, and wordmark
849+
### Overlay family (slide-deck pages)
836850

837851
Overlay is a compose mechanic for slide-deck pages and live video. It is not
838852
the presentable-poster path. A presentable poster, menu, or event still is
839853
one generated image with the copy typeset in the still.
840854

841-
For deck text over images or video, put copy in a `card` so the plate brings type
842-
forward. Default `card.fit` `region` fills the region (a column, a half).
843-
`fit: "ink"` hugs the measured type plus 24 px; use it for lower thirds and
844-
short copy so a two-line `bottom` card does not paint a full-width opaque
845-
band. The type is sized inside the plate's padding, so the plate contains
846-
every line, title and body alike. Default fill is the page background + B3.
847-
Override with `card.fill`.
848-
Keep text opaque. Check contrast over changing bright and dark frames; a
849-
poor type-on-plate contrast warns (`card_low_contrast`) and does not block
850-
render. Do not wrap every region in a card.
855+
Named regions are the only compose language. Copy catalog examples; do not
856+
invent Frame trees, recipes, `fontSize`, `x`, or `y`. Do not put deck copy
857+
through `playlist templates` or template `slots` — those still
858+
`vectorChromeError`.
851859

852-
Overlay still (transparent page, ink-fit lower third):
860+
Photo or video is page `image` or `video`, at rest. Copy is a named region.
861+
`overlay-left`, `overlay-right`, and `overlay-bottom` add a `card`.
862+
`overlay-title` and `overlay-still` do not. Enter lives on the copy region,
863+
from the layout side (page may override). The mark is page `logo`, at rest —
864+
not a third raster.
865+
866+
`compose catalog` examples name the family:
867+
868+
| example | rails | copy | enter |
869+
|---|---|---|---|
870+
| `overlay-title` | page `image` | `left` type, no card | `fade-right` |
871+
| `overlay-left` | page `image` | `left` card, `fit` `region` | `fade-right` |
872+
| `overlay-right` | page `image` | `right` card, `fit` `region` | `fade-left` |
873+
| `overlay-bottom` | page `image` or `video` | `bottom` card, `fit` `region` | `fade-up` |
874+
| `overlay-still` | no photo | `fullpage` type, no card | `fade-in` |
875+
| `overlay` | page `video` | `bottom` card, `fit` `ink` | `fade-up` |
876+
877+
`card.fit: "region"` for left/right panels and full-width bands. `fit: "ink"`
878+
only for a snug lower third. Default fill is the page background + B3.
879+
Override with `card.fill` when that wash is too thin; keep text opaque.
880+
Do not wrap every region. Boardroom titles use `overlay-title`: type on
881+
`left`, `valign` bottom, no card. Lone stills and diagrams use `overlay-still`:
882+
`fullpage` with `enter: "fade-in"` and no copy card.
853883

854884
```json
855885
{
856886
"width": 1920,
857887
"height": 1080,
858-
"background": "#00000000",
859-
"brand": "#C9A227",
860-
"text": "#FFFFFF",
861-
"video": "./clip.mp4",
862-
"bottom": {
863-
"enter": "fade-up",
864-
"valign": "bottom",
888+
"background": "#2A3547",
889+
"brand": "#F8B334",
890+
"text": "#F4F7FA",
891+
"image": "./still.jpg",
892+
"left": {
893+
"enter": "fade-right",
865894
"card": {
866-
"fit": "ink",
867-
"title": "Lower third",
868-
"text": "Keep copy on a snug plate over the picture."
895+
"fit": "region",
896+
"fill": "#2A3547E6",
897+
"eyebrow": "THE LOW END",
898+
"title": "RAM is shrinking",
899+
"text": "What, when, where, and the next action."
869900
}
870901
}
871902
}
872903
```
873904

874-
Author the overlay at the full slide resolution (1920×1080 in this example),
875-
so the type ramp stays at the intended scale. A `bottom` card with
876-
`fit: "region"` is a full-width band; that is not the default for short copy.
877-
Keep any separate wordmark clear of the copy and preserve its proportions.
878-
879-
For a side rail, put a `card` in `left` or `right`. Do not author `x`/`y`.
905+
Snug lower third (`overlay` in the catalog):
880906

881907
```json
882908
{
@@ -885,20 +911,25 @@ For a side rail, put a `card` in `left` or `right`. Do not author `x`/`y`.
885911
"background": "#00000000",
886912
"brand": "#C9A227",
887913
"text": "#FFFFFF",
888-
"left": {
914+
"video": "./clip.mp4",
915+
"bottom": {
916+
"enter": "fade-up",
917+
"valign": "bottom",
889918
"card": {
890-
"title": "Side title",
891-
"text": "What, when, where, and the next action."
919+
"fit": "ink",
920+
"title": "Lower third",
921+
"text": "Keep copy on a snug plate over the picture."
892922
}
893923
}
894924
}
895925
```
896926

897-
Page `logo` is the identity mark: 32 px inset from the chosen corner, contain
898-
inside 200×100, never upscaled. Prefer `logo` over a hand-placed playlist
899-
wordmark when composing the still.
927+
Author the overlay at the full slide resolution (1920×1080 in this example),
928+
so the type ramp stays at the intended scale. Page `logo` is the identity
929+
mark: 32 px inset from the chosen corner, contain inside 200×100, never
930+
upscaled. Prefer `logo` over a hand-placed playlist wordmark.
900931

901-
For a deck overlay playlist: photo `layer` 0 + overlay `layer` 1 on a
932+
For a deck overlay playlist: photo or video `layer` 0 + overlay `layer` 1 on a
902933
1920×1080 canvas. Use `content_fit: "fill"` for a matching-aspect full-canvas
903934
overlay; preserve the photo proportions with `contain` or intentional `cover`
904935
cropping. Eight-digit hex is how the page stays transparent and the plate
@@ -1361,7 +1392,7 @@ Take `--playlist-id` from `data.id` of the `playlist create` result. Take
13611392
`screen show` return. `revision_conflict` means refetch and retry. Do not
13621393
invent the revision.
13631394

1364-
`screen pair`, `screen assign`, and `screen show` return the screen's
1395+
`screen assign` and `screen show` return the screen's
13651396
`manifest_revision` and `content_access_generation`. `manifest_revision`
13661397
bumps when that screen's resolved runtime manifest changes. After `playlist update`
13671398
or a screen assignment, compare `screen show` with the earlier value: a bump proves
@@ -1406,20 +1437,35 @@ asset or pixel-quality proof. Do not print pixels.
14061437

14071438
### Player operation logs
14081439

1409-
For a player that is already running, use a sink that already owns its output:
1410-
1411-
- A deployment-provided merged NDJSON listener. In this development
1412-
workspace/deployment the listener is followed with `screenrig-logd follow`;
1413-
that name is deployment-specific, not a plugin or CLI command and not
1414-
guaranteed on another host.
1415-
- The player's own `<player-state-dir>/dev-log.jsonl`, the player-owned fallback
1416-
when no merged listener is available.
1440+
This plugin does not emit the operation log. The CLI does, through optional
1441+
`log_socket` in the same user config as the token. The CLI connects as a
1442+
client to an already-listening Unix domain socket at that path and writes
1443+
one NDJSON object per line. There is no `--log-socket` flag and no
1444+
`SCREENRIG_LOG_SOCKET` override. If the field is absent or empty, commands
1445+
work unchanged. Connect failure never fails the command.
1446+
1447+
Each CLI line includes `v` (`1`), `ts`, `event_id`, `correlation_id`,
1448+
`run_id`, `command`, `kind` (`http` or `local`), `phase`, `op`, and `tag`.
1449+
Nested work also carries `parent_correlation_id`. Optional `id` is an
1450+
associated resource (`scr_…`, `pl_…`, `med_…`). Optional `params` is small
1451+
scalars. Join request/response and start/finish rows on `correlation_id`.
1452+
Prefer `tag`, `id`, `phase`, and `params` over dumping whole logs.
1453+
1454+
Players emit their own separate logs:
1455+
1456+
- Qt and Apple: a Unix-socket client. Override the path with
1457+
`SCREENRIG_PLAYER_LOG_SOCKET`.
1458+
- Android: the `ScreenRigOp` log tag.
1459+
- Windows: Trace and Debug output.
1460+
- Browser: `console.debug`.
1461+
- Fallback for a player that is already running: the player's own
1462+
`<player-state-dir>/dev-log.jsonl`.
14171463

14181464
The Unix-socket route is useful only when you own the player's start and have
14191465
arranged its listener/socket before launch; it is not the first route for an
1420-
already-running player. Pair rows on `correlation_id` and prefer `tag`, `id`,
1421-
`phase`, and `params` over dumping whole logs. Never print credentials,
1422-
pairing material, signed URLs, object keys, or pixels from a log line.
1466+
already-running player. Join rows on `correlation_id`. Never print
1467+
credentials, provisioning material, signed URLs, object keys, or pixels from
1468+
a log line.
14231469

14241470
`screen toast` is the agent mark on a live wall. `--level` is `info`,
14251471
`alert`, or `error`. Omitted `--level` defaults to `info`. Production glass
@@ -1518,10 +1564,7 @@ feedback is about. Probe support through `capabilities.features.feedback`;
15181564

15191565
```text
15201566
account show
1521-
agent enroll --email ADDRESS [--name NAME] [--open-dashboard]
1522-
agent connect [--name NAME] [--print-url] [--timeout MS]
15231567
agent status
1524-
agent disconnect --yes [--allow-lockout]
15251568
dashboard [--print-url]
15261569
app pack <directory> [--output FILE]
15271570
app upload <directory> [--name NAME] [--no-wait] [--poll-ms MS]
@@ -1533,6 +1576,7 @@ media generate --prompt TEXT [--aspect-ratio RATIO] [--quality low|medium|high]
15331576
media upload <file> [--content-type TYPE] [--tag TAG] [--no-wait] [--poll-ms MS]
15341577
[--no-transcode] [--codec h264|hevc] [--max-fps N]
15351578
[--max-edge PIXELS] [--webp-quality 1-100] [--no-progress]
1579+
[--preset signage-1080p30|signage-4k30] [--no-audio]
15361580
media upload-batch <manifest.json> --state FILE [--concurrency N]
15371581
[--no-transcode] [--tag TAG] [--no-progress]
15381582
media show <id>
@@ -1553,7 +1597,6 @@ playlist import <directory> [--name NAME] [--update ID --if-match REVISION]
15531597
playlist show <id>
15541598
playlist list
15551599
playlist delete <id> --if-match REVISION
1556-
screen pair CODE [--label LABEL]
15571600
screen update <id> [--name NAME] [--playlist-id ID] [--timezone ZONE]
15581601
--if-match REVISION
15591602
screen list [--state archived]
@@ -1594,8 +1637,7 @@ version
15941637
```
15951638

15961639
Global flags go before the command: `--json`, `--api-url URL`, `--config
1597-
PATH`, `--request-id ID`, `--idempotency-key KEY`, `--timeout MS`, and
1598-
`--beta-key KEY` (enrolment only).
1640+
PATH`, `--request-id ID`, `--idempotency-key KEY`, and `--timeout MS`.
15991641

16001642
On `revision_conflict`, fetch the resource, reapply the intended change, and
16011643
retry with the returned revision. On an ambiguous transport failure, reuse the

0 commit comments

Comments
 (0)