@harness-lab/cli 0.2.9 → 0.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.
Files changed (52) hide show
  1. package/README.md +5 -0
  2. package/assets/workshop-bundle/SKILL.md +16 -0
  3. package/assets/workshop-bundle/bundle-manifest.json +46 -54
  4. package/assets/workshop-bundle/content/challenge-cards/deck.md +19 -17
  5. package/assets/workshop-bundle/content/challenge-cards/locales/en/deck.md +7 -5
  6. package/assets/workshop-bundle/content/challenge-cards/print-spec.md +1 -1
  7. package/assets/workshop-bundle/content/codex-craft.md +190 -0
  8. package/assets/workshop-bundle/content/facilitation/codex-setup-verification.md +5 -5
  9. package/assets/workshop-bundle/content/facilitation/master-guide.md +133 -66
  10. package/assets/workshop-bundle/content/project-briefs/code-review-helper.md +9 -9
  11. package/assets/workshop-bundle/content/project-briefs/devtoolbox-cli.md +11 -9
  12. package/assets/workshop-bundle/content/project-briefs/doc-generator.md +10 -8
  13. package/assets/workshop-bundle/content/project-briefs/locales/en/devtoolbox-cli.md +4 -2
  14. package/assets/workshop-bundle/content/project-briefs/locales/en/doc-generator.md +5 -3
  15. package/assets/workshop-bundle/content/project-briefs/locales/en/metrics-dashboard.md +4 -2
  16. package/assets/workshop-bundle/content/project-briefs/locales/en/standup-bot.md +4 -2
  17. package/assets/workshop-bundle/content/project-briefs/metrics-dashboard.md +14 -12
  18. package/assets/workshop-bundle/content/project-briefs/standup-bot.md +11 -9
  19. package/assets/workshop-bundle/content/talks/codex-demo-script.md +12 -10
  20. package/assets/workshop-bundle/content/talks/context-is-king.md +25 -25
  21. package/assets/workshop-bundle/docs/harness-cli-foundation.md +2 -0
  22. package/assets/workshop-bundle/docs/learner-resource-kit.md +37 -37
  23. package/assets/workshop-bundle/materials/coaching-codex.md +76 -0
  24. package/assets/workshop-bundle/materials/locales/en/participant-resource-kit.md +14 -2
  25. package/assets/workshop-bundle/materials/participant-resource-kit.md +23 -11
  26. package/assets/workshop-bundle/workshop-blueprint/README.md +2 -5
  27. package/assets/workshop-bundle/workshop-blueprint/day-structure.md +14 -0
  28. package/assets/workshop-bundle/workshop-skill/analyze-checklist.md +3 -3
  29. package/assets/workshop-bundle/workshop-skill/closing-skill.md +6 -6
  30. package/assets/workshop-bundle/workshop-skill/commands.md +17 -13
  31. package/assets/workshop-bundle/workshop-skill/facilitator.md +33 -0
  32. package/assets/workshop-bundle/workshop-skill/follow-up-package.md +13 -8
  33. package/assets/workshop-bundle/workshop-skill/install.md +8 -8
  34. package/assets/workshop-bundle/workshop-skill/locales/en/commands.md +4 -0
  35. package/assets/workshop-bundle/workshop-skill/locales/en/follow-up-package.md +8 -3
  36. package/assets/workshop-bundle/workshop-skill/locales/en/recap.md +8 -1
  37. package/assets/workshop-bundle/workshop-skill/locales/en/reference.md +20 -3
  38. package/assets/workshop-bundle/workshop-skill/locales/en/setup.md +1 -1
  39. package/assets/workshop-bundle/workshop-skill/recap.md +12 -5
  40. package/assets/workshop-bundle/workshop-skill/reference.md +53 -29
  41. package/assets/workshop-bundle/workshop-skill/setup.md +11 -11
  42. package/assets/workshop-bundle/workshop-skill/template-agents.md +4 -4
  43. package/package.json +1 -1
  44. package/src/client.js +9 -0
  45. package/src/io.js +1 -0
  46. package/src/run-cli.js +197 -0
  47. package/src/skill-install.js +108 -7
  48. package/src/workshop-bundle.js +30 -2
  49. package/assets/workshop-bundle/content/czech-editorial-review-checklist.md +0 -88
  50. package/assets/workshop-bundle/content/style-examples.md +0 -127
  51. package/assets/workshop-bundle/content/style-guide.md +0 -108
  52. package/assets/workshop-bundle/workshop-blueprint/edit-boundaries.md +0 -64
package/README.md CHANGED
@@ -14,6 +14,7 @@ Current shipped scope:
14
14
  - `harness workshop status`
15
15
  - `harness workshop list-instances`
16
16
  - `harness workshop show-instance`
17
+ - `harness workshop participant-access`
17
18
  - `harness workshop create-instance`
18
19
  - `harness workshop update-instance`
19
20
  - `harness workshop reset-instance`
@@ -130,6 +131,9 @@ harness workshop select-instance sample-workshop-demo-orbit
130
131
  harness workshop current-instance
131
132
  harness workshop status
132
133
  harness workshop show-instance sample-workshop-demo-orbit
134
+ harness workshop participant-access
135
+ harness workshop participant-access --rotate
136
+ harness workshop participant-access --rotate --code orbit7-bridge4-shift2
133
137
  harness workshop create-instance sample-workshop-demo-orbit --event-title "Sample Workshop Demo"
134
138
  harness workshop update-instance --room-name Orbit
135
139
  harness workshop reset-instance --template-id blueprint-default
@@ -148,6 +152,7 @@ Targeting model:
148
152
  - `harness workshop current-instance` reports the stored target and resolves its current server state
149
153
  - `harness workshop status` and `harness workshop phase set <phase-id>` use the selected instance when present, otherwise they fall back to deployment default behavior
