@winton979/task-cli 1.1.0 → 1.2.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 winton979
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -57,7 +57,7 @@ task --help
57
57
 
58
58
  After initialization, Task CLI creates the `.ai/` workspace and installs workflow skills into both `.claude/skills/` and `.codex/skills/`.
59
59
 
60
- Use `task refresh` in existing projects to remove and reinstall only the workflow skills managed by task-cli. It does not delete your `.ai` briefs, archives, or decision log.
60
+ Use `task refresh` in existing projects to remove and reinstall only the workflow skills managed by task-cli. It does not delete your `.ai` briefs, internal archives, or decision log.
61
61
 
62
62
  Use `task doctor` to check whether the required directories exist, whether managed skills are missing or outdated, and whether the `.gitignore` rules are present.
63
63
 
@@ -70,9 +70,11 @@ Use `task doctor` to check whether the required directories exist, whether manag
70
70
  ```text
71
71
  /task-fast
72
72
 
73
- clarify + brief + implement + validate + archive
73
+ clarify + brief + implement + validate
74
74
 
75
75
  /task-review
76
+ or
77
+ /task-cancel
76
78
  ```
77
79
 
78
80
  ### Larger Requirement
@@ -84,9 +86,9 @@ TASK_READY
84
86
 
85
87
  /task-implement
86
88
 
87
- /task archived
88
-
89
89
  /task-review
90
+ or
91
+ /task-cancel
90
92
  ```
91
93
 
92
94
  ### Bug Fix
@@ -98,9 +100,9 @@ BUG_READY
98
100
 
99
101
  /bug-fix
100
102
 
101
- /bug archived
102
-
103
103
  /bug-review
104
+ or
105
+ /bug-cancel
104
106
  ```
105
107
 
106
108
  ---
@@ -113,12 +115,14 @@ BUG_READY
113
115
  * task-explore
114
116
  * task-implement
115
117
  * task-review
118
+ * task-cancel
116
119
 
117
120
  ### Bug Workflow
118
121
 
119
122
  * bug-explore
120
123
  * bug-fix
121
124
  * bug-review
125
+ * bug-cancel
122
126
 
123
127
  ### Other
124
128
 
@@ -155,27 +159,56 @@ Instead of maintaining large specifications, it focuses on:
155
159
 
156
160
  1. Clarifying requirements before coding
157
161
  2. Capturing execution context in concise briefs
158
- 3. Executing with validation and lightweight archiving
162
+ 3. Executing with validation while archiving automatically in the background
159
163
  4. Reviewing work against acceptance criteria
160
164
  5. Keeping a lightweight decision history
161
165
 
162
166
  The goal is to improve quality without slowing down iteration speed.
163
167
 
168
+ ## Compared with OpenSpec-Style Workflows
169
+
170
+ Task CLI is designed as a lightweight alternative to heavier spec-driven systems such as OpenSpec.
171
+
172
+ Detailed specification workflows can improve alignment, traceability, and consistency. They are often the right choice for large initiatives, cross-team programs, and environments with strong process requirements.
173
+
174
+ The difficulty is that the same level of ceremony does not always fit day-to-day engineering work. For frequent bug fixes, small features, and fast iteration, the process can become heavier than the change itself. When that happens, maintenance overhead increases, documentation quality starts to drift, and teams gradually stop using the workflow as originally intended.
175
+
176
+ Task CLI takes a narrower and more pragmatic approach:
177
+
178
+ * clarify the requirement
179
+ * capture only the minimum useful brief
180
+ * execute against acceptance criteria
181
+ * review the result
182
+ * keep a lightweight decision trail
183
+
184
+ The goal is not to replace specification systems in every context. It is to provide a workflow that people will actually keep using during day-to-day engineering work.
164
185
 
165
- ## Can This Be Simpler?
186
+ ## Strengths and Tradeoffs
166
187
 
167
- Yes. The main simplification is to collapse the old 4-step paths:
188
+ Task CLI is optimized for execution speed and sustained adoption rather than full process coverage.
168
189
 
