Skip to content

Commit bc4453b

Browse files
gershamclaude
andcommitted
Skill and CLI: screen folders
The skill files screens in folders (where a screen is) beside tags (groups across places), with screen folder list|show|create|update|delete, screen move and screen list --folder; fleet commands and campaign audiences take --folder ID; a folder default plays on screens with no playlist of their own, and a move's levels are told to the user. The bundled CLI is cli 7b52466. Budget: repository 109 files 3,474,581 -> 3,491,811 bytes; plugins/screenrig 50 files 2,437,242 -> 2,453,020 bytes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 66b094e commit bc4453b

6 files changed

Lines changed: 356 additions & 309 deletions

File tree

‎components.lock.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
"state": "resolved",
44
"cli": {
55
"repository": "screenrig/cli",
6-
"commit": "ad1d7112d4e053729022b40b5fab0cb3eae5a06b",
6+
"commit": "7b52466b5529894c8526ed22f245a0fceb5581fe",
77
"artifact": {
88
"file": "screenrig-cli.tgz",
9-
"sha256": "7e1810296cc96359fb03a6e7f2d761b5b97d90062bd6ac0d3043ceee762fabfd"
9+
"sha256": "56fab7e708e6cbd190d6a24ff6bcf7d6bfe9ca9b3280c4ff5af0207fbbb4d657"
1010
}
1111
}
1212
}

‎plugins/screenrig/cli/dist/bin.js‎

Lines changed: 280 additions & 277 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,11 @@ the screen device, or play.DOMAIN when `doctor` reports another environment's
114114
api.DOMAIN); no USB or ADB. `screenrig screen pair "ABC 234"`, then
115115
`screen show SCREEN_ID` until `state` is `active` and `online` is true. Read
116116
`observation.surfaces[]` for size and orientation. Tag each screen right after
117-
pairing (`screen tag SCREEN_ID --set Lobby,Floor2`); tags select fleets and are
118-
not authorization. Displays run by a device manager use `fleet-links create`
119-
instead of per-screen codes: its URL goes in a kiosk browser, in Android or
117+
pairing (`screen tag SCREEN_ID --set Lobby,Floor2`) and, for a large estate,
118+
file it in a folder (`screen move SCREEN_ID --folder ID`); tags and folders
119+
select fleets and are not authorization. Displays run by a device manager use
120+
`fleet-links create` instead of per-screen codes: its URL goes in a kiosk
121+
browser, in Android or
120122
Apple managed app configuration as `fleet_link` (`asset_id` names the screen),
121123
or in `/etc/screenrig/fleet-link` on Linux; `--expires-at` ends it. Its URL
122124
creates screens, so give it only to the person who configures the devices. A
@@ -224,13 +226,30 @@ Downloads are free. On Standard the first 1 GB stored is free and a project with
224226
no credit cannot store more (`payment_required`), so delete unused media instead
225227
of piling it up.
226228

227-
**Fleets.** `screen assign|reload|toast|tag` take several IDs or `--tag TAG`.
228-
The answer stays `ok: true`; read `data.results[]` (`fleet_partial_failure`).
229-
Rerun an interrupted command unchanged; after a partial failure retry only the
230-
failed IDs. For a fleet publish, `playlist create FILE` once, then
231-
`screen assign --tag TAG --playlist-id ID`. Verify with
229+
**Fleets.** `screen assign|reload|toast|tag` take several IDs, `--tag TAG` or
230+
`--folder ID`. The answer stays `ok: true`; read `data.results[]`
231+
(`fleet_partial_failure`). Rerun an interrupted command unchanged; after a
232+
partial failure retry only the failed IDs. For a fleet publish, `playlist create
233+
FILE` once, then `screen assign --tag TAG --playlist-id ID`. Verify with
232234
`screen screenshot --tag TAG --output DIR`.
233235

