@harness-lab/cli 0.3.1 → 0.4.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.
Files changed (34) hide show
  1. package/README.md +11 -1
  2. package/assets/workshop-bundle/SKILL.md +6 -146
  3. package/assets/workshop-bundle/bundle-manifest.json +47 -27
  4. package/assets/workshop-bundle/content/challenge-cards/deck.md +43 -23
  5. package/assets/workshop-bundle/content/challenge-cards/locales/en/deck.md +40 -20
  6. package/assets/workshop-bundle/content/facilitation/locales/en/codex-setup-verification.md +7 -0
  7. package/assets/workshop-bundle/content/facilitation/locales/en/master-guide.md +7 -0
  8. package/assets/workshop-bundle/content/facilitation/master-guide.md +2 -3
  9. package/assets/workshop-bundle/content/project-briefs/code-review-helper.md +1 -1
  10. package/assets/workshop-bundle/content/project-briefs/doc-generator.md +2 -2
  11. package/assets/workshop-bundle/content/project-briefs/metrics-dashboard.md +1 -1
  12. package/assets/workshop-bundle/content/project-briefs/standup-bot.md +1 -1
  13. package/assets/workshop-bundle/content/talks/context-is-king.md +41 -37
  14. package/assets/workshop-bundle/content/talks/locales/en/codex-demo-script.md +7 -0
  15. package/assets/workshop-bundle/content/talks/locales/en/context-is-king.md +7 -0
  16. package/assets/workshop-bundle/materials/coaching-codex.md +15 -12
  17. package/assets/workshop-bundle/materials/participant-resource-kit.md +25 -1
  18. package/assets/workshop-bundle/workshop-blueprint/README.md +4 -5
  19. package/assets/workshop-bundle/workshop-blueprint/agenda.json +20 -20
  20. package/assets/workshop-bundle/workshop-blueprint/day-structure.md +4 -2
  21. package/assets/workshop-bundle/workshop-blueprint/operator-guide.md +18 -0
  22. package/assets/workshop-bundle/workshop-blueprint/teaching-spine.md +31 -0
  23. package/assets/workshop-bundle/workshop-skill/SKILL-facilitator.md +191 -0
  24. package/assets/workshop-bundle/workshop-skill/analyze-checklist.md +1 -0
  25. package/assets/workshop-bundle/workshop-skill/closing-skill.md +1 -1
  26. package/assets/workshop-bundle/workshop-skill/commands.md +0 -4
  27. package/assets/workshop-bundle/workshop-skill/follow-up-package.md +29 -36
  28. package/assets/workshop-bundle/workshop-skill/locales/en/commands.md +0 -4
  29. package/assets/workshop-bundle/workshop-skill/locales/en/follow-up-package.md +29 -36
  30. package/assets/workshop-bundle/workshop-skill/locales/en/reference.md +1 -0
  31. package/assets/workshop-bundle/workshop-skill/recap.md +1 -1
  32. package/assets/workshop-bundle/workshop-skill/reference.md +2 -1
  33. package/package.json +1 -1
  34. package/src/run-cli.js +95 -24