150
154
  - `harness workshop show-instance`, `update-instance`, `reset-instance`, `prepare`, and `remove-instance` accept an explicit `<instance-id>` but may also use the stored selection as a fallback
155
+ - `harness workshop participant-access` accepts an explicit `<instance-id>` but may also use the stored selection as a fallback
151
156
  - `harness workshop select-instance --clear` removes the stored selection
152
157
  - `HARNESS_WORKSHOP_INSTANCE_ID` remains an environment fallback when no local selection is stored
153
158
 
@@ -243,6 +243,12 @@ Prefer invoking `harness workshop show-instance <instance-id>` over raw API scri
243
243
  Use this when the facilitator needs the full record for one instance rather than the deployment-default runtime status returned by `workshop facilitator status`.
244
244
  If a current instance is already selected, the CLI may omit `<instance-id>` and use the stored target.
245
245
 
246
+ ### `workshop facilitator participant-access`
247
+
248
+ Inspect or rotate the shared participant event code for the current workshop instance.
249
+ Prefer invoking `harness --json workshop participant-access` for inspection and `harness --json workshop participant-access --rotate` to issue a fresh code.
250
+ If the current raw code is no longer recoverable from the hash-only runtime store, issue a new code instead of guessing.
251
+
246
252
  ### `workshop facilitator grant <email> <role>`
247
253
 
248
254
  Grant a Neon Auth user access to the current workshop instance.
@@ -320,6 +326,14 @@ Rules for rich scenes:
320
326
 
321
327
  Archive the current workshop instance with optional notes.
322
328
 
329
+ ### `workshop facilitator learnings`
330
+
331
+ Query the cross-cohort learnings log to review rotation signals from past and current workshops.
332
+ Prefer invoking `harness --json workshop learnings` for machine-readable output.
333
+ Supports flags: `--tag TAG`, `--instance ID`, `--cohort NAME`, `--limit N` (default 20).
334
+ When the facilitator asks for rotation signals, captured observations, or what happened during past handoffs, use this command.
335
+ If the learnings log is empty, say so and suggest capturing the first signal using the rotation capture panel in the facilitator dashboard.
336
+
323
337
  ### `workshop analyze`
324
338
 
325
339
  Review the team's repo against the handoff criteria in `workshop-skill/analyze-checklist.md`.
@@ -349,10 +363,12 @@ Relevant local files:
349
363
  - `workshop-skill/follow-up-package.md`
350
364
  - `workshop-skill/facilitator.md`
351
365
  - `materials/participant-resource-kit.md`
366
+ - `materials/coaching-codex.md`
352
367
  - `docs/learner-resource-kit.md`
353
368
  - `docs/learner-reference-gallery.md`
354
369
  - `content/project-briefs/*.md`
355
370
  - `content/challenge-cards/deck.md`
371
+ - `content/codex-craft.md`
356
372
  - `workshop-blueprint/*`
357
373
  - `docs/workshop-event-context-contract.md`
358
374
  - `docs/harness-cli-foundation.md`
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "manifestVersion": 1,
3
3
  "bundleName": "harness-lab-workshop",
