cowork-flow 0.0.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 (101) hide show
  1. package/README.md +193 -0
  2. package/bin/cowork-flow.js +9 -0
  3. package/package.json +28 -0
  4. package/src/cli.js +61 -0
  5. package/src/commands/init.js +88 -0
  6. package/src/commands/sync.js +33 -0
  7. package/src/commands/update.js +60 -0
  8. package/src/lib/copy-template.js +189 -0
  9. package/src/lib/package-info.js +49 -0
  10. package/src/lib/paths.js +6 -0
  11. package/template/.agent/skills/break-loop/SKILL.md +131 -0
  12. package/template/.agent/skills/check-cross-layer/SKILL.md +158 -0
  13. package/template/.agent/skills/finish-work/SKILL.md +163 -0
  14. package/template/.agent/skills/record-session/SKILL.md +78 -0
  15. package/template/.agent/skills/start/SKILL.md +390 -0
  16. package/template/.agent/skills/update-spec/SKILL.md +335 -0
  17. package/template/.cowork-flow/.version +1 -0
  18. package/template/.cowork-flow/changes/archive/.gitkeep +1 -0
  19. package/template/.cowork-flow/config.yaml +49 -0
  20. package/template/.cowork-flow/plans/.gitkeep +1 -0
  21. package/template/.cowork-flow/scripts/add_session.py +441 -0
  22. package/template/.cowork-flow/scripts/change.py +314 -0
  23. package/template/.cowork-flow/scripts/common/__init__.py +84 -0
  24. package/template/.cowork-flow/scripts/common/config.py +128 -0
  25. package/template/.cowork-flow/scripts/common/developer.py +205 -0
  26. package/template/.cowork-flow/scripts/common/files.py +24 -0
  27. package/template/.cowork-flow/scripts/common/git_context.py +628 -0
  28. package/template/.cowork-flow/scripts/common/paths.py +350 -0
  29. package/template/.cowork-flow/scripts/common/task_utils.py +200 -0
  30. package/template/.cowork-flow/scripts/get_context.py +16 -0
  31. package/template/.cowork-flow/scripts/get_developer.py +26 -0
  32. package/template/.cowork-flow/scripts/init_developer.py +51 -0
  33. package/template/.cowork-flow/scripts/task.py +1378 -0
  34. package/template/.cowork-flow/spec/backend/database-guidelines.md +26 -0
  35. package/template/.cowork-flow/spec/backend/directory-structure.md +27 -0
  36. package/template/.cowork-flow/spec/backend/error-handling.md +20 -0
  37. package/template/.cowork-flow/spec/backend/index.md +36 -0
  38. package/template/.cowork-flow/spec/backend/logging-guidelines.md +20 -0
  39. package/template/.cowork-flow/spec/backend/quality-guidelines.md +24 -0
  40. package/template/.cowork-flow/spec/frontend/component-guidelines.md +19 -0
  41. package/template/.cowork-flow/spec/frontend/directory-structure.md +18 -0
  42. package/template/.cowork-flow/spec/frontend/hook-guidelines.md +17 -0
  43. package/template/.cowork-flow/spec/frontend/index.md +28 -0
  44. package/template/.cowork-flow/spec/frontend/quality-guidelines.md +23 -0
  45. package/template/.cowork-flow/spec/frontend/state-management.md +18 -0
  46. package/template/.cowork-flow/spec/frontend/type-safety.md +18 -0
  47. package/template/.cowork-flow/spec/guides/code-reuse-thinking-guide.md +26 -0
  48. package/template/.cowork-flow/spec/guides/cross-layer-thinking-guide.md +21 -0
  49. package/template/.cowork-flow/spec/guides/index.md +31 -0
  50. package/template/.cowork-flow/spec/guides/pre-implementation-checklist.md +15 -0
  51. package/template/.cowork-flow/tasks/.gitkeep +1 -0
  52. package/template/.cowork-flow/tasks/archive/.gitkeep +1 -0
  53. package/template/.cowork-flow/workflow.md +411 -0
  54. package/template/.cowork-flow/workspace/index.md +95 -0
  55. package/template/.superpowers/brainstorming/SKILL.md +164 -0
  56. package/template/.superpowers/brainstorming/scripts/frame-template.html +214 -0
  57. package/template/.superpowers/brainstorming/scripts/helper.js +88 -0
  58. package/template/.superpowers/brainstorming/scripts/server.cjs +354 -0
  59. package/template/.superpowers/brainstorming/scripts/start-server.sh +148 -0
  60. package/template/.superpowers/brainstorming/scripts/stop-server.sh +56 -0
  61. package/template/.superpowers/brainstorming/spec-document-reviewer-prompt.md +49 -0
  62. package/template/.superpowers/brainstorming/visual-companion.md +287 -0
  63. package/template/.superpowers/dispatching-parallel-agents/SKILL.md +182 -0
  64. package/template/.superpowers/executing-plans/SKILL.md +70 -0
  65. package/template/.superpowers/finishing-a-development-branch/SKILL.md +251 -0
  66. package/template/.superpowers/receiving-code-review/SKILL.md +213 -0
  67. package/template/.superpowers/requesting-code-review/SKILL.md +103 -0
  68. package/template/.superpowers/requesting-code-review/code-reviewer.md +168 -0
  69. package/template/.superpowers/subagent-driven-development/SKILL.md +279 -0
  70. package/template/.superpowers/subagent-driven-development/code-quality-reviewer-prompt.md +25 -0
  71. package/template/.superpowers/subagent-driven-development/implementer-prompt.md +113 -0
  72. package/template/.superpowers/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  73. package/template/.superpowers/systematic-debugging/CREATION-LOG.md +119 -0
  74. package/template/.superpowers/systematic-debugging/SKILL.md +296 -0
  75. package/template/.superpowers/systematic-debugging/condition-based-waiting-example.ts +158 -0
  76. package/template/.superpowers/systematic-debugging/condition-based-waiting.md +115 -0
  77. package/template/.superpowers/systematic-debugging/defense-in-depth.md +122 -0
  78. package/template/.superpowers/systematic-debugging/find-polluter.sh +63 -0
  79. package/template/.superpowers/systematic-debugging/root-cause-tracing.md +169 -0
  80. package/template/.superpowers/systematic-debugging/test-academic.md +14 -0
  81. package/template/.superpowers/systematic-debugging/test-pressure-1.md +58 -0
  82. package/template/.superpowers/systematic-debugging/test-pressure-2.md +68 -0
  83. package/template/.superpowers/systematic-debugging/test-pressure-3.md +69 -0
  84. package/template/.superpowers/test-driven-development/SKILL.md +371 -0
  85. package/template/.superpowers/test-driven-development/testing-anti-patterns.md +299 -0
  86. package/template/.superpowers/using-git-worktrees/SKILL.md +215 -0
  87. package/template/.superpowers/using-superpowers/SKILL.md +117 -0
  88. package/template/.superpowers/using-superpowers/references/codex-tools.md +59 -0
  89. package/template/.superpowers/using-superpowers/references/copilot-tools.md +42 -0
  90. package/template/.superpowers/using-superpowers/references/gemini-tools.md +51 -0
  91. package/template/.superpowers/verification-before-completion/SKILL.md +139 -0
  92. package/template/.superpowers/writing-plans/SKILL.md +152 -0
  93. package/template/.superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
  94. package/template/.superpowers/writing-skills/SKILL.md +655 -0
  95. package/template/.superpowers/writing-skills/anthropic-best-practices.md +1150 -0
  96. package/template/.superpowers/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  97. package/template/.superpowers/writing-skills/graphviz-conventions.dot +172 -0
  98. package/template/.superpowers/writing-skills/persuasion-principles.md +187 -0
  99. package/template/.superpowers/writing-skills/render-graphs.js +168 -0
  100. package/template/.superpowers/writing-skills/testing-skills-with-subagents.md +384 -0
  101. package/template/AGENTS.md +116 -0