@@ -0,0 +1,191 @@
1
+ ---
2
+ name: workshop-facilitator
3
+ description: >
4
+ Facilitator-facing skill for the Harness Lab workshop. Provides workshop
5
+ instance management, agenda editing, scene authoring, participant access
6
+ control, and cross-cohort learnings. Activates only after successful
7
+ facilitator login via the harness CLI.
8
+ allowed-tools:
9
+ - Read
10
+ - Grep
11
+ - Glob
12
+ - Agent
13
+ - AskUserQuestion
14
+ - Write
15
+ - Edit
16
+ - Bash
17
+ ---
18
+
19
+ # Workshop — Facilitator
20
+
21
+ Facilitator-facing skill for the Harness Lab workshop. This skill activates only after successful `workshop facilitator login` via the harness CLI.
22
+
23
+ For the full operational reference with API routes, payload shapes, and rules, see `workshop-skill/facilitator.md`.
24
+
25
+ ## Loading Condition
26
+
27
+ This skill should be loaded only when the facilitator has an active facilitator session. Participant sessions do not grant access to these commands.
28
+
29
+ ## Language Resolution
30
+
31
+ Facilitator-control commands are operational rather than room-facing delivery:
32
+ - prefer the user's current language unless the facilitator explicitly asks for another reviewed locale or you are quoting workshop content
33
+ - the authored language of a supporting doc does not decide the reply language by itself
34
+ - if the requested locale has no reviewed variant, fall back to English and say so explicitly
35
+ - do not let a Czech-authored fallback file force a Czech answer when the resolved response locale is English
36
+
37
+ ## Commands
38
+
39
+ ### `workshop facilitator login`
40
+
41
+ Authenticate as a facilitator through the `harness` CLI privileged path.
42
+ The skill should ask the facilitator to complete CLI login/bootstrap if needed, then use the CLI-backed session for subsequent commands.
43
+ This is a facilitator-only command — do not surface to participants.
44
+
45
+ ### `workshop facilitator status`
46
+
47
+ Show the current instance state, agenda phase, facilitator list, and team count.
48
+ Requires active facilitator session.
49
+ If a local current instance is selected, prefer that target over deployment-default status.
50
+ When an agent needs machine-readable output, prefer `harness --json workshop status`.
51
+
52
+ ### `workshop facilitator current-instance`
53
+
54
+ Show the locally selected facilitator target, where it came from, and the resolved instance record.
55
+ Prefer invoking `harness workshop current-instance`.
56
+ Use this to confirm the CLI target before update, reset, prepare, remove, or phase operations.
57
+
58
+ ### `workshop facilitator select-instance <instance-id>`
59
+
60
+ Persist a facilitator-local current target for later workshop commands.
61
+ Prefer invoking `harness workshop select-instance <instance-id>`.
62
+ Use `harness workshop select-instance --clear` to remove the stored selection.
63
+
64
+ ### `workshop facilitator list-instances`
65
+
66
+ List the facilitator-visible workshop instance registry.
67
+ Prefer invoking `harness workshop list-instances` over raw API scripts or local session-file inspection.
68
+ Use this when the facilitator needs to discover what currently exists on a shared dashboard before choosing an explicit instance for reset, update, or agenda work.
69
+ When an agent needs strict parsing, prefer `harness --json workshop list-instances`.
70
+
71
+ ### `workshop facilitator show-instance <instance-id>`
72
+
73
+ Inspect one explicit workshop instance.
74
+ Prefer invoking `harness workshop show-instance <instance-id>` over raw API scripts.
75
+ Use this when the facilitator needs the full record for one instance rather than the deployment-default runtime status returned by `workshop facilitator status`.
76
+ If a current instance is already selected, the CLI may omit `<instance-id>` and use the stored target.
77
+
78
+ ### `workshop facilitator participant-access`
79
+
80
+ Inspect or rotate the shared participant event code for the current workshop instance.
81
+ Prefer invoking `harness --json workshop participant-access` for inspection and `harness --json workshop participant-access --rotate` to issue a fresh code.
82
+ If the current raw code is no longer recoverable from the hash-only runtime store, issue a new code instead of guessing.
83
+
84
+ ### `workshop facilitator grant <email> <role>`
85
+
86
+ Grant a Neon Auth user access to the current workshop instance.
87
+ Roles: owner, operator, observer. Requires `owner` role.
88
+
89
+ ### `workshop facilitator revoke <email>`
90
+
91
+ Revoke a facilitator's access to the current instance. Requires `owner` role.
92
+
93
+ ### `workshop facilitator create-instance`
94
+
95
+ Create a new workshop instance from a template. Requires facilitator session.
96
+ Prefer invoking `harness workshop create-instance` over raw API scripts.
97
+
98
+ The skill should support rich event metadata, not just id and city:
99
+ - `id`
100
+ - `templateId`
101
+ - `contentLang`
102
+ - `eventTitle`
103
+ - `city`
104
+ - `dateRange`
105
+ - `venueName`
106
+ - `roomName`
107
+ - `addressLine`
108
+ - `locationDetails`
109
+ - `facilitatorLabel`
110
+
111
+ ### `workshop facilitator update-instance <instance-id>`
112
+
113
+ Update event metadata for an existing workshop instance. Requires facilitator session.
114
+ Prefer invoking `harness workshop update-instance` over raw API scripts.
115
+ Use this when the facilitator wants to correct or refine date, venue, room, address, or event title without resetting the instance.
116
+ Support `contentLang` changes explicitly so facilitators can choose workshop delivery language per instance without changing admin UI language.
117
+
118
+ Facilitator discovery rule:
119
+ - for routine discovery, use `harness workshop list-instances` and `harness workshop show-instance`
120
+ - for repeated work on one live workshop, use `harness workshop select-instance <instance-id>` and `harness workshop current-instance`
121
+ - do not read local CLI session files or improvise authenticated `node -e` fetch scripts unless you are diagnosing the CLI itself
122
+
123
+ ### `workshop facilitator reset-instance <instance-id>`
124
+
125
+ Reset one existing workshop instance from the selected blueprint template. Requires facilitator session.
126
+ Prefer invoking `harness workshop reset-instance` over raw API scripts.
127
+ Use this when the facilitator wants fresh canonical agenda, runner, and presenter content for a live instance and accepts that local runtime state will be reinitialized.
128
+ If a current instance is already selected, the CLI may omit `<instance-id>` and use the stored target.
129
+
130
+ ### `workshop facilitator remove-instance`
131
+
132
+ Remove a workshop instance from the active list without deleting its archive history. Requires facilitator session.
133
+ Prefer invoking `harness workshop remove-instance`.
134
+ If a current instance is already selected, the CLI may omit `<instance-id>` and use the stored target.
135
+
136
+ ### `workshop facilitator prepare`
137
+
138
+ Set the current instance to `prepared` state. Verify event code is ready.
139
+ Prefer invoking `harness workshop prepare`.
140
+ If a current instance is already selected, the CLI may omit `<instance-id>` and use the stored target.
141
+
142
+ ### `workshop facilitator agenda`
143
+
144
+ Inspect and edit the local agenda copy for one workshop instance. Requires facilitator session.
145
+
146
+ ### `workshop facilitator scenes`
147
+
148
+ Inspect and edit presenter scenes for one workshop instance. This includes listing scenes for an agenda item, creating a new scene, editing content, changing default scene, reordering scenes, and enabling or hiding scenes. Requires facilitator session.
149
+
150
+ Rules for rich scenes:
151
+ - keep scenes agenda-linked and room-facing rather than inventing a freeform slide deck
152
+ - prefer one dominant voice per scene and one main idea per scene
153
+ - use reviewed local blueprint assets for reusable visuals instead of ad hoc remote image URLs
154
+ - treat runtime scene edits as instance-local until a maintainer deliberately publishes them back into the repo
155
+ - when richer scene authoring or promotion is involved, follow `docs/presenter-rich-scene-authoring.md`
156
+
157
+ ### `workshop facilitator archive`
158
+
159
+ Archive the current workshop instance with optional notes.
160
+
161
+ ### `workshop facilitator learnings`
162
+
163
+ Query the cross-cohort learnings log to review rotation signals from past and current workshops.
164
+ Prefer invoking `harness --json workshop learnings` for machine-readable output.
165
+ Supports flags: `--tag TAG`, `--instance ID`, `--cohort NAME`, `--limit N` (default 20).
166
+ When the facilitator asks for rotation signals, captured observations, or what happened during past handoffs, use this command.
167
+ If the learnings log is empty, say so and suggest capturing the first signal using the rotation capture panel in the facilitator dashboard.
168
+
169
+ ### `workshop closing`
170
+
171
+ Prepare Ondrej's closing synthesis by using:
172
+ - sprint checkpoints from the dashboard
173
+ - monitoring summary
174
+ - W³ commitments or closing notes
175
+ Use `workshop-skill/closing-skill.md`.
176
+ Treat this as facilitator-facing. Do not proactively surface it to participants during normal workshop help.
177
+
178
+ ## Fallback Content
179
+
180
+ If the API is not reachable:
181
+ - say explicitly that live workshop data is unavailable
182
+ - avoid inventing team state, checkpoint state, or facilitator-only information
183
+ - prefer `workshop-skill/facilitator.md` for the full operational command reference
184
+
185
+ ## Style
186
+
187
+ - Be concise and directive.
188
+ - Use the resolved response language.
189
+ - English is the default bundled fallback locale when no live or user-language signal overrides it.
190
+ - Keep command names, file names, and code terms in English.
191
+ - Prefer actionable operational guidance over theory.
@@ -10,6 +10,7 @@ Když agent dělá `/workshop analyze`, měl by projít:
10
10
  - jestli repo rozlišuje hotové vs. rozpracované části