4
- "bundleVersion": "0.2.9",
5
- "contentHash": "671837951cf6679bea1d517c900927aab5d457806695e1a6da25574b8573f325",
4
+ "bundleVersion": "0.3.1",
5
+ "contentHash": "d52937fa7d980cdd71345b725b68bc934e939bc5b48cabd4d5bcfb55da03362f",
6
6
  "files": [
7
7
  {
8
8
  "path": "content/challenge-cards/.gitkeep",
@@ -10,19 +10,19 @@
10
10
  },
11
11
  {
12
12
  "path": "content/challenge-cards/deck.md",
13
- "sha256": "c2828eb5258031351d6d5abd3388b26b0894a9122e88e3203efaccbfd95a3e82"
13
+ "sha256": "1c8b4e3a6ab987dc2e9e5418a32a84b8dd3485b8ee0d7d5dc9dc01394f57e3cc"
14
14
  },
15
15
  {
16
16
  "path": "content/challenge-cards/locales/en/deck.md",
17
- "sha256": "6b6a3882ef31b3bca9f1f1ed43ef4fb2d8340af9879fee4261922fb55f6cd921"
17
+ "sha256": "f519c2dfa66801a90e1dbf8833e73bd03fbb001de9766286f9627750456a0b9b"
18
18
  },
19
19
  {
20
20
  "path": "content/challenge-cards/print-spec.md",
21
- "sha256": "be7ecfdae9ada4145272f12e2d6018ccde7cfaeb9f48feb58aca7da7236815c0"
21
+ "sha256": "0c6bc2953d6296b8901705d938a29c1ef859490e53cc265fe401bb9585611e16"
22
22
  },
23
23
  {
24
- "path": "content/czech-editorial-review-checklist.md",
25
- "sha256": "23539ba8b2c6ed193cfadc7ad0f0f75e99b2926ebff5beade5df9789e6071fcf"
24
+ "path": "content/codex-craft.md",
25
+ "sha256": "d75b15cf97c4ab7f4918e09fff0efbe204d141f7127ca09d9a446a128c8efaaf"
26
26
  },
27
27
  {
28
28
  "path": "content/facilitation/.gitkeep",
@@ -30,11 +30,11 @@
30
30
  },
31
31
  {
32
32
  "path": "content/facilitation/codex-setup-verification.md",
33
- "sha256": "0d7e36a8f2b8c68939997b117f1b5cf1538a5b9e27f2d18948a1ac407543de8e"
33
+ "sha256": "d137a5e729a1d443713a9e8431bffe169a1058d3e64c298688a6b7924fbdf3a8"
34
34
  },
35
35
  {
36
36
  "path": "content/facilitation/master-guide.md",
37
- "sha256": "845adbcf9284cedd589d461b40ae1cd336d816b92bcc239df4574148a57b263a"
37
+ "sha256": "b5e107e88ab335aaa8870f51cf9c8b8dadb619d3b0f61dab087dacdcdef4c136"
38
38
  },
39
39
  {
40
40
  "path": "content/project-briefs/.gitkeep",
@@ -42,15 +42,15 @@
42
42
  },
43
43
  {
44
44
  "path": "content/project-briefs/code-review-helper.md",
45
- "sha256": "3e174ff0d097fe132088774042f9db58c9c2494613d66950bdd423116bd7986d"
45
+ "sha256": "96bbbef60ab0ff93ad4aa3858852886329139a25ce9f375bc4cc57ad706b7c98"
46
46
  },
47
47
  {
48
48
  "path": "content/project-briefs/devtoolbox-cli.md",
49
- "sha256": "867ba1b28413fcf43a95cc247ec07656f31b2fdc7bf4512fd5b4316a31f0e27b"
49
+ "sha256": "ce0b09a5e77be19f8ddb2ba6a43137c3cc2a415512d247971186e846dd018888"
50
50
  },
51
51
  {
52
52
  "path": "content/project-briefs/doc-generator.md",
53
- "sha256": "3f3bea866c68a927916d90fa3e387ceccdd174290944bc83db7b89d43f3ba7a0"
53
+ "sha256": "48b8298be1e14e962055ac6d157be2728aa96fc71109e7ee833a6c56dab64731"
54
54
  },
55
55
  {
56
56
  "path": "content/project-briefs/locales/en/code-review-helper.md",
@@ -58,35 +58,27 @@
58
58
  },
59
59
  {
60
60
  "path": "content/project-briefs/locales/en/devtoolbox-cli.md",
61
- "sha256": "cb7a92f20fa0565611feb9f24eb65aafc4a7b151a32de42c93d33b93049f161e"
61
+ "sha256": "3dd5e35524170feda7fa5e73d6b331d1bed88dd8c5966525d361fd1152802cb0"
62
62
  },
63
63
  {
64
64
  "path": "content/project-briefs/locales/en/doc-generator.md",
65
- "sha256": "5ff49a57e51c030b34385709ab7519a5d8e19cd98a1e3a5b26603a7eb59c02e3"
65
+ "sha256": "b9f5b61dd21d867dc231bc5cf29ef1f493a9a208f55fc0f840b22302cd6890de"
66
66
  },
67
67
  {
68
68
  "path": "content/project-briefs/locales/en/metrics-dashboard.md",
69
- "sha256": "ff6b429001ea4ab2d9c23fbdfe02c5daaaf413d52609f9dabc365902f2ad063a"
69
+ "sha256": "6ae0a048ba0692f9a4b88f4fce90be7ea9cf8a28f551b59870f4862d6e5785a5"
70
70
  },
71
71
  {
72
72
  "path": "content/project-briefs/locales/en/standup-bot.md",
73
- "sha256": "bc3972786dac4298607c63e15262cf5330c7e7fcf754e5df64e8fae081f5b44b"
73
+ "sha256": "bd9aff3ac09e4866b10e90685e348e041dfe8cdbd8a65c17871f5d3b5f2240d0"
74
74
  },
75
75
  {
76
76
  "path": "content/project-briefs/metrics-dashboard.md",
77
- "sha256": "a678058b6515fec4acba5d288bb71a725dfe9e75320efa11a475d63492db14f6"
77
+ "sha256": "40c0d09c02fb20c97c0f99088641de20fa966b17089f6f7701a7808814b31c55"
78
78
  },
79
79
  {
80
80
  "path": "content/project-briefs/standup-bot.md",
81
- "sha256": "bf3af5bd1c72b5d4f3f5639c82d8e28dfbd4b470b0181833a2fff6e12eb99221"
82
- },
83
- {
84
- "path": "content/style-examples.md",
85
- "sha256": "c8e62493e119995fca1c738584b864506bc838203b1adad008c37b6f6ec57c50"
86
- },
87
- {
88
- "path": "content/style-guide.md",
89
- "sha256": "ec9a49e040efbc6c365eb264bd3452fdf1906f141f358ff28d2e0e3360648d28"
81
+ "sha256": "df9abc9d7bc8283d30d1c09fb412f9e072a980782c0b622747b13744b2a81c84"
90
82
  },
91
83
  {
92
84
  "path": "content/talks/.gitkeep",
@@ -94,15 +86,15 @@
94
86
  },
95
87
  {
96
88
  "path": "content/talks/codex-demo-script.md",
97
- "sha256": "4f40188a8d3ccaddf44b89b39178c7e9cfb53298a8803815f91dce204181a9c2"
89
+ "sha256": "d5ff639fde21e47606a81aeae6e2b135d2063c073a8dd5717a0386546b9b77cc"
98
90
  },
99
91
  {
100
92
  "path": "content/talks/context-is-king.md",
101
- "sha256": "0bb48497b458474a546c351118ad455c00ad997c9efc0e227b388f81dd0b55e3"
93
+ "sha256": "31fb6a02037c50e0b3fa2ae4bc39f658924bd164279fb490fc192d604763ff9f"
102
94
  },
103
95
  {
104
96
  "path": "docs/harness-cli-foundation.md",
105
- "sha256": "cff448e5c1ee4e7129724e4f8294add35cd1efb621c83182b341a1b7e5a16b86"
97
+ "sha256": "10311d3caf8cec304d5d1694eac66623f06c100990d6f5c4d1dd1f4ba8a24bd8"
106
98
  },
107
99
  {
108
100
  "path": "docs/learner-reference-gallery.md",
@@ -110,7 +102,7 @@
110
102
  },
111
103
  {
112
104
  "path": "docs/learner-resource-kit.md",
113
- "sha256": "c1c35a7896a835a49599688993f9782ad09e4f1c012b7c2b8d60b90b826eab1b"
105
+ "sha256": "1bfad4ee7514b76f9ad6943157224b345359588748ffffb7b93f2f8b70c8af06"
114
106
  },
115
107
  {
116
108
  "path": "docs/locales/en/learner-reference-gallery.md",
@@ -124,17 +116,21 @@
124
116
  "path": "docs/workshop-event-context-contract.md",
125
117
  "sha256": "a7706a398ea5250537fb34323c4371ea2a7db15e477aec3a7893e6089fcd281f"
126
118
  },
119
+ {
120
+ "path": "materials/coaching-codex.md",
121
+ "sha256": "2390be079acde89b16380cdd0904fac2cbefcb9aa11c1fe256330b2dc2362ba9"
122
+ },
127
123
  {
128
124
  "path": "materials/locales/en/participant-resource-kit.md",
129
- "sha256": "1d8b2fbf019db86c56db9cd001965f97985461c79cd615cd861562f336b175fb"
125
+ "sha256": "02c7d6bde0c0662fdfdd0a8baed8c93f2a3c722c1a59336e4862f0d8f8490fbe"
130
126
  },
131
127
  {
132
128
  "path": "materials/participant-resource-kit.md",
133
- "sha256": "19564e2e1156f60654e07a1c965f87668a8cb78cab5f9d06b1e1127ce812f13c"
129
+ "sha256": "d7cd7db05429faf7af570e33401cb5788d663e06c984f193596c14d2d8a12a5b"
134
130
  },
135
131
  {
136
132
  "path": "SKILL.md",
137
- "sha256": "d1e242a857f61bc2fae29c74a9e0efbd1ba0ed5beb25087dbaeffabc5f53b4a5"
133
+ "sha256": "0188da9de8f517a09dc4d0e2eb14f395aa465048253bf0c719995e8a232a33e2"
138
134
  },
139
135
  {
140
136
  "path": "workshop-blueprint/agenda.json",
@@ -146,11 +142,7 @@
146
142
  },
147
143
  {
148
144
  "path": "workshop-blueprint/day-structure.md",
149
- "sha256": "ffecae258211cef2430112ca25e1ff59658cac729ea2a07b9cac48e9a2a6244e"
150
- },
151
- {
152
- "path": "workshop-blueprint/edit-boundaries.md",
153
- "sha256": "d5a2b6039ff9d3acc5b3a58698289817a29d52af4058034f00bc188db6f5d84d"
145
+ "sha256": "22d6fec0422751439bd10049028ee12d140599707dbc6df248b4ff8517ee0c15"
154
146
  },
155
147
  {
156
148
  "path": "workshop-blueprint/operator-guide.md",
@@ -158,7 +150,7 @@
158
150
  },
159
151
  {
160
152
  "path": "workshop-blueprint/README.md",
161
- "sha256": "badb477ecfef7df163ec41c72c39e04bcde2a5a723c1b01bf2e91ed38924e903"
153
+ "sha256": "e5cc8a87576988ce724b7ffacd86a4276aa6733bd4b9037d1f560a58da048308"
162
154
  },
163
155
  {
164
156
  "path": "workshop-blueprint/teaching-spine.md",
@@ -170,63 +162,63 @@
170
162
  },
171
163
  {
172
164
  "path": "workshop-skill/analyze-checklist.md",
173
- "sha256": "b8ec5bb13a5ec25f0d3b8cbd60295c0b290aaae195d833956cd906092efc945d"
165
+ "sha256": "b1b5af58fc18f8400677a964eb3c1970015284d63101683fc8232bbea6cf8871"
174
166
  },
175
167
  {
176
168
  "path": "workshop-skill/closing-skill.md",
177
- "sha256": "e83e381216fad93356b94da89ca2525e01978d13005f2b0f11cf5ed32382971a"
169
+ "sha256": "db23689de38b1ebfc2d9dde5387c5386a774cc6e90ab3e6c95f7749601d6abb7"
178
170
  },
179
171
  {
180
172
  "path": "workshop-skill/commands.md",
181
- "sha256": "932305291e1fc943308f218a5d2714f43a2fea471f4702fe5c94192ed3cbc1e8"
173
+ "sha256": "d0af2bcc53c9752be3b013da002c22d4a8c7a09dea1995075b82550947141736"
182
174
  },
183
175
  {
184
176
  "path": "workshop-skill/facilitator.md",
185
- "sha256": "525fc9fdad22cf42b47854ff9ad90579d728daf2c4ac484aba13f93193eb56d3"
177
+ "sha256": "b8c9e1c01ddb314e45d8d2c3a7460bac53a48ba2321eaf6518e4b08436d88895"
186
178
  },
187
179
  {
188
180
  "path": "workshop-skill/follow-up-package.md",
189
- "sha256": "a8c9e847ac1c7dd03bc044ab4d82f8ce18f83c48b665aee3723e64487f845963"
181
+ "sha256": "74b8232f54b663d8ba9a97485c898ef0e8cffd5b5423831627ee7fe94d1cca44"
190
182
  },
191
183
  {
192
184
  "path": "workshop-skill/install.md",
193
- "sha256": "2bb08f93523348de834d1e7004ef4603905c8d036247037e2111153cd0fea76b"
185
+ "sha256": "4e356194b0dbe114f71ec3661e1b4a4c323cdaa5efedac977f28629b4db66772"
194
186
  },
195
187
  {
196
188
  "path": "workshop-skill/locales/en/commands.md",
197
- "sha256": "17856fa19a44c3336709186cba171505db4b503d11bc16ad2fbc49f67d6c78a0"
189
+ "sha256": "596af69cff67b770c284b4485c94bc39b511a60f3ff1b2b34f91f2c58a9f8b03"
198
190
  },
199
191
  {
200
192
  "path": "workshop-skill/locales/en/follow-up-package.md",
201
- "sha256": "c3d4b0057ddc7a2a50713b6a01e7a3564b4e8668118464e19f932d2baa7a81a0"
193
+ "sha256": "f941c29394f143b9e78d2d54ffb3e0643e421c310329ead784a13e788c8d8caf"
202
194
  },
203
195
  {
204
196
  "path": "workshop-skill/locales/en/recap.md",
205
- "sha256": "68141bac34417fbc8669ebd2e998658dcb66a2a8d1df6cf8ac8d2f449baacdae"
197
+ "sha256": "58329809e3400599a3b187f89dcae4aac939737b786389ed6c893540aa8e8249"
206
198
  },
207
199
  {
208
200
  "path": "workshop-skill/locales/en/reference.md",
209
- "sha256": "5269750632ab577f9373cd84ae57741b11364cfbd9a05d6ac7dd8de555236b53"
201
+ "sha256": "2e941f974ae86c79131770d40302eec0e7968e217f36d8ff166065c7819c47b3"
210
202
  },
211
203
  {
212
204
  "path": "workshop-skill/locales/en/setup.md",
213
- "sha256": "b5efeee9bb2ee1ada3ab2c86ae47c63afd51534fe58a849f0584384737150375"
205
+ "sha256": "3b77f4ca8d7eedf6d2ad01635c6727fd50fe658520b93f0bb1ae9c605ad62c31"
214
206
  },
215
207
  {
216
208
  "path": "workshop-skill/recap.md",
217
- "sha256": "9310f61f5adcace4c97b249d0f27e3a423b5b3a278ec6f2440bf7a66d04a3058"
209
+ "sha256": "fa242bbb17d5305fda2b3c08a8da14744f60f6895985bbbbb1604c4c1ad4c8b4"
218
210
  },
219
211
  {
220
212
  "path": "workshop-skill/reference.md",
221
- "sha256": "2023dabca1aba04a539152131e8cec2eb832c0e1107e2bb808bd8b296159bbdb"
213
+ "sha256": "fe7d1c5f32d2a88b4673f565fda8bb389c4fe3b2a50aad5e2a9fafef7f75d658"
222
214
  },
223
215
  {
224
216
  "path": "workshop-skill/setup.md",
225
- "sha256": "ef67c05751f2c48182b834314e411fc912d0ec99f7cb28fab540534e2a07096c"
217
+ "sha256": "8a9a66372b49d504b5df45e0df3eac2835ef02ce79b7db1078fc85a928a36d5d"
226
218
  },
227
219
  {
228
220
  "path": "workshop-skill/template-agents.md",
229
- "sha256": "07dd6ee5a017a0af01bf3bdcc465f06a9d8701851a413e805d29cbb22a7d991a"
221
+ "sha256": "a8647455ac66b79107d120258591e5e96cef394ed1b2acdb8a2ec4669469c5fe"
230
222
  }
231
223
  ]
