@rse/ase 0.9.7 → 0.9.8

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 (49) hide show
  1. package/dst/ase-getopt.js +11 -1
  2. package/dst/ase-task.js +20 -21
  3. package/package.json +2 -2
  4. package/plugin/.claude-plugin/plugin.json +1 -1
  5. package/plugin/.github/plugin/plugin.json +1 -1
  6. package/plugin/agents/ase-docs-proofread.md +2 -2
  7. package/plugin/meta/ase-constitution.md +7 -0
  8. package/plugin/meta/ase-control.md +24 -3
  9. package/plugin/meta/ase-format-task.md +2 -2
  10. package/plugin/meta/ase-getopt.md +2 -1
  11. package/plugin/meta/ase-skill.md +28 -9
  12. package/plugin/package.json +2 -2
  13. package/plugin/skills/ase-arch-analyze/SKILL.md +88 -89
  14. package/plugin/skills/ase-arch-discover/SKILL.md +18 -9
  15. package/plugin/skills/ase-code-analyze/SKILL.md +6 -5
  16. package/plugin/skills/ase-code-craft/SKILL.md +42 -35
  17. package/plugin/skills/ase-code-explain/SKILL.md +1 -1
  18. package/plugin/skills/ase-code-insight/SKILL.md +1 -1
  19. package/plugin/skills/ase-code-lint/SKILL.md +16 -8
  20. package/plugin/skills/ase-code-refactor/SKILL.md +42 -35
  21. package/plugin/skills/ase-code-resolve/SKILL.md +43 -35
  22. package/plugin/skills/ase-docs-distill/SKILL.md +1 -1
  23. package/plugin/skills/ase-docs-distill/help.md +3 -3
  24. package/plugin/skills/ase-docs-proofread/SKILL.md +22 -13
  25. package/plugin/skills/ase-meta-brainstorm/SKILL.md +25 -6
  26. package/plugin/skills/ase-meta-brainstorm/help.md +6 -10
  27. package/plugin/skills/ase-meta-diff/SKILL.md +5 -4
  28. package/plugin/skills/ase-meta-diff/help.md +10 -11
  29. package/plugin/skills/ase-meta-evaluate/SKILL.md +10 -9
  30. package/plugin/skills/ase-meta-quorum/SKILL.md +15 -5
  31. package/plugin/skills/ase-meta-review/SKILL.md +3 -3
  32. package/plugin/skills/ase-meta-review/help.md +3 -3
  33. package/plugin/skills/ase-meta-search/SKILL.md +9 -8
  34. package/plugin/skills/ase-meta-steelman/SKILL.md +1 -1
  35. package/plugin/skills/ase-meta-why/SKILL.md +16 -10
  36. package/plugin/skills/ase-task-condense/SKILL.md +32 -17
  37. package/plugin/skills/ase-task-condense/help.md +1 -1
  38. package/plugin/skills/ase-task-delete/SKILL.md +6 -3
  39. package/plugin/skills/ase-task-edit/SKILL.md +53 -32
  40. package/plugin/skills/ase-task-edit/help.md +2 -2
  41. package/plugin/skills/ase-task-grill/SKILL.md +53 -24
  42. package/plugin/skills/ase-task-id/SKILL.md +11 -2
  43. package/plugin/skills/ase-task-implement/SKILL.md +36 -15
  44. package/plugin/skills/ase-task-list/SKILL.md +1 -1
  45. package/plugin/skills/ase-task-preflight/SKILL.md +40 -20
  46. package/plugin/skills/ase-task-preflight/help.md +1 -1
  47. package/plugin/skills/ase-task-reboot/SKILL.md +27 -18
  48. package/plugin/skills/ase-task-rename/SKILL.md +5 -3
  49. package/plugin/skills/ase-task-view/help.md +24 -5