11
11
  - jestli je v repu plán nebo runbook pro další tým
12
12
  - jestli je dohledatelné, co bylo skutečně ověřeno
13
+ - jestli existuje záznam stavu session — co bylo ověřeno, co je rozpracované, jaký je další bezpečný krok
13
14
  - kolik pravidel žije jen v promptu a ne v repu
14
15
  - jak snadné by bylo pokračovat po rotaci bez ústního handoffu
15
16
  - jestli je zřejmý další bezpečný krok
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Úkol
4
4
 
5
- Na konci dne vytvoř krátké shrnutí workshopu, které je:
5
+ Po posledním bloku vytvoř krátké shrnutí workshopu, které je:
6
6
 
7
7
  - konkrétní
8
8
  - systémové, ne osobní
@@ -39,10 +39,6 @@
39
39
  - Když si nejste jistí workflow: `workshop commands`
40
40
  - Když chcete materiály i po workshopu: `workshop resources`, `workshop follow-up`, `workshop gallery`
41
41
 
42
- ## Facilitátorské příkazy
43
-
44
- - `workshop facilitator learnings` — dotaz do learnings logu: záznamy z rotace z minulých i aktuálních workshopů. Podporuje filtrování podle tagu, instance a cohortu.
45
-
46
42
  ## Důležitá poznámka