232
224
  }
@@ -1,38 +1,40 @@
1
1
  # Challenge Cards
2
2
 
3
- Karty nejsou body navíc. Jsou to malé zásahy, které zlepšují způsob práce s agentem i kvalitu handoffu.
3
+ Karty nejsou body navíc. Jsou to malé zásahy, které zlepšují způsob práce s agentem i kvalitu handoffu.
4
4
 
5
- ## Context Engineering
5
+ ## Před obědem: postavte pracovní systém
6
6
 
7
- - `Vytvořte AGENTS.md jako mapu` — sepište cíl, build/test příkazy, trvalá pravidla a kam má další tým sáhnout jako první.
7
+ - `Vytvořte AGENTS.md jako mapu` — sepište cíl, build/test příkazy, trvalá pravidla a kam má další tým sáhnout jako první.
8
8
  - `Přidejte build/test příkazy` — agent musí umět ověřit výsledek bez ručního dovysvětlování.
9
- - `Napište skill pro code review` — formalizujte jednu review rutinu, kterou by uměl použít i cizí tým.
9
+ - `Napište skill pro code review` — formalizujte jednu review rutinu, kterou by uměl použít i cizí tým.
10
10
  - `Přesuňte pravidlo z hovoru do repa` — vše, co už tým řekl dvakrát nahlas, převeďte do `AGENTS.md`, README, runbooku nebo testu.
