@winton979/task-cli 1.4.3 → 1.5.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.
Files changed (3) hide show
  1. package/README.md +8 -18
  2. package/package.json +1 -1
  3. package/src/init.js +43 -97
package/README.md CHANGED
@@ -82,17 +82,13 @@ task init
82
82
 
83
83
  After initialization, Task CLI creates the `.ai/` workspace and installs workflow skills into both `.claude/skills/` and `.codex/skills/`.
84
84
 
85
- ### Prerequisites
86
-
87
- Task CLI can use a Grill Me compatible skill for requirement and bug exploration.
88
-
89
- Recommended:
90
-
91
- ```bash
92
- npx add-skill PJ-SBN-593844/skill-grill-me
93
- ```
94
-
95
- If no Grill Me compatible skill is installed, `task-fast`, `task-explore`, and `bug-explore` fall back to built-in clarification prompts.
85
+ ### Exploration Protocol
86
+
87
+ Task CLI embeds the `grilling` primitive from [Matt Pocock's skills collection](https://github.com/mattpocock/skills.git). Its wording is the methodological foundation for exploration, not a runtime dependency.
88
+
89
+ `task-explore` and `bug-explore` preserve the primitive's body verbatim. Their only workflow-specific interpretation of it is that "act on it" means creating the brief. `task-fast` uses a narrower clarification loop so the fast path remains fast.
90
+
91
+ Task CLI neither requires nor installs a companion interviewing skill.
96
92
 
97
93
  ---
98
94
 
@@ -314,13 +310,7 @@ This will:
314
310
 
315
311
  Unrelated custom skills in the same project are left untouched. Inspect the current setup first with `task doctor`.
316
312
 
317
- ---
318
-
319
- something else:
320
- > Task CLI does not install Grill Me automatically.
321
- > Users remain free to choose any Grill Me compatible implementation, and the explore skills fall back to built-in clarification if none is installed.
322
-
323
- ## License
313
+ ## License
324
314
 
325
315
  MIT
326
316
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winton979/task-cli",
3
- "version": "1.4.3",
3
+ "version": "1.5.0",
4
4
  "description": "Lightweight task workflow CLI for AI-assisted development",
5
5
  "license": "MIT",
6
6
  "repository": {
package/src/init.js CHANGED
@@ -13,11 +13,15 @@ const GITIGNORE_BLOCK = [
13
13
  '.ai/bugs/active/*.md',
14
14
  ].join('\n');
15
15
 
16
- const GRILL_ME_HINTS = [
17
- 'grill-me',
18
- 'skill-grill-me',
19
- 'grill me',
20
- ];
16
+ const GRILLING_GUIDANCE = `Grilling
17
+
18
+ Interview me relentlessly about every aspect of this until we reach a shared understanding. Walk down each branch of the decision tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.
19
+
20
+ Ask the questions one at a time, waiting for feedback on each question before continuing. Asking multiple questions at once is bewildering.
21
+
22
+ If a *fact* can be found by exploring the environment (filesystem, tools, etc.), look it up rather than asking me. The *decisions*, though, are mine — put each one to me and wait for my answer.
23
+
24
+ Do not act on it until I confirm we have reached a shared understanding.`;
21
25
 
22
26
  const DECISIONS_READ_GUIDANCE = `Decision Intake
23
27
 
@@ -60,23 +64,24 @@ Handle a small requirement in one continuous workflow with minimal ceremony.
60
64
 
61
65
  Workflow
62
66
 
63
- 1. If a Grill Me compatible skill is available in the current environment, use it for requirement clarification.
64
- 2. If no Grill Me compatible skill is available, clarify the requirement yourself with focused questions just far enough to remove ambiguity.
65
- 3. Read the project code and conventions needed to avoid obvious conflicts.
66
- 4. Read .ai/decisions/decisions.md if it exists and has entries. Pull in only decisions that materially constrain this task.
67
- 5. Before finalizing the brief, perform a Complexity Assessment.
68
- 6. Create a concise task brief and save it to:
67
+ 1. Read the project code and conventions needed to avoid obvious conflicts.
68
+ 2. If a fact can be found by exploring the environment, look it up rather than asking the user.
69
+ 3. Ask only questions whose answers can change the implementation or acceptance criteria. Ask them one at a time, waiting for feedback on each before continuing. For each question, provide your recommended answer.
70
+ 4. Put unresolved decisions to the user; do not make them on the user's behalf.
71
+ 5. Read .ai/decisions/decisions.md if it exists and has entries. Pull in only decisions that materially constrain this task.
72
+ 6. Before finalizing the brief, perform a Complexity Assessment.
73
+ 7. Create a concise task brief and save it to:
69
74
 
70
75
  .ai/tasks/active/YYYY-MM-DD-task-name.md
71
76
 
72
- 7. Show the brief before coding.
73
- 8. If the user does not object, implement immediately.
74
- 9. Verify the result against the acceptance criteria.
75
- 10. Archive the brief automatically by moving it to:
77
+ 8. Show the brief as the fast-path summary of shared understanding, ask the user to confirm it, and stop. Do not code until the user confirms.
78
+ 9. Once the user confirms the brief, implement immediately.
79
+ 10. Verify the result against the acceptance criteria.
80
+ 11. Archive the brief automatically by moving it to:
76
81
 
77
82
  .ai/tasks/archive/YYYY-MM-DD-task-name.md
78
83
 
79
- 11. Summarize the outcome and any follow-up risks.
84
+ 12. Summarize the outcome and any follow-up risks.
80
85
 
81
86
  ${DECISIONS_READ_GUIDANCE}
82
87
 
@@ -123,10 +128,10 @@ TASK_DONE
123
128
 
124
129
  'task-explore': {
125
130
  name: 'task-explore',
126
- description: 'Clarify a requirement and generate the execution brief in one step, without implementing.',
131
+ description: 'Grill the user relentlessly about a requirement; generate an execution brief only after shared understanding, without implementing.',
127
132
  content: `---
128
133
  name: task-explore
129
- description: Clarify a requirement and generate the execution brief in one step, without implementing.
134
+ description: Grill the user relentlessly about a requirement; generate an execution brief only after shared understanding, without implementing.
130
135
  user-invocable: true
131
136
  ---
132
137
 
@@ -136,17 +141,17 @@ Clarify requirements and leave behind a ready-to-execute brief.
136
141
 
137
142
  Workflow
138
143
 
139
- 1. If a Grill Me compatible skill is available in the current environment, use it for requirement exploration.
140
- 2. If no Grill Me compatible skill is available, explore the requirement yourself through focused questions.
141
- 3. Continue until the task is sufficiently understood.
142
- 4. Do not write code.
143
- 5. Do not create implementation details.
144
- 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.
145
- 7. Once the requirement is clear, generate a concise task brief and save it to:
144
+ 1. Grill the requirement using the Grilling section below.
145
+ 2. Do not write code or create implementation details.
146
+ 3. Before writing the brief, inspect .ai/decisions/decisions.md if it exists and has entries. Pull in only decisions that materially constrain this task.
147
+ 4. For this workflow, "act on it" means creating the brief.
148
+ 5. Generate a concise task brief and save it to:
146
149
 
147
150
  .ai/tasks/active/YYYY-MM-DD-task-name.md
148
151
 
149
- 8. Show the saved brief and stop.
152
+ 6. Show the saved brief and stop.
153
+
154
+ ${GRILLING_GUIDANCE}
150
155
 
151
156
  ${DECISIONS_READ_GUIDANCE}
152
157
 
@@ -358,10 +363,10 @@ TASK_CANCELLED
358
363
 
359
364
  'bug-explore': {
360
365
  name: 'bug-explore',
361
- description: 'Investigate a bug and generate a fix brief in one step, without writing code.',
366
+ description: 'Grill the user relentlessly about a bug while investigating its evidence; generate a fix brief only after shared understanding, without writing code.',
362
367
  content: `---
363
368
  name: bug-explore
364
- description: Investigate a bug and generate a fix brief in one step, without writing code.
369
+ description: Grill the user relentlessly about a bug while investigating its evidence; generate a fix brief only after shared understanding, without writing code.
365
370
  user-invocable: true
366
371
  ---
367
372
 
@@ -371,24 +376,24 @@ Investigate a bug and leave behind a ready-to-fix brief.
371
376
 
372
377
  Rules
373
378
 
374
- 1. If a Grill Me compatible skill is available in the current environment, use it for bug exploration.
375
- 2. If no Grill Me compatible skill is available, ask focused questions and drive the investigation yourself.
376
- 3. Do not write code.
377
- 4. Do not suggest fixes before enough evidence exists.
378
- 5. Identify root cause candidates.
379
- 6. Request evidence whenever possible.
380
- 7. Separate:
379
+ 1. Grill the bug using the Grilling section below.
380
+ 2. Investigate the bug and gather reproducible evidence. Do not write code or suggest fixes before enough evidence exists.
381
+ 3. Identify root cause candidates.
382
+ 4. Separate:
381
383
 
382
384
  * observed behavior
383
385
  * expected behavior
384
386
  * assumptions
385
387
 
386
- 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.
387
- 9. Once the bug is sufficiently understood, generate a brief and save it to:
388
+ 5. 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.
389
+ 6. For this workflow, "act on it" means creating the brief.
390
+ 7. Generate a brief and save it to:
388
391
 
389
392
  .ai/bugs/active/YYYY-MM-DD-bug-name.md
390
393
 
391
- 10. Show the saved brief and stop.
394
+ 8. Show the saved brief and stop.
395
+
396
+ ${GRILLING_GUIDANCE}
392
397
 
393
398
  ${DECISIONS_READ_GUIDANCE}
394
399
 
@@ -803,49 +808,6 @@ function skillFilePath(path, cwd, skillRoot, skillName) {
803
808
  return path.join(cwd, skillRoot, skillName, 'SKILL.md');
804
809
  }
805
810
 
806
- function hasGrillMeHint(value) {
807
- const normalized = value.toLowerCase();
808
- return GRILL_ME_HINTS.some((hint) => normalized.includes(hint));
809
- }
810
-
811
- function detectLocalGrillMeSkill(fs, path, cwd, skillRoot) {
812
- const root = path.join(cwd, skillRoot);
813
- if (!fs.existsSync(root)) {
814
- return null;
815
- }
816
-
817
- for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
818
- if (!entry.isDirectory()) {
819
- continue;
820
- }
821
-
822
- if (MANAGED_SKILL_NAMES.includes(entry.name)) {
823
- continue;
824
- }
825
-
826
- if (hasGrillMeHint(entry.name)) {
827
- return entry.name;
828
- }
829
-
830
- const skillPath = path.join(root, entry.name, 'SKILL.md');
831
- if (!fs.existsSync(skillPath)) {
832
- continue;
833
- }
834
-
835
- const content = fs.readFileSync(skillPath, 'utf-8');
836
- const metadata = content
837
- .split('---')
838
- .slice(1, 2)
839
- .join('\n');
840
-
841
- if (hasGrillMeHint(metadata)) {
842
- return entry.name;
843
- }
844
- }
845
-
846
- return null;
847
- }
848
-
849
811
  function logCheck(log, ok, label, detail) {
850
812
  if (ok) {
851
813
  log.chalk.green(` OK ${label}${detail ? ` - ${detail}` : ''}`);
@@ -1056,22 +1018,6 @@ export function doctor(cwd, { fs, path, log }) {
1056
1018
  }
1057
1019
  }
1058
1020
 
1059
- const grillMeFindings = [
1060
- [CLAUDE_SKILLS_DIR, detectLocalGrillMeSkill(fs, path, cwd, CLAUDE_SKILLS_DIR)],
1061
- [CODEX_SKILLS_DIR, detectLocalGrillMeSkill(fs, path, cwd, CODEX_SKILLS_DIR)],
1062
- ];
1063
-
1064
- for (const [skillRoot, skillName] of grillMeFindings) {
1065
- if (skillName) {
1066
- logCheck(log, true, `${skillRoot} Grill Me companion`, `detected ${skillName}`);
1067
- continue;
1068
- }
1069
-
1070
- console.log(chalk.yellow(
1071
- ` WARN ${skillRoot} Grill Me companion - not detected locally; task-fast, task-explore, and bug-explore will use built-in clarification fallback`
1072
- ));
1073
- }
1074
-
1075
1021
  const gitignorePath = path.join(cwd, '.gitignore');
1076
1022
  const gitignore = fs.existsSync(gitignorePath)
1077
1023
  ? fs.readFileSync(gitignorePath, 'utf-8')