169
- * `task-explore` now includes brief generation.
170
- * `bug-explore` now includes bug brief generation.
171
- * `task-implement` and `bug-fix` now validate and archive the brief when the work is complete.
190
+ Strengths:
172
191
 
173
- That leaves these practical flows:
192
+ * much lower process overhead for bugs, small features, and short iterations
193
+ * easier to adopt in mature codebases where engineers already know the product context
194
+ * encourages real usage because the workflow is short enough to sustain
195
+ * keeps enough structure to improve clarity without forcing large documents
174
196
 
175
- * Explore only: `/task-explore` or `/bug-explore`
176
- * Execute and archive: `/task-implement` or `/bug-fix`
177
- * Review: `/task-review` or `/bug-review`
178
- * One-shot small work: `/task-fast`
197
+ Tradeoffs:
198
+
199
+ * less suitable for large cross-team initiatives that need formal design traceability
200
+ * relies more on engineer judgment and review quality than a full specification process
201
+ * stores less long-form historical context than a dedicated spec repository
202
+
203
+ ## Recommended Workflow Model
204
+
205
+ Task CLI keeps the user-facing flow short:
206
+
207
+ * `task-fast`
208
+ * `task-explore -> task-implement -> task-review` or `task-cancel`
209
+ * `bug-explore -> bug-fix -> bug-review` or `bug-cancel`
210
+
211
+ The `archive/` directories remain as internal storage. They are not separate user steps in the recommended workflow.
179
212
 
180
213
  ## Upgrading Existing Projects
181
214
 
@@ -188,7 +221,7 @@ task refresh
188
221
  This will:
189
222
 
190
223
  * keep `.ai/tasks`, `.ai/bugs`, and `.ai/decisions`
191
- * remove only these managed skills from `.claude/skills/` and `.codex/skills/`: `task-fast`, `task-explore`, `task-implement`, `task-review`, `bug-explore`, `bug-fix`, `bug-review`, `decision-log`
224
+ * remove only these managed skills from `.claude/skills/` and `.codex/skills/`: `task-fast`, `task-explore`, `task-implement`, `task-review`, `task-cancel`, `bug-explore`, `bug-fix`, `bug-review`, `bug-cancel`, `decision-log`
192
225
  * reinstall the latest versions of those skills
193
226
 
194
227
  This avoids touching unrelated custom skills in the same project.
@@ -199,5 +232,9 @@ Before refreshing, you can inspect the current setup with:
199
232
  task doctor
200
233
  ```
201
234
 
235
+ ## License
236
+
237
+ MIT
238
+
202
239
  > Task CLI does not install Grill Me automatically.
203
240
  > Users remain free to choose any Grill Me compatible implementation.
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@winton979/task-cli",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Lightweight task workflow CLI for AI-assisted development",
5
+ "license": "MIT",
5
6
  "type": "module",
6
7
  "bin": {
7
8
  "task": "./bin/task.js"
package/src/cli.js CHANGED
@@ -26,8 +26,8 @@ Usage:
26
26
 
27
27
  Recommended flows after init:
28
28
  fast: task-fast
29
- task: task-explore -> task-implement -> task-review
30
- bug: bug-explore -> bug-fix -> bug-review`);
29
+ task: task-explore -> task-implement -> task-review | task-cancel
30
+ bug: bug-explore -> bug-fix -> bug-review | bug-cancel`);
31
31
  }
32
32
 
33
33
  switch (cmd) {
package/src/init.js CHANGED
@@ -14,10 +14,10 @@ const GITIGNORE_BLOCK = [
14
14
  const SKILLS = {
15
15
  'task-fast': {
16
16
  name: 'task-fast',
17
- description: 'Fast path for small requirements. Clarify quickly, create the brief, implement, verify, and archive.',
17
+ description: 'Fast path for small requirements. Clarify quickly, create the brief, implement, and verify. Archive automatically on completion.',
18
18
  content: `---
19
19
  name: task-fast
