@harness-lab/cli 0.2.4 → 0.2.6
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/README.md
CHANGED
|
@@ -121,10 +121,10 @@ Workshop commands:
|
|
|
121
121
|
harness auth status
|
|
122
122
|
harness skill install
|
|
123
123
|
harness workshop status
|
|
124
|
-
harness workshop create-instance
|
|
125
|
-
harness workshop update-instance
|
|
126
|
-
harness workshop prepare
|
|
127
|
-
harness workshop remove-instance
|
|
124
|
+
harness workshop create-instance sample-workshop-demo-orbit --event-title "Sample Workshop Demo"
|
|
125
|
+
harness workshop update-instance sample-workshop-demo-orbit --room-name Orbit
|
|
126
|
+
harness workshop prepare sample-workshop-demo-orbit
|
|
127
|
+
harness workshop remove-instance sample-workshop-demo-orbit
|
|
128
128
|
harness workshop phase set rotation
|
|
129
129
|
harness workshop archive --notes "Manual archive"
|
|
130
130
|
harness auth logout
|
|
@@ -18,7 +18,7 @@ allowed-tools:
|
|
|
18
18
|
|
|
19
19
|
# Workshop
|
|
20
20
|
|
|
21
|
-
Participant-facing skill for the Harness Lab workshop. Command semantics stay in English, but participant-facing delivery should follow the active workshop `contentLang` when live runtime data is available and
|
|
21
|
+
Participant-facing skill for the Harness Lab workshop. Command semantics stay in English, but participant-facing delivery should follow the active workshop `contentLang` when live runtime data is available and otherwise resolve to a reviewed fallback locale instead of inheriting the raw language of whichever supporting doc was opened first.
|
|
22
22
|
|
|
23
23
|
## Purpose
|
|
24
24
|
|
|
@@ -27,12 +27,26 @@ This skill is the primary workshop interface for participants in Codex or pi. It
|
|
|
27
27
|
The portable install path should make this skill usable from the participant's real working repo without requiring a clone of the Harness Lab source repo.
|
|
28
28
|
|
|
29
29
|
Core mental model:
|
|
30
|
-
- dashboard participant surface =
|
|
31
|
-
- dashboard facilitator surface =
|
|
32
|
-
- workshop skill = AI interface
|
|
33
|
-
- workshop blueprint =
|
|
34
|
-
- `uiLang` =
|
|
35
|
-
- `contentLang` =
|
|
30
|
+
- dashboard participant surface = orientation during the day
|
|
31
|
+
- dashboard facilitator surface = control of the workshop instance
|
|
32
|
+
- workshop skill = AI interface to the same workshop system
|
|
33
|
+
- workshop blueprint = public canonical definition of the workshop method
|
|
34
|
+
- `uiLang` = language of product chrome
|
|
35
|
+
- `contentLang` = language of workshop content for participant-facing delivery
|
|
36
|
+
|
|
37
|
+
## Language Resolution
|
|
38
|
+
|
|
39
|
+
Command semantics stay in English. Resolve the response language in this order:
|
|
40
|
+
|
|
41
|
+
1. If live workshop data provides `contentLang` and the command is participant-facing workshop delivery, use that locale.
|
|
42
|
+
2. Otherwise, match the user's current language when it maps to a reviewed locale in the repo or bundle.
|
|
43
|
+
3. If there is no clear live or user-language signal, default bundled fallback delivery to English (`en`).
|
|
44
|
+
|
|
45
|
+
Additional rules:
|
|
46
|
+
- facilitator-control commands are operational rather than room-facing delivery, so prefer the user's current language unless the facilitator explicitly asks for another reviewed locale or you are quoting workshop content
|
|
47
|
+
- the authored language of a supporting doc does not decide the reply language by itself
|
|
48
|
+
- if the requested locale has no reviewed variant, fall back to English and say so explicitly
|
|
49
|
+
- do not let a Czech-authored fallback file force a Czech answer when the resolved response locale is English
|
|
36
50
|
|
|
37
51
|
## Sources Of Truth
|
|
38
52
|
|
|
@@ -56,8 +70,8 @@ Rule:
|
|
|
56
70
|
- if runtime is unavailable, fall back to repo material and say explicitly that the answer is fallback rather than live state
|
|
57
71
|
- runtime edits do not imply blueprint edits; reusable changes belong back in the repo deliberately
|
|
58
72
|
- prefer workshop `contentLang` for participant-facing responses in live mode
|
|
59
|
-
- if there is no live workshop context,
|
|
60
|
-
- for bundled fallback docs, resolve `workshop-skill/locales/<locale>/...` first; if a reviewed localized doc does not exist yet, fall back to
|
|
73
|
+
- if there is no live workshop context, resolve the fallback locale using the Language Resolution rules above and say when the answer is fallback content rather than live workshop state
|
|
74
|
+
- for bundled fallback docs, resolve `workshop-skill/locales/<locale>/...` first; if a reviewed localized doc does not exist yet, fall back to English and say so explicitly
|
|
61
75
|
- do not translate workshop copy ad hoc when a reviewed locale exists in the repo or bundle
|
|
62
76
|
|
|
63
77
|
## Commands
|
|
@@ -297,7 +311,8 @@ Relevant local files:
|
|
|
297
311
|
## Style
|
|
298
312
|
|
|
299
313
|
- Be concise and directive.
|
|
300
|
-
- Use
|
|
314
|
+
- Use the resolved response language.
|
|
315
|
+
- English is the default bundled fallback locale when no live or user-language signal overrides it.
|
|
301
316
|
- Keep command names, file names, and code terms in English.
|
|
302
317
|
- Prefer actionable next steps over theory during build phases.
|
|
303
318
|
- Treat tests and executable checks as the default trust boundary once the agent is doing meaningful implementation work.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifestVersion": 1,
|
|
3
3
|
"bundleName": "harness-lab-workshop",
|
|
4
|
-
"bundleVersion": "0.2.
|
|
5
|
-
"contentHash": "
|
|
4
|
+
"bundleVersion": "0.2.6",
|
|
5
|
+
"contentHash": "9e7a3c6549f06cbe59278c731c73ae8c21f7e38cf82cbc533f1e708ccf47602c",
|
|
6
6
|
"files": [
|
|
7
7
|
{
|
|
8
8
|
"path": "content/challenge-cards/.gitkeep",
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
},
|
|
135
135
|
{
|
|
136
136
|
"path": "SKILL.md",
|
|
137
|
-
"sha256": "
|
|
137
|
+
"sha256": "107f2ba2574d358ed2ccd1c669a47008574517b811475c866247b0199836ae5b"
|
|
138
138
|
},
|
|
139
139
|
{
|
|
140
140
|
"path": "workshop-blueprint/agenda.json",
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
},
|
|
183
183
|
{
|
|
184
184
|
"path": "workshop-skill/facilitator.md",
|
|
185
|
-
"sha256": "
|
|
185
|
+
"sha256": "22775cb783e825eeec83886932c801db1ff7e3617c170fee848b6071fa63d8a3"
|
|
186
186
|
},
|
|
187
187
|
{
|
|
188
188
|
"path": "workshop-skill/follow-up-package.md",
|
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
# Facilitator Commands
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Commands for facilitators who manage workshop instances through an AI agent.
|
|
4
4
|
|
|
5
5
|
## Auth
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
The facilitator must log in through the `harness` CLI first. The skill should not become another secret store for raw credentials or long-lived sessions.
|
|
8
8
|
|
|
9
9
|
### `/workshop facilitator login`
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
If no facilitator session is active, tell the facilitator to run:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
harness auth login
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
CLI
|
|
17
|
+
The CLI performs the browser/device auth flow, stores the session in local file storage, and exposes it to subsequent privileged commands.
|
|
18
18
|
|
|
19
19
|
Model:
|
|
20
|
-
- `harness auth login`
|
|
21
|
-
-
|
|
22
|
-
- instance grant
|
|
20
|
+
- `harness auth login` authenticates the facilitator with the platform
|
|
21
|
+
- the specific workshop instance is selected later per operation or via default context
|
|
22
|
+
- the instance grant is evaluated when accessing a specific action, not during login itself
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Current practical paths in this repo:
|
|
25
25
|
|
|
26
26
|
- default / browser-device auth:
|
|
27
27
|
```bash
|
|
28
28
|
harness auth login --dashboard-url https://harness-lab-dashboard.vercel.app
|
|
29
29
|
```
|
|
30
|
-
- file mode /
|
|
30
|
+
- file mode / local demo fallback:
|
|
31
31
|
```bash
|
|
32
32
|
harness auth login --auth basic --dashboard-url http://localhost:3000 --username facilitator --password secret
|
|
33
33
|
```
|
|
34
|
-
- neon mode /
|
|
34
|
+
- neon mode / shared dashboard bootstrap fallback:
|
|
35
35
|
```bash
|
|
36
36
|
harness auth login --auth neon --dashboard-url https://harness-lab-dashboard.vercel.app --email facilitator@example.com
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
- CLI
|
|
41
|
-
-
|
|
42
|
-
- `--auth basic`
|
|
39
|
+
Note:
|
|
40
|
+
- the CLI currently defaults to browser/device auth and stores the session in local file storage
|
|
41
|
+
- if the facilitator wants OS-native storage, they can use `HARNESS_SESSION_STORAGE=keychain`, `credential-manager`, or `secret-service`
|
|
42
|
+
- `--auth basic` and `--auth neon` remain explicit fallbacks for local dev/bootstrap
|
|
43
43
|
|
|
44
44
|
### `/workshop facilitator logout`
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
Ask the facilitator to run:
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
49
|
harness auth logout
|
|
@@ -53,23 +53,23 @@ harness auth logout
|
|
|
53
53
|
|
|
54
54
|
### `/workshop facilitator status`
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
Preferred path:
|
|
57
57
|
|
|
58
58
|
```bash
|
|
59
59
|
harness workshop status
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
-
|
|
62
|
+
Show:
|
|
63
|
+
- active instance and its status
|
|
64
|
+
- current phase
|
|
65
|
+
- facilitator list with roles
|
|
66
|
+
- team count
|
|
67
67
|
|
|
68
68
|
### `/workshop facilitator grant <email> <role>`
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
Use the CLI-backed privileged request path. The skill should not handle auth bootstrap itself.
|
|
71
71
|
|
|
72
|
-
API capability
|
|
72
|
+
The API capability remains:
|
|
73
73
|
|
|
74
74
|
```http
|
|
75
75
|
POST {DASHBOARD_URL}/api/admin/facilitators
|
|
@@ -78,78 +78,79 @@ Content-Type: application/json
|
|
|
78
78
|
{ "email": "...", "role": "operator" }
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
Requires `owner` role. Returns the new grant info.
|
|
82
82
|
|
|
83
83
|
### `/workshop facilitator revoke <email>`
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
Call `GET /api/admin/facilitators` first and find the grant by email.
|
|
86
|
+
Then call:
|
|
87
|
+
|
|
88
|
+
```http
|
|
88
89
|
DELETE {DASHBOARD_URL}/api/admin/facilitators/{grantId}
|
|
89
90
|
```
|
|
90
91
|
|
|
91
|
-
|
|
92
|
+
Requires `owner` role.
|
|
92
93
|
|
|
93
94
|
### `/workshop facilitator create-instance`
|
|
94
95
|
|
|
95
|
-
|
|
96
|
+
The preferred path is a CLI command over the shared runtime API:
|
|
96
97
|
|
|
97
98
|
```bash
|
|
98
|
-
harness workshop create-instance
|
|
99
|
+
harness workshop create-instance sample-workshop-demo-orbit \
|
|
99
100
|
--template-id blueprint-default \
|
|
100
|
-
--content-lang
|
|
101
|
-
--event-title "
|
|
102
|
-
--city
|
|
103
|
-
--date-range "
|
|
104
|
-
--venue-name "
|
|
105
|
-
--room-name
|
|
106
|
-
--address-line "
|
|
107
|
-
--location-details "
|
|
108
|
-
--facilitator-label
|
|
101
|
+
--content-lang en \
|
|
102
|
+
--event-title "Sample Workshop Demo" \
|
|
103
|
+
--city "Example City" \
|
|
104
|
+
--date-range "June 15, 2026" \
|
|
105
|
+
--venue-name "Example Campus North" \
|
|
106
|
+
--room-name Orbit \
|
|
107
|
+
--address-line "Example Avenue 123" \
|
|
108
|
+
--location-details "12 participants + facilitator" \
|
|
109
|
+
--facilitator-label Alex
|
|
109
110
|
```
|
|
110
111
|
|
|
111
|
-
|
|
112
|
+
The raw API reference remains diagnostic or architectural reference only:
|
|
112
113
|
|
|
113
114
|
```http
|
|
114
115
|
POST {DASHBOARD_URL}/api/workshop/instances
|
|
115
116
|
Content-Type: application/json
|
|
116
117
|
|
|
117
118
|
{
|
|
118
|
-
"id": "
|
|
119
|
+
"id": "sample-workshop-demo-orbit",
|
|
119
120
|
"templateId": "blueprint-default",
|
|
120
|
-
"contentLang": "
|
|
121
|
-
"eventTitle": "
|
|
122
|
-
"city": "
|
|
123
|
-
"dateRange": "
|
|
124
|
-
"venueName": "
|
|
125
|
-
"roomName": "
|
|
126
|
-
"addressLine": "
|
|
127
|
-
"locationDetails": "
|
|
128
|
-
"facilitatorLabel": "
|
|
121
|
+
"contentLang": "en",
|
|
122
|
+
"eventTitle": "Sample Workshop Demo",
|
|
123
|
+
"city": "Example City",
|
|
124
|
+
"dateRange": "June 15, 2026",
|
|
125
|
+
"venueName": "Example Campus North",
|
|
126
|
+
"roomName": "Orbit",
|
|
127
|
+
"addressLine": "Example Avenue 123",
|
|
128
|
+
"locationDetails": "12 participants + facilitator",
|
|
129
|
+
"facilitatorLabel": "Alex"
|
|
129
130
|
}
|
|
130
131
|
```
|
|
131
132
|
|
|
132
|
-
|
|
133
|
-
-
|
|
134
|
-
- `id`
|
|
135
|
-
- `contentLang`
|
|
136
|
-
-
|
|
137
|
-
-
|
|
133
|
+
Notes for the skill:
|
|
134
|
+
- prefer the CLI, not hand-written `fetch` scripts
|
|
135
|
+
- `id` must be a lowercase slug with letters, numbers, and hyphens
|
|
136
|
+
- `contentLang` controls workshop-content language for dashboard, presenter, and skill delivery; it is not the same as UI language
|
|
137
|
+
- when the skill calls create repeatedly with the same `id`, the route returns `created: false` and the existing instance record
|
|
138
|
+
- do not guess venue metadata in abbreviated form if the facilitator already knows it; send it during create
|
|
138
139
|
|
|
139
140
|
### `/workshop facilitator update-instance <instance-id>`
|
|
140
141
|
|
|
141
|
-
|
|
142
|
+
Preferred path:
|
|
142
143
|
|
|
143
144
|
```bash
|
|
144
|
-
harness workshop update-instance
|
|
145
|
+
harness workshop update-instance sample-workshop-demo-orbit \
|
|
145
146
|
--content-lang en \
|
|
146
|
-
--event-title "
|
|
147
|
-
--date-range "
|
|
148
|
-
--venue-name "
|
|
149
|
-
--room-name
|
|
150
|
-
--address-line "
|
|
151
|
-
--location-details "
|
|
152
|
-
--facilitator-label
|
|
147
|
+
--event-title "Sample Workshop Demo" \
|
|
148
|
+
--date-range "June 15, 2026" \
|
|
149
|
+
--venue-name "Example Campus North" \
|
|
150
|
+
--room-name Orbit \
|
|
151
|
+
--address-line "Example Avenue 123" \
|
|
152
|
+
--location-details "12 participants + facilitator" \
|
|
153
|
+
--facilitator-label Alex
|
|
153
154
|
```
|
|
154
155
|
|
|
155
156
|
Raw API reference:
|
|
@@ -161,27 +162,27 @@ Content-Type: application/json
|
|
|
161
162
|
{
|
|
162
163
|
"action": "update_metadata",
|
|
163
164
|
"contentLang": "en",
|
|
164
|
-
"eventTitle": "
|
|
165
|
-
"dateRange": "
|
|
166
|
-
"venueName": "
|
|
167
|
-
"roomName": "
|
|
168
|
-
"addressLine": "
|
|
169
|
-
"locationDetails": "
|
|
170
|
-
"facilitatorLabel": "
|
|
165
|
+
"eventTitle": "Sample Workshop Demo",
|
|
166
|
+
"dateRange": "June 15, 2026",
|
|
167
|
+
"venueName": "Example Campus North",
|
|
168
|
+
"roomName": "Orbit",
|
|
169
|
+
"addressLine": "Example Avenue 123",
|
|
170
|
+
"locationDetails": "12 participants + facilitator",
|
|
171
|
+
"facilitatorLabel": "Alex"
|
|
171
172
|
}
|
|
172
173
|
```
|
|
173
174
|
|
|
174
|
-
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
175
|
+
Rules:
|
|
176
|
+
- send only the fields you want to change
|
|
177
|
+
- do not use reset for an ordinary title, venue, or room correction
|
|
178
|
+
- if the route returns `400`, the payload is wrong; if it returns `404`, the instance does not exist
|
|
178
179
|
|
|
179
180
|
### `/workshop facilitator prepare`
|
|
180
181
|
|
|
181
|
-
|
|
182
|
+
Preferred path:
|
|
182
183
|
|
|
183
184
|
```bash
|
|
184
|
-
harness workshop prepare
|
|
185
|
+
harness workshop prepare sample-workshop-demo-orbit
|
|
185
186
|
```
|
|
186
187
|
|
|
187
188
|
Raw API reference:
|
|
@@ -190,17 +191,17 @@ Raw API reference:
|
|
|
190
191
|
POST {DASHBOARD_URL}/api/workshop
|
|
191
192
|
Content-Type: application/json
|
|
192
193
|
|
|
193
|
-
{ "action": "prepare", "instanceId": "
|
|
194
|
+
{ "action": "prepare", "instanceId": "sample-workshop-demo-orbit" }
|
|
194
195
|
```
|
|
195
196
|
|
|
196
|
-
|
|
197
|
+
This sets the instance to `prepared` state and verifies the event code.
|
|
197
198
|
|
|
198
199
|
### `/workshop facilitator remove-instance <instance-id>`
|
|
199
200
|
|
|
200
|
-
|
|
201
|
+
Preferred path:
|
|
201
202
|
|
|
202
203
|
```bash
|
|
203
|
-
harness workshop remove-instance
|
|
204
|
+
harness workshop remove-instance sample-workshop-demo-orbit
|
|
204
205
|
```
|
|
205
206
|
|
|
206
207
|
Raw API reference:
|
|
@@ -212,13 +213,13 @@ Content-Type: application/json
|
|
|
212
213
|
{ "action": "remove" }
|
|
213
214
|
```
|
|
214
215
|
|
|
215
|
-
|
|
216
|
-
- remove
|
|
217
|
-
- skill
|
|
216
|
+
Rules:
|
|
217
|
+
- remove remains an owner-only operation
|
|
218
|
+
- the skill should warn the facilitator that this is destructive removal from the active list, not routine metadata editing
|
|
218
219
|
|
|
219
220
|
### `/workshop facilitator agenda`
|
|
220
221
|
|
|
221
|
-
|
|
222
|
+
Local agenda editing for a specific instance uses the per-instance route:
|
|
222
223
|
|
|
223
224
|
```http
|
|
224
225
|
GET {DASHBOARD_URL}/api/workshop/instances/{instanceId}/agenda
|
|
@@ -227,7 +228,7 @@ POST {DASHBOARD_URL}/api/workshop/instances/{instanceId}/agenda
|
|
|
227
228
|
DELETE {DASHBOARD_URL}/api/workshop/instances/{instanceId}/agenda
|
|
228
229
|
```
|
|
229
230
|
|
|
230
|
-
|
|
231
|
+
Examples:
|
|
231
232
|
|
|
232
233
|
```http
|
|
233
234
|
PATCH {DASHBOARD_URL}/api/workshop/instances/{instanceId}/agenda
|
|
@@ -269,28 +270,28 @@ Content-Type: application/json
|
|
|
269
270
|
}
|
|
270
271
|
```
|
|
271
272
|
|
|
272
|
-
|
|
273
|
+
Rules:
|
|
273
274
|
|
|
274
|
-
- agenda item
|
|
275
|
-
-
|
|
276
|
-
- `description`
|
|
277
|
-
-
|
|
278
|
-
- skill
|
|
275
|
+
- an agenda item is a facilitator pack, not just `title/time/description`
|
|
276
|
+
- preferred fields are `goal`, `roomSummary`, `facilitatorPrompts`, `watchFors`, and `checkpointQuestions`
|
|
277
|
+
- `description` remains a compatibility field for older surfaces; prefer `roomSummary` for room-facing summaries
|
|
278
|
+
- use canonical agenda ids such as `opening`, `talk`, `demo`, `build-1`, `intermezzo-1`, `rotation`, `build-2`, `intermezzo-2`, and `reveal`
|
|
279
|
+
- the skill should not invent custom workshop moment names outside this skeleton
|
|
279
280
|
|
|
280
281
|
### `/workshop facilitator scenes`
|
|
281
282
|
|
|
282
|
-
Presenter scenes
|
|
283
|
+
Presenter scenes are agenda-linked, room-facing outputs for the facilitator and projector. The skill should be able to:
|
|
283
284
|
|
|
284
|
-
-
|
|
285
|
-
-
|
|
286
|
-
-
|
|
287
|
-
-
|
|
288
|
-
-
|
|
289
|
-
-
|
|
290
|
-
-
|
|
291
|
-
-
|
|
285
|
+
- list scenes for the whole instance or a specific agenda item
|
|
286
|
+
- create a new scene
|
|
287
|
+
- edit content, label, scene type, and CTA
|
|
288
|
+
- change the default scene for a given agenda item
|
|
289
|
+
- reorder scenes
|
|
290
|
+
- hide or re-enable a scene
|
|
291
|
+
- delete a local scene
|
|
292
|
+
- read and optionally edit `facilitatorNotes`, `sourceRefs`, and `blocks`
|
|
292
293
|
|
|
293
|
-
|
|
294
|
+
Per-instance route:
|
|
294
295
|
|
|
295
296
|
```http
|
|
296
297
|
GET {DASHBOARD_URL}/api/workshop/instances/{instanceId}/scenes
|
|
@@ -300,7 +301,7 @@ PATCH {DASHBOARD_URL}/api/workshop/instances/{instanceId}/scenes
|
|
|
300
301
|
DELETE {DASHBOARD_URL}/api/workshop/instances/{instanceId}/scenes
|
|
301
302
|
```
|
|
302
303
|
|
|
303
|
-
|
|
304
|
+
Examples:
|
|
304
305
|
|
|
305
306
|
```http
|
|
306
307
|
POST {DASHBOARD_URL}/api/workshop/instances/{instanceId}/scenes
|
|
@@ -312,28 +313,28 @@ Content-Type: application/json
|
|
|
312
313
|
"sceneType": "demo",
|
|
313
314
|
"intent": "walkthrough",
|
|
314
315
|
"chromePreset": "agenda",
|
|
315
|
-
"title": "
|
|
316
|
+
"title": "Context first, then motion",
|
|
316
317
|
"facilitatorNotes": [
|
|
317
|
-
"
|
|
318
|
+
"Keep one story rather than a feature parade."
|
|
318
319
|
],
|
|
319
320
|
"blocks": [
|
|
320
321
|
{
|
|
321
322
|
"id": "hero",
|
|
322
323
|
"type": "hero",
|
|
323
|
-
"title": "
|
|
324
|
-
"body": "
|
|
324
|
+
"title": "Context first, then motion",
|
|
325
|
+
"body": "Show the difference between a prompt blob and a short map stored in the repo."
|
|
325
326
|
},
|
|
326
327
|
{
|
|
327
328
|
"id": "questions",
|
|
328
329
|
"type": "bullet-list",
|
|
329
|
-
"title": "
|
|
330
|
+
"title": "Point",
|
|
330
331
|
"items": [
|
|
331
|
-
"
|
|
332
|
-
"
|
|
332
|
+
"If it is not in the repo, it does not exist.",
|
|
333
|
+
"Context is leverage, not cosmetics."
|
|
333
334
|
]
|
|
334
335
|
}
|
|
335
336
|
],
|
|
336
|
-
"ctaLabel": "
|
|
337
|
+
"ctaLabel": "Then switch to participant walkthrough"
|
|
337
338
|
}
|
|
338
339
|
```
|
|
339
340
|
|
|
@@ -345,17 +346,17 @@ Content-Type: application/json
|
|
|
345
346
|
"action": "update",
|
|
346
347
|
"agendaItemId": "talk",
|
|
347
348
|
"sceneId": "scene-123",
|
|
348
|
-
"label": "
|
|
349
|
+
"label": "Updated demo flow",
|
|
349
350
|
"sceneType": "demo",
|
|
350
351
|
"intent": "walkthrough",
|
|
351
352
|
"chromePreset": "agenda",
|
|
352
|
-
"title": "
|
|
353
|
+
"title": "One story, not a feature parade",
|
|
353
354
|
"blocks": [
|
|
354
355
|
{
|
|
355
356
|
"id": "hero",
|
|
356
357
|
"type": "hero",
|
|
357
|
-
"title": "
|
|
358
|
-
"body": "
|
|
358
|
+
"title": "One story, not a feature parade",
|
|
359
|
+
"body": "Do not show five working modes. Show one readable workflow."
|
|
359
360
|
}
|
|
360
361
|
]
|
|
361
362
|
}
|
|
@@ -389,22 +390,23 @@ Content-Type: application/json
|
|
|
389
390
|
{ "agendaItemId": "talk", "sceneId": "scene-123" }
|
|
390
391
|
```
|
|
391
392
|
|
|
392
|
-
|
|
393
|
+
When the facilitator wants to change wording, flow, or participant walkthrough through a coding agent, prefer this route instead of manually describing UI edits.
|
|
393
394
|
|
|
394
|
-
|
|
395
|
+
During API work:
|
|
395
396
|
|
|
396
|
-
-
|
|
397
|
-
- malformed payload
|
|
398
|
-
- skill
|
|
399
|
-
- room-facing
|
|
400
|
-
- `title/body`
|
|
401
|
-
-
|
|
402
|
-
-
|
|
397
|
+
- unknown `agendaItemId` or `sceneId` returns `404`
|
|
398
|
+
- malformed payload still returns `400`
|
|
399
|
+
- the skill must report stale target ids explicitly rather than acting as if the change succeeded
|
|
400
|
+
- room-facing content belongs in `blocks`, facilitator instructions in `facilitatorNotes`
|
|
401
|
+
- `title/body` remain for compatibility, but the skill should prefer structured `blocks`
|
|
402
|
+
- when runtime agenda exists, the skill should read and cite its `goal`, `roomSummary`, `facilitatorPrompts`, `watchFors`, `checkpointQuestions`, `facilitatorNotes`, and `blocks`
|
|
403
|
+
- when runtime data is unavailable, fall back to the blueprint and facilitation docs in the repo and say so explicitly
|
|
403
404
|
|
|
404
405
|
### `/workshop facilitator archive`
|
|
405
406
|
|
|
406
|
-
|
|
407
|
-
|
|
407
|
+
Call:
|
|
408
|
+
|
|
409
|
+
```http
|
|
408
410
|
POST {DASHBOARD_URL}/api/workshop/archive
|
|
409
411
|
Content-Type: application/json
|
|
410
412
|
|
|
@@ -413,14 +415,14 @@ Content-Type: application/json
|
|
|
413
415
|
|
|
414
416
|
## Environment
|
|
415
417
|
|
|
416
|
-
|
|
417
|
-
- `HARNESS_DASHBOARD_URL`
|
|
418
|
-
-
|
|
418
|
+
The agent needs to know the dashboard URL:
|
|
419
|
+
- `HARNESS_DASHBOARD_URL` - the production or preview dashboard URL
|
|
420
|
+
- if not set, use `https://harness-lab-dashboard.vercel.app`
|
|
419
421
|
|
|
420
|
-
##
|
|
422
|
+
## Notes
|
|
421
423
|
|
|
422
|
-
-
|
|
423
|
-
- `/workshop facilitator login`
|
|
424
|
-
-
|
|
425
|
-
-
|
|
426
|
-
-
|
|
424
|
+
- facilitator commands are separate from participant commands
|
|
425
|
+
- `/workshop facilitator login` should steer the facilitator into `harness auth login`
|
|
426
|
+
- all other privileged commands use the stored CLI-backed session
|
|
427
|
+
- if the session expires, tell the facilitator to log in again
|
|
428
|
+
- never surface these commands to participants
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@harness-lab/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "Participant-facing Harness Lab CLI for facilitator auth and workshop operations",
|
|
5
|
-
"license": "
|
|
5
|
+
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|