@winton979/task-cli 1.2.1 → 1.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.
- package/README.md +20 -1
- package/package.json +1 -1
- package/src/init.js +110 -12
package/README.md
CHANGED
|
@@ -46,6 +46,8 @@ Compatible Grill Me implementations may also work.
|
|
|
46
46
|
|
|
47
47
|
If no Grill Me compatible skill is installed, `task-fast`, `task-explore`, and `bug-explore` fall back to built-in clarification prompts.
|
|
48
48
|
|
|
49
|
+
When `.ai/decisions/decisions.md` contains real entries, those skills should inspect it before finalizing a brief and pull in only the decisions that materially constrain the current task or bug.
|
|
50
|
+
|
|
49
51
|
---
|
|
50
52
|
|
|
51
53
|
## Usage
|
|
@@ -129,6 +131,7 @@ BUG_READY
|
|
|
129
131
|
### Other
|
|
130
132
|
|
|
131
133
|
* decision-log
|
|
134
|
+
* decision-sweep-weekly
|
|
132
135
|
|
|
133
136
|
---
|
|
134
137
|
|
|
@@ -153,6 +156,20 @@ BUG_READY
|
|
|
153
156
|
|
|
154
157
|
---
|
|
155
158
|
|
|
159
|
+
## Weekly Decision Sweep
|
|
160
|
+
|
|
161
|
+
Calling `/decision-log` after every task is easy to forget. As a lower-friction alternative, run `decision-sweep-weekly` once per week (Friday is a natural fit):
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
/decision-sweep-weekly
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
The skill scans archived task and bug briefs from the past 7 days, judges which ones contain a decision worth keeping (cross-task impact, rejected alternatives, counter-intuitive choices, externally driven calls, or instructive cancellations), drafts the entries, and waits for confirmation before appending to `.ai/decisions/decisions.md`.
|
|
168
|
+
|
|
169
|
+
Use `decision-log` for in-the-moment recording and `decision-sweep-weekly` for periodic cleanup. Either alone is enough; using both is fine.
|
|
170
|
+
|
|
171
|
+
The decisions file is intentionally narrow. It is meant to hold durable project invariants and reusable constraints, not a running transcript of every local implementation choice.
|
|
172
|
+
|
|
156
173
|
## Philosophy
|
|
157
174
|
|
|
158
175
|
Task CLI is intentionally lightweight.
|
|
@@ -167,6 +184,8 @@ Instead of maintaining large specifications, it focuses on:
|
|
|
167
184
|
|
|
168
185
|
The goal is to improve quality without slowing down iteration speed.
|
|
169
186
|
|
|
187
|
+
That decision history is meant to be selectively reusable. Explore and fast-path skills should consult it to avoid violating existing project decisions, but only the parts that materially constrain the current work belong in the new brief.
|
|
188
|
+
|
|
170
189
|
## Compared with OpenSpec-Style Workflows
|
|
171
190
|
|
|
172
191
|
Task CLI is designed as a lightweight alternative to heavier spec-driven systems such as OpenSpec.
|
|
@@ -223,7 +242,7 @@ task refresh
|
|
|
223
242
|
This will:
|
|
224
243
|
|
|
225
244
|
* keep `.ai/tasks`, `.ai/bugs`, and `.ai/decisions`
|
|
226
|
-
* 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`
|
|
245
|
+
* 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`, `decision-sweep-weekly`
|
|
227
246
|
* reinstall the latest versions of those skills
|
|
228
247
|
|
|
229
248
|
This avoids touching unrelated custom skills in the same project.
|
package/package.json
CHANGED
package/src/init.js
CHANGED
|
@@ -19,6 +19,17 @@ const GRILL_ME_HINTS = [
|
|
|
19
19
|
'grill me',
|
|
20
20
|
];
|
|
21
21
|
|
|
22
|
+
const DECISIONS_READ_GUIDANCE = `Decision Intake
|
|
23
|
+
|
|
24
|
+
Before finalizing the brief, inspect .ai/decisions/decisions.md if it exists and contains real entries beyond the title.
|
|
25
|
+
|
|
26
|
+
Use it narrowly:
|
|
27
|
+
|
|
28
|
+
* extract only decisions that materially constrain this task
|
|
29
|
+
* ignore unrelated historical notes
|
|
30
|
+
* treat the file as a source of durable project invariants, not as a second specification
|
|
31
|
+
* if relevant decisions exist, summarize them briefly in Context or Constraints instead of copying them verbatim`;
|
|
32
|
+
|
|
22
33
|
const SKILLS = {
|
|
23
34
|
'task-fast': {
|
|
24
35
|
name: 'task-fast',
|
|
@@ -37,18 +48,22 @@ Workflow
|
|
|
37
48
|
|
|
38
49
|
1. If a Grill Me compatible skill is available in the current environment, use it for requirement clarification.
|
|
39
50
|
2. If no Grill Me compatible skill is available, clarify the requirement yourself with focused questions just far enough to remove ambiguity.
|
|
40
|
-
3.
|
|
51
|
+
3. Read the project code and conventions needed to avoid obvious conflicts.
|
|
52
|
+
4. Read .ai/decisions/decisions.md if it exists and has entries. Pull in only decisions that materially constrain this task.
|
|
53
|
+
5. Create a concise task brief and save it to:
|
|
41
54
|
|
|
42
55
|
.ai/tasks/active/YYYY-MM-DD-task-name.md
|
|
43
56
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
57
|
+
6. Show the brief before coding.
|
|
58
|
+
7. If the user does not object, implement immediately.
|
|
59
|
+
8. Verify the result against the acceptance criteria.
|
|
60
|
+
9. Archive the brief automatically by moving it to:
|
|
48
61
|
|
|
49
62
|
.ai/tasks/archive/YYYY-MM-DD-task-name.md
|
|
50
63
|
|
|
51
|
-
|
|
64
|
+
10. Summarize the outcome and any follow-up risks.
|
|
65
|
+
|
|
66
|
+
${DECISIONS_READ_GUIDANCE}
|
|
52
67
|
|
|
53
68
|
Task Brief Format
|
|
54
69
|
|
|
@@ -105,11 +120,14 @@ Workflow
|
|
|
105
120
|
3. Continue until the task is sufficiently understood.
|
|
106
121
|
4. Do not write code.
|
|
107
122
|
5. Do not create implementation details.
|
|
108
|
-
6.
|
|
123
|
+
6. Before writing the brief, inspect .ai/decisions/decisions.md if it exists and has entries. Pull in only decisions that materially constrain this task.
|
|
124
|
+
7. Once the requirement is clear, generate a concise task brief and save it to:
|
|
109
125
|
|
|
110
126
|
.ai/tasks/active/YYYY-MM-DD-task-name.md
|
|
111
127
|
|
|
112
|
-
|
|
128
|
+
8. Show the saved brief and stop.
|
|
129
|
+
|
|
130
|
+
${DECISIONS_READ_GUIDANCE}
|
|
113
131
|
|
|
114
132
|
Task Brief Format
|
|
115
133
|
|
|
@@ -292,11 +310,14 @@ Rules
|
|
|
292
310
|
* expected behavior
|
|
293
311
|
* assumptions
|
|
294
312
|
|
|
295
|
-
8.
|
|
313
|
+
8. Before writing the brief, inspect .ai/decisions/decisions.md if it exists and has entries. Pull in only decisions that materially constrain the observed behavior, expected behavior, or likely root cause.
|
|
314
|
+
9. Once the bug is sufficiently understood, generate a brief and save it to:
|
|
296
315
|
|
|
297
316
|
.ai/bugs/active/YYYY-MM-DD-bug-name.md
|
|
298
317
|
|
|
299
|
-
|
|
318
|
+
10. Show the saved brief and stop.
|
|
319
|
+
|
|
320
|
+
${DECISIONS_READ_GUIDANCE}
|
|
300
321
|
|
|
301
322
|
Bug Brief Format
|
|
302
323
|
|
|
@@ -456,6 +477,8 @@ Purpose
|
|
|
456
477
|
|
|
457
478
|
Record important implementation decisions.
|
|
458
479
|
|
|
480
|
+
Only record decisions that are likely to matter beyond a single task. Good candidates are durable constraints, architecture boundaries, rejected alternatives someone may retry later, externally forced choices, and intentional behavior that otherwise looks incorrect.
|
|
481
|
+
|
|
459
482
|
Save Location
|
|
460
483
|
|
|
461
484
|
.ai/decisions/decisions.md
|
|
@@ -485,6 +508,79 @@ Requirements
|
|
|
485
508
|
* Maximum 10 lines per decision
|
|
486
509
|
* Append only
|
|
487
510
|
* Keep concise
|
|
511
|
+
`,
|
|
512
|
+
},
|
|
513
|
+
|
|
514
|
+
'decision-sweep-weekly': {
|
|
515
|
+
name: 'decision-sweep-weekly',
|
|
516
|
+
description: 'Weekly sweep of recent task and bug briefs to decide which deserve a decision-log entry. Proposes entries for confirmation before appending.',
|
|
517
|
+
content: `---
|
|
518
|
+
name: decision-sweep-weekly
|
|
519
|
+
description: Weekly sweep of recent task and bug briefs to decide which deserve a decision-log entry. Proposes entries for confirmation before appending.
|
|
520
|
+
user-invocable: true
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
Purpose
|
|
524
|
+
|
|
525
|
+
Batch-review the past week of work and sediment only the decisions that outlive a single task. Replaces per-task reminders with one weekly pass.
|
|
526
|
+
|
|
527
|
+
When to Run
|
|
528
|
+
|
|
529
|
+
Run once per week, ideally on Friday. May also run ad-hoc after a busy stretch.
|
|
530
|
+
|
|
531
|
+
Workflow
|
|
532
|
+
|
|
533
|
+
1. Scan briefs created in the last 7 days under .ai/tasks/archive/ and .ai/bugs/archive/. Filter by filename date prefix YYYY-MM-DD. If a brief lacks a date prefix, fall back to filesystem mtime.
|
|
534
|
+
2. For cancelled briefs in either archive, treat the abandonment itself as potential decision material.
|
|
535
|
+
3. Evaluate each brief against the Sediment Conditions below.
|
|
536
|
+
4. For each candidate, draft a decision entry using the four-section format.
|
|
537
|
+
5. Present a single review list: every scanned brief with a verdict (write / skip / insufficient info), then the proposed drafts grouped at the end.
|
|
538
|
+
6. Do NOT append anything yet. Wait for the user to confirm which drafts to keep, edit, or drop.
|
|
539
|
+
7. Only after confirmation, append the approved entries to .ai/decisions/decisions.md, oldest first, under the matching YYYY-MM-DD section heading.
|
|
540
|
+
8. Report what was appended and what was skipped.
|
|
541
|
+
|
|
542
|
+
Sediment Conditions
|
|
543
|
+
|
|
544
|
+
A brief becomes a decision entry if it satisfies any of:
|
|
545
|
+
|
|
546
|
+
* Cross-task impact: the choice constrains how future tasks must be written.
|
|
547
|
+
* A concrete alternative was rejected and someone could plausibly pick it later.
|
|
548
|
+
* Counter-intuitive choice: code reads like an anti-pattern but is intentional.
|
|
549
|
+
* Externally driven: compliance, performance, compatibility, or a third-party API limit forced the call.
|
|
550
|
+
* A cancelled attempt whose failure is itself a useful conclusion.
|
|
551
|
+
|
|
552
|
+
Skip Conditions
|
|
553
|
+
|
|
554
|
+
* Affects only the implementation detail of one task.
|
|
555
|
+
* A temporary or unsettled conclusion.
|
|
556
|
+
* A bare fact with no decision behind it.
|
|
557
|
+
|
|
558
|
+
Entry Format
|
|
559
|
+
|
|
560
|
+
## YYYY-MM-DD
|
|
561
|
+
|
|
562
|
+
### Problem
|
|
563
|
+
|
|
564
|
+
What issue was encountered.
|
|
565
|
+
|
|
566
|
+
### Decision
|
|
567
|
+
|
|
568
|
+
What was chosen.
|
|
569
|
+
|
|
570
|
+
### Reason
|
|
571
|
+
|
|
572
|
+
Why this choice was made.
|
|
573
|
+
|
|
574
|
+
### Alternatives Considered
|
|
575
|
+
|
|
576
|
+
What alternatives were rejected.
|
|
577
|
+
|
|
578
|
+
Requirements
|
|
579
|
+
|
|
580
|
+
* Maximum 10 lines per decision
|
|
581
|
+
* Append only
|
|
582
|
+
* One date section per day; multiple decisions on the same day stack under the same heading
|
|
583
|
+
* Never edit or delete prior entries
|
|
488
584
|
`,
|
|
489
585
|
},
|
|
490
586
|
};
|
|
@@ -649,7 +745,8 @@ export function init(cwd, { fs, path, log }) {
|
|
|
649
745
|
fast: task-fast
|
|
650
746
|
task: task-explore -> task-implement -> task-review | task-cancel
|
|
651
747
|
bug: bug-explore -> bug-fix -> bug-review | bug-cancel
|
|
652
|
-
other: decision-log
|
|
748
|
+
other: decision-log
|
|
749
|
+
sweep: decision-sweep-weekly`);
|
|
653
750
|
}
|
|
654
751
|
|
|
655
752
|
export function refresh(cwd, { fs, path, log }) {
|
|
@@ -683,7 +780,8 @@ export function refresh(cwd, { fs, path, log }) {
|
|
|
683
780
|
fast: task-fast
|
|
684
781
|
task: task-explore -> task-implement -> task-review | task-cancel
|
|
685
782
|
bug: bug-explore -> bug-fix -> bug-review | bug-cancel
|
|
686
|
-
other: decision-log
|
|
783
|
+
other: decision-log
|
|
784
|
+
sweep: decision-sweep-weekly`);
|
|
687
785
|
}
|
|
688
786
|
|
|
689
787
|
export function doctor(cwd, { fs, path, log }) {
|