twentythree-skills 1.0.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "twentythree-skills",
3
- "version": "1.0.0",
3
+ "version": "1.3.0",
4
4
  "description": "AI agent skills for the TwentyThree CLI",
5
5
  "license": "MIT",
6
6
  "author": "TwentyThree",
package/skills/SKILL.md CHANGED
@@ -4,7 +4,7 @@ description: |
4
4
  Full TwentyThree video platform CLI. Use when the user asks to upload or manage
5
5
  videos, run webinars, query analytics, manage audiences, configure players,
6
6
  create categories, manage tags, spots, thumbnails, webhooks, collectors, polls,
7
- presentations, or any TwentyThree platform operation. Covers 235+ API commands
7
+ presentations, or any TwentyThree platform operation. Covers 238+ API commands
8
8
  across 22 resource groups plus meta commands (auth, workspace, autocomplete, doctor).
9
9
  Every command supports --json for machine-readable output and --agent for
10
10
  self-describing metadata (api_endpoint, auth_scope, output_shape, side_effects).
@@ -25,7 +25,7 @@ compatibility: Requires twentythree-cli installed globally (npm install -g twent
25
25
 
26
26
  # TwentyThree CLI
27
27
 
28
- > Terminal access to the full TwentyThree video platform API — videos, webinars, analytics, audiences, and every related resource. 235+ commands across 22 resource groups.
28
+ > Terminal access to the full TwentyThree video platform API — videos, webinars, analytics, audiences, and every related resource. 238+ commands across 22 resource groups.
29
29
  >
30
30
  > Always use `--json` in agentic contexts for structured output. Always run `twentythree <command> --agent` before calling an unfamiliar command to discover its flags, API endpoint, auth scope, and side effects.
31
31
 
@@ -121,6 +121,16 @@ Always check `auth_scope` and `side_effects` before write/admin operations.
121
121
  - **After upload or create, the CLI prints the new resource ID and its admin URL.** Use the ID for follow-up updates (e.g. setting thumbnail, publishing).
122
122
  - **On persistent errors, run `twentythree doctor`** to diagnose auth, connectivity, and dependency issues.
123
123
 
124
+ ## Behavioral Guide
125
+
126
+ Before executing multi-step workflows, read [`guide.md`](guide.md) for cross-cutting rules.
127
+ The guide covers two categories:
128
+
129
+ - **Correctness Rules** — must-follow rules that prevent API errors (object type differentiation, no `webinar get`, webinar creation defaults, timezone handling, admin link construction)
130
+ - **Preference Rules** — best-practice rules that improve output quality (thumbnails from listing responses, analytics via listing flags, filtering/sorting on listing endpoints)
131
+
132
+ > See [`guide.md`](guide.md) for the full rule list with examples.
133
+
124
134
  ## Resource Index
125
135
 
126
136
  All 22 resource groups. Every topic supports `--agent`, `--json`, and `--workspace`.
@@ -135,11 +145,11 @@ All 22 resource groups. Every topic supports `--agent`, `--json`, and `--workspa
135
145
  | `action` | `list`, `create`, `get`, `update`, `delete` + subtypes | Interactive overlays, CTAs inside videos |
136
146
  | `collector` | `list`, `create`, `delete` | Lead capture forms |
137
147
  | `comment` | `list`, `create`, `get`, `update`, `delete` | Video comments moderation |
138
- | `player` | `list`, `create`, `get`, `update`, `delete` | Player configuration and theming |
148
+ | `player` | `list`, `create`, `get`, `update`, `delete`, `set-thumbnail`, `remove-thumbnail` | Player configuration, theming, and custom thumbnails |
139
149
  | `poll` | `list`, `create`, `get`, `update`, `delete` | In-video polls |
140
150
  | `spot` | `list`, `create`, `get`, `update`, `delete` | Hotspot annotations on videos |
141
151
  | `tag` | `list`, `create` | Content tagging |
142
- | `thumbnail` | `list`, `create`, `get`, `update`, `delete` | Video thumbnail management |
152
+ | `thumbnail` | `list`, `create`, `get`, `update`, `delete`, `preview-scss` | Video thumbnail and template management |
143
153
  | `webhook` | `list`, `create`, `get`, `update`, `delete` | Event webhooks |
144
154
  | `app` | `list`, `thumbnail`, `create`, `get`, `update`, `delete` | App/integration management |
145
155
  | `presentation` | `list` + page/setting subtopics | Presentation content |
@@ -168,7 +178,7 @@ These are not in the 22 resource groups — they are CLI-local utilities:
168
178
  ```bash
169
179
  # 1. Upload (chunked upload is automatic)
170
180
  twentythree video upload ./video.mp4 --title "Product Demo" --json
171
- # => prints { "id": "<video-id>", "admin_url": "..." }
181
+ # => prints { "data": { "id": "<video-id>", "admin_url": "..." } }
172
182
 
173
183
  # 2. Assign to a category (API: album)
174
184
  twentythree video update <video-id> --category-id <cat-id> --json
@@ -177,18 +187,20 @@ twentythree video update <video-id> --category-id <cat-id> --json
177
187
  twentythree thumbnail create --video-id <video-id> --time 5 --json
178
188
 
179
189
  # 4. Publish
180
- twentythree video update <video-id> --published 1 --json
190
+ twentythree video update <video-id> --publish --json
181
191
  ```
182
192
 
183
193
  ### Webinar Setup
184
194
 
185
195
  ```bash
186
196
  # 1. Create the webinar (API: live)
187
- twentythree webinar create --title "Q2 Kickoff" --scheduled-at "2026-05-01T14:00:00Z" --json
188
- # => prints { "id": "<webinar-id>", "admin_url": "..." }
197
+ twentythree webinar create --title "Q2 Kickoff" --live-date "2026-05-01T14:00:00Z" --json
198
+ # => prints { "data": { "id": "<webinar-id>", "admin_url": "..." } }
189
199
 
190
- # 2. Fetch room URL and stream key
191
- twentythree webinar get <webinar-id> --json
200
+ # 2. Fetch room URL and stream key — use webinar list --search since there is no webinar get
201
+ twentythree webinar list --search "Q2 Kickoff" --json
202
+ # Then use webinar room connect for the stream key specifically:
203
+ twentythree webinar room connect <webinar-id> --json
192
204
 
193
205
  # 3. Start an associated session when the event begins
194
206
  twentythree session list --webinar-id <webinar-id> --json
@@ -0,0 +1,116 @@
1
+ ---
2
+ name: guide
3
+ description: Cross-cutting behavioral rules for the TwentyThree CLI — correctness rules that prevent API errors and preference rules that improve output quality.
4
+ ---
5
+
6
+ # TwentyThree CLI — Behavioral Guide
7
+
8
+ > Cross-cutting rules for agentic CLI use. Rules in this guide apply across all resource topics.
9
+ > **Correctness Rules** prevent API errors. **Preference Rules** improve output quality.
10
+
11
+ ## Correctness Rules
12
+
13
+ These rules must be followed to avoid API errors or incorrect data.
14
+
15
+ ### Object Type Differentiation
16
+
17
+ Use `--object-type photo` for videos and `--object-type live` for webinars when calling `comment`, `poll`, `spot`, or other multi-object topics.
18
+
19
+ ```bash
20
+ # Comments on a video — object-type is photo (CLI maps video -> API photo)
21
+ twentythree comment list --object-id <video-id> --object-type photo --json
22
+
23
+ # Comments on a webinar — object-type is live (CLI maps webinar -> API live)
24
+ twentythree comment list --object-id <webinar-id> --object-type live --json
25
+ ```
26
+
27
+ ---
28
+
29
+ ### Retrieve Webinars with webinar list --search
30
+
31
+ There is no `webinar get` command. Retrieve a specific webinar by passing its title to `webinar list --search`, or fetch all and filter by ID client-side.
32
+
33
+ ```bash
34
+ twentythree webinar list --search "Q2 Town Hall" --json
35
+ ```
36
+
37
+ ---
38
+
39
+ ### Webinar Creation Defaults
40
+
41
+ Verify publication and draft flags when creating webinars — the defaults may not match your intent. Pass `--publish` to make the webinar immediately visible or `--draft` to hold it unpublished. Run `twentythree webinar create --agent` to confirm all available access flags before creating.
42
+
43
+ ```bash
44
+ # Create a published webinar explicitly
45
+ twentythree webinar create --title "Product Launch" --live-date "2026-06-01T14:00:00Z" --publish --json
46
+
47
+ # Create a draft webinar for review before publishing
48
+ twentythree webinar create --title "Internal Update" --draft --json
49
+ ```
50
+
51
+ ---
52
+
53
+ ### Timezone Handling
54
+
55
+ Always specify `--live-date` in ISO 8601 UTC format (ending in `Z`) to avoid timezone ambiguity when scheduling webinars or time-sensitive events.
56
+
57
+ ```bash
58
+ twentythree webinar create --title "Launch Event" --live-date "2026-06-01T14:00:00Z" --json
59
+ ```
60
+
61
+ ---
62
+
63
+ ### Admin Link Construction
64
+
65
+ The `--json` response after every upload or create includes `data.admin_url`. Use that value directly for admin deep links — never construct admin URLs by concatenating domain and ID.
66
+
67
+ ```bash
68
+ # Upload a video and capture the admin URL from the response
69
+ RESPONSE=$(twentythree video upload ./video.mp4 --title "Demo" --json)
70
+ echo "Admin URL: $(echo $RESPONSE | jq -r '.data.admin_url')"
71
+ ```
72
+
73
+ ---
74
+
75
+ ## Preference Rules
76
+
77
+ These rules are best practice. Following them improves output quality and agent efficiency.
78
+
79
+ ### Thumbnails from Listing Response
80
+
81
+ When you need a video's thumbnail URL, prefer `video list --json` — the response includes thumbnail fields. Avoid a separate `thumbnail list` call when the listing data is sufficient.
82
+
83
+ ```bash
84
+ # Thumbnail fields (thumbnail_*) are embedded in list output — no extra call needed
85
+ twentythree video list --limit 10 --json | jq '.data[] | {id, title, thumbnail_small_url, thumbnail_medium_url}'
86
+ ```
87
+
88
+ ---
89
+
90
+ ### Prefer Listing Endpoints for Richer Data
91
+
92
+ Combine `--limit`, `--all`, and available filter flags to retrieve exactly the data you need in a single call, reducing round trips. Check `--agent` output to discover all available filter flags before writing client-side filtering logic.
93
+
94
+ ```bash
95
+ # Fetch all videos with filtering and extraction in one pipeline
96
+ twentythree video list --all --json | jq '.data[] | {id, title, status}'
97
+
98
+ # List upcoming webinars in one call — no client-side status filtering needed
99
+ twentythree webinar list --status upcoming --all --json
100
+ ```
101
+
102
+ ---
103
+
104
+ ### Filtering and Sorting on Listing Endpoints
105
+
106
+ Apply filtering and sorting via CLI flags on listing commands rather than fetching all results and filtering client-side. Check `--agent` output for available filter flags before writing client-side filtering logic.
107
+
108
+ ```bash
109
+ # Filter webinars by status on the server — avoid fetching all and filtering locally
110
+ twentythree webinar list --status upcoming --limit 10 --json
111
+
112
+ # Include unpublished videos using a listing flag
113
+ twentythree video list --limit 20 --include-unpublished --json
114
+ ```
115
+
116
+ ---
@@ -27,6 +27,8 @@ Verify: `twentythree auth status --json`
27
27
 
28
28
  After upload the CLI prints the new video ID and its admin URL. Capture `data.id` and `data.admin_url` from the `--json` response.
29
29
 
30
+ > **Note:** The `--json` response includes `data.admin_url` — read it from the response directly. Do not construct admin URLs manually. See [guide.md](../guide.md) for the Admin Link Construction rule.
31
+
30
32
  | Flag | Required | Default | Description |
31
33
  |------|----------|---------|-------------|
32
34
  | `--title` | no | — | Title for the uploaded video |
@@ -51,6 +53,8 @@ twentythree video upload ./video.mp4 --title "Q2 Keynote" --category-id <cat-id>
51
53
 
52
54
  **Auth scope:** read **Side effects:** none **Output:** table (ID, Title, Duration, Status, Published, Updated)
53
55
 
56
+ > **Note:** For analytics and thumbnail data, prefer including them in the listing call rather than making separate command calls. See [guide.md](../guide.md) for Preference Rules.
57
+
54
58
  | Flag | Required | Default | Description |
55
59
  |------|----------|---------|-------------|
56
60
  | `--limit` | no | — | Maximum number of videos to return (default: all) |
@@ -70,6 +74,8 @@ twentythree video list --limit 20 --include-unpublished --json
70
74
 
71
75
  **Auth scope:** read **Side effects:** none **Output:** key-value
72
76
 
77
+ > **Note:** Thumbnail URLs are included in `video list --json` output — prefer the listing response when you already have it. See [guide.md](../guide.md) for the Thumbnails from Listing Response rule.
78
+
73
79
  No additional flags — pass the video ID as a positional argument.
74
80
 
75
81
  ```bash
@@ -26,6 +26,8 @@ Verify: `twentythree auth status --json`
26
26
 
27
27
  **Auth scope:** write **Side effects:** creates **Output:** key-value (id + admin_url)
28
28
 
29
+ > **Note:** Set access visibility explicitly when creating webinars — defaults may not match your intent. Pass `--publish` or `--draft` to control visibility. The `--json` response includes `data.admin_url`; read it from the response rather than constructing URLs. See [guide.md](../guide.md) for Webinar Creation Defaults and Admin Link Construction rules.
30
+
29
31
  After create, the CLI prints the new webinar ID and its admin URL. Capture `data.id` and `data.admin_url` from the `--json` response.
30
32
 
31
33
  | Flag | Required | Default | Description |
@@ -52,6 +54,8 @@ twentythree webinar create --title "Product Launch" --live-date "2026-05-15T16:0
52
54
 
53
55
  **Auth scope:** read **Side effects:** none **Output:** table (ID, Title, Status, Date, Private)
54
56
 
57
+ > **Note:** To retrieve a specific webinar, use `--search "<title>"` and filter client-side — there is no `webinar get` command. See [guide.md](../guide.md).
58
+
55
59
  | Flag | Required | Default | Description |
56
60
  |------|----------|---------|-------------|
57
61
  | `--limit` | no | 20 | Maximum number of webinars to return |