twentythree-skills 1.3.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "twentythree-skills",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "AI agent skills for the TwentyThree CLI",
5
5
  "license": "MIT",
6
6
  "author": "TwentyThree",
package/skills/SKILL.md CHANGED
@@ -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 *)
@@ -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 |
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
- - Construct admin URL as: `https://<domain>/manage/video/<data.photo_id>`
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. Construct it as `https://<domain>/manage/video/<data.photo_id>` (it is printed on stdout by the CLI but is not included in the JSON data object).
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.