20
- description: Fast path for small requirements. Clarify quickly, create the brief, implement, verify, and archive.
20
+ description: Fast path for small requirements. Clarify quickly, create the brief, implement, and verify. Archive automatically on completion.
21
21
  user-invocable: true
22
22
  ---
23
23
 
@@ -35,7 +35,7 @@ Workflow
35
35
  3. Show the brief before coding.
36
36
  4. If the user does not object, implement immediately.
37
37
  5. Verify the result against the acceptance criteria.
38
- 6. Move the brief to:
38
+ 6. Archive the brief automatically by moving it to:
39
39
 
40
40
  .ai/tasks/archive/YYYY-MM-DD-task-name.md
41
41
 
@@ -138,10 +138,10 @@ TASK_READY
138
138
 
139
139
  'task-implement': {
140
140
  name: 'task-implement',
141
- description: 'Implement the latest active task brief, validate it, and archive it when complete.',
141
+ description: 'Implement the latest active task brief and validate it. Archive automatically when complete.',
142
142
  content: `---
143
143
  name: task-implement
144
- description: Implement the latest active task brief, validate it, and archive it when complete.
144
+ description: Implement the latest active task brief and validate it. Archive automatically when complete.
145
145
  user-invocable: true
146
146
  ---
147
147
 
@@ -158,7 +158,7 @@ Rules
158
158
  5. Avoid unnecessary refactoring.
159
159
  6. State assumptions explicitly.
160
160
  7. Validate the result before stopping.
161
- 8. If the work is complete, move the brief to .ai/tasks/archive/.
161
+ 8. If the work is complete, archive the brief automatically by moving it to .ai/tasks/archive/.
162
162
 
163
163
  Output
164
164
 
@@ -174,18 +174,15 @@ Files modified.
174
174
 
175
175
  How acceptance criteria were satisfied.
176
176
 
177
- ## Archive
178
-
179
- Whether the brief was archived.
180
177
  `,
181
178
  },
182
179
 
183
180
  'task-review': {
184
181
  name: 'task-review',
185
- description: 'Review the latest task implementation against the active or archived task brief.',
182
+ description: 'Review the latest task implementation against the corresponding task brief.',
186
183
  content: `---
187
184
  name: task-review
188
- description: Review the latest task implementation against the active or archived task brief.
185
+ description: Review the latest task implementation against the corresponding task brief.
189
186
  user-invocable: true
190
187
  ---
191
188
 
@@ -228,6 +225,36 @@ Anything not fully implemented.
228
225
  `,
229
226
  },
230
227
 