package/dst/ase-getopt.js CHANGED
@@ -19,7 +19,9 @@ export class GetoptMCP {
19
19
  "containing those remaining tokens (quotes preserved), and " +
20
20
  "`info` is a markdown rendering of the parsed options in the " +
21
21
  "form `key: **value**, key: **value**, ...` for printing at " +
22
- "the top of a skill.",
22
+ "the top of a skill. Options whose long name starts with " +
23
+ "`int-` are treated as internal and are excluded from both " +
24
+ "the usage help and the `info` rendering.",
23
25
  inputSchema: {
24
26
  name: z.string()
25
27
  .describe("Name of the caller (e.g. skill name), used in error messages"),
@@ -53,6 +55,7 @@ export class GetoptMCP {
53
55
  /* tokenize spec and add one option per token */
54
56
  const tokens = args.spec.split(/\s+/).filter((e) => e.length > 0);
55
57
  const re = /^--([A-Za-z][A-Za-z0-9-]*)(?:\|-([A-Za-z]))?(?:=(\((.*)\)(\.\.\.)?|.*))?$/;
58
+ const internals = new Set();
56
59
  for (const tok of tokens) {
57
60
  const m = re.exec(tok);
58
61
  if (m === null)
@@ -76,6 +79,12 @@ export class GetoptMCP {
76
79
  }
77
80
  else
78
81
  opt.default(false);
82
+ if (long !== undefined && long.startsWith("int-")) {
83
+ /* internal option: hide from usage help and remember
84
+ its camel-cased key for the info rendering below */
85
+ opt.hideHelp();
86
+ internals.add(long.replace(/-(.)/g, (_, c) => c.toUpperCase()));
87
+ }
79
88
  cmd.addOption(opt);
80
89
  }
81
90
  /* parse args */
@@ -145,6 +154,7 @@ export class GetoptMCP {
145
154
  /* build markdown info rendering of parsed options */
146
155
  const opts = cmd.opts();
147
156
  const info = Object.entries(opts)
157
+ .filter(([k]) => !internals.has(k))
148
158
  .map(([k, v]) => `${k}: **${shQuote([String(v)])}**`)
149
159
  .join(", ");
150
160
  /* build result */
package/dst/ase-task.js CHANGED
@@ -20,8 +20,8 @@ export class Task {
20
20
  static validateId(id) {
21
21
  if (typeof id !== "string" || id.length === 0)
22
22
  throw new Error("task: id must be a non-empty string");
23
- if (!/^[A-Za-z0-9-]+$/.test(id))
24
- throw new Error("task: id must match [A-Za-z0-9-]+");
23
+ if (!/^[A-Za-z0-9_-]+$/.test(id))
24
+ throw new Error("task: id must match [A-Za-z0-9_-]+");
25
25
  }
26
26
  /* determine the project root (Git top-level if inside a Git
27
27
  working tree, otherwise the current working directory) */
@@ -76,7 +76,7 @@ export class Task {
76
76
  if (!fs.existsSync(dir))
77
77
  return false;
78
78
  for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
79
- if (!entry.isDirectory() || !/^[A-Za-z0-9-]+$/.test(entry.name))
79
+ if (!entry.isDirectory() || !/^[A-Za-z0-9_-]+$/.test(entry.name))
80
80
  continue;
81
81
  if (fs.existsSync(path.join(dir, entry.name, "plan.md")))
82
82
  return true;
@@ -149,7 +149,7 @@ export class Task {
149
149
  if (fs.existsSync(newFile))
150
150
  throw new Error(`task: target id "${newId}" already exists`);
151
151
  const text = fs.readFileSync(oldFile, "utf8");
152
- const updated = text.replace(/(^#\s+(?:✪\s+)?TASK\s+)[A-Za-z0-9-]+(\s*:)/m, `$1${newId}$2`);
152
+ const updated = text.replace(/(^#\s+TASK\s+)[A-Za-z0-9_-]+(\s*:)/m, `$1${newId}$2`);
153
153
  fs.mkdirSync(path.dirname(newFile), { recursive: true });
154
154
  fs.writeFileSync(newFile, updated, "utf8");
155
155
  fs.rmSync(oldFile, { force: true });
@@ -168,7 +168,7 @@ export class Task {
168
168
  const isMatch = picomatch(files, { dot: true });
169
169
  const out = [];
170
170
  for (const entry of fs.readdirSync(dir)) {
171
- const m = /^TASK-([A-Za-z0-9-]+)\.md$/.exec(entry);
171
+ const m = /^TASK-([A-Za-z0-9_-]+)\.md$/.exec(entry);
172
172
  if (m === null || !isMatch(entry))
173
173
  continue;
174
174
  const file = path.join(dir, entry);
@@ -194,7 +194,7 @@ export class Task {
194
194
  const cutoff = Date.now() - maxAgeMs;
195
195
  const removed = [];
196
196
  for (const entry of fs.readdirSync(dir)) {
197
- const m = /^TASK-([A-Za-z0-9-]+)\.md$/.exec(entry);
197
+ const m = /^TASK-([A-Za-z0-9_-]+)\.md$/.exec(entry);
198
198
  if (m === null || !isMatch(entry))
199
199
  continue;
200
200
  const file = path.join(dir, entry);
@@ -417,7 +417,7 @@ export class TaskMCP {
417
417
  "Returns the task as `text`; returns an empty string if no task exists for the `id`.",
418
418
  inputSchema: {
419
419
  id: z.string()
420
- .describe("task identifier (allowed characters: A-Z, a-z, 0-9, '-')")
420
+ .describe("task identifier (allowed characters: A-Z, a-z, 0-9, '_', '-')")
421
421
  }
422
422
  }, async (args) => {
423
423
  try {
@@ -442,16 +442,15 @@ export class TaskMCP {
442
442
  "Overwrites any existing task for the same `id`.",
443
443
  inputSchema: {
444
444
  id: z.string()
445
- .describe("task identifier (allowed characters: A-Z, a-z, 0-9, '-')"),
445
+ .describe("task identifier (allowed characters: A-Z, a-z, 0-9, '_', '-')"),
446
446
  text: z.string()
447
447
  .describe("text content of the task")
448
448
  }
449
449
  }, async (args) => {
450
450
  try {
451
- const text = Markdown.prepare(args.text);
452
- Task.save(this.log, args.id, text);
451
+ Task.save(this.log, args.id, args.text);
453
452
  return {
454
- content: [{ type: "text", text: `task_save: OK: saved task "${args.id}"` }]
453
+ content: [{ type: "text", text: `OK: saved task "${args.id}"` }]
455
454
  };
456
455
  }
457
456
  catch (err) {
@@ -469,14 +468,14 @@ export class TaskMCP {
469
468
  "Returns a status `text` indicating whether a task existed and was removed.",
470
469
  inputSchema: {
471
470
  id: z.string()
472
- .describe("task identifier (allowed characters: A-Z, a-z, 0-9, '-')")
471
+ .describe("task identifier (allowed characters: A-Z, a-z, 0-9, '_', '-')")
473
472
  }
474
473
  }, async (args) => {
475
474
  try {
476
475
  const removed = Task.delete(this.log, args.id);
477
476
  const msg = removed ?
478
- `task_delete: OK: removed task "${args.id}"` :
479
- `task_delete: WARNING: no task "${args.id}" to remove`;
477
+ `OK: removed task "${args.id}"` :
478
+ `WARNING: no task "${args.id}" to remove`;
480
479
  return {
481
480
  content: [{ type: "text", text: msg }]
482
481
  };
@@ -497,16 +496,16 @@ export class TaskMCP {
497
496
  "Fails with an error if the target id already exists.",
498
497
  inputSchema: {
499
498
  old: z.string()
500
- .describe("old task identifier (allowed characters: A-Z, a-z, 0-9, '-')"),
499
+ .describe("old task identifier (allowed characters: A-Z, a-z, 0-9, '_', '-')"),
501
500
  new: z.string()
502
- .describe("new task identifier (allowed characters: A-Z, a-z, 0-9, '-')")
501
+ .describe("new task identifier (allowed characters: A-Z, a-z, 0-9, '_', '-')")
503
502
  }
504
503
  }, async (args) => {
505
504
  try {
506
505
  const renamed = Task.rename(this.log, args.old, args.new);
507
506
  const msg = renamed ?
508
- `task_rename: OK: renamed task "${args.old}" to "${args.new}"` :
509
- `task_rename: WARNING: no task "${args.old}" to rename`;
507
+ `OK: renamed task "${args.old}" to "${args.new}"` :
508
+ `WARNING: no task "${args.old}" to rename`;
510
509
  return {
511
510
  content: [{ type: "text", text: msg }]
512
511
  };
@@ -527,16 +526,16 @@ export class TaskMCP {
527
526
  "otherwise it returns the current task `id` of the `session`.",
528
527
  inputSchema: {
529
528
  id: z.string().optional()
530
- .describe("task identifier to set (allowed characters: A-Z, a-z, 0-9, '-'); " +
529
+ .describe("task identifier to set (allowed characters: A-Z, a-z, 0-9, '_', '-'); " +
531
530
  "if omitted, the current task id is returned"),
532
531
  session: z.string()
533
- .describe("session identifier (allowed characters: A-Z, a-z, 0-9, '-')")
532
+ .describe("session identifier (allowed characters: A-Z, a-z, 0-9, '_', '-')")
534
533
  }
535
534
  }, async (args) => {
536
535
  try {
537
536
  if (args.id !== undefined) {
538
537
  Task.setId(this.log, args.session, args.id);
539
- const msg = `task_id: OK: set agent.task to "${args.id}" ` +
538
+ const msg = `OK: set agent.task to "${args.id}" ` +
540
539
  `for session "${args.session}"`;
541
540
  return {
542
541
  content: [{ type: "text", text: msg }]
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "homepage": "http://github.com/rse/ase",
7
7
  "repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
8
8
  "bugs": { "url": "http://github.com/rse/ase/issues" },
9
- "version": "0.9.7",
9
+ "version": "0.9.8",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -30,7 +30,7 @@
30
30
  "nodemon": "3.1.14",
31
31
  "shx": "0.4.0",
32
32
 
33
- "@types/node": "25.9.2",
33
+ "@types/node": "25.9.3",
34
34
  "@types/luxon": "3.7.1",
35
35
  "@types/which": "3.0.4",
36
36
  "@types/update-notifier": "6.0.8",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.9.7",
3
+ "version": "0.9.8",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.9.7",
3
+ "version": "0.9.8",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -62,9 +62,9 @@ Workflow
62
62
  6. Set <context-after/> to exactly *up to two* lines of
63
63
  *unchanged* text content which occurs in the document
64
64
  directly *after* <old-text/>, i.e., the lines (<line/>
65
- + <n/> + 1) and (<line/> + <n/> + 2), where <n/> is the
65
+ + <n/>) and (<line/> + <n/> + 1), where <n/> is the
66
66
  number of lines in <old-text/>. Reduce to just one line
67
- (<line/> + <n/> + 1) if <old-text/> is the second-last
67
+ (<line/> + <n/>) if <old-text/> is the second-last
68
68
  line of the document. Set <context-after/> to empty if
69
69
  <old-text/> is the last line in the document.
70
70
 
@@ -16,6 +16,13 @@ you *MUST* once and immediately output the following <template/> now:
16
16
  ⧉ **ASE**: ☯ persona: **<ase-persona-style/>**
17
17
  </template>
18
18
 
19
+ In case your harness instructions indicate that the user is shown
20
+ only the *final* text message of each turn (e.g. *Claude Code* with
21
+ "focus mode" enabled), you *MUST* ensure this <template/> output (and
22
+ *every* <template/> output requested by ASE skills) lands in a final
23
+ text message (after the last tool call of a turn) instead of between
24
+ tool calls -- repeat it there if necessary.
25
+
19
26
  Prohibitions
20
27
  ------------
21
28
 
@@ -14,7 +14,7 @@ Control Flow Constructs
14
14
  Do not output anything.
15
15
 
16
16
  - *IMPORTANT*: You *MUST* honor the following control flow construct:
17
- <expand name="<define-name/>" [arg1="<expand-arg1/>" [arg2="<expand-arg2/>" [...]]]><expand-content/></expand>:
17
+ <expand name="<define-name/>" [arg1="<expand-arg1/>" [arg2="<expand-arg2/>" [...]]]>[<expand-content/>]</expand>:
18
18
 
19
19
  This specifies the *expansion* of previous <define/>. This
20
20
  construct is expanded to the <define-body/> of <define/> with
@@ -48,14 +48,35 @@ Control Flow Constructs
48
48
 
49
49
  This specifies a simple condition which is expanded to <if-body/>
50
50
  if <if-condition/> is met, or to empty string if <if-condition/> is
51
- *not* met. Do not output anything else.
51
+ *not* met. It can be optionally followed by one or more <elseif/>
52
+ constructs and/or one final <else/> construct. Do not output anything else.
53
+
54
+ - *IMPORTANT*: You *MUST* honor the following control flow construct:
55
+ <elseif condition="<elseif-condition/>"><elseif-body/></elseif>:
56
+
57
+ This specifies an *alternative condition* and has to directly
58
+ follow an <if/> or another <elseif/> construct. It is expanded
59
+ to <elseif-body/> if the conditions of all preceding <if/> and
60
+ <elseif/> constructs of the chain were *not* met and its own
61
+ <elseif-condition/> is met, or to the empty string otherwise.
62
+ Do not output anything else.
63
+
64
+ - *IMPORTANT*: You *MUST* honor the following control flow construct:
65
+ <else><else-body/></else>:
66
+
67
+ This specifies the *fallback alternative* and has to directly
68
+ follow an <if/> or <elseif/> construct. It is expanded to
69
+ <else-body/> if the conditions of all preceding <if/> and
70
+ <elseif/> constructs of the chain were *not* met, or to the empty
71
+ string otherwise. Do not output anything else.
52
72
 
53
73
  - *IMPORTANT*: You *MUST* honor the following control flow construct:
54
74
  <while condition="<while-condition/>"><while-body/></while>:
55
75
 
56
76
  This specifies a <while-body/> which is *repeated* as long as
57
77
  <while-condition/> is met. This construct is expanded to the
58
- repetition of <while-body/>. Do not output anything else.
78
+ repetition of <while-body/>. A <break/> in <while-body/> can stop
79
+ the repetition early. Do not output anything else.
59
80
 
60
81
  - *IMPORTANT*: You *MUST* honor the following control flow construct:
61
82
  <for items="<for-item/> [...]"><for-body/></for>:
@@ -8,8 +8,8 @@ Every *task* uses a strict and fixed format:
8
8
 
9
9
  # TASK <task-id/>: <title/>
10
10
 
11
- Created: <timestamp-created/>
12
- Modified: <timestamp-modified/>
11
+ Created: <timestamp-created/>
12
+ Modified: <timestamp-modified/>
13
13
 
14
14
  ## CONTEXT
15
15
 
@@ -28,7 +28,8 @@ set placeholders into the context as a side-effect.
28
28
  markdown rendering of the parsed options in the form `<longN/>:
29
29
  **<valueN/>**, [...]` (joined with `, `, with each value
30
30
  shell-quoted if value contains spaces or special characters, and
31
- excluding the `help` option).
31
+ excluding the `help` option and any *internal* option whose long
32
+ name starts with `int-`).
32
33
 
33
34
  Then silently *SKIP* only the following steps 3-6
34
35
  and proceed directly to step 7 to display the results.
@@ -25,6 +25,18 @@ Skill Output
25
25
  Unicode characters, and the potential reduction of prose according
26
26
  to the currently defined persona style.
27
27
 
28
+ - *IMPORTANT*: For *Final-Message-Only Display* ("focus mode"):
29
+ some agent harnesses show the user only the *final* text message of
30
+ a turn and *hide* all text emitted *between* tool calls. If your
31
+ harness instructions indicate such a mode (e.g. *Claude Code* with
32
+ "focus mode" enabled), you *MUST* repeat *all* <template/> outputs
33
+ emitted since the last shown final text message -- *verbatim*, in
34
+ their *original order*, and each only *once* -- at the *top* of the
35
+ next final text message (i.e. the text after the last tool call of
36
+ a turn). Never *drop* or *summarize* a <template/> output just
37
+ because it would land between tool calls. If no such display mode
38
+ is indicated, do *not* repeat anything.
39
+
28
40
  - *IMPORTANT*: The active *persona style* (see `ase-persona.md`) *MUST* be applied
29
41
  to all *free-text placeholders* within <template/> sections - i.e. any placeholder
30
42
  whose content you author yourself (such as `<description/>`, `<title/>`, `<objective/>`,
@@ -98,14 +110,21 @@ Skill Sequential Processing
98
110
  - *IMPORTANT*: For each given <flow/>, you *MUST* use the
99
111
  `TaskCreate` tool to create a corresponding set of processing steps.
100
112
 
101
- Each `<step id="xxx" [...]/>` corresponds to a `TaskCreate({
102
- subject: "xxx", description: "xxx", activeForm: "xxx" })`. In other
103
- words, use the text of the `id` attribute of <step/> for both
104
- the `subject`, the `description`, and the `activeForm` fields of
113
+ Each `<step id="xxx" [...]>...</step>` corresponds to a
114
+ `TaskCreate({ subject: "xxx", description: "xxx" })`. In other
115
+ words, use the text of the `id` attribute of <step/> exactly
116
+ *as-is* for both the `subject`, and the `description` fields of
105
117
  `TaskCreate`.
106
118
 
107
- Make the `TaskCreate` tool calls *sequentially*, *not* in parallel,
108
- so the user can see intermediate results.
119
+ For speed, emit *all* `TaskCreate` calls together in a *single* turn
120
+ (issued in parallel), *not* one-per-turn sequentially. Do *not*
121
+ rely on the call order to establish the step order, as the parallel
122
+ results carry no guaranteed ordering. Instead, in the *immediately
123
+ following* turn, establish the strict order explicitly by chaining
124
+ the created tasks with `TaskUpdate`: for each <step/> after the
125
+ first one, call `TaskUpdate({ taskId: "<this/>", addBlockedBy:
126
+ [ "<prev/>" ] })` so that every step (with `taskId` <this/>) is
127
+ blocked by its predecessor step (with `taskId` <prev/>).
109
128
 
110
129
  - *IMPORTANT*: For each <step/> you *MUST* use the `TaskUpdate` tool
111
130
  for updating its status during processing.
@@ -208,7 +227,7 @@ Template Patterns
208
227
  </template>
209
228
 
210
229
  - When `<ase-tpl-head title="<title/>"/>` should be expanded, use
211
- (where <bar/> = "─" x (70 - 8 - length("<title/>")), i.e., <bar/> is
230
+ (where <bar/> = "─" x (70 - 16 - length("<title/>")), i.e., <bar/> is
212
231
  the "─" character repeated (70 - 16 - length("<title/>")) times):
213
232
 
214
233
  <template>
@@ -226,8 +245,8 @@ Template Patterns
226
245
  </template>
227
246
 
228
247
  - When `<ase-tpl-foot title="<title/>"/>` should be expanded, use
229
- (where <bar/> = "─" x (70 - 8 - length("<title/>")), i.e., <bar/> is
230
- the "─" character repeated (70 - 16 - length("<title/>")) times):
248
+ (where <bar/> = "─" x (70 - 16 - length("<title/>")), i.e., <bar/> is
249
+ the "─" character repeated (71 - 16 - length("<title/>")) times):
231
250
 
232
251
  <template>
233
252
 
@@ -6,7 +6,7 @@
6
6
  "homepage": "http://github.com/rse/ase",
7
7
  "repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
8
8
  "bugs": { "url": "http://github.com/rse/ase/issues" },
9
- "version": "0.9.7",
9
+ "version": "0.9.8",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "devDependencies": {
17
17
  "@rse/stx": "1.1.5",
18
- "markdownlint": "0.40.0",
18
+ "markdownlint": "0.41.0",
19
19
  "markdownlint-cli2": "0.22.1",
20
20
  "eslint": "10.4.1",
21
21
  "@eslint/markdown": "8.0.2",
@@ -7,94 +7,94 @@ disable-model-invocation: false
7
7
  model: opus
8
8
  effort: high
9
9
  allowed-tools:
10
- - "Bash(wc:*)"
11
- - "Bash(ls:*)"
12
- - "Bash(tree:*)"
13
- - "Bash(file:*)"
14
- - "Bash(du:*)"
15
- - "Bash(stat:*)"
16
- - "Bash(grep:*)"
17
- - "Bash(awk:*)"
18
- - "Bash(head:*)"
19
- - "Bash(tail:*)"
20
- - "Bash(sort:*)"
21
- - "Bash(uniq:*)"
22
- - "Bash(cat:*)"
23
- - "Bash(cut:*)"
24
- - "Bash(tr:*)"
25
- - "Bash(nl:*)"
26
- - "Bash(column:*)"
27
- - "Bash(diff:*)"
28
- - "Bash(cmp:*)"
29
- - "Bash(jq:*)"
30
- - "Bash(cloc:*)"
31
- - "Bash(tokei:*)"
32
- - "Bash(scc:*)"
33
- - "Bash(basename:*)"
34
- - "Bash(dirname:*)"
35
- - "Bash(realpath:*)"
36
- - "Bash(readlink:*)"
37
- - "Bash(pwd:*)"
38
- - "Bash(which:*)"
39
- - "Bash(whereis:*)"
40
- - "Bash(type:*)"
41
- - "Bash(namei:*)"
42
- - "Bash(git log:*)"
43
- - "Bash(git show:*)"
44
- - "Bash(git diff:*)"
45
- - "Bash(git blame:*)"
46
- - "Bash(git ls-files:*)"
47
- - "Bash(git ls-tree:*)"
48
- - "Bash(git grep:*)"
49
- - "Bash(git status:*)"
50
- - "Bash(git rev-list:*)"
51
- - "Bash(git rev-parse:*)"
52
- - "Bash(git for-each-ref:*)"
53
- - "Bash(git reflog:*)"
54
- - "Bash(git cat-file:*)"
55
- - "Bash(git config --get:*)"
56
- - "Bash(git config --list:*)"
57
- - "Bash(git remote:*)"
58
- - "Bash(git branch:*)"
59
- - "Bash(git tag --list:*)"
60
- - "Bash(git describe:*)"
61
- - "Bash(git shortlog:*)"
62
- - "Bash(find * -name:*)"
63
- - "Bash(find * -type:*)"
64
- - "Bash(find * -path:*)"
65
- - "Bash(find * -maxdepth:*)"
66
- - "Bash(find * -mindepth:*)"
67
- - "Bash(find * -size:*)"
68
- - "Bash(find * -mtime:*)"
69
- - "Bash(find * -newer:*)"
70
- - "Bash(git diff:* | awk:*)"
71
- - "Bash(git diff:* | grep:*)"
72
- - "Bash(git diff:* | head:*)"
73
- - "Bash(git diff:* | tail:*)"
74
- - "Bash(git diff:* | wc:*)"
75
- - "Bash(git log:* | head:*)"
76
- - "Bash(git log:* | grep:*)"
77
- - "Bash(git log:* | wc:*)"
78
- - "Bash(git show:* | head:*)"
79
- - "Bash(git show:* | grep:*)"
80
- - "Bash(git grep:* | head:*)"
81
- - "Bash(git grep:* | wc:*)"
82
- - "Bash(git ls-files:* | grep:*)"
83
- - "Bash(git ls-files:* | head:*)"
84
- - "Bash(git ls-files:* | wc:*)"
85
- - "Bash(grep:* | head:*)"
86
- - "Bash(grep:* | sort:*)"
87
- - "Bash(grep:* | wc:*)"
88
- - "Bash(grep:* | sort:* | uniq:*)"
89
- - "Bash(cat:* | grep:*)"
90
- - "Bash(cat:* | awk:*)"
91
- - "Bash(cat:* | head:*)"
92
- - "Bash(cat:* | wc:*)"
93
- - "Bash(find:* | head:*)"
94
- - "Bash(find:* | wc:*)"
95
- - "Bash(awk:* | head:*)"
96
- - "Bash(sort:* | uniq:*)"
97
- - "Bash(sort:* | head:*)"
10
+ - "Bash(wc *)"
11
+ - "Bash(ls *)"
12
+ - "Bash(tree *)"
13
+ - "Bash(file *)"
14
+ - "Bash(du *)"
15
+ - "Bash(stat *)"
16
+ - "Bash(grep *)"
17
+ - "Bash(awk *)"
18
+ - "Bash(head *)"
19
+ - "Bash(tail *)"
20
+ - "Bash(sort *)"
21
+ - "Bash(uniq *)"
22
+ - "Bash(cat *)"
23
+ - "Bash(cut *)"
24
+ - "Bash(tr *)"
25
+ - "Bash(nl *)"
26
+ - "Bash(column *)"
27
+ - "Bash(diff *)"
28
+ - "Bash(cmp *)"
29
+ - "Bash(jq *)"
30
+ - "Bash(cloc *)"
31
+ - "Bash(tokei *)"
32
+ - "Bash(scc *)"
33
+ - "Bash(basename *)"
34
+ - "Bash(dirname *)"
35
+ - "Bash(realpath *)"
36
+ - "Bash(readlink *)"
37
+ - "Bash(pwd *)"
38
+ - "Bash(which *)"
39
+ - "Bash(whereis *)"
40
+ - "Bash(type *)"
41
+ - "Bash(namei *)"
42
+ - "Bash(git log *)"
43
+ - "Bash(git show *)"
44
+ - "Bash(git diff *)"
45
+ - "Bash(git blame *)"
46
+ - "Bash(git ls-files *)"
47
+ - "Bash(git ls-tree *)"
48
+ - "Bash(git grep *)"
49
+ - "Bash(git status *)"
50
+ - "Bash(git rev-list *)"
51
+ - "Bash(git rev-parse *)"
52
+ - "Bash(git for-each-ref *)"
53
+ - "Bash(git reflog *)"
54
+ - "Bash(git cat-file *)"
55
+ - "Bash(git config --get *)"
56
+ - "Bash(git config --list *)"
57
+ - "Bash(git remote *)"
58
+ - "Bash(git branch *)"
59
+ - "Bash(git tag --list *)"
60
+ - "Bash(git describe *)"
61
+ - "Bash(git shortlog *)"
62
+ - "Bash(find * -name *)"
63
+ - "Bash(find * -type *)"
64
+ - "Bash(find * -path *)"
65
+ - "Bash(find * -maxdepth *)"
66
+ - "Bash(find * -mindepth *)"
67
+ - "Bash(find * -size *)"
68
+ - "Bash(find * -mtime *)"
69
+ - "Bash(find * -newer *)"
70
+ - "Bash(git diff * | awk *)"
71
+ - "Bash(git diff * | grep *)"
72
+ - "Bash(git diff * | head *)"
73
+ - "Bash(git diff * | tail *)"
74
+ - "Bash(git diff * | wc *)"
75
+ - "Bash(git log * | head *)"
76
+ - "Bash(git log * | grep *)"
77
+ - "Bash(git log * | wc *)"
78
+ - "Bash(git show * | head *)"
79
+ - "Bash(git show * | grep *)"
80
+ - "Bash(git grep * | head *)"
81
+ - "Bash(git grep * | wc *)"
82
+ - "Bash(git ls-files * | grep *)"
83
+ - "Bash(git ls-files * | head *)"
84
+ - "Bash(git ls-files * | wc *)"
85
+ - "Bash(grep * | head *)"
86
+ - "Bash(grep * | sort *)"
87
+ - "Bash(grep * | wc *)"
88
+ - "Bash(grep * | sort * | uniq *)"
89
+ - "Bash(cat * | grep *)"
90
+ - "Bash(cat * | awk *)"
91
+ - "Bash(cat * | head *)"
92
+ - "Bash(cat * | wc *)"
93
+ - "Bash(find * | head *)"
94
+ - "Bash(find * | wc *)"
95
+ - "Bash(awk * | head *)"
96
+ - "Bash(sort * | uniq *)"
97
+ - "Bash(sort * | head *)"
98
98
  - "Agent"
99
99
  - "Skill"
100
100
  ---
@@ -437,7 +437,6 @@ interface quality, quality attributes, and architecture governance.
437
437
  Finally, output the following <template/> to give a final hint:
438
438
 
439
439
  <template>
440
- ⧉ **ASE**: ☻ skill: **<skill-name/>**, ▶ status: **skill finished**
441
440
  ⧉ **ASE**: ↪ hint: **For deeper analysis, suggestions on solution approaches and then final source code changes, use `/ase-code-resolve P{n}` or `/ase-code-resolve T{n}` in the same or even a different session.**
442
441
  </template>
443
442
  </step>