@harness-lab/cli 0.3.1 → 0.3.2

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "manifestVersion": 1,
3
3
  "bundleName": "harness-lab-workshop",
4
- "bundleVersion": "0.3.1",
5
- "contentHash": "d52937fa7d980cdd71345b725b68bc934e939bc5b48cabd4d5bcfb55da03362f",
4
+ "bundleVersion": "0.3.2",
5
+ "contentHash": "579eac8240790ff7974b9cfdfba7f4c2ae0c901fbf3bf312e1017ad258069174",
6
6
  "files": [
7
7
  {
8
8
  "path": "content/challenge-cards/.gitkeep",
@@ -10,7 +10,7 @@
10
10
  },
11
11
  {
12
12
  "path": "content/challenge-cards/deck.md",
13
- "sha256": "1c8b4e3a6ab987dc2e9e5418a32a84b8dd3485b8ee0d7d5dc9dc01394f57e3cc"
13
+ "sha256": "d2523b1fbedd84faef5327affe5a698f44b8634c9eb0da8320dc8339bc5158fc"
14
14
  },
15
15
  {
16
16
  "path": "content/challenge-cards/locales/en/deck.md",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  {
36
36
  "path": "content/facilitation/master-guide.md",
37
- "sha256": "b5e107e88ab335aaa8870f51cf9c8b8dadb619d3b0f61dab087dacdcdef4c136"
37
+ "sha256": "c5f3df56380b3df498a92dc6de55e922b2c7722e53e4f6f2efbef9b76de1d163"
38
38
  },
39
39
  {
40
40
  "path": "content/project-briefs/.gitkeep",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  {
44
44
  "path": "content/project-briefs/code-review-helper.md",
45
- "sha256": "96bbbef60ab0ff93ad4aa3858852886329139a25ce9f375bc4cc57ad706b7c98"
45
+ "sha256": "faf51210e1305683432f3e96eec1e18f91cdb2f1fd086ff73aeb70b6d17895a0"
46
46
  },
47
47
  {
48
48
  "path": "content/project-briefs/devtoolbox-cli.md",
@@ -50,7 +50,7 @@
50
50
  },
51
51
  {
52
52
  "path": "content/project-briefs/doc-generator.md",
53
- "sha256": "48b8298be1e14e962055ac6d157be2728aa96fc71109e7ee833a6c56dab64731"
53
+ "sha256": "b4a3da683eba039f6009be61fe546ed1585341c82c3492f94add8363ad9496e3"
54
54
  },
55
55
  {
56
56
  "path": "content/project-briefs/locales/en/code-review-helper.md",
@@ -74,11 +74,11 @@
74
74
  },
75
75
  {
76
76
  "path": "content/project-briefs/metrics-dashboard.md",
77
- "sha256": "40c0d09c02fb20c97c0f99088641de20fa966b17089f6f7701a7808814b31c55"
77
+ "sha256": "926dd8ccedab65a30b862bf4dc481f2c8054778e5668d97f5c8cf46665c60860"
78
78
  },
79
79
  {
80
80
  "path": "content/project-briefs/standup-bot.md",
81
- "sha256": "df9abc9d7bc8283d30d1c09fb412f9e072a980782c0b622747b13744b2a81c84"
81
+ "sha256": "c2f56513bf69dd92c95f3dbd68c5b0925d19faf17d9d42eb2ed40c7cc8e8839b"
82
82
  },
83
83
  {
84
84
  "path": "content/talks/.gitkeep",
@@ -90,7 +90,7 @@
90
90
  },
91
91
  {
92
92
  "path": "content/talks/context-is-king.md",
93
- "sha256": "31fb6a02037c50e0b3fa2ae4bc39f658924bd164279fb490fc192d604763ff9f"
93
+ "sha256": "2f666585220c50901fe91443904a127e3357aa71a92e93b10eafa17100eb105c"
94
94
  },
95
95
  {
96
96
  "path": "docs/harness-cli-foundation.md",
@@ -126,7 +126,7 @@
126
126
  },
127
127
  {
128
128
  "path": "materials/participant-resource-kit.md",
129
- "sha256": "d7cd7db05429faf7af570e33401cb5788d663e06c984f193596c14d2d8a12a5b"
129
+ "sha256": "c9c58ebf3e66a6f6823a06b5d938bc930eb3a768d3d23a2b4f18fe99b4b85a47"
130
130
  },
131
131
  {
132
132
  "path": "SKILL.md",
@@ -166,7 +166,7 @@
166
166
  },
167
167
  {
168
168
  "path": "workshop-skill/closing-skill.md",
169
- "sha256": "db23689de38b1ebfc2d9dde5387c5386a774cc6e90ab3e6c95f7749601d6abb7"
169
+ "sha256": "f0ce3f0f4a515dff14dab77fd31317a73a489ee24ba536eb7dd20f0b13cff4ec"
170
170
  },
171
171
  {
172
172
  "path": "workshop-skill/commands.md",
@@ -178,7 +178,7 @@
178
178
  },
179
179
  {
180
180
  "path": "workshop-skill/follow-up-package.md",
181
- "sha256": "74b8232f54b663d8ba9a97485c898ef0e8cffd5b5423831627ee7fe94d1cca44"
181
+ "sha256": "3299b0cf49e90f87ec3090ed934234d8c06e502fd3305c4e69c8aadfe1b42e7e"
182
182
  },
183
183
  {
184
184
  "path": "workshop-skill/install.md",
@@ -206,11 +206,11 @@
206
206
  },
207
207
  {
208
208
  "path": "workshop-skill/recap.md",
209
- "sha256": "fa242bbb17d5305fda2b3c08a8da14744f60f6895985bbbbb1604c4c1ad4c8b4"
209
+ "sha256": "c479b255b4ebd35dde9a1afbf7a174e3aa8b348ebed8e07187f641f5dcb1b143"
210
210
  },
211
211
  {
212
212
  "path": "workshop-skill/reference.md",
213
- "sha256": "fe7d1c5f32d2a88b4673f565fda8bb389c4fe3b2a50aad5e2a9fafef7f75d658"
213
+ "sha256": "438cfc517d5ff707ce737e81a7ec3f8098c08f8fd2589ac105aea968da39f9a6"
214
214
  },
215
215
  {
216
216
  "path": "workshop-skill/setup.md",
@@ -15,7 +15,7 @@ Karty nejsou body navíc. Jsou to malé zásahy, které zlepšují způsob prác
15
15
  - `Rozdělte práci do více vláken` — zkuste dvě nezávislé linie práce a jednoho člověka na integraci.
16
16
  - `Delegujte úkol a vraťte se ke kontrole za 10 minut` — neskákejte agentovi do každého kroku, kontrolujte až výsledek.
17
17
  - `Přidejte nejmenší užitečné ověření` — zapište done criteria jako spustitelný check (unit test, tracer bullet nebo jednoduchý browser check) dřív, než agent dostane víc autonomie.
18
- - `Napište diagnózu po handoffu` — pojmenujte, co pomohlo, co chybělo a jaký je další safe move.
18
+ - `Napište diagnózu po handoffu` — pojmenujte, co pomohlo, co chybělo a jaký je další bezpečný krok.
19
19
  - `Opravte jeden slabý signál v repu` — README, AGENTS.md, plán, runbook nebo check.
20
20
 
21
21
  ## Advanced
@@ -24,7 +24,7 @@ Spustit den jako společný start pro celý workshop, ne jako provozní brief k
24
24
  2. proč na tom záleží právě teď
25
25
  3. analogie typu Lego duck: stejné ingredience, různé použitelné výsledky
26
26
  4. krátká pohybová aktivace podle zkušenosti s AI agenty
27
- 5. první pracovní kontrakt pro Build fázi 1
27
+ 5. první pracovní kontrakt pro build fázi 1
28
28
 
29
29
  ### Lego-duck analogie
30
30
 
@@ -78,7 +78,7 @@ Do oběda má být vidět:
78
78
 
79
79
  ### Cíl
80
80
 
81
- Proměnit energii z openingu v přesnou tezi a čistý most do Build fáze 1.
81
+ Proměnit energii z openingu v přesnou tezi a čistý most do build fáze 1.
82
82
 
83
83
  ### Klíčová message
84
84
 
@@ -232,7 +232,6 @@ Vést ho jako krátký checkpoint, ze kterého si týmy odnesou jednu věc, kter
232
232
 
233
233
  - Začněte `README`, `AGENTS.md` a planem.
234
234
  - Needitujte hned první soubor, který otevřete.
235
- - Nejprve si udělejte mapu: co funguje, co chybí, co je rizikové.
236
235
  - Nejdřív napište vlastní diagnózu: co pomáhá, co chybí, co je rizikové a jaký je další bezpečný krok.
237
236
  - Když tým neví, po čem sáhnout, vraťte ho k learner kitu: `template-agents`, `reference`, `analyze-checklist` a challenge cards.
238
237
 
@@ -24,7 +24,7 @@ Vaším úkolem je navrhnout nástroj, který z diffu nebo změny vytvoří pou
24
24
  - Nástroj vytvoří review checklist ze seed diffu.
25
25
  - Výstup odlišuje jistá zjištění od doporučení, hypotéz a bodů pro lidský úsudek.
26
26
  - Je jasné, jak přidat nové pravidlo nebo heuristiku bez dlouhého onboardingu.
27
- - Další tým může během několika minut pokračovat v rozvoji bez chaosu.
27
+ - Další tým může během 10 minut pokračovat v rozvoji bez chaosu.
28
28
 
29
29
  ## První krok pro agenta
30
30
 
@@ -9,7 +9,7 @@ Vaším úkolem je navrhnout nástroj, který z projektu vygeneruje základní
9
9
  ## User stories
10
10
 
11
11
  - Jako vývojář chci z projektu rychle získat základní technickou dokumentaci bez ručního sepisování všeho od nuly.
12
- - Jako reviewer chci během pár minut pochopit strukturu modulů a hlavní vstupní body.
12
+ - Jako reviewer chci během 5 minut pochopit strukturu modulů a hlavní vstupní body.
13
13
  - Jako tým po rotaci chci objevit architekturu projektu bez dlouhého pátrání po souvislostech.
14
14
 
15
15
  ## Architektonické poznámky
@@ -26,7 +26,7 @@ Vaším úkolem je navrhnout nástroj, který z projektu vygeneruje základní
26
26
  - Je jasné, jak se nástroj spouští lokálně a nad jakým vstupem.
27
27
  - Výstup odděluje fakta od odhadů nebo heuristik.
28
28
  - Další tým umí přidat nový typ výstupu bez chaosu v repu.
29
- - Reviewer během pár minut pozná, odkud které tvrzení pochází.
29
+ - Reviewer během 10 minut pozná, odkud které tvrzení pochází.
30
30
 
31
31
  ## První krok pro agenta
32
32
 
@@ -10,7 +10,7 @@ Vaším úkolem je navrhnout jednoduchý dashboard, který z několika metrik v
10
10
 
11
11
  - Jako tým chci zobrazit několik metrik na jedné obrazovce tak, aby z nich šlo rychle vyčíst stav.
12
12
  - Jako facilitátor chci snadno měnit seed data bez zásahu do UI logiky.
13
- - Jako tým po rotaci chci během několika minut pochopit strukturu dat, komponent i obrazovek.
13
+ - Jako tým po rotaci chci během 10 minut pochopit strukturu dat, komponent i obrazovek.
14
14
 
15
15
  ## Architektonické poznámky
16
16
 
@@ -25,7 +25,7 @@ Vaším úkolem je navrhnout nástroj, který ze standup vstupů vytvoří přeh
25
25
  - Nástroj umí ingestovat seed data a vytvořit čitelný souhrn.
26
26
  - Výstup zvýrazní blokery nebo položky, které potřebují pozornost.
27
27
  - Repo obsahuje instrukce, jak řešení napojit na reálný chat nebo jiný vstupní kanál.
28
- - Po rotaci lze navázat bez dalšího vysvětlování.
28
+ - Po rotaci může nový tým pokračovat v práci z README a `AGENTS.md` bez ústního handoffu.
29
29
  - Je jasné, co je jisté shrnutí a co je jen heuristika nebo návrh.
30
30
 
31
31
  ## První krok pro agenta
@@ -43,15 +43,23 @@ Vezmeme stejný malý task ve dvou podmínkách. Jedna varianta bude prompt blob
43
43
 
44
44
  ## Hlavní teze
45
45
 
46
+ ### Kontext je páka
47
+
46
48
  - Kontext je páka, ne kosmetika.
47
49
  - `AGENTS.md`, skills a runbooky jsou týmová infrastruktura.
48
50
  - `AGENTS.md` nemá být encyklopedie. Má to být mapa, která ukáže, kam sáhnout dál.
49
- - Co není v repu, neexistuje. Slack, ústní dovysvětlení a "to si pamatujeme" se při návaznosti rozpadají.
51
+ - Co není v repu, neexistuje. Slack, ústní dovysvětlení a to si pamatujeme" se rozpadne, jakmile práci někdo převezme.
52
+
53
+ ### Ověření je hranice důvěry
54
+
50
55
  - Testy jsou hranice důvěry. Když agent pracuje samostatněji, musíte mnohem líp ověřovat, že udělal právě to, co jste chtěli.
51
56
  - Jednoduché mantinely zrychlují práci. Agentovi pomáhá jasný build/test flow, viditelné hranice a předvídatelná struktura.
52
57
  - U UI práce je výchozí pattern: agent exploration, potom repeatable browser test, potom lidské review.
53
58
  - „Nech model jezdit v mém běžném přihlášeném browseru“ není výchozí doporučení. Bezpečnější je izolované lokální prostředí a jasné mantinely.
54
- - Ověření napsané dřív, než pustíte agenta do většího kusu práce, není test-first dogma. Je to zápis done criteria do formy, kterou agent i další tým umí zkontrolovat. Iteraci to zrychluje, protože agent dostane přesné mantinely, ne další prompt.
59
+ - Ověření napsané dřív, než pustíte agenta do většího kusu práce, není test-first dogma. Znamená to zapsat done criteria v takové formě, aby je agent i další tým uměl zkontrolovat. Iteraci to zrychluje, protože agent dostane přesné mantinely, ne další prompt.
60
+
61
+ ### Repo se udržuje, ne jen plní
62
+
55
63
  - Úklid není bonus po workshopu. Když narazíte na opakující se chaos, je čas ho proměnit v lepší template, ověření nebo runbook.
56
64
  - Odpolední návaznost prověří, jestli váš kontext funguje i bez vás.
57
65
 
@@ -69,7 +77,7 @@ Po tomhle talku se tým nemá vracet k repu s pocitem, že potřebuje jen chyt
69
77
  - pokud ještě nemá workshop skill, teď je chvíle na `harness skill install`, pak `Codex: $workshop setup` nebo `pi: /skill:workshop`
70
78
  - nejdřív krátká mapa v repu
71
79
  - potom krátký plán kroků
72
- - potom první explicitní ověření
80
+ - potom první explicitní ověření, že agent dělá, co jste čekali
73
81
  - teprve potom další feature motion
74
82
 
75
83
  ## Závěr
@@ -77,7 +77,7 @@ Poznámka:
77
77
  Codex a další kódovací agenti se mění měsíčně. Tenhle kit není zmrazená reference — je to startovní harness pro vaši vlastní čtecí praxi.
78
78
 
79
79
  - **Codex CLI release notes** — čtěte při každém vydání. Změny v approval módech a sandboxingu jsou ty nejdůležitější.
80
- - **Simon Willison's blog** ([simonwillison.net](https://simonwillison.net/)) — jeden z nejhustších praktických zdrojů o Codexu, Claude Code a dalších agentech. Denně pracuje s těmito nástroji a zapisuje si to.
80
+ - **Simon Willison's blog** ([simonwillison.net](https://simonwillison.net/)) — praktický zdroj o Codexu, Claude Code a dalších agentech. Píše z vlastní každodenní praxe.
81
81
  - **OpenAI Harness Engineering articles** — viz `docs/learner-reference-gallery.md` pro odkazy.
82
82
  - **Anthropic engineering blog** — když pracujete s Claude Code, sledujte oficiální posts.
83
83
  - **Vlastní `AGENTS.md` jako živý dokument** — každé čtvrtletí si je znovu přečtěte skeptickým okem. Smažte, co už není nosné. Jednoduchost je součást harnessu.
@@ -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í
@@ -32,7 +32,7 @@ Krátký navazující dotaz:
32
32
 
33
33
  - Vytvořili jste `AGENTS.md` v reálném projektu?
34
34
  - Přidali jste build/test příkazy nebo sekci `Done When`?
35
- - Přidali jste další safe move nebo krátký handoff runbook?
35
+ - Přidali jste další bezpečný krok nebo krátký handoff runbook?
36
36
  - Co vám pomohlo a co vás zablokovalo?
37
37
 
38
38
  ## W³ připomínka
@@ -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á.
@@ -36,7 +36,7 @@
36
36
  - V prvním buildu: `template-agents`, brief, plán a první ověření
37
37
  - Před obědem: dopsat další bezpečný krok a použít `workshop analyze`, když si nejste jistí handoffem
38
38
  - Po rotaci: `workshop analyze`, learner kit a challenge cards místo ústního rescue
39
- - Na konci dne: `workshop recap` a `workshop follow-up`
39
+ - Po posledním bloku: `workshop recap` a `workshop follow-up`
40
40
 
41
41
  ## Doporučené příkazy
42
42
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@harness-lab/cli",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
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,87 @@ 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.blank();
223
+
224
+ ui.section("Authentication");
225
+ ui.commandList([
226
+ helpLine("auth login [--auth device|basic|neon]", "Authenticate as a facilitator"),
227
+ helpLine("auth logout", "End the current session"),
228
+ helpLine("auth status", "Check session status"),
229
+ ]);
230
+ ui.blank();
231
+
232
+ ui.section("Workshop — inspect");
233
+ ui.commandList([
234
+ helpLine("workshop status", "Show current state and selected instance"),
235
+ helpLine("workshop current-instance", "Show the locally selected instance"),
236
+ helpLine("workshop select-instance <id> [--clear]", "Pin an instance for subsequent commands"),
237
+ helpLine("workshop list-instances", "List all facilitator-visible instances"),
238
+ helpLine("workshop show-instance <id>", "Inspect one instance in detail"),
239
+ ]);
240
+ ui.blank();
241
+
242
+ ui.section("Workshop — lifecycle");
243
+ ui.commandList([
244
+ helpLine("workshop create-instance [<id>]", "Create a new workshop from a template"),
245
+ helpLine(" [--template-id ID] [--content-lang cs|en]", ""),
246
+ helpLine(" [--event-title TEXT] [--city CITY]", ""),
247
+ helpLine("workshop update-instance <id>", "Update event metadata for an instance"),
248
+ helpLine(" [--content-lang cs|en] [--event-title TEXT]", ""),
249
+ helpLine(" [--city CITY]", ""),
250
+ helpLine("workshop reset-instance <id> [--template-id ID]", "Reset an instance from the blueprint"),
251
+ helpLine("workshop prepare <id>", "Mark an instance as ready for participants"),
252
+ helpLine("workshop remove-instance <id>", "Soft-remove an instance from the list"),
253
+ helpLine("workshop archive [--notes TEXT]", "Snapshot runtime state before reset"),
254
+ ]);
255
+ ui.blank();
256
+
257
+ ui.section("Workshop — live facilitation");
210
258
  ui.commandList([
211
- "harness [--json] <command>",
212
- "harness --help",
213
- "harness --version",
214
- "harness version",
259
+ helpLine("workshop phase set <phase-id>", "Advance the agenda to a phase"),
260
+ helpLine("workshop participant-access [<id>]", "Inspect or rotate the event code"),
261
+ helpLine(" [--rotate] [--code VALUE]", ""),
262
+ helpLine("workshop learnings", "Query the cross-cohort learnings log"),
263
+ helpLine(" [--tag TAG] [--instance ID]", ""),
264
+ helpLine(" [--cohort NAME] [--limit N]", ""),
215
265
  ]);
216
266
  ui.blank();
217
- ui.section("Commands");
267
+
268
+ ui.section("Global flags");
218
269
  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]",
270
+ helpLine("--json", "Output machine-readable JSON"),
271
+ helpLine("--help", "Show this help"),
272
+ helpLine("--version", "Print version"),
237
273
  ]);
274
+ ui.blank();
275
+
276
+ ui.section("Examples");
277
+ ui.commandList([
278
+ helpLine("harness skill install", "Install workshop skill here"),
279
+ helpLine("harness auth login", "Start device-code login"),
280
+ helpLine("harness workshop status", "Check what instance you target"),
281
+ helpLine("harness workshop learnings --tag missing_runbook", "Search learnings by tag"),
282
+ ]);
283
+ ui.blank();
284
+
285
+ ui.paragraph("Documentation: https://github.com/ondrej-svec/harness-lab");
238
286
  }
239
287
 
240
288
  function printVersion(io) {