47
43
 
48
44
  `workshop` skill je garantovaný výchozí nástroj workshopu. Další workflow skills a veřejné toolkity jsou doporučené rozšíření, ne podmínka účasti.
@@ -2,39 +2,32 @@
2
2
 
3
3
  ## 48 hodin po workshopu
4
4
 
5
- Pošli účastníkům:
6
-
7
- 1. Krátké připomenutí hlavních principů:
8
- - Kontext je pracovní systém
9
- - `AGENTS.md` je týmová infrastruktura
10
- - `Done When` a build/test příkazy zvyšují šanci na dobrý handoff
11
- 2. Odkaz na `/workshop recap`
12
- 3. Odkaz nebo výřez z `workshop-skill/template-agents.md`
13
- 4. Jednu větu, která vrátí room contract:
14
- - „Nejde o chytřejší prompt. Jde o repo, ze kterého naváže další tým.“
15
- 5. Výzvu týdne:
16
- - „Přidejte `AGENTS.md` do jednoho reálného projektu.“
17
- - „Přesuňte jedno trvalé pravidlo z promptu do repa.“
18
- 6. Odkaz na learner kit:
19
- - [`docs/learner-resource-kit.md`](../docs/learner-resource-kit.md)
20
- - [`docs/learner-reference-gallery.md`](../docs/learner-reference-gallery.md)
21
- - [`materials/participant-resource-kit.md`](../materials/participant-resource-kit.md)
22
- 7. Připomeňte, že stejné materiály lze vyžádat i přes skill:
23
- - `workshop resources`
24
- - `workshop gallery`
25
- - `workshop follow-up`
26
- 8. Přidejte malý závazek:
27
- - „Pošlete si sami sobě nebo týmu jeden commit, task nebo PR, který tenhle týden opravdu vznikne.“
28
-
29
- ## 1 týden po workshopu
30
-
31
- Krátký navazující dotaz:
32
-
33
- - Vytvořili jste `AGENTS.md` v reálném projektu?
34
- - Přidali jste build/test příkazy nebo sekci `Done When`?
35
- - Přidali jste další safe move nebo krátký handoff runbook?
36
- - Co vám pomohlo a co vás zablokovalo?
37
-
38
- ## W³ připomínka
39
-
40
- Pokud máš fotku sticky notes z části `A teď?`, pošli každému jeho vlastní závazek jako osobní připomínku.
5
+ ### Váš závazek
6
+
7
+ Pokud máš fotku sticky notes z části „A teď?", pošli každému jeho vlastní závazek jako osobní připomínku. Závazek ze sticky note je to jediné, co je specifické právě pro tebe, právě z tohoto dne. Začni tím.
8
+
9
+ **Jedna věc do pátku:** Splňte svůj závazek ze sticky note. Jeden commit, jeden PR, jeden task — cokoli, co z vašeho závazku udělá realitu.
10
+
11
+ ### Anchor cvičení
12
+
13
+ Zapište si tři momenty z vašeho běžného pracovního týdne, kdy otevíráte nový úkol nebo novou session — to jsou vaše Anchor momenty pro „Map before motion." Když se tyto momenty stanou vaším spouštěčem, návyk se udrží sám.
14
+
15
+ ### Zdroje
16
+
17
+ - Připomínka principů: Kontext je pracovní systém. `AGENTS.md` je týmová infrastruktura. `Done When` a build/test příkazy zvyšují šanci na dobrý handoff.
18
+ - Odkaz na `/workshop recap`
19
+ - Odkaz nebo výřez z `workshop-skill/template-agents.md`
20
+ - Learner kit: [`docs/learner-resource-kit.md`](../docs/learner-resource-kit.md), [`docs/learner-reference-gallery.md`](../docs/learner-reference-gallery.md), [`materials/participant-resource-kit.md`](../materials/participant-resource-kit.md)
21
+ - Skill příkazy: `workshop resources`, `workshop gallery`, `workshop follow-up`
22
+
23
+ ## Týdenní generační prompty
24
+
25
+ Místo checklistů — jeden prompt týdně, který vás přiměje popsat konkrétní zkušenost:
26
+
27
+ **Týden 1:** Popište konkrétní moment z tohoto týdne, kdy jste potřebovali ověřit výstup agenta. Co jste použili jako kontrolu a co byste příště změnili?
28
+
29
+ **Týden 2:** Popište rozhodnutí, které jste tento týden zapsali do repozitáře místo toho, abyste ho nechali v chatu. Co vás přimělo ho zapsat?
30
+
31
+ **Týden 3:** Popište moment, kdy jste agentovi dali omezení předem a ušetřilo vám to opravu. Jaké to bylo omezení?
32
+
33
+ **Týden 4:** Popište situaci, kdy se stejný problém opakoval. Změnili jste systém (template, check, pravidlo), nebo jen výstup?
@@ -39,10 +39,6 @@
39
39
  - If you are unsure about workflow: `workshop commands`