11
11
 
12
- ## Workflow
12
+ ## Po rotaci: opravte signál, ne jen feature
13
13
 
14
- - `Použijte /plan před kódováním` — ukažte, z jakého plánu tým vycházel, co z něj opravdu plní a jaký je další bezpečný krok.
15
- - `Rozdělte práci do více vláken` — zkuste dvě nezávislé linie práce a jednoho člověka na integraci.
14
+ - `Použijte /plan před kódováním` — ukažte, z jakého plánu kroků tým vycházel, co z něj opravdu plní a jaký je další bezpečný krok.
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
- - `Přidejte nejmenší užitečné ověření` — vytvořte RED test, tracer bullet nebo jednoduchý browser check dřív, než agent dostane víc autonomie.
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.
19
+ - `Opravte jeden slabý signál v repu` — README, AGENTS.md, plán, runbook nebo check.
18
20
 
19
21
  ## Advanced
20
22
 
21
- - `Spusťte 2 paralelní Codex sessions` — rozdělte problém na dvě nezávislé části a porovnejte výstupy.
22
- - `Vytvořte runbook pro deployment` — i kdyby deploy zůstal jen simulovaný.
23
- - `Napište AGENTS.md pro podsložku` — ukažte, že kontext může být globální i lokální.
24
- - `Zaveďte garbage collection` — najděte jednu opakující se formu chaosu a proměňte ji v check, template nebo pravidlo.
23
+ - `Spusťte 2 paralelní Codex sessions` — rozdělte problém na dvě nezávislé části a porovnejte výstupy.
24
+ - `Vytvořte runbook pro deployment` — i kdyby deploy zůstal jen simulovaný.
25
+ - `Napište AGENTS.md pro podsložku` — ukažte, že kontext může být globální i lokální.
26
+ - `Zaveďte garbage collection` — najděte jednu opakující se formu chaosu a proměňte ji v check, template nebo pravidlo.
25
27
 
