twentythree-skills 1.1.0 → 1.3.1
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 +8 -4
- package/skills/guide.md +25 -0
- package/skills/reference/personal.md +229 -0
- package/skills/workflows/upload-and-publish.md +3 -4
package/package.json
CHANGED
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
|
|
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).
|
|
@@ -17,6 +17,9 @@ triggers:
|
|
|
17
17
|
- twentythree
|
|
18
18
|
- video platform
|
|
19
19
|
- TwentyThree CLI
|
|
20
|
+
- personal video
|
|
21
|
+
- record video
|
|
22
|
+
- video recording
|
|
20
23
|
invocable: true
|
|
21
24
|
argument-hint: "<topic> <verb> [flags]"
|
|
22
25
|
allowed-tools: Bash(twentythree *)
|
|
@@ -25,7 +28,7 @@ compatibility: Requires twentythree-cli installed globally (npm install -g twent
|
|
|
25
28
|
|
|
26
29
|
# TwentyThree CLI
|
|
27
30
|
|
|
28
|
-
> Terminal access to the full TwentyThree video platform API — videos, webinars, analytics, audiences, and every related resource.
|
|
31
|
+
> Terminal access to the full TwentyThree video platform API — videos, webinars, analytics, audiences, and every related resource. 238+ commands across 22 resource groups.
|
|
29
32
|
>
|
|
30
33
|
> 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
34
|
|
|
@@ -138,6 +141,7 @@ All 22 resource groups. Every topic supports `--agent`, `--json`, and `--workspa
|
|
|
138
141
|
| Topic | Representative verbs | Use for |
|
|
139
142
|
|-------|---------------------|---------|
|
|
140
143
|
| `video` | `upload`, `list`, `get`, `update`, `delete`, `replace`, `frame`, `transcoding-progress` | Video file management, upload, metadata, thumbnails |
|
|
144
|
+
| `personal` | workspace switch, list, tasks, flows, templates, email | Personal video recording — browser-based recording, mischung videos, tasks, flows |
|
|
141
145
|
| `webinar` | `create`, `list`, `get`, `update`, `delete`, `repeat`, `highlights`, `clips`, `metrics`, `log` + attachment/mail/queued-video/recording/room/section/series/speaker/transcription subtopics | Live events, scheduling, recordings, attendee comms |
|
|
142
146
|
| `analytics` | `conversions`, `live`, `usage`, `video` subtopics (many verbs each) | Reporting, viewer data, playback metrics, conversion tracking |
|
|
143
147
|
| `audience` | `list`, `create`, `get`, `update`, `delete` + segment ops | Audience segmentation and targeting |
|
|
@@ -145,11 +149,11 @@ All 22 resource groups. Every topic supports `--agent`, `--json`, and `--workspa
|
|
|
145
149
|
| `action` | `list`, `create`, `get`, `update`, `delete` + subtypes | Interactive overlays, CTAs inside videos |
|
|
146
150
|
| `collector` | `list`, `create`, `delete` | Lead capture forms |
|
|
147
151
|
| `comment` | `list`, `create`, `get`, `update`, `delete` | Video comments moderation |
|
|
148
|
-
| `player` | `list`, `create`, `get`, `update`, `delete` | Player configuration and
|
|
152
|
+
| `player` | `list`, `create`, `get`, `update`, `delete`, `set-thumbnail`, `remove-thumbnail` | Player configuration, theming, and custom thumbnails |
|
|
149
153
|
| `poll` | `list`, `create`, `get`, `update`, `delete` | In-video polls |
|
|
150
154
|
| `spot` | `list`, `create`, `get`, `update`, `delete` | Hotspot annotations on videos |
|
|
151
155
|
| `tag` | `list`, `create` | Content tagging |
|
|
152
|
-
| `thumbnail` | `list`, `create`, `get`, `update`, `delete` | Video thumbnail management |
|
|
156
|
+
| `thumbnail` | `list`, `create`, `get`, `update`, `delete`, `preview-scss` | Video thumbnail and template management |
|
|
153
157
|
| `webhook` | `list`, `create`, `get`, `update`, `delete` | Event webhooks |
|
|
154
158
|
| `app` | `list`, `thumbnail`, `create`, `get`, `update`, `delete` | App/integration management |
|
|
155
159
|
| `presentation` | `list` + page/setting subtopics | Presentation content |
|
package/skills/guide.md
CHANGED
|
@@ -36,6 +36,31 @@ twentythree webinar list --search "Q2 Town Hall" --json
|
|
|
36
36
|
|
|
37
37
|
---
|
|
38
38
|
|
|
39
|
+
### Personal Video Requires Dedicated Workspace
|
|
40
|
+
|
|
41
|
+
Personal is always on its own workspace. Before any Personal or video recording operation, confirm the CLI is pointed at the Personal workspace.
|
|
42
|
+
|
|
43
|
+
1. Check current workspace: `twentythree auth status --json` — inspect `data.domain`
|
|
44
|
+
2. Personal workspace domains follow `*.personalvideo.co` or a custom domain configured for Personal
|
|
45
|
+
3. If not on the Personal workspace, list options: `twentythree workspace list --json`
|
|
46
|
+
4. Confirm intent with the user before switching, showing both current and target domains
|
|
47
|
+
5. Switch: `twentythree workspace use <personal-domain>`
|
|
48
|
+
|
|
49
|
+
Never silently switch workspaces. Always show the user what workspace they're on and what they're switching to.
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Check current workspace
|
|
53
|
+
twentythree auth status --json
|
|
54
|
+
|
|
55
|
+
# List all configured workspaces
|
|
56
|
+
twentythree workspace list --json
|
|
57
|
+
|
|
58
|
+
# Switch to Personal workspace (confirm with user first)
|
|
59
|
+
twentythree workspace use company.personalvideo.co
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
39
64
|
### Webinar Creation Defaults
|
|
40
65
|
|
|
41
66
|
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.
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: personal
|
|
3
|
+
description: Personal video recording — browser-based screen/webcam recording, mischung videos, templates, flows, tasks, folders, activities, email sharing, and use case catalog. Always operates on a dedicated Personal workspace.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# TwentyThree Personal Video
|
|
7
|
+
|
|
8
|
+
> Personal is a browser-based screen/webcam recording tool in the TwentyThree suite.
|
|
9
|
+
> All Personal operations use standard TwentyThree API calls, but against a **dedicated Personal workspace** — not the user's main video or webinar workspace.
|
|
10
|
+
> **Before any Personal operation, confirm the active workspace is the Personal workspace.**
|
|
11
|
+
|
|
12
|
+
## Terminology
|
|
13
|
+
|
|
14
|
+
| Personal product term | API / CLI term |
|
|
15
|
+
|-----------------------|----------------|
|
|
16
|
+
| Personal video | mischung video (`mischung_p=1`) |
|
|
17
|
+
| Template | mischung template (`mischung_template_p=1`) |
|
|
18
|
+
| Flow | user group (`usergroup`) |
|
|
19
|
+
| Folder | album (CLI: `category`) |
|
|
20
|
+
| Recording part / track | mischung part/track |
|
|
21
|
+
| Task | mischung task (`/photo/mischung/task/*`) |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## § Workspace Context
|
|
26
|
+
|
|
27
|
+
> **CRITICAL: Personal always lives in its own workspace. Never operate on Personal data from the wrong workspace.**
|
|
28
|
+
|
|
29
|
+
### Check current workspace
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
twentythree auth status --json
|
|
33
|
+
# Inspect data.domain — Personal workspaces typically use *.personalvideo.co
|
|
34
|
+
# or a custom domain configured for Personal.
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### If not on the Personal workspace
|
|
38
|
+
|
|
39
|
+
1. List all configured workspaces:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
twentythree workspace list --json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
2. Identify the Personal workspace domain in the output.
|
|
46
|
+
3. **Show the user both the current domain and the target domain. Confirm intent before switching.**
|
|
47
|
+
4. Switch:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
twentythree workspace use company.personalvideo.co
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Never silently switch workspaces.** Always show the user what workspace they are on and what they are switching to before running `workspace use`.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## § Video Listing (Personal)
|
|
58
|
+
|
|
59
|
+
Always filter with `--mischung` (maps to `mischung_p=1`) when listing Personal recordings. Check flag availability with `twentythree video list --agent` before use — flags may not yet be implemented; if unavailable, use raw API calls.
|
|
60
|
+
|
|
61
|
+
| View | CLI flags | Description |
|
|
62
|
+
|------|-----------|-------------|
|
|
63
|
+
| My videos | `video list --mischung --user-id me --include-unpublished --json` | User's own recordings |
|
|
64
|
+
| Team videos | `video list --mischung --include-unpublished --require-posts --orderby posted --json` | All team recordings |
|
|
65
|
+
| Templates | `video list --mischung-template --include-unpublished --json` | Recording templates |
|
|
66
|
+
| Folder contents | `video list --category-id <album_id> --mischung --json` | Videos in a specific folder |
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## § Mischung Video Operations
|
|
71
|
+
|
|
72
|
+
### CLI commands (standard video topic)
|
|
73
|
+
|
|
74
|
+
| Operation | Command |
|
|
75
|
+
|-----------|---------|
|
|
76
|
+
| Get specific recording | `twentythree video list --photo-id <id> --mischung --include-unpublished --json` |
|
|
77
|
+
| Update metadata | `twentythree video update <id> --title "…" --json` |
|
|
78
|
+
| Delete | `twentythree video delete <id> --json` |
|
|
79
|
+
| Transcoding progress | `twentythree video transcoding-progress <id> --json` |
|
|
80
|
+
|
|
81
|
+
For transcoding-progress, check `.data.progress.all` in the response — `1.0` means ready.
|
|
82
|
+
|
|
83
|
+
### Operations without CLI commands (raw API)
|
|
84
|
+
|
|
85
|
+
| Operation | Notes |
|
|
86
|
+
|-----------|-------|
|
|
87
|
+
| Upload (new mischung) | Multi-step asset flow — see Raw API Operations section |
|
|
88
|
+
| Replace (edit existing) | Raw API — see Raw API Operations section |
|
|
89
|
+
| Duplicate / create from template | `POST /photo/mischung/duplicate?photo_id=<id>` |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## § Templates
|
|
94
|
+
|
|
95
|
+
Templates are mischung videos with `mischung_template_p=1`.
|
|
96
|
+
|
|
97
|
+
| Operation | Method |
|
|
98
|
+
|-----------|--------|
|
|
99
|
+
| List templates | `twentythree video list --mischung-template --include-unpublished --json` (verify flag with `--agent`) |
|
|
100
|
+
| Save video as template | `twentythree video update <id> --mischung-template-p 1 --json` (verify flag) or raw `POST /photo/update?photo_id=<id>&mischung_template_p=1` |
|
|
101
|
+
| Create from template | raw `POST /photo/mischung/duplicate?photo_id=<template_id>` |
|
|
102
|
+
| Set template icon | raw `POST /photo/update?photo_id=<id>&mischung_template_icon=<icon>` |
|
|
103
|
+
| List available icons | raw `GET /internal/design/icons` |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## § Tasks
|
|
108
|
+
|
|
109
|
+
Tasks assign recording work to users. All task operations use raw API calls. Get `api_base_url` from `twentythree auth status --json` → `data.api_base_url`.
|
|
110
|
+
|
|
111
|
+
| Operation | Endpoint |
|
|
112
|
+
|-----------|----------|
|
|
113
|
+
| List my tasks | `POST /photo/mischung/task/list?assignee_user_id=me` |
|
|
114
|
+
| List tasks I created | `POST /photo/mischung/task/list?user_id=me` |
|
|
115
|
+
| Completed tasks | `POST /photo/mischung/task/list?associated_user_id=me&completed_p=1` |
|
|
116
|
+
| Uncompleted count | `POST /photo/mischung/task/list?assignee_user_id=me&size=1&completed_p=0` → read `total_count` |
|
|
117
|
+
| Create new video task | `POST /photo/mischung/task/add?assignee_users=<uid>&task_title=…[&template_photo_id=…]` |
|
|
118
|
+
| Assign part recording | `POST /photo/mischung/task/add?assignee_user_id=<uid>&task_photo_id=<id>&task_part_uuid=<uuid>&task_title=…` |
|
|
119
|
+
| Task redirect URL | `GET /photo/mischung/task/redirect?task_id=<id>` |
|
|
120
|
+
| Complete task | `POST /photo/mischung/task/complete?task_id=<id>` |
|
|
121
|
+
| Delete task | `POST /photo/mischung/task/delete?task_id=<id>` |
|
|
122
|
+
|
|
123
|
+
**Task fields:** `task_title` (required), `task_description`, `task_notes` (script for the recording), `recipient_email`, `deadline_date`.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## § Flows (User Groups)
|
|
128
|
+
|
|
129
|
+
Flows group users and videos. No dedicated CLI topic — use raw API calls.
|
|
130
|
+
|
|
131
|
+
| Operation | Endpoint |
|
|
132
|
+
|-----------|----------|
|
|
133
|
+
| Create flow | `POST /usergroup/create?name=…&join_policy=open\|closed` |
|
|
134
|
+
| Update flow | `POST /usergroup/update?user_group_id=<id>&name=…` |
|
|
135
|
+
| Delete flow | `POST /usergroup/delete?user_group_id=<id>` |
|
|
136
|
+
| List flows | `GET /usergroup/list[?user_id=…&photo_id=…&search=…]` |
|
|
137
|
+
| Add user to flow | `POST /usergroup/join?user_group_id=<id>&user_id=<id>` |
|
|
138
|
+
| Remove user from flow | `POST /usergroup/leave?user_group_id=<id>&user_id=<id>` |
|
|
139
|
+
| Videos in flow | `twentythree video list --user-group-id <id> --mischung --json` (verify flag with `--agent`) |
|
|
140
|
+
| Templates in flow | raw `GET /photo/list?user_group_id=<id>&mischung_p=1&mischung_template_p=1` |
|
|
141
|
+
| Users in flow | `twentythree user list --user-group-id <id> --json` (verify flag with `--agent`) |
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## § Folders (Albums = Categories in CLI)
|
|
146
|
+
|
|
147
|
+
Folders use the album/category API. CLI topic: `twentythree category *`.
|
|
148
|
+
|
|
149
|
+
| Operation | Command |
|
|
150
|
+
|-----------|---------|
|
|
151
|
+
| Create folder | `twentythree category create --title "My folder" --json` |
|
|
152
|
+
| List folders | `twentythree category list --json` |
|
|
153
|
+
| Delete folder | `twentythree category delete <album_id> --json` |
|
|
154
|
+
| Place video in folder | `twentythree video update <video_id> --category-id <album_id> --json` |
|
|
155
|
+
| Remove video from folder | raw `POST /photo/update?photo_id=<id>&album_id=` (empty string clears) |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## § Activities
|
|
160
|
+
|
|
161
|
+
Raw `GET /user/activity?context=personal` — returns up to 100 recent items sorted by recency.
|
|
162
|
+
|
|
163
|
+
Activity types: `video-watched`, `user-added`, `video-created`.
|
|
164
|
+
|
|
165
|
+
Each item has: `message` (HTML), `timestamp` (UTC epoch), optional `user_avatar_url`, `user_name`, `video_thumbnail_url`.
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## § Email Sharing
|
|
170
|
+
|
|
171
|
+
| Operation | Endpoint |
|
|
172
|
+
|-----------|----------|
|
|
173
|
+
| Preview email HTML | `GET /mail/get-attachments-html?selection=photo:<id>&gif_p=0` |
|
|
174
|
+
| Send video email | `POST /mail/send?selection=photo:<id>&to=…&subject=…&body=…&gif_p=0` |
|
|
175
|
+
| Get embed/share links | `twentythree player embed-versions <id> --object-type photo --json` |
|
|
176
|
+
|
|
177
|
+
Direct share link: in `player embed-versions` response, find the entry where `type=="link" && key=="secret"`.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## § Use Case Catalog
|
|
182
|
+
|
|
183
|
+
Pre-built video templates managed by TwentyThree admins.
|
|
184
|
+
|
|
185
|
+
| Operation | Endpoint |
|
|
186
|
+
|-----------|----------|
|
|
187
|
+
| List use cases | `GET /photo/mischung/usecase/list[?category=…&search=…&orderby=…]` |
|
|
188
|
+
| List categories | `GET /photo/mischung/usecase/categories` |
|
|
189
|
+
| Use a use case | `POST /photo/mischung/usecase/use?use_case_id=<id>` → returns `photo_id` |
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## § User Management (Personal)
|
|
194
|
+
|
|
195
|
+
Standard user commands apply. Key Personal-specific patterns:
|
|
196
|
+
|
|
197
|
+
| Operation | Command |
|
|
198
|
+
|-----------|---------|
|
|
199
|
+
| Get current user | `twentythree user get --json` |
|
|
200
|
+
| Invite user | `twentythree user create --email … --json` |
|
|
201
|
+
| Resend invite | `twentythree user send-invitation --user-id <id> --json` |
|
|
202
|
+
| List users | `twentythree user list --json` |
|
|
203
|
+
|
|
204
|
+
Domain-gated signup: permitted domains are listed in `twentythree setting get --json` → `user_approval_auto_domains`.
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## § Raw API Operations — Mischung Upload Flow
|
|
209
|
+
|
|
210
|
+
When no CLI command exists, use this pattern. Get `api_base_url` from `twentythree auth status --json` → `data.api_base_url`. All paths below are relative to that base URL.
|
|
211
|
+
|
|
212
|
+
**New mischung upload:**
|
|
213
|
+
|
|
214
|
+
1. Get asset upload token: `POST /asset/get-upload-token?valid_minutes=360&max_uploads=50`
|
|
215
|
+
2. Upload component video files, poster PNG, and `.misch` file to `/asset/redeem-upload-token` using the token
|
|
216
|
+
3. Save new video: `POST /photo/mischung/upload?asset_uri=twentythree://asset/<token>/<uuid>.misch&title=…`
|
|
217
|
+
|
|
218
|
+
**Save edit to existing mischung:**
|
|
219
|
+
|
|
220
|
+
`POST /photo/mischung/replace?asset_uri=twentythree://asset/<token>/<uuid>.misch&photo_id=<id>`
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Terminology Notes
|
|
225
|
+
|
|
226
|
+
- CLI `video` = API `photo`
|
|
227
|
+
- CLI `category` = API `album`
|
|
228
|
+
- Mischung = the internal term for a Personal video recording session and its component parts
|
|
229
|
+
- Personal workspace = a distinct TwentyThree workspace dedicated to the Personal product; domain typically `*.personalvideo.co`
|
|
@@ -39,11 +39,10 @@ On failure:
|
|
|
39
39
|
twentythree video upload ./video.mp4 --title "Product Demo" --category-id <category_id> --json
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
Expected output shape: `{ ok: true, data: { photo_id, tree_id, token } }`
|
|
42
|
+
Expected output shape: `{ ok: true, data: { photo_id, tree_id, token, admin_url } }`
|
|
43
43
|
Capture:
|
|
44
44
|
- `data.photo_id` as `video_id`
|
|
45
|
-
-
|
|
46
|
-
(surface this to the user — the CLI prints it on stdout but it is not in the JSON data object)
|
|
45
|
+
- `data.admin_url` — the admin URL for the uploaded video (surface this to the user)
|
|
47
46
|
|
|
48
47
|
On failure:
|
|
49
48
|
- Network error or `401` → run `twentythree auth status` and `twentythree doctor`
|
|
@@ -141,6 +140,6 @@ On failure:
|
|
|
141
140
|
twentythree video upload ./video.mp4 --title "Demo" --publish --json
|
|
142
141
|
```
|
|
143
142
|
This is valid but skips the optional metadata, frame, and transcoding-check steps.
|
|
144
|
-
- The admin URL from Step 2 opens the video's admin edit page — surface this to the user so they can review or make manual edits.
|
|
143
|
+
- The admin URL from Step 2 opens the video's admin edit page — surface this to the user so they can review or make manual edits. It is available as `data.admin_url` in the JSON response and also printed on stdout.
|
|
145
144
|
- `--category-id` accepts a comma-separated list of IDs to assign to multiple categories simultaneously.
|
|
146
145
|
- After a successful publish, use `twentythree video get <video_id> --json` to confirm the `published` field is `true` before reporting success to the user.
|