228
+ 'task-cancel': {
229
+ name: 'task-cancel',
230
+ description: 'Discard the current task analysis output and implementation changes for this attempt.',
231
+ content: `---
232
+ name: task-cancel
233
+ description: Discard the current task analysis output and implementation changes for this attempt.
234
+ user-invocable: true
235
+ ---
236
+
237
+ Purpose
238
+
239
+ Abandon the current task attempt completely.
240
+
241
+ Rules
242
+
243
+ 1. Target only the current task attempt.
244
+ 2. Discard the current task brief and any analysis artifacts created for this attempt.
245
+ 3. Discard code changes made for this attempt.
246
+ 4. Do not archive the task brief.
247
+ 5. Do not keep partial implementation.
248
+ 6. Do not preserve temporary conclusions from this attempt as accepted decisions.
249
+ 7. Do not touch unrelated historical archives, other active briefs, or user-authored changes outside this attempt.
250
+ 8. If the exact changed files are uncertain, stop and ask for confirmation before deleting or reverting anything.
251
+
252
+ Output
253
+
254
+ TASK_CANCELLED
255
+ `,
256
+ },
257
+
231
258
  'bug-explore': {
232
259
  name: 'bug-explore',
233
260
  description: 'Investigate a bug and generate a fix brief in one step, without writing code.',
@@ -294,10 +321,10 @@ BUG_READY
294
321
 
295
322
  'bug-fix': {
296
323
  name: 'bug-fix',
297
- description: 'Fix the latest active bug brief, validate the result, and archive the brief when complete.',
324
+ description: 'Fix the latest active bug brief and validate the result. Archive automatically when complete.',
298
325
  content: `---
299
326
  name: bug-fix
300
- description: Fix the latest active bug brief, validate the result, and archive the brief when complete.
327
+ description: Fix the latest active bug brief and validate the result. Archive automatically when complete.
301
328
  user-invocable: true
302
329
  ---
303
330
 
@@ -314,7 +341,7 @@ Rules
314
341
  5. Preserve existing behavior.
315
342
  6. Explain reasoning.
316
343
  7. Validate the fix before stopping.
317
- 8. If the bug is fixed, move the brief to .ai/bugs/archive/.
344
+ 8. If the bug is fixed, archive the brief automatically by moving it to .ai/bugs/archive/.
318
345
 
319
346
  Output
320
347
 
@@ -330,18 +357,15 @@ Changes made.
330
357
 
331
358
  Verification performed.
332
359
 
333
- ## Archive
334
-
335
- Whether the brief was archived.
336
360
  `,
337
361
  },
338
362
 
339
363
  'bug-review': {
340
364
  name: 'bug-review',
341
- description: 'Review the latest bug fix against the active or archived bug brief.',
365
+ description: 'Review the latest bug fix against the corresponding bug brief.',
342
366
  content: `---
343
367
  name: bug-review
344
- description: Review the latest bug fix against the active or archived bug brief.
368
+ description: Review the latest bug fix against the corresponding bug brief.
345
369
  user-invocable: true
346
370
  ---
347
371
 
@@ -378,6 +402,36 @@ Further improvements.
378
402
  `,
379
403
  },
380
404
 
405
+ 'bug-cancel': {
406
+ name: 'bug-cancel',
407
+ description: 'Discard the current bug analysis output and code changes for this attempt.',
408
+ content: `---
409
+ name: bug-cancel
410
+ description: Discard the current bug analysis output and code changes for this attempt.
411
+ user-invocable: true
412
+ ---
413
+
414
+ Purpose
415
+
416
+ Abandon the current bug-fix attempt completely.
417
+
418
+ Rules
419
+
420
+ 1. Target only the current bug-fix attempt.
421
+ 2. Discard the current bug brief and any analysis artifacts created for this attempt.
422
+ 3. Discard code changes made for this attempt.
423
+ 4. Do not archive the bug brief.
424
+ 5. Do not keep partial fixes.
425
+ 6. Do not preserve temporary conclusions from this attempt as accepted decisions.
426
+ 7. Do not touch unrelated historical archives, other active briefs, or user-authored changes outside this attempt.
427
+ 8. If the exact changed files are uncertain, stop and ask for confirmation before deleting or reverting anything.
428
+
429
+ Output
430
+
431
+ BUG_CANCELLED
432
+ `,
433
+ },
434
+
381
435
  'decision-log': {
382
436
  name: 'decision-log',
383
437
  description: 'Record implementation decisions to .ai/decisions/decisions.md. Append-only, max 10 lines per entry.',
@@ -539,8 +593,8 @@ export function init(cwd, { fs, path, log }) {
539
593
 
540
594
  log.info(`\nTask workflow initialized. Recommended flows:
541
595
  fast: task-fast
542
- task: task-explore -> task-implement -> task-review
543
- bug: bug-explore -> bug-fix -> bug-review
596
+ task: task-explore -> task-implement -> task-review | task-cancel
597
+ bug: bug-explore -> bug-fix -> bug-review | bug-cancel
544
598
  other: decision-log`);
545
599
  }
546
600
 
@@ -573,8 +627,8 @@ export function refresh(cwd, { fs, path, log }) {
573
627
 
574
628
  log.info(`\nTask workflow refreshed. Managed skills reinstalled:
575
629
  fast: task-fast
576
- task: task-explore -> task-implement -> task-review
577
- bug: bug-explore -> bug-fix -> bug-review
630
+ task: task-explore -> task-implement -> task-review | task-cancel
631
+ bug: bug-explore -> bug-fix -> bug-review | bug-cancel
578
632
  other: decision-log`);
579
633
  }
580
634