twentythree-skills 1.0.0 → 1.1.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 +1 -1
- package/skills/SKILL.md +18 -6
- package/skills/guide.md +116 -0
- package/skills/reference/video.md +6 -0
- package/skills/reference/webinar.md +4 -0
package/package.json
CHANGED
package/skills/SKILL.md
CHANGED
|
@@ -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`.
|
|
@@ -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> --
|
|
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" --
|
|
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
|
|
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
|
package/skills/guide.md
ADDED
|
@@ -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 |
|