40
40
  - If you want materials after the workshop too: `workshop resources`, `workshop follow-up`, `workshop gallery`
41
41
 
42
- ## Facilitator commands
43
-
44
- - `workshop facilitator learnings` — query the cross-cohort learnings log: rotation signals from past and current workshops. Supports filtering by tag, instance, and cohort.
45
-
46
42
  ## Important note
47
43
 
48
44
  The `workshop` skill is the guaranteed workshop default. Additional workflow skills and public toolkits are recommended accelerators, not a requirement for participation.
@@ -2,39 +2,32 @@
2
2
 
3
3
  ## 48 hours after the workshop
4
4
 
5
- Send participants:
6
-
7
- 1. A short reminder of the main principles:
8
- - Context is a working system
9
- - `AGENTS.md` is team infrastructure
10
- - `Done When` and build/test commands improve the chances of a good handoff
11
- 2. A pointer to `/workshop recap`
12
- 3. A link to or excerpt from `workshop-skill/template-agents.md`
13
- 4. One sentence that brings the room contract back:
14
- - "This is not about a smarter prompt. It is about a repo another team can continue from."
15
- 5. A challenge for the week:
16
- - "Add `AGENTS.md` to one real project."
17
- - "Move one durable rule from a prompt into the repo."
18
- 6. Links to the learner kit:
19
- - [`docs/locales/en/learner-resource-kit.md`](../../../docs/locales/en/learner-resource-kit.md)
20
- - [`docs/locales/en/learner-reference-gallery.md`](../../../docs/locales/en/learner-reference-gallery.md)
21
- - [`materials/locales/en/participant-resource-kit.md`](../../../materials/locales/en/participant-resource-kit.md)
22
- 7. A reminder that the same materials are available through the skill too:
23
- - `workshop resources`
24
- - `workshop gallery`
25
- - `workshop follow-up`
26
- 8. Add one small commitment:
27
- - "Send yourself or your team one commit, task, or PR that will actually happen this week."
28
-
29
- ## 1 week after the workshop
30
-
31
- Short follow-up questions:
32
-
33
- - Did you create `AGENTS.md` in a real project?
34
- - Did you add build/test commands or a `Done When` section?
35
- - Did you add the next safe move or a short handoff runbook?
36
- - What helped you and what blocked you?
37
-
38
- ## W³ reminder
39
-
40
- If you have a photo of the sticky notes from the `And now?` section, send each person their own commitment as a personal reminder.
5
+ ### Your commitment
6
+
7
+ If you have a photo of the sticky notes from the "And now?" section, send each person their own commitment as a personal reminder. The sticky-note commitment is the only thing specific to you, from this day. Start there.
8
+
9
+ **One thing before Friday:** Complete your sticky-note commitment. One commit, one PR, one task — anything that turns your commitment into reality.
10
+
11
+ ### Anchor exercise
12
+
13
+ Write down three moments in your normal work week when you open a new task or a new session — these are your Anchor moments for "Map before motion." When these moments become your trigger, the habit sustains itself.
14
+
15
+ ### Resources
16
+
17
+ - Principle reminder: Context is a working system. `AGENTS.md` is team infrastructure. `Done When` and build/test commands improve the chances of a good handoff.
18
+ - Pointer to `/workshop recap`
19
+ - Link to or excerpt from `workshop-skill/template-agents.md`
20
+ - Learner kit: [`docs/learner-resource-kit.md`](../../../docs/learner-resource-kit.md), [`docs/learner-reference-gallery.md`](../../../docs/learner-reference-gallery.md), [`materials/participant-resource-kit.md`](../../../materials/participant-resource-kit.md)
21
+ - Skill commands: `workshop resources`, `workshop gallery`, `workshop follow-up`
22
+
23
+ ## Weekly generation prompts
24
+
25
+ Instead of checklists — one prompt per week that asks you to describe a concrete experience:
26
+
27
+ **Week 1:** Describe a specific moment this week when you needed to verify agent output. What did you use as the check, and what would you change next time?
28
+
29
+ **Week 2:** Describe a decision you wrote into the repository this week instead of leaving it in chat. What made you decide to write it down?
30
+
31
+ **Week 3:** Describe a moment when you gave the agent a constraint upfront and it saved you a correction. What was the constraint?
32
+
33
+ **Week 4:** Describe a situation where the same problem repeated. Did you change the system (template, check, rule), or just the output?
@@ -6,6 +6,7 @@
6
6
  - `If it is not in the repo, it does not exist` - important agreements, rules, and next steps belong in files