26
28
  ## Meta
27
29
 
28
30
  - `Přesuňte trvalé pravidlo z promptu do AGENTS.md`.
29
31
  - `Přidejte sekci Done When ke každému tasku`.
30
32
  - `Napište README pro tým po rotaci, ne pro sebe`.
31
- - `Zapište, co je skutečně ověřené` — odlište hotové, rozpracované a jen předpokládané.
33
+ - `Zapište, co je skutečně ověřené` — odlište hotové, rozpracované a jen předpokládané.
32
34
 
33
- ## Jak s kartami pracovat
35
+ ## Jak s kartami pracovat
34
36
 
35
- - Před obědem má každý tým splnit aspoň jednu kartu z části `Context Engineering`.
36
- - Před rotací má být v repu dohledatelné, co bylo opravdu ověřeno a jaký je další bezpečný krok.
37
- - Po rotaci má každý tým splnit aspoň jednu kartu z `Workflow`.
37
+ - Před obědem má každý tým splnit aspoň jednu kartu z části `Před obědem: postavte pracovní systém`.
38
+ - Před rotací má být v repu dohledatelné, co bylo opravdu ověřeno a jaký je další bezpečný krok.
39
+ - Po rotaci má každý tým splnit aspoň jednu kartu z `Po rotaci: opravte signál, ne jen feature`.
38
40
  - Ostatní karty jsou dobrovolné. Berte je jako stretch cíle nebo inspiraci, když nevíte, co zlepšit dál.
@@ -2,19 +2,21 @@
2
2
 
3
3
  These cards are not bonus points. They are small interventions that improve both the way of working with the agent and the quality of the handoff.
4
4
 
5
- ## Context Engineering
5
+ ## Before lunch: build the working system
6
6
 
7
7
  - `Create AGENTS.md as a map` - write down the goal, build and test commands, durable rules, and where the next team should look first.
8
8
  - `Add build/test commands` - the agent must be able to verify the result without manual backfilling.
9
9
  - `Write a code review skill` - formalize one review routine that another team could use too.
10
10
  - `Move one rule from conversation into the repo` - anything the team has said out loud twice should be turned into `AGENTS.md`, README, a runbook, or a test.
11
11
 
12
- ## Workflow
12
+ ## After rotation: fix the signal, not only the feature
13
13
 
14
14
  - `Use /plan before coding` - show which plan the team is working from, what is actually being executed, and what the next safe move is.
15
15
  - `Split the work into multiple threads` - try two independent work streams and one person on integration.
16
16
  - `Delegate a task and come back to check it in 10 minutes` - do not jump into every agent step; inspect the outcome instead.
17
- - `Add the smallest useful verification` - create a RED test, tracer bullet, or simple browser check before the agent gets more autonomy.
17
+ - `Add the smallest useful verification` - write the done criteria as an executable check (unit test, tracer bullet, or simple browser check) before the agent gets more autonomy.
18
+ - `Write the post-handoff diagnosis` - name what helped, what was missing, and what the next safe move is.
19
+ - `Fix one weak repo signal` - README, AGENTS.md, plan, runbook, or check.
18
20
 
19
21
  ## Advanced
20
22
 
@@ -32,7 +34,7 @@ These cards are not bonus points. They are small interventions that improve both
32
34
 
33
35
  ## How to use the cards
34
36
 
35
- - Before lunch, every team should complete at least one `Context Engineering` card.
37
+ - Before lunch, every team should complete at least one `Before lunch: build the working system` card.
36
38
  - Before rotation, the repo should clearly show what was actually verified and what the next safe move is.
37
- - After rotation, every team should complete at least one `Workflow` card.
39
+ - After rotation, every team should complete at least one `After rotation: fix the signal, not only the feature` card.
38
40
  - The other cards are optional. Treat them as stretch goals or prompts for what to improve next.
@@ -17,7 +17,7 @@
17
17
 
18
18
  1. nahoře název karty
19
19
  2. pod ním kategorie
20
- 3. 2-3 věty zadání
20
+ 3. 23 věty zadání
21
21
  4. dole malý štítek:
22
22
  - `Před obědem`
23
23
  - `Po rotaci`