236+
**Screen folders.** A folder says where a screen is, one place per screen
237+
(property, building, level, zone); a tag marks a group that cuts across places
238+
(`overhead`, `menu-board`). Use a folder for "everything in this building", a
239+
tag for "every menu board", or both:
240+
`--audience '{"all":[{"folder":"sfd_ID"},{"tag":"overhead"}]}'`.
241+
`screen folder create --name NAME [--parent ID] [--default-playlist-id ID]`,
242+
`list`, `show`, `update` and `delete` build the tree, `screen move ID...
243+
--folder ID|--root` files screens and folders (`scr_` and `sfd_` IDs mixed), and
244+
`screen list --folder ID|root` lists one folder's own screens. `--folder ID` on a
245+
fleet command or `campaign create|update` reaches the folder and every folder
246+
inside it. A folder's default playlist plays on its screens with no playlist of
247+
their own (`effective_playlist.source` is `folder`). A move or re-parent
248+
re-resolves the screens within about 15 seconds, and the answer's `levels` lists
249+
the campaigns and folder defaults they gain or lose: tell the user. Deleting a
250+
folder moves its contents up and is refused while a campaign names it. Folders
251+
nest 10 deep, 1,000 to a project; writes need Manage access.
252+
234253
**Per-screen values.** One playlist shows each screen's own details. Set them
235254
once per screen: `screen update SCREEN_ID --field store_number=0142 --field
236255
region=north --location 46.8772,-96.7898 --location-name Fargo`. Card params
@@ -242,12 +261,13 @@ region=north` or `--near LAT,LON,KM` finds screens.
242261

243262
**Campaigns, schedules and takeover.** A screen plays its takeover, else the
244263
first campaign that holds, else the first matching schedule entry, else its
245-
default playlist. For content across screens (a promotion at every `north`
246-
store, weekday lunch menus) create one campaign, not per-screen schedules:
247-
`campaign create --name Lunch --playlist-id ID --tag north --window
248-
mon-fri@11:00-14:00`. Screens that join its audience later get it too. It needs
249-
each screen's default playlist and, with `--from`, `--until` or `--window`, its
250-
timezone (`screen set-timezone`). `campaign screens ID` shows every screen's
264+
own default playlist, else its nearest folder's default. For content across
265+
screens (a promotion at every `north` store, weekday lunch menus) create one
266+
campaign, not per-screen schedules: `campaign create --name Lunch --playlist-id
267+
ID --tag north --window mon-fri@11:00-14:00` (`--folder ID` for a folder).
268+
Screens that join its audience later get it too. It needs each screen's default
269+
playlist and, with `--from`, `--until` or `--window`, its timezone
270+
(`screen set-timezone`). `campaign screens ID` shows every screen's
251271
standing and `campaign explain SCREEN_ID` says why one does not play it;
252272
with `--at TIME` it says what will play then, and `--to TIME` lists the
253273
switches: check a plan before its date.

‎plugins/screenrig/skills/screenrig/references/screen-card.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ screenrig screen list --json
2121

2222
`screen show SCREEN_ID` returns the same fields for one screen; `list` already
2323
carries every field below, so one call serves a card or a fleet. `--tag TAG`
24-
narrows to one tag and `--state archived` lists archived screens.
24+
narrows to one tag, `--folder ID|root` to the screens directly inside one
25+
screen folder (or outside every folder), and `--state archived` lists archived
26+
screens.
2527

2628
Take every displayed value from that envelope. Do not retype a number, an id,
2729
a revision or a timestamp from a previous reply: re-read it here, so the card

‎skills/screenrig/SKILL.md‎

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,11 @@ the screen device, or play.DOMAIN when `doctor` reports another environment's
114114
api.DOMAIN); no USB or ADB. `screenrig screen pair "ABC 234"`, then
115115
`screen show SCREEN_ID` until `state` is `active` and `online` is true. Read
116116
`observation.surfaces[]` for size and orientation. Tag each screen right after
117-
pairing (`screen tag SCREEN_ID --set Lobby,Floor2`); tags select fleets and are
118-
not authorization. Displays run by a device manager use `fleet-links create`
119-
instead of per-screen codes: its URL goes in a kiosk browser, in Android or
117+
pairing (`screen tag SCREEN_ID --set Lobby,Floor2`) and, for a large estate,
118+
file it in a folder (`screen move SCREEN_ID --folder ID`); tags and folders
119+
select fleets and are not authorization. Displays run by a device manager use
120+
`fleet-links create` instead of per-screen codes: its URL goes in a kiosk
121+
browser, in Android or
120122
Apple managed app configuration as `fleet_link` (`asset_id` names the screen),
121123
or in `/etc/screenrig/fleet-link` on Linux; `--expires-at` ends it. Its URL
122124
creates screens, so give it only to the person who configures the devices. A
@@ -224,13 +226,30 @@ Downloads are free. On Standard the first 1 GB stored is free and a project with
224226
no credit cannot store more (`payment_required`), so delete unused media instead
225227
of piling it up.
226228

227-
**Fleets.** `screen assign|reload|toast|tag` take several IDs or `--tag TAG`.
228-
The answer stays `ok: true`; read `data.results[]` (`fleet_partial_failure`).
229-
Rerun an interrupted command unchanged; after a partial failure retry only the
230-
failed IDs. For a fleet publish, `playlist create FILE` once, then
231-
`screen assign --tag TAG --playlist-id ID`. Verify with
229+
**Fleets.** `screen assign|reload|toast|tag` take several IDs, `--tag TAG` or
230+
`--folder ID`. The answer stays `ok: true`; read `data.results[]`
231+
(`fleet_partial_failure`). Rerun an interrupted command unchanged; after a
232+
partial failure retry only the failed IDs. For a fleet publish, `playlist create
233+
FILE` once, then `screen assign --tag TAG --playlist-id ID`. Verify with
232234
`screen screenshot --tag TAG --output DIR`.
233235

236+
**Screen folders.** A folder says where a screen is, one place per screen
237+
(property, building, level, zone); a tag marks a group that cuts across places
238+
(`overhead`, `menu-board`). Use a folder for "everything in this building", a
239+
tag for "every menu board", or both:
240+
`--audience '{"all":[{"folder":"sfd_ID"},{"tag":"overhead"}]}'`.
241+
`screen folder create --name NAME [--parent ID] [--default-playlist-id ID]`,
242+
`list`, `show`, `update` and `delete` build the tree, `screen move ID...
243+
--folder ID|--root` files screens and folders (`scr_` and `sfd_` IDs mixed), and
244+
`screen list --folder ID|root` lists one folder's own screens. `--folder ID` on a
245+
fleet command or `campaign create|update` reaches the folder and every folder
246+
inside it. A folder's default playlist plays on its screens with no playlist of
247+
their own (`effective_playlist.source` is `folder`). A move or re-parent
248+
re-resolves the screens within about 15 seconds, and the answer's `levels` lists
249+
the campaigns and folder defaults they gain or lose: tell the user. Deleting a
250+
folder moves its contents up and is refused while a campaign names it. Folders
251+
nest 10 deep, 1,000 to a project; writes need Manage access.
252+
234253
**Per-screen values.** One playlist shows each screen's own details. Set them
235254
once per screen: `screen update SCREEN_ID --field store_number=0142 --field
236255
region=north --location 46.8772,-96.7898 --location-name Fargo`. Card params
@@ -242,12 +261,13 @@ region=north` or `--near LAT,LON,KM` finds screens.
242261

