@winton979/task-cli 1.1.1 → 1.2.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/LICENSE +21 -0
- package/README.md +58 -17
- package/package.json +2 -1
- package/src/cli.js +2 -2
- package/src/init.js +155 -25
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
|
@@ -10,7 +10,7 @@ Designed for:
|
|
|
10
10
|
|
|
11
11
|
Task CLI provides a lightweight alternative to heavyweight spec-driven workflows by combining:
|
|
12
12
|
|
|
13
|
-
* Requirement clarification (
|
|
13
|
+
* Requirement clarification (prefer Grill Me, fallback built in)
|
|
14
14
|
* Brief generation
|
|
15
15
|
* Implementation
|
|
16
16
|
* Review
|
|
@@ -34,7 +34,7 @@ task init
|
|
|
34
34
|
|
|
35
35
|
## Prerequisites
|
|
36
36
|
|
|
37
|
-
Task CLI
|
|
37
|
+
Task CLI can use a Grill Me compatible skill for requirement and bug exploration.
|
|
38
38
|
|
|
39
39
|
Recommended:
|
|
40
40
|
|
|
@@ -44,6 +44,8 @@ npx add-skill PJ-SBN-593844/skill-grill-me
|
|
|
44
44
|
|
|
45
45
|
Compatible Grill Me implementations may also work.
|
|
46
46
|
|
|
47
|
+
If no Grill Me compatible skill is installed, `task-fast`, `task-explore`, and `bug-explore` fall back to built-in clarification prompts.
|
|
48
|
+
|
|
47
49
|
---
|
|
48
50
|
|
|
49
51
|
## Usage
|
|
@@ -59,7 +61,7 @@ After initialization, Task CLI creates the `.ai/` workspace and installs workflo
|
|
|
59
61
|
|
|
60
62
|
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
63
|
|
|
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.
|
|
64
|
+
Use `task doctor` to check whether the required directories exist, whether managed skills are missing or outdated, whether a local Grill Me companion was detected, and whether the `.gitignore` rules are present.
|
|
63
65
|
|
|
64
66
|
---
|
|
65
67
|
|
|
@@ -73,6 +75,8 @@ Use `task doctor` to check whether the required directories exist, whether manag
|
|
|
73
75
|
clarify + brief + implement + validate
|
|
74
76
|
↓
|
|
75
77
|
/task-review
|
|
78
|
+
or
|
|
79
|
+
/task-cancel
|
|
76
80
|
```
|
|
77
81
|
|
|
78
82
|
### Larger Requirement
|
|
@@ -85,6 +89,8 @@ TASK_READY
|
|
|
85
89
|
/task-implement
|
|
86
90
|
↓
|
|
87
91
|
/task-review
|
|
92
|
+
or
|
|
93
|
+
/task-cancel
|
|
88
94
|
```
|
|
89
95
|
|
|
90
96
|
### Bug Fix
|
|
@@ -97,6 +103,8 @@ BUG_READY
|
|
|
97
103
|
/bug-fix
|
|
98
104
|
↓
|
|
99
105
|
/bug-review
|
|
106
|
+
or
|
|
107
|
+
/bug-cancel
|
|
100
108
|
```
|
|
101
109
|
|
|
102
110
|
---
|
|
@@ -109,12 +117,14 @@ BUG_READY
|
|
|
109
117
|
* task-explore
|
|
110
118
|
* task-implement
|
|
111
119
|
* task-review
|
|
120
|
+
* task-cancel
|
|
112
121
|
|
|
113
122
|
### Bug Workflow
|
|
114
123
|
|
|
115
124
|
* bug-explore
|
|
116
125
|
* bug-fix
|
|
117
126
|
* bug-review
|
|
127
|
+
* bug-cancel
|
|
118
128
|
|
|
119
129
|
### Other
|
|
120
130
|
|
|
@@ -157,21 +167,50 @@ Instead of maintaining large specifications, it focuses on:
|
|
|
157
167
|
|
|
158
168
|
The goal is to improve quality without slowing down iteration speed.
|
|
159
169
|
|
|
170
|
+
## Compared with OpenSpec-Style Workflows
|
|
171
|
+
|
|
172
|
+
Task CLI is designed as a lightweight alternative to heavier spec-driven systems such as OpenSpec.
|
|
173
|
+
|
|
174
|
+
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.
|
|
175
|
+
|
|
176
|
+
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.
|
|
177
|
+
|
|
178
|
+
Task CLI takes a narrower and more pragmatic approach:
|
|
179
|
+
|
|
180
|
+
* clarify the requirement
|
|
181
|
+
* capture only the minimum useful brief
|
|
182
|
+
* execute against acceptance criteria
|
|
183
|
+
* review the result
|
|
184
|
+
* keep a lightweight decision trail
|
|
185
|
+
|
|
186
|
+
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.
|
|
187
|
+
|
|
188
|
+
## Strengths and Tradeoffs
|
|
189
|
+
|
|
190
|
+
Task CLI is optimized for execution speed and sustained adoption rather than full process coverage.
|
|
160
191
|
|
|
161
|
-
|
|
192
|
+
Strengths:
|
|
162
193
|
|
|
163
|
-
|
|
194
|
+
* much lower process overhead for bugs, small features, and short iterations
|
|
195
|
+
* easier to adopt in mature codebases where engineers already know the product context
|
|
196
|
+
* encourages real usage because the workflow is short enough to sustain
|
|
197
|
+
* keeps enough structure to improve clarity without forcing large documents
|
|
164
198
|
|
|
165
|
-
|
|
166
|
-
* `bug-explore` now includes bug brief generation.
|
|
167
|
-
* `task-implement` and `bug-fix` now validate the work and archive the brief automatically when complete.
|
|
199
|
+
Tradeoffs:
|
|
168
200
|
|
|
169
|
-
|
|
201
|
+
* less suitable for large cross-team initiatives that need formal design traceability
|
|
202
|
+
* relies more on engineer judgment and review quality than a full specification process
|
|
203
|
+
* stores less long-form historical context than a dedicated spec repository
|
|
170
204
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
205
|
+
## Recommended Workflow Model
|
|
206
|
+
|
|
207
|
+
Task CLI keeps the user-facing flow short:
|
|
208
|
+
|
|
209
|
+
* `task-fast`
|
|
210
|
+
* `task-explore -> task-implement -> task-review` or `task-cancel`
|
|
211
|
+
* `bug-explore -> bug-fix -> bug-review` or `bug-cancel`
|
|
212
|
+
|
|
213
|
+
The `archive/` directories remain as internal storage. They are not separate user steps in the recommended workflow.
|
|
175
214
|
|
|
176
215
|
## Upgrading Existing Projects
|
|
177
216
|
|
|
@@ -184,18 +223,20 @@ task refresh
|
|
|
184
223
|
This will:
|
|
185
224
|
|
|
186
225
|
* keep `.ai/tasks`, `.ai/bugs`, and `.ai/decisions`
|
|
187
|
-
* 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`
|
|
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`
|
|
188
227
|
* reinstall the latest versions of those skills
|
|
189
228
|
|
|
190
229
|
This avoids touching unrelated custom skills in the same project.
|
|
191
230
|
|
|
192
|
-
The `archive/` directories remain as internal storage. They are not separate user steps in the recommended workflow.
|
|
193
|
-
|
|
194
231
|
Before refreshing, you can inspect the current setup with:
|
|
195
232
|
|
|
196
233
|
```bash
|
|
197
234
|
task doctor
|
|
198
235
|
```
|
|
199
236
|
|
|
237
|
+
## License
|
|
238
|
+
|
|
239
|
+
MIT
|
|
240
|
+
|
|
200
241
|
> Task CLI does not install Grill Me automatically.
|
|
201
|
-
> Users remain free to choose any Grill Me compatible implementation.
|
|
242
|
+
> Users remain free to choose any Grill Me compatible implementation, and the explore skills fall back to built-in clarification if none is installed.
|
package/package.json
CHANGED
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
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
|
|
1
3
|
const TASK_ACTIVE_DIR = '.ai/tasks/active';
|
|
2
4
|
const TASK_ARCHIVE_DIR = '.ai/tasks/archive';
|
|
3
5
|
const BUG_ACTIVE_DIR = '.ai/bugs/active';
|
|
@@ -11,6 +13,12 @@ const GITIGNORE_BLOCK = [
|
|
|
11
13
|
'.ai/bugs/active/*.md',
|
|
12
14
|
].join('\n');
|
|
13
15
|
|
|
16
|
+
const GRILL_ME_HINTS = [
|
|
17
|
+
'grill-me',
|
|
18
|
+
'skill-grill-me',
|
|
19
|
+
'grill me',
|
|
20
|
+
];
|
|
21
|
+
|
|
14
22
|
const SKILLS = {
|
|
15
23
|
'task-fast': {
|
|
16
24
|
name: 'task-fast',
|
|
@@ -27,19 +35,20 @@ Handle a small requirement in one continuous workflow with minimal ceremony.
|
|
|
27
35
|
|
|
28
36
|
Workflow
|
|
29
37
|
|
|
30
|
-
1.
|
|
31
|
-
2.
|
|
38
|
+
1. If a Grill Me compatible skill is available in the current environment, use it for requirement clarification.
|
|
39
|
+
2. If no Grill Me compatible skill is available, clarify the requirement yourself with focused questions just far enough to remove ambiguity.
|
|
40
|
+
3. Create a concise task brief and save it to:
|
|
32
41
|
|
|
33
42
|
.ai/tasks/active/YYYY-MM-DD-task-name.md
|
|
34
43
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
4. Show the brief before coding.
|
|
45
|
+
5. If the user does not object, implement immediately.
|
|
46
|
+
6. Verify the result against the acceptance criteria.
|
|
47
|
+
7. Archive the brief automatically by moving it to:
|
|
39
48
|
|
|
40
49
|
.ai/tasks/archive/YYYY-MM-DD-task-name.md
|
|
41
50
|
|
|
42
|
-
|
|
51
|
+
8. Summarize the outcome and any follow-up risks.
|
|
43
52
|
|
|
44
53
|
Task Brief Format
|
|
45
54
|
|
|
@@ -91,15 +100,16 @@ Clarify requirements and leave behind a ready-to-execute brief.
|
|
|
91
100
|
|
|
92
101
|
Workflow
|
|
93
102
|
|
|
94
|
-
1.
|
|
95
|
-
2.
|
|
96
|
-
3.
|
|
97
|
-
4. Do not
|
|
98
|
-
5.
|
|
103
|
+
1. If a Grill Me compatible skill is available in the current environment, use it for requirement exploration.
|
|
104
|
+
2. If no Grill Me compatible skill is available, explore the requirement yourself through focused questions.
|
|
105
|
+
3. Continue until the task is sufficiently understood.
|
|
106
|
+
4. Do not write code.
|
|
107
|
+
5. Do not create implementation details.
|
|
108
|
+
6. Once the requirement is clear, generate a concise task brief and save it to:
|
|
99
109
|
|
|
100
110
|
.ai/tasks/active/YYYY-MM-DD-task-name.md
|
|
101
111
|
|
|
102
|
-
|
|
112
|
+
7. Show the saved brief and stop.
|
|
103
113
|
|
|
104
114
|
Task Brief Format
|
|
105
115
|
|
|
@@ -225,6 +235,36 @@ Anything not fully implemented.
|
|
|
225
235
|
`,
|
|
226
236
|
},
|
|
227
237
|
|
|
238
|
+
'task-cancel': {
|
|
239
|
+
name: 'task-cancel',
|
|
240
|
+
description: 'Discard the current task analysis output and implementation changes for this attempt.',
|
|
241
|
+
content: `---
|
|
242
|
+
name: task-cancel
|
|
243
|
+
description: Discard the current task analysis output and implementation changes for this attempt.
|
|
244
|
+
user-invocable: true
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
Purpose
|
|
248
|
+
|
|
249
|
+
Abandon the current task attempt completely.
|
|
250
|
+
|
|
251
|
+
Rules
|
|
252
|
+
|
|
253
|
+
1. Target only the current task attempt.
|
|
254
|
+
2. Discard the current task brief and any analysis artifacts created for this attempt.
|
|
255
|
+
3. Discard code changes made for this attempt.
|
|
256
|
+
4. Do not archive the task brief.
|
|
257
|
+
5. Do not keep partial implementation.
|
|
258
|
+
6. Do not preserve temporary conclusions from this attempt as accepted decisions.
|
|
259
|
+
7. Do not touch unrelated historical archives, other active briefs, or user-authored changes outside this attempt.
|
|
260
|
+
8. If the exact changed files are uncertain, stop and ask for confirmation before deleting or reverting anything.
|
|
261
|
+
|
|
262
|
+
Output
|
|
263
|
+
|
|
264
|
+
TASK_CANCELLED
|
|
265
|
+
`,
|
|
266
|
+
},
|
|
267
|
+
|
|
228
268
|
'bug-explore': {
|
|
229
269
|
name: 'bug-explore',
|
|
230
270
|
description: 'Investigate a bug and generate a fix brief in one step, without writing code.',
|
|
@@ -240,22 +280,23 @@ Investigate a bug and leave behind a ready-to-fix brief.
|
|
|
240
280
|
|
|
241
281
|
Rules
|
|
242
282
|
|
|
243
|
-
1.
|
|
244
|
-
2.
|
|
245
|
-
3.
|
|
246
|
-
4.
|
|
247
|
-
5.
|
|
248
|
-
6.
|
|
283
|
+
1. If a Grill Me compatible skill is available in the current environment, use it for bug exploration.
|
|
284
|
+
2. If no Grill Me compatible skill is available, ask focused questions and drive the investigation yourself.
|
|
285
|
+
3. Do not write code.
|
|
286
|
+
4. Do not suggest fixes before enough evidence exists.
|
|
287
|
+
5. Identify root cause candidates.
|
|
288
|
+
6. Request evidence whenever possible.
|
|
289
|
+
7. Separate:
|
|
249
290
|
|
|
250
291
|
* observed behavior
|
|
251
292
|
* expected behavior
|
|
252
293
|
* assumptions
|
|
253
294
|
|
|
254
|
-
|
|
295
|
+
8. Once the bug is sufficiently understood, generate a brief and save it to:
|
|
255
296
|
|
|
256
297
|
.ai/bugs/active/YYYY-MM-DD-bug-name.md
|
|
257
298
|
|
|
258
|
-
|
|
299
|
+
9. Show the saved brief and stop.
|
|
259
300
|
|
|
260
301
|
Bug Brief Format
|
|
261
302
|
|
|
@@ -372,6 +413,36 @@ Further improvements.
|
|
|
372
413
|
`,
|
|
373
414
|
},
|
|
374
415
|
|
|
416
|
+
'bug-cancel': {
|
|
417
|
+
name: 'bug-cancel',
|
|
418
|
+
description: 'Discard the current bug analysis output and code changes for this attempt.',
|
|
419
|
+
content: `---
|
|
420
|
+
name: bug-cancel
|
|
421
|
+
description: Discard the current bug analysis output and code changes for this attempt.
|
|
422
|
+
user-invocable: true
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
Purpose
|
|
426
|
+
|
|
427
|
+
Abandon the current bug-fix attempt completely.
|
|
428
|
+
|
|
429
|
+
Rules
|
|
430
|
+
|
|
431
|
+
1. Target only the current bug-fix attempt.
|
|
432
|
+
2. Discard the current bug brief and any analysis artifacts created for this attempt.
|
|
433
|
+
3. Discard code changes made for this attempt.
|
|
434
|
+
4. Do not archive the bug brief.
|
|
435
|
+
5. Do not keep partial fixes.
|
|
436
|
+
6. Do not preserve temporary conclusions from this attempt as accepted decisions.
|
|
437
|
+
7. Do not touch unrelated historical archives, other active briefs, or user-authored changes outside this attempt.
|
|
438
|
+
8. If the exact changed files are uncertain, stop and ask for confirmation before deleting or reverting anything.
|
|
439
|
+
|
|
440
|
+
Output
|
|
441
|
+
|
|
442
|
+
BUG_CANCELLED
|
|
443
|
+
`,
|
|
444
|
+
},
|
|
445
|
+
|
|
375
446
|
'decision-log': {
|
|
376
447
|
name: 'decision-log',
|
|
377
448
|
description: 'Record implementation decisions to .ai/decisions/decisions.md. Append-only, max 10 lines per entry.',
|
|
@@ -424,6 +495,49 @@ function skillFilePath(path, cwd, skillRoot, skillName) {
|
|
|
424
495
|
return path.join(cwd, skillRoot, skillName, 'SKILL.md');
|
|
425
496
|
}
|
|
426
497
|
|
|
498
|
+
function hasGrillMeHint(value) {
|
|
499
|
+
const normalized = value.toLowerCase();
|
|
500
|
+
return GRILL_ME_HINTS.some((hint) => normalized.includes(hint));
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
function detectLocalGrillMeSkill(fs, path, cwd, skillRoot) {
|
|
504
|
+
const root = path.join(cwd, skillRoot);
|
|
505
|
+
if (!fs.existsSync(root)) {
|
|
506
|
+
return null;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
|
|
510
|
+
if (!entry.isDirectory()) {
|
|
511
|
+
continue;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
if (MANAGED_SKILL_NAMES.includes(entry.name)) {
|
|
515
|
+
continue;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
if (hasGrillMeHint(entry.name)) {
|
|
519
|
+
return entry.name;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
const skillPath = path.join(root, entry.name, 'SKILL.md');
|
|
523
|
+
if (!fs.existsSync(skillPath)) {
|
|
524
|
+
continue;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
const content = fs.readFileSync(skillPath, 'utf-8');
|
|
528
|
+
const metadata = content
|
|
529
|
+
.split('---')
|
|
530
|
+
.slice(1, 2)
|
|
531
|
+
.join('\n');
|
|
532
|
+
|
|
533
|
+
if (hasGrillMeHint(metadata)) {
|
|
534
|
+
return entry.name;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
return null;
|
|
539
|
+
}
|
|
540
|
+
|
|
427
541
|
function logCheck(log, ok, label, detail) {
|
|
428
542
|
if (ok) {
|
|
429
543
|
log.chalk.green(` OK ${label}${detail ? ` - ${detail}` : ''}`);
|
|
@@ -533,8 +647,8 @@ export function init(cwd, { fs, path, log }) {
|
|
|
533
647
|
|
|
534
648
|
log.info(`\nTask workflow initialized. Recommended flows:
|
|
535
649
|
fast: task-fast
|
|
536
|
-
task: task-explore -> task-implement -> task-review
|
|
537
|
-
bug: bug-explore -> bug-fix -> bug-review
|
|
650
|
+
task: task-explore -> task-implement -> task-review | task-cancel
|
|
651
|
+
bug: bug-explore -> bug-fix -> bug-review | bug-cancel
|
|
538
652
|
other: decision-log`);
|
|
539
653
|
}
|
|
540
654
|
|
|
@@ -567,8 +681,8 @@ export function refresh(cwd, { fs, path, log }) {
|
|
|
567
681
|
|
|
568
682
|
log.info(`\nTask workflow refreshed. Managed skills reinstalled:
|
|
569
683
|
fast: task-fast
|
|
570
|
-
task: task-explore -> task-implement -> task-review
|
|
571
|
-
bug: bug-explore -> bug-fix -> bug-review
|
|
684
|
+
task: task-explore -> task-implement -> task-review | task-cancel
|
|
685
|
+
bug: bug-explore -> bug-fix -> bug-review | bug-cancel
|
|
572
686
|
other: decision-log`);
|
|
573
687
|
}
|
|
574
688
|
|
|
@@ -620,6 +734,22 @@ export function doctor(cwd, { fs, path, log }) {
|
|
|
620
734
|
}
|
|
621
735
|
}
|
|
622
736
|
|
|
737
|
+
const grillMeFindings = [
|
|
738
|
+
[CLAUDE_SKILLS_DIR, detectLocalGrillMeSkill(fs, path, cwd, CLAUDE_SKILLS_DIR)],
|
|
739
|
+
[CODEX_SKILLS_DIR, detectLocalGrillMeSkill(fs, path, cwd, CODEX_SKILLS_DIR)],
|
|
740
|
+
];
|
|
741
|
+
|
|
742
|
+
for (const [skillRoot, skillName] of grillMeFindings) {
|
|
743
|
+
if (skillName) {
|
|
744
|
+
logCheck(log, true, `${skillRoot} Grill Me companion`, `detected ${skillName}`);
|
|
745
|
+
continue;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
console.log(chalk.yellow(
|
|
749
|
+
` WARN ${skillRoot} Grill Me companion - not detected locally; task-fast, task-explore, and bug-explore will use built-in clarification fallback`
|
|
750
|
+
));
|
|
751
|
+
}
|
|
752
|
+
|
|
623
753
|
const gitignorePath = path.join(cwd, '.gitignore');
|
|
624
754
|
const gitignore = fs.existsSync(gitignorePath)
|
|
625
755
|
? fs.readFileSync(gitignorePath, 'utf-8')
|