@@ -0,0 +1,390 @@
1
+ ---
2
+ name: start
3
+ description: Use when beginning a development session in a project that uses the cowork-flow template
4
+ ---
5
+
6
+ # Start Session
7
+
8
+ Initialize your AI development session and begin working on tasks.
9
+
10
+ ---
11
+
12
+ ## Operation Types
13
+
14
+ | Marker | Meaning | Executor |
15
+ |--------|---------|----------|
16
+ | `[AI]` | Bash scripts or tool calls executed by AI | You (AI) |
17
+ | `[USER]` | Skills executed by user | User |
18
+
19
+ ---
20
+
21
+ ## Initialization `[AI]`
22
+
23
+ ### Step 1: Understand Development Workflow
24
+
25
+ First, read the workflow guide and the project-level collaboration rules:
26
+
27
+ ```bash
28
+ cat .cowork-flow/workflow.md
29
+ cat AGENTS.md
30
+ ```
31
+
32
+ **Follow the instructions in `workflow.md` and `AGENTS.md`** - they contain:
33
+ - Core principles (Read Before Write, Follow Standards, etc.)
34
+ - File system structure
35
+ - Development process
36
+ - Best practices
37
+ - Project-specific collaboration and documentation rules
38
+
39
+ > **Important**:
40
+ > Reusable skills are already part of the template. During project onboarding, put project-specific facts in `AGENTS.md`, `.cowork-flow/workflow.md`, `.cowork-flow/config.yaml`, and `.cowork-flow/spec/` rather than editing `SKILL.md`.
41
+
42
+ ### Step 2: Get Current Context
43
+
44
+ ```bash
45
+ python3 ./.cowork-flow/scripts/get_context.py
46
+ ```
47
+
48
+ This shows: developer identity, git status, current task (if any), active tasks.
49
+
50
+ ### Step 3: Read Guidelines Index
51
+
52
+ ```bash
53
+ for f in .cowork-flow/spec/frontend/index.md .cowork-flow/spec/backend/index.md .cowork-flow/spec/guides/index.md; do
54
+ [ -f "$f" ] && cat "$f"
55
+ done
56
+ ```
57
+
58
+ > **Important**: The index files are navigation — they list the actual guideline files (e.g., `error-handling.md`, `conventions.md`, `mock-strategies.md`).
59
+ > At this step, just read the indexes to understand what's available.
60
+ > When you start actual development, you MUST go back and read the specific guideline files relevant to your task, as listed in the index's Pre-Development Checklist.
61
+
62
+ ### Step 4: Report and Ask
63
+
64
+ Report what you learned and ask: "What would you like to work on?"
65
+
66
+ ---
67
+
68
+ ## Task Classification
69
+
70
+ When user describes a task, classify it:
71
+
72
+ | Type | Criteria | Workflow |
73
+ |------|----------|----------|
74
+ | **Question** | User asks about code, architecture, or how something works | Answer directly |
75
+ | **Trivial Fix** | Typo fix, comment update, single-line change, < 5 minutes | Direct Edit |
76
+ | **Simple Task** | Clear goal, 1-2 files, well-defined scope | Quick confirm → Task Workflow |
77
+ | **Complex Task** | Vague goal, multiple files, architectural decisions | **Brainstorm → Task Workflow** |
78
+
79
+ ### Decision Rule
80
+
81
+ > **If in doubt, use Brainstorm + Task Workflow.**
82
+ >
83
+ > Task Workflow ensures code-specs are injected to the right context, resulting in higher quality code.
84
+ > The overhead is minimal, but the benefit is significant.
85
+
86
+ > **Subtask Decomposition**: If brainstorm reveals multiple independent work items,
87
+ > consider creating subtasks using `--parent` flag or `add-subtask` command.
88
+ > See the brainstorm skill's Step 8 for details.
89
+
90
+ ### Behavior Change Gate
91
+
92
+ Before entering Task Workflow, classify the change as `L0` / `L1` / `L2` using `.cowork-flow/workflow.md`.
93
+
94
+ - `L0`: No external behavior change. Continue with the existing Task Workflow.
95
+ - `L1`: Behavior change in a bounded module. Do **not** go straight to PRD/Research. First run:
96
+ 1. `python3 ./.cowork-flow/scripts/change.py create <slug>`
97
+ 2. `superpowers:brainstorming` to create or complete `proposal/spec`
98
+ 3. `python3 ./.cowork-flow/scripts/change.py validate <slug>`
99
+ 4. `superpowers:writing-plans` to produce the implementation plan
100
+ - `L2`: Same as `L1`, plus required `design.md`. Multi-perspective review happens after implementation in the review gate.
101
+
102
+ Only return to the task workflow after the spec and plan gates are complete.
103
+
104
+ Before Phase 2, always complete this task handoff:
105
+
106
+ 1. Create or update `.cowork-flow/plans/YYYY-MM-DD-<slug>.md` with the execution checklist
107
+ 2. Create or bind a task directory
108
+ 3. Ensure `prd.md` summarizes the approved `proposal/spec/design/plan`
109
+ 4. Add the approved change artifacts and plan into task context
110
+ 5. Treat the plan file as a living execution artifact: keep checkbox state and current execution status synced during implementation, not only at the end
111
+
112
+ - If the task came from **Simple Task**, resume with **Path B Step 2 (Create Task Directory)** and **Step 3 (Write PRD)**, then do the task handoff above and continue to Phase 2.
113
+ - If the task came from **Brainstorm**, reuse the brainstorm-created task directory and PRD, then do the same task handoff and continue with **Path A / Phase 2**.
114
+
115
+ ---
116
+
117
+ ## Question / Trivial Fix
118
+
119
+ For questions or trivial fixes, work directly:
120
+
121
+ 1. Answer question or make the fix
122
+ 2. If code was changed, follow the current session convention for verification, business-code commit or handoff, and `$record-session`
123
+
124
+ ---
125
+
126
+ ## Simple Task
127
+
128
+ For simple, well-defined tasks:
129
+
130
+ 1. Quick confirm: "I understand you want to [goal]. Shall I proceed?"
131
+ 2. If no, clarify and confirm again
132
+ 3. Determine whether the task is `L0`, `L1`, or `L2`.
133
+ 4. **If it is `L1/L2`, complete the Behavior Change Gate first. After that, execute Path B Step 2 and Step 3, complete the task handoff, then continue with Phase 2.**
134
+ 5. **If it is `L0`, execute ALL steps below without stopping. Do NOT ask for additional confirmation between steps.**
135
+ - Create task directory (Phase 1 Path B, Step 2)
136
+ - Write PRD (Step 3)
137
+ - Research codebase (Phase 2, Step 5)
138
+ - Configure context (Step 6)
139
+ - Activate task (Step 7)
140
+ - Implement (Phase 3, Step 8)
141
+ - Check quality (Step 9)
142
+ - Complete (Step 10)
143
+
144
+ ---
145
+
146
+ ## Complex Task - Brainstorm First
147
+
148
+ For complex or vague tasks, **automatically start the brainstorm process** — do NOT skip directly to implementation.
149
+
150
+ See `$brainstorm` for the full process. Summary:
151
+
152
+ 1. **Acknowledge and classify** - State your understanding
153
+ 2. **Create task directory** - Track evolving requirements in `prd.md`
154
+ 3. **Ask questions one at a time** - Update PRD after each answer
155
+ 4. **Propose approaches** - For architectural decisions
156
+ 5. **Confirm final requirements** - Get explicit approval
157
+ 6. **If behavior changes are involved, complete the Behavior Change Gate**
158
+ 7. **Proceed to Task Workflow** - Reuse the brainstorm-created task directory/PRD, complete the task handoff, then continue from Phase 2 with clear requirements and plan
159
+
160
+ ---
161
+
162
+ ## Task Workflow (Development Tasks)
163
+
164
+ **Why this workflow?**
165
+ - Run a dedicated research pass before coding
166
+ - Configure specs in jsonl context files
167
+ - Implement using injected context
168
+ - Verify with a separate check pass
169
+ - Result: Code that follows project conventions automatically
170
+
171
+ ### Overview: Two Entry Points
172
+
173
+ ```
174
+ From Brainstorm (Complex Task):
175
+ PRD confirmed → Research → Configure Context → Activate → Implement → Check → Complete
176
+
177
+ From Simple Task:
178
+ Confirm → Create Task → Write PRD → Research → Configure Context → Activate → Implement → Check → Complete
179
+ ```
180
+
181
+ **Key principle: Research happens AFTER requirements are clear (PRD exists).**
182
+
183
+ ---
184
+
185
+ ### Phase 1: Establish Requirements
186
+
187
+ #### Path A: From Brainstorm (skip to Phase 2)
188
+
189
+ PRD and task directory already exist from brainstorm. Skip directly to Phase 2.
190
+
191
+ #### Path B: From Simple Task
192
+
193
+ **Step 1: Confirm Understanding** `[AI]`
194
+
195
+ Quick confirm:
196
+ - What is the goal?
197
+ - What type of development? (frontend / backend / fullstack)
198
+ - Any specific requirements or constraints?
199
+
200
+ If unclear, ask clarifying questions.
201
+
202
+ **Step 2: Create Task Directory** `[AI]`
203
+
204
+ ```bash
205
+ TASK_DIR=$(python3 ./.cowork-flow/scripts/task.py create "<title>" --slug <name>)
206
+ ```
207
+
208
+ **Step 3: Write PRD** `[AI]`
209
+
210
+ Create `prd.md` in the task directory with:
211
+
212
+ ```markdown
213
+ # <Task Title>
214
+
215
+ ## Goal
216
+ <What we're trying to achieve>
217
+
218
+ ## Requirements
219
+ - <Requirement 1>
220
+ - <Requirement 2>
221
+
222
+ ## Acceptance Criteria
223
+ - [ ] <Criterion 1>
224
+ - [ ] <Criterion 2>
225
+
226
+ ## Technical Notes
227
+ <Any technical decisions or constraints>
228
+ ```
229
+
230
+ ---
231
+
232
+ ### Phase 2: Prepare for Implementation (shared)
233
+
234
+ > Both paths converge here. PRD and task directory must exist before proceeding.
235
+
236
+ **Step 4: Code-Spec Depth Check** `[AI]`
237
+
238
+ If the task touches infra or cross-layer contracts, do not start implementation until code-spec depth is defined.
239
+
240
+ Trigger this requirement when the change includes any of:
241
+ - New or changed command/API signatures
242
+ - Database schema or migration changes
243
+ - Infra integrations (storage, queue, cache, secrets, env contracts)
244
+ - Cross-layer payload transformations
245
+
246
+ Must-have before proceeding:
247
+ - [ ] Target code-spec files to update are identified
248
+ - [ ] Concrete contract is defined (signature, fields, env keys)
249
+ - [ ] Validation and error matrix is defined
250
+ - [ ] At least one Good/Base/Bad case is defined
251
+
252
+ **Step 5: Research the Codebase** `[AI]`
253
+
254
+ Based on the confirmed PRD, run a focused research pass and produce:
255
+
256
+ 1. Relevant spec files in `.cowork-flow/spec/`
257
+ 2. Existing code patterns to follow (2-3 examples)
258
+ 3. Files that will likely need modification
259
+
260
+ Use this output format:
261
+
262
+ ```markdown
263
+ ## Relevant Specs
264
+ - <path>: <why it's relevant>
265
+
266
+ ## Code Patterns Found
267
+ - <pattern>: <example file path>
268
+
269
+ ## Files to Modify
270
+ - <path>: <what change>
271
+ ```
272
+
273
+ **Step 6: Configure Context** `[AI]`
274
+
275
+ Initialize default context:
276
+
277
+ ```bash
278
+ python3 ./.cowork-flow/scripts/task.py init-context "$TASK_DIR" <type>
279
+ # type: backend | frontend | fullstack
280
+ ```
281
+
282
+ Add specs found in your research pass:
283
+
284
+ ```bash
285
+ # For each relevant spec and code pattern:
286
+ python3 ./.cowork-flow/scripts/task.py add-context "$TASK_DIR" implement "<path>" "<reason>"
287
+ python3 ./.cowork-flow/scripts/task.py add-context "$TASK_DIR" check "<path>" "<reason>"
288
+ ```
289
+
290
+ If this task came through the Behavior Change Gate, add the approved artifacts before coding:
291
+
292
+ ```bash
293
+ python3 ./.cowork-flow/scripts/task.py add-context "$TASK_DIR" implement ".cowork-flow/changes/<slug>/proposal.md" "Approved change proposal"
294
+ python3 ./.cowork-flow/scripts/task.py add-context "$TASK_DIR" implement ".cowork-flow/changes/<slug>/specs/.../spec.md" "Approved behavior spec"
295
+ python3 ./.cowork-flow/scripts/task.py add-context "$TASK_DIR" implement ".cowork-flow/changes/<slug>/design.md" "Approved design for L2 changes"
296
+ python3 ./.cowork-flow/scripts/task.py add-context "$TASK_DIR" implement ".cowork-flow/plans/YYYY-MM-DD-<slug>.md" "Approved implementation plan"
297
+ python3 ./.cowork-flow/scripts/task.py add-context "$TASK_DIR" check ".cowork-flow/changes/<slug>/specs/.../spec.md" "Check implementation against approved spec"
298
+ python3 ./.cowork-flow/scripts/task.py add-context "$TASK_DIR" check ".cowork-flow/plans/YYYY-MM-DD-<slug>.md" "Check implementation against approved plan"
299
+ ```
300
+
301
+ **Step 7: Activate Task** `[AI]`
302
+
303
+ ```bash
304
+ python3 ./.cowork-flow/scripts/task.py start "$TASK_DIR"
305
+ ```
306
+
307
+ This sets `.current-task` so hooks can inject context.
308
+
309
+ ---
310
+
311
+ ### Phase 3: Execute (shared)
312
+
313
+ **Step 8: Implement** `[AI]`
314
+
315
+ Implement the task described in `prd.md`.
316
+
317
+ - Follow all specs injected into implement context
318
+ - Keep changes scoped to requirements
319
+ - Run the project verification commands from `AGENTS.md` or `.cowork-flow/config.yaml` before finishing
320
+
321
+ **Step 9: Check Quality** `[AI]`
322
+
323
+ Run a quality pass against check context:
324
+
325
+ - Review all code changes against the specs
326
+ - Fix issues directly
327
+ - Ensure lint and typecheck pass
328
+
329
+ **Step 10: Complete** `[AI]`
330
+
331
+ 1. Verify lint and typecheck pass
332
+ 2. Report what was implemented
333
+ 3. Follow the current session convention for completion:
334
+ - Test the changes
335
+ - Have the agreed executor handle business-code changes according to project policy
336
+ - Run `$record-session` to record this session
337
+
338
+ ---
339
+
340
+ ## Continuing Existing Task
341
+
342
+ If `get_context.py` shows a current task:
343
+
344
+ 1. Read the task's `prd.md` to understand the goal
345
+ 2. Check `task.json` for current status
346
+ 3. Ask user: "Continue working on <task-name>?"
347
+
348
+ If yes, resume from the appropriate step (usually Step 7 or 8).
349
+
350
+ ---
351
+
352
+ ## Skills Reference
353
+
354
+ ### User Skills `[USER]`
355
+
356
+ | Skill | When to Use |
357
+ |---------|-------------|
358
+ | `$start` | Begin a session (this skill) |
359
+ | `$finish-work` | Final verification before handoff or commit |
360
+ | `$record-session` | After task completion and project commit/handoff policy is satisfied |
361
+
362
+ ### AI Scripts `[AI]`
363
+
364
+ | Script | Purpose |
365
+ |--------|---------|
366
+ | `python3 ./.cowork-flow/scripts/get_context.py` | Get session context |
367
+ | `python3 ./.cowork-flow/scripts/task.py create` | Create task directory |
368
+ | `python3 ./.cowork-flow/scripts/task.py init-context` | Initialize jsonl files |
369
+ | `python3 ./.cowork-flow/scripts/task.py add-context` | Add spec to jsonl |
370
+ | `python3 ./.cowork-flow/scripts/task.py start` | Set current task |
371
+ | `python3 ./.cowork-flow/scripts/task.py finish` | Clear current task |
372
+ | `python3 ./.cowork-flow/scripts/task.py archive` | Archive completed task |
373
+
374
+ ### Workflow Phases `[AI]`
375
+
376
+ | Phase | Purpose | Context Source |
377
+ |-------|---------|----------------|
378
+ | research | Analyze codebase | direct repo inspection |
379
+ | implement | Write code | `implement.jsonl` |
380
+ | check | Review & fix | `check.jsonl` |
381
+ | debug | Fix specific issues | `debug.jsonl` |
382
+
383
+ ---
384
+
385
+ ## Key Principle
386
+
387
+ > **Code-spec context is injected, not remembered.**
388
+ >
389
+ > The Task Workflow ensures agents receive relevant code-spec context automatically.
390
+ > This is more reliable than hoping the AI "remembers" conventions.