7
7
  - `Verification is the trust boundary` - more autonomy requires stronger evidence
8
8
  - `Handoff is a continuous constraint` - the next team should find the first safe move without your explanation
9
+ - `Fix the system, not just the symptom` - when the same thing repeats, do not fix the output — fix the system
9
10
 
10
11
  ## 4 elements of a good task
11
12
 
@@ -26,4 +26,4 @@ Vraťte se ke sticky note z části `A teď?` a převeďte ji na první konkr
26
26
 
27
27
  ## Až si nebudete jistí
28
28
 
29
- Začněte jednoduše: napište, co chcete udělat, kde je kontext, jaká jsou omezení, podle čeho poznáte hotovo a jaký je další safe move, když práce zůstane rozdělaná.
29
+ Začněte jednoduše: napište, co chcete udělat, kde je kontext, jaká jsou omezení, podle čeho poznáte hotovo a jaký je další bezpečný krok, když práce zůstane rozdělaná.
@@ -6,6 +6,7 @@
6
6
  - `Co není v repu, neexistuje` — důležité dohody, pravidla a další kroky patří do souborů
7
7
  - `Ověření je hranice důvěry` — s větší autonomií musí růst i kvalita evidence
8
8
  - `Handoff je průběžná podmínka práce` — další tým má najít první bezpečný krok bez vašeho výkladu