243262
**Campaigns, schedules and takeover.** A screen plays its takeover, else the
244263
first campaign that holds, else the first matching schedule entry, else its
245-
default playlist. For content across screens (a promotion at every `north`
246-
store, weekday lunch menus) create one campaign, not per-screen schedules:
247-
`campaign create --name Lunch --playlist-id ID --tag north --window
248-
mon-fri@11:00-14:00`. Screens that join its audience later get it too. It needs
249-
each screen's default playlist and, with `--from`, `--until` or `--window`, its
250-
timezone (`screen set-timezone`). `campaign screens ID` shows every screen's
264+
own default playlist, else its nearest folder's default. For content across
265+
screens (a promotion at every `north` store, weekday lunch menus) create one
266+
campaign, not per-screen schedules: `campaign create --name Lunch --playlist-id
267+
ID --tag north --window mon-fri@11:00-14:00` (`--folder ID` for a folder).
268+
Screens that join its audience later get it too. It needs each screen's default
269+
playlist and, with `--from`, `--until` or `--window`, its timezone
270+
(`screen set-timezone`). `campaign screens ID` shows every screen's
251271
standing and `campaign explain SCREEN_ID` says why one does not play it;
252272
with `--at TIME` it says what will play then, and `--to TIME` lists the
253273
switches: check a plan before its date.

‎skills/screenrig/references/screen-card.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ screenrig screen list --json
2121

2222
`screen show SCREEN_ID` returns the same fields for one screen; `list` already
2323
carries every field below, so one call serves a card or a fleet. `--tag TAG`
24-
narrows to one tag and `--state archived` lists archived screens.
24+
narrows to one tag, `--folder ID|root` to the screens directly inside one
25+
screen folder (or outside every folder), and `--state archived` lists archived
26+
screens.
2527

2628
Take every displayed value from that envelope. Do not retype a number, an id,
2729
a revision or a timestamp from a previous reply: re-read it here, so the card

0 commit comments

Comments
 (0)