@@ -0,0 +1,190 @@
1
+ # Codex Craft
2
+
3
+ > Tool-specific fluency to sit on top of the agent-agnostic harness method.
4
+
5
+ Harness Lab teaches a method that transfers across coding agents: Codex, pi, Claude Code, Cursor, Aider. The method is agent-agnostic by design. This document is the other half: the **Codex-specific craft** that the method assumes you already know, but that nobody teaches you in order.
6
+
7
+ If something in this doc contradicts the live Codex documentation, trust the live docs. This doc is a teaching artifact, not a specification. Last verified against Codex CLI in April 2026 — re-verify before each cohort.
8
+
9
+ ---
10
+
11
+ ## 1. What the harness actually is in Codex
12
+
13
+ In Codex, the "harness" is the union of four things:
14
+
15
+ 1. **The repo context the model can see.** `AGENTS.md`, files you name, files it reads on its own, the diff you built up this session.
16
+ 2. **The tool affordances the model can reach.** Shell access, file edits, network calls, Playwright probes. Each affordance has an approval posture you chose.
17
+ 3. **The approval and sandbox posture you picked when you started the session.** This determines what Codex can do without asking you.
18
+ 4. **The feedback loop.** Tests, type checks, compiler errors, your review. This is how the agent learns it made a mistake in this session.
19
+
20
+ All four are yours to engineer. None of them are optional. When a harness feels "off", it's almost always because one of these four is underspecified.
21
+
22
+ ---
23
+
24
+ ## 2. Approval modes — pick deliberately, not by default
25
+
26
+ Codex CLI sessions start with an approval posture. The common modes are:
27
+
28
+ - **Suggest** — Codex proposes every shell command or file edit and waits for your `y/n`. Maximum control, maximum friction. Good for unfamiliar repos or risky work (migrations, production-adjacent changes).
29
+ - **Auto-edit** — Codex can edit files without asking, but still asks before running shell commands. This is the right default for most feature work in a repo you trust.
30
+ - **Full-auto** (sometimes called "dangerously") — Codex can edit files and run shell commands without asking, inside the configured sandbox. Fastest; appropriate only when the sandbox is actually restrictive and the work is reversible.
31
+
32
+ **Craft rule:** pick the approval mode *before* you start, based on the blast radius of the work — not during, because the mood of the session shouldn't drive safety posture. Write the mode into your `AGENTS.md` as a note for the next agent.
33
+
34
+ **Common trap:** raising to full-auto for speed, then forgetting to lower it for the next task. Get in the habit of naming the current mode out loud, the way a pilot names airspeed.
35
+
36
+ ---
37
+
38
+ ## 3. Sandboxing — what "isolated" actually means
39
+
40
+ Codex runs shell commands inside a sandbox. The sandbox constrains which directories are writable, whether network is allowed, and which binaries are callable. Exact defaults change between versions; what matters is the *posture* you should take:
41
+
42
+ - **Assume the sandbox is part of the harness.** If it allows network and the task doesn't need network, narrow it. If it allows writes outside the repo and you don't need that, narrow it. Unused affordances are silent drift risks.
43
+ - **Don't ask Codex to weaken its own sandbox.** If a step needs more capability, exit the session, reconfigure, and re-enter with the wider posture explicitly declared. Silent posture drift is the single most common "why did the agent do that" moment.
44
+ - **Document the sandbox assumption in `AGENTS.md`.** One line: "This repo expects Codex with file writes inside `src/` and `tests/` only, no network, shell limited to npm/node." The next agent — human or AI — needs this to know what is load-bearing.
45
+
46
+ ---
47
+
48
+ ## 4. Context window as a resource, not a design aesthetic
49
+
50
+ The model has a large context window. You do not have a large budget for putting things into it.
51
+
52
+ **What this means in practice:**
53
+
54
+ - **Not everything belongs in-context.** `AGENTS.md` should be a map — a short directory of deeper sources — not an encyclopedia. If it's 400 lines, it's a manual, and manuals don't fit in working memory.
55
+ - **Progressive disclosure beats eager loading.** Point at files; let the agent read them when needed. A reference is cheaper than a copy.
56
+ - **Long sessions decay.** After dozens of turns, constraints from the top of the session are in danger of being silently forgotten. Re-surface rules before they matter, not after the agent violates them.
57
+ - **The expensive prompt isn't the one you wrote. It's the one the agent is holding right now.** Every turn, the agent is re-reading the entire session. If there's noise in turn 5, it's still there in turn 50.
58
+
59
+ **Craft rule:** treat context budget the way a performance engineer treats latency — as a constraint you measure and optimize, not a free resource you assume. The harness is partly a budget discipline.
60
+
61
+ ---
62
+
63
+ ## 5. Long-horizon drift and how to catch it
64
+
65
+ Long-horizon drift is when the agent gradually stops honoring a constraint you set early in the session, because that constraint has scrolled out of its effective attention. It is the signature failure mode of longer Codex work.
66
+
67
+ **Symptoms:**
68
+
69
+ - The agent starts adding `any` types in a repo that explicitly requires strict typing.
70
+ - The agent recreates a utility you told it to import from an existing module.
71
+ - The agent silently stops writing tests for a kind of change it tested earlier.
72
+ - The agent uses the wrong naming convention for the third of three similar files.
73
+
74
+ **The harness move is not "remind the agent more loudly." It is:**
75
+
76
+ 1. **Put the constraint in a place the agent re-reads.** `AGENTS.md`, a pre-commit check, a test that fails loudly if the convention is broken. Don't rely on the constraint surviving in the scrollback.
77
+ 2. **Add a short re-anchor prompt before risky steps.** "Before you implement this, re-read `AGENTS.md` and state the three rules that apply to this change." This is a cheap, reliable drift detector.
78
+ 3. **Watch for the moment the agent starts "improvising" around a missing pattern.** That usually means it can't find the pattern any more, not that the pattern doesn't exist.
79
+
80
+ **Craft rule:** drift is cheaper to prevent with repo artifacts than to correct with more prompting. Every time you correct the same drift twice, encode the constraint.
81
+
82
+ ---
83
+
84
+ ## 6. Before and after — a representative prompt pair
85
+
86
+ The following is a **representative** comparison, not a live transcript. It is constructed from patterns commonly observed in Harness Lab cohorts. Your actual output will differ; the shape of the difference is what matters.
87
+
88
+ ### The underspecified ask
89
+
90
+ > Add a dashboard route that shows workshop instances with their current phase and team count. Make it look nice.
91
+
92
+ What typically happens:
93
+
94
+ - The agent picks a styling library it guesses is used in the repo (often wrong).
95
+ - It invents a data shape for "instances" instead of reading the existing model.
96
+ - It adds a route at a plausible but not conventional path.
97
+ - It writes no test, because "make it look nice" did not ask for one.
98
+ - You end up with 400 lines of code that almost fit and that you now have to reverse-engineer to reject.
99
+
100
+ ### The specified ask
101
+
102
+ > **Goal:** Add a dashboard route listing workshop instances with their current phase and team count.
103
+ >
104
+ > **Context:** The instance model lives in `dashboard/lib/workshop-store.ts`. The existing route pattern is in `dashboard/app/workshops/page.tsx`. Styling uses Tailwind + the components under `dashboard/components/ui/`. Do not introduce a new styling library.
105
+ >
106
+ > **Constraints:**
107
+ > - Read-only route. No mutations.
108
+ > - Must work in file-mode storage (local dev) and neon-mode (production).
109
+ > - Follow the existing route naming convention in `dashboard/app/`.
110
+ > - If the instance list is empty, render the existing `EmptyState` component, not a bespoke fallback.
111
+ >
112
+ > **Done when:**
113
+ > - The new page renders the expected columns.
114
+ > - An e2e test in `dashboard/e2e/` loads the page and asserts at least one instance row when the demo data is present.
115
+ > - Running `npm run build` in `dashboard/` produces no new TypeScript errors.
116
+ >
117
+ > Before you implement, read the existing route file and list the three patterns you're going to reuse. Do not start writing until I confirm.
118
+
119
+ What typically happens:
120
+
121
+ - The agent stops and reads the referenced files.
122
+ - It lists the patterns it found. You catch any misreading in 30 seconds, before any code.
123
+ - It proposes a plan. You either confirm or redirect — cheap.
124
+ - It implements against the stated done criteria.
125
+ - It runs the test and the build before claiming the work is finished.
126
+ - The work either lands correctly in the first pass, or the feedback loop (test, build, review) catches the gap without you reading every line.
127
+
128
+ **The difference isn't the wordcount.** It's that the second ask makes the agent's working context match your working context. The harness is what makes that match possible.
129
+
130
+ ---
131
+
132
+ ## 7. A failure-recovery moment
133
+
134
+ This is the single thing missing from most agent demos: what happens when the agent drifts, and how the harness catches it.
135
+
136
+ **Scenario (representative, reconstructed from a cohort session):**
137
+
138
+ A team asked Codex to add a new `facilitator` role to an auth middleware. Codex implemented the change, ran the tests, and reported success. The tests were green. The dashboard worked in dev. Everything looked fine.
139
+
140
+ The continuation team, the next afternoon, opened the repo and read `AGENTS.md`. One line said: "Any change to auth middleware requires a corresponding update to `docs/adr/` with a rationale." There was no new ADR. The team ran a grep for the new role and found it used only in the middleware — not in the one place in the dashboard that branches on role. The middleware change worked in tests because the test fixtures only exercised the happy path.
141
+
142
+ **What the harness caught:**
143
+
144
+ - The ADR rule in `AGENTS.md` caught the missing documentation.
145
+ - The continuation team's "read first, diagnose second" discipline caught the incomplete usage.
146
+ - Neither caught it by "prompting better." Both caught it because the repo carried constraints the morning team had encoded, and the afternoon team had a ritual for reading them.
147
+
148
+ **The morning team's mistake wasn't prompting. It was trusting green tests as a completion signal in a repo where the real completion criteria lived in a doc they didn't re-read.** The fix is never "write a sharper prompt next time." The fix is either a test that would have failed, a rule that would have blocked merge, or a ritual that would have forced the check. All three are harness moves.
149
+
150
+ ---
151
+
152
+ ## 8. Tool selection — when to reach for what
153
+
154
+ Harness Lab is agent-agnostic, but in practice you will pick a specific tool for each task. Heuristics:
155
+
156
+ - **Codex CLI** — best for repo work with fast local iteration, especially when you want a sandbox and shell access. Strong for code generation, refactoring, debugging inside a repo you trust.
157
+ - **Claude Code** — best for long, stateful sessions where you want the model to reason about the full shape of a problem and remember decisions across many turns. Strong for architecture work, careful reviews, careful migrations.
158
+ - **pi** — best for terminal-native work that needs multi-model flexibility. Strong when you want to compare outputs or keep the harness lightweight and scriptable.
159
+ - **Cursor / IDE-native tools** — best for fast edit-edit-edit loops inside a single file or small module, where you want the model's suggestions inline and do not need agentic control flow.
160
+ - **Aider** — best for tightly-scoped edits against a known set of files, with git commits per turn.
161
+
162
+ **Craft rule:** pick the tool based on the *shape* of the task, not the one you happen to have open. Every tool has an implicit harness; picking the tool is picking the harness.
163
+
164
+ **None of this means you should switch tools mid-workshop.** Harness Lab cohorts should pick one tool for the day (usually Codex) so the learning accumulates. This section is about Monday morning, not about Saturday's workshop.
165
+
166
+ ---
167
+
168
+ ## 9. How to keep learning after today
169
+
170
+ The Codex ecosystem ships new capabilities monthly. What's documented here will be partly outdated within the next release cycle. **Do not treat this doc as a frozen reference.** Treat it as a starting harness for your own reading practice:
171
+
172
+ - Read the official Codex CLI release notes when they ship. The safety and approval posture changes there are the ones that matter most.
173
+ - Subscribe to one practitioner newsletter who uses these tools daily (Simon Willison's blog is a dense source; there are others).
174
+ - When you discover a failure mode in your own work, write it down in your own team's `AGENTS.md` or a runbook. Your team's harness should learn from your team's failures, not just from this doc.
175
+ - Every quarter, re-read your `AGENTS.md` files with a skeptical eye. Delete anything that is no longer load-bearing. Simplicity is part of the harness.
176
+
177
+ ---
178
+
179
+ ## 10. The one-line summary
180
+
181
+ You cannot prompt your way out of a bad harness. You can, however, engineer a harness that makes prompting mostly unnecessary.
182
+
183
+ ---
184
+
185
+ ## See also
186
+
187
+ - [`coaching-codex.md`](../materials/coaching-codex.md) — one-page recipe card for the conversational moves that force plan-first work.
188
+ - [`talks/context-is-king.md`](talks/context-is-king.md) — the workshop talk that introduces the method.
189
+ - [`challenge-cards/deck.md`](challenge-cards/deck.md) — small interventions that install the habits during the build phases.
190
+ - [`../workshop-blueprint/day-structure.md`](../workshop-blueprint/day-structure.md) — the full day architecture and the north-star question.