9
+ - `Opravte systém, ne jen symptom` — když se stejná věc opakuje, neopravujte výstup — opravte systém
9
10
 
10
11
  ## 4 prvky dobrého zadání
11
12
 
@@ -36,7 +37,7 @@
36
37
  - V prvním buildu: `template-agents`, brief, plán a první ověření
37
38
  - Před obědem: dopsat další bezpečný krok a použít `workshop analyze`, když si nejste jistí handoffem
38
39
  - Po rotaci: `workshop analyze`, learner kit a challenge cards místo ústního rescue
39
- - Na konci dne: `workshop recap` a `workshop follow-up`
40
+ - Po posledním bloku: `workshop recap` a `workshop follow-up`
40
41
 
41
42
  ## Doporučené příkazy
42
43
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@harness-lab/cli",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "Participant-facing Harness Lab CLI for facilitator auth and workshop operations",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/src/run-cli.js CHANGED
@@ -202,39 +202,88 @@ function resolveCurrentInstanceTarget(session, env) {
202
202
  };
203
203
  }
204
204
 
205
+ function helpLine(command, description) {
206
+ return description ? `${command.padEnd(48)} ${description}` : ` ${command}`;
207
+ }
208
+
205
209
  function printUsage(io, ui) {
206
210
  ui.heading("Harness CLI");
207
- ui.paragraph(`Version ${version}`);
211
+ ui.paragraph(`Workshop toolkit for teams working with AI coding agents. Version ${version}.`);
208
212
  ui.blank();
213
+
209
214
  ui.section("Usage");
215
+ ui.commandList(["harness <command> [flags]"]);
216
+ ui.blank();
217
+
218
+ ui.section("Participant");
219
+ ui.commandList([
220
+ helpLine("skill install [--target PATH] [--force]", "Install the workshop skill into your repo"),
221
+ ]);
222
+ ui.paragraph("Most participants only need this. After install, use $workshop in your agent.");
223
+ ui.blank();
224
+
225
+ ui.section("Authentication");
226
+ ui.commandList([
227
+ helpLine("auth login [--auth device|basic|neon]", "Authenticate as a facilitator"),
228
+ helpLine("auth logout", "End the current session"),
229
+ helpLine("auth status", "Check session status"),
230
+ ]);
231
+ ui.blank();
232
+
233
+ ui.section("Workshop — inspect");
234
+ ui.commandList([
235
+ helpLine("workshop status", "Show current state and selected instance"),
236
+ helpLine("workshop current-instance", "Show the locally selected instance"),
237
+ helpLine("workshop select-instance <id> [--clear]", "Pin an instance for subsequent commands"),
238
+ helpLine("workshop list-instances", "List all facilitator-visible instances"),
239
+ helpLine("workshop show-instance <id>", "Inspect one instance in detail"),
240
+ ]);
241
+ ui.blank();
242
+
243
+ ui.section("Workshop — lifecycle");
244
+ ui.commandList([
245
+ helpLine("workshop create-instance [<id>]", "Create a new workshop from a template"),
246
+ helpLine(" [--template-id ID] [--content-lang cs|en]", ""),
247
+ helpLine(" [--event-title TEXT] [--city CITY]", ""),
248
+ helpLine("workshop update-instance <id>", "Update event metadata for an instance"),
249
+ helpLine(" [--content-lang cs|en] [--event-title TEXT]", ""),
250
+ helpLine(" [--city CITY]", ""),
251
+ helpLine("workshop reset-instance <id> [--template-id ID]", "Reset an instance from the blueprint"),
252
+ helpLine("workshop prepare <id>", "Mark an instance as ready for participants"),
253
+ helpLine("workshop remove-instance <id>", "Soft-remove an instance from the list"),
254
+ helpLine("workshop archive [--notes TEXT]", "Snapshot runtime state before reset"),
255
+ ]);
256
+ ui.blank();
257
+
258
+ ui.section("Workshop — live facilitation");
210
259
  ui.commandList([
211
- "harness [--json] <command>",
212
- "harness --help",
213
- "harness --version",
214
- "harness version",
260
+ helpLine("workshop phase set <phase-id>", "Advance the agenda to a phase"),
261
+ helpLine("workshop participant-access [<id>]", "Inspect or rotate the event code"),
262
+ helpLine(" [--rotate] [--code VALUE]", ""),
263
+ helpLine("workshop learnings", "Query the cross-cohort learnings log"),
264
+ helpLine(" [--tag TAG] [--instance ID]", ""),
265
+ helpLine(" [--cohort NAME] [--limit N]", ""),
215
266
  ]);
216
267
  ui.blank();
217
- ui.section("Commands");
268
+
269
+ ui.section("Global flags");
218
270
  ui.commandList([
219
- "harness auth login [--auth device|basic|neon] [--dashboard-url URL] [--username USER] [--email EMAIL] [--password PASS] [--no-open]",
220
- "harness auth logout",
221
- "harness auth status",
222
- "harness skill install [--target PATH] [--force]",
223
- "harness workshop current-instance",
224
- "harness workshop select-instance <instance-id> [--clear]",
225
- "harness workshop status",
226
- "harness workshop list-instances",
227
- "harness workshop show-instance <instance-id>",
228
- "harness workshop participant-access [<instance-id>] [--rotate] [--code VALUE]",
229
- "harness workshop archive [--notes TEXT]",
230
- "harness workshop create-instance [<instance-id>] [--template-id ID] [--content-lang cs|en] [--event-title TEXT] [--city CITY]",
231
- "harness workshop update-instance <instance-id> [--content-lang cs|en] [--event-title TEXT] [--city CITY]",
232
- "harness workshop reset-instance <instance-id> [--template-id ID]",
233
- "harness workshop prepare <instance-id>",
234
- "harness workshop remove-instance <instance-id>",
235
- "harness workshop phase set <phase-id>",
236
- "harness workshop learnings [--tag TAG] [--instance ID] [--cohort NAME] [--limit N]",
271
+ helpLine("--json", "Output machine-readable JSON"),
272
+ helpLine("--help", "Show this help"),
273
+ helpLine("--version", "Print version"),
237
274
  ]);
275
+ ui.blank();
276
+
277
+ ui.section("Examples");
278
+ ui.commandList([
279
+ helpLine("harness skill install", "Install workshop skill here"),
280
+ helpLine("harness auth login", "Start device-code login"),
281
+ helpLine("harness workshop status", "Check what instance you target"),
282
+ helpLine("harness workshop learnings --tag missing_runbook", "Search learnings by tag"),
283
+ ]);
284
+ ui.blank();
285
+
286
+ ui.paragraph("Documentation: https://github.com/ondrej-svec/harness-lab");
238
287
  }
239
288
 
240
289
  function printVersion(io) {
@@ -1287,6 +1336,28 @@ export async function runCli(argv, io, deps = {}) {
1287
1336
  return handleSkillInstall(io, ui, mergedDeps, flags);
1288
1337
  }
1289
1338
 
1339
+ if (scope === "skill") {
1340
+ ui.heading("Harness CLI — Skill");
1341
+ ui.paragraph("Install the workshop skill into your project repo.");
1342
+ ui.blank();
1343
+ ui.section("Commands");
1344
+ ui.commandList([
1345
+ helpLine("harness skill install [--target PATH] [--force]", "Install the workshop skill"),
1346
+ ]);
1347
+ ui.blank();
1348
+ ui.section("After install");
1349
+ ui.commandList([
1350
+ "Open Codex or pi in the same repo",
1351
+ "Run: $workshop commands",
1352
+ "Run: $workshop reference",
1353
+ "Run: $workshop brief",
1354
+ "Run: $workshop help",
1355
+ ]);
1356
+ ui.blank();
1357
+ ui.paragraph("The skill is the participant's primary workshop interface.");
1358
+ return 0;
1359
+ }
1360
+
1290
1361
  if (scope === "workshop" && action === "current-instance") {
1291
1362
  return handleWorkshopCurrentInstance(io, ui, io.env, mergedDeps);
1292
1363
  }