@rse/ase 0.0.35 → 0.0.37

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 (32) hide show
  1. package/dst/ase-hello.js +9 -4
  2. package/dst/ase-hook.js +44 -0
  3. package/package.json +1 -1
  4. package/plugin/.claude-plugin/plugin.json +1 -1
  5. package/plugin/.github/plugin/plugin.json +1 -1
  6. package/plugin/hooks/hooks-copilot.json +23 -6
  7. package/plugin/hooks/hooks.json +20 -3
  8. package/plugin/meta/ase-dialog.md +17 -3
  9. package/plugin/meta/ase-getopt.md +6 -6
  10. package/plugin/meta/ase-plan.md +4 -1
  11. package/plugin/meta/ase-skill.md +13 -12
  12. package/plugin/package.json +1 -1
  13. package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
  14. package/plugin/skills/ase-arch-discover/SKILL.md +4 -0
  15. package/plugin/skills/ase-code-craft/SKILL.md +6 -5
  16. package/plugin/skills/ase-code-explain/SKILL.md +4 -0
  17. package/plugin/skills/ase-code-insight/SKILL.md +4 -0
  18. package/plugin/skills/ase-code-lint/SKILL.md +4 -0
  19. package/plugin/skills/ase-code-refactor/SKILL.md +8 -6
  20. package/plugin/skills/ase-code-resolve/SKILL.md +6 -5
  21. package/plugin/skills/ase-meta-changes/SKILL.md +4 -0
  22. package/plugin/skills/ase-meta-chat/SKILL.md +8 -3
  23. package/plugin/skills/ase-meta-commit/SKILL.md +4 -0
  24. package/plugin/skills/ase-meta-evaluate/SKILL.md +8 -3
  25. package/plugin/skills/ase-meta-quorum/SKILL.md +11 -5
  26. package/plugin/skills/ase-meta-search/SKILL.md +4 -0
  27. package/plugin/skills/ase-meta-why/SKILL.md +7 -3
  28. package/plugin/skills/ase-task-edit/SKILL.md +2 -2
  29. package/plugin/skills/ase-task-implement/SKILL.md +2 -2
  30. package/plugin/skills/ase-task-list/SKILL.md +39 -14
  31. package/plugin/skills/ase-task-preflight/SKILL.md +1 -1
  32. package/plugin/skills/ase-task-reboot/SKILL.md +1 -1
package/dst/ase-hello.js CHANGED
@@ -3,7 +3,11 @@
3
3
  ** Copyright (c) 2025-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
4
4
  ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
5
5
  */
6
- import chalk from "chalk";
6
+ import { Chalk } from "chalk";
7
+ /* forced-color chalk instance: stdout may be a pipe, so chalk
8
+ auto-detection would yield level 0; force level 1 to keep
9
+ emitting ANSI sequences as in "ase statusline" */
10
+ const c = new Chalk({ level: 1 });
7
11
  /* command-line handling */
8
12
  export default class HelloCommand {
9
13
  log;
@@ -14,9 +18,10 @@ export default class HelloCommand {
14
18
  register(program) {
15
19
  program
16
20
  .command("hello")
17
- .description("Print \"Hello World\" in red")
18
- .action(async () => {
19
- process.stdout.write(chalk.red("Hello World") + "\n");
21
+ .description("print a colored greeting message")
22
+ .option("-s, --subject <name>", "subject to greet", "Universe")
23
+ .action((opts) => {
24
+ process.stdout.write(`${c.red(`${opts.subject} World!`)}\n`);
20
25
  });
21
26
  }
22
27
  }
package/dst/ase-hook.js CHANGED
@@ -106,6 +106,8 @@ export default class HookCommand {
106
106
  cfg.set("agent.task", taskId);
107
107
  cfg.write();
108
108
  });
109
+ /* initialize agent activity status */
110
+ this.writeAgentStatus("ready");
109
111
  /* determine project id */
110
112
  const cwd = input.cwd ?? process.cwd();
111
113
  let projectDir = cwd;
@@ -170,6 +172,32 @@ export default class HookCommand {
170
172
  process.stdout.write(JSON.stringify(payload));
171
173
  return 0;
172
174
  }
175
+ /* publish the agent activity marker to tmux as a per-pane user
176
+ option, so tmux can render the live state via
177
+ #{@ase_agent_status} (refreshed on tmux's own interval,
178
+ independent of Claude Code's statusline repaint cadence).
179
+ Notice: the Claude Code statusline is not usable for this case
180
+ here at all, as it is not repainted during agent processing! */
181
+ writeAgentStatus(status) {
182
+ const icon = status === "busy" ? "▶" : "⏸";
183
+ if (process.env.TMUX !== undefined
184
+ && process.env.TMUX !== ""
185
+ && process.env.TMUX_PANE !== undefined
186
+ && process.env.TMUX_PANE !== "") {
187
+ execaSync("tmux", ["set-option", "-p", "-t", process.env.TMUX_PANE,
188
+ "@ase_agent_status", icon], { stdio: "ignore", reject: false });
189
+ }
190
+ }
191
+ /* handler for "ase hook user-prompt-submit" (both tools) */
192
+ doUserPromptSubmit(_tool) {
193
+ this.writeAgentStatus("busy");
194
+ return 0;
195
+ }
196
+ /* handler for "ase hook stop" (both tools) */
197
+ doStop(_tool) {
198
+ this.writeAgentStatus("ready");
199
+ return 0;
200
+ }
173
201
  /* handler for "ase hook session-end" (both tools) */
174
202
  doSessionEnd(_tool) {
175
203
  /* read session information (Claude Code uses snake_case fields,
@@ -287,5 +315,21 @@ export default class HookCommand {
287
315
  .action((opts) => {
288
316
  process.exit(this.doPreToolUse(this.parseTool(opts.tool)));
289
317
  });
318
+ /* register CLI sub-command "ase hook user-prompt-submit" */
319
+ hookCmd
320
+ .command("user-prompt-submit")
321
+ .description("handle UserPromptSubmit hook event (mark agent as busy)")
322
+ .option("-t, --tool <tool>", "target tool (\"claude\" or \"copilot\")", toolDflt)
323
+ .action((opts) => {
324
+ process.exit(this.doUserPromptSubmit(this.parseTool(opts.tool)));
325
+ });
326
+ /* register CLI sub-command "ase hook stop" */
327
+ hookCmd
328
+ .command("stop")
329
+ .description("handle Stop hook event (mark agent as ready)")
330
+ .option("-t, --tool <tool>", "target tool (\"claude\" or \"copilot\")", toolDflt)
331
+ .action((opts) => {
332
+ process.exit(this.doStop(this.parseTool(opts.tool)));
333
+ });
290
334
  }
291
335
  }
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.0.35",
9
+ "version": "0.0.37",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.0.35",
3
+ "version": "0.0.37",
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.0.35",
3
+ "version": "0.0.37",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -3,20 +3,37 @@
3
3
  "hooks": {
4
4
  "sessionStart": [
5
5
  {
6
- "type": "command",
7
- "bash": "ase hook session-start --tool copilot"
6
+ "type": "command",
7
+ "bash": "ase hook session-start --tool copilot",
8
+ "powershell": "ase hook session-start --tool copilot"
8
9
  }
9
10
  ],
10
11
  "sessionEnd": [
11
12
  {
12
- "type": "command",
13
- "bash": "ase hook session-end --tool copilot"
13
+ "type": "command",
14
+ "bash": "ase hook session-end --tool copilot",
15
+ "powershell": "ase hook session-end --tool copilot"
14
16
  }
15
17
  ],
16
18
  "preToolUse": [
17
19
  {
18
- "type": "command",
19
- "bash": "ase hook pre-tool-use --tool copilot"
20
+ "type": "command",
21
+ "bash": "ase hook pre-tool-use --tool copilot",
22
+ "powershell": "ase hook pre-tool-use --tool copilot"
23
+ }
24
+ ],
25
+ "userPromptSubmitted": [
26
+ {
27
+ "type": "command",
28
+ "bash": "ase hook user-prompt-submit --tool copilot",
29
+ "powershell": "ase hook user-prompt-submit --tool copilot"
30
+ }
31
+ ],
32
+ "agentStop": [
33
+ {
34
+ "type": "command",
35
+ "bash": "ase hook stop --tool copilot",
36
+ "powershell": "ase hook stop --tool copilot"
20
37
  }
21
38
  ]
22
39
  }
@@ -2,7 +2,6 @@
2
2
  "hooks": {
3
3
  "SessionStart": [
4
4
  {
5
- "matcher": "startup|resume|clear|compact",
6
5
  "hooks": [
7
6
  {
8
7
  "type": "command",
@@ -14,7 +13,6 @@
14
13
  ],
15
14
  "SessionEnd": [
16
15
  {
17
- "matcher": "",
18
16
  "hooks": [
19
17
  {
20
18
  "type": "command",
@@ -26,7 +24,6 @@
26
24
  ],
27
25
  "PreToolUse": [
28
26
  {
29
- "matcher": "",
30
27
  "hooks": [
31
28
  {
32
29
  "type": "command",
@@ -35,6 +32,26 @@
35
32
  }
36
33
  ]
37
34
  }
35
+ ],
36
+ "UserPromptSubmit": [
37
+ {
38
+ "hooks": [
39
+ {
40
+ "type": "command",
41
+ "command": "ase hook user-prompt-submit"
42
+ }
43
+ ]
44
+ }
45
+ ],
46
+ "Stop": [
47
+ {
48
+ "hooks": [
49
+ {
50
+ "type": "command",
51
+ "command": "ase hook stop"
52
+ }
53
+ ]
54
+ }
38
55
  ]
39
56
  }
40
57
  }
@@ -36,6 +36,7 @@ Let the *user interactively choose* an answer.
36
36
  1. Start with <config></config> (set config to empty).
37
37
  Do not output anything in this step!
38
38
 
39
+ Start with <n>0</n> (set entry count to zero).
39
40
  <for items="2 3 4 5">
40
41
  Take from <config/> the line number <item/>.
41
42
  If this line does not exist, <break/>.
@@ -43,8 +44,14 @@ Let the *user interactively choose* an answer.
43
44
  If <config/> is not empty, set <config><config/>, </config> (append comma).
44
45
  Set <config><config/>{ label: "<label/>",
45
46
  description: "<description/>" }</config> (append a config entry).
47
+ Set <n/> to <n/> + 1 (increment entry count).
46
48
  </for>
47
49
 
50
+ If <n/> is less than 2:
51
+ Set <result>ERROR: user-dialog requires 2-4 answer lines, got <n/></result>
52
+ and *SKIP* the following step 2 (do not call `AskUserQuestion`)
53
+ and continue with step 3 dispatch.
54
+
48
55
  2. Call the `AskUserQuestion` tool of the agent harness with:
49
56
 
50
57
  `AskUserQuestion({
@@ -65,11 +72,11 @@ Let the *user interactively choose* an answer.
65
72
  - If the tool result contains `user doesn't want to proceed`,
66
73
  `tool use was rejected`, or `user declined to answer
67
74
  questions`, or the result clearly indicates that the
68
- dialog was cancelled, rejected or skipped, set set
75
+ dialog was cancelled, rejected or skipped, set
69
76
  <result>CANCEL</result>.
70
77
 
71
78
  - Otherwise, extract the selected <answer/> from the
72
- tool result `"<question-description/>"="<answer/>".
79
+ tool result `"<question-description/>"="<answer/>"`.
73
80
  Set <result><answer/></result>.
74
81
  If <result/> is then NOT one
75
82
  the "label" values from <config/>, set
@@ -84,15 +91,22 @@ Let the *user interactively choose* an answer.
84
91
  1. Start with <config></config> (set config to empty).
85
92
  Do not output anything in this step!
86
93
 
94
+ Start with <n>0</n> (set entry count to zero).
87
95
  <for items="2 3 4 5">
88
96
  Take from <config/> the line number <item/>.
89
97
  If this line does not exist, <break/>.
90
98
  If this line exists, parse it according to the format `<label/>: <description/>`.
91
99
  If <config/> is not empty, set <config><config/>, </config> (append comma).
92
100
  Set <config><config/>"<label/>: <description/>"</config> (append a config entry).
101
+ Set <n/> to <n/> + 1 (increment entry count).
93
102
  </for>
94
103
 
95
- 2. Call the `AskUserQuestion` tool of the agent harness with:
104
+ If <n/> is less than 2:
105
+ Set <result>ERROR: user-dialog requires 2-4 answer lines, got <n/></result>
106
+ and *SKIP* the following step 2 (do not call `ask_user`)
107
+ and continue with step 3 dispatch.
108
+
109
+ 2. Call the `ask_user` tool of the agent harness with:
96
110
 
97
111
  `ask_user({
98
112
  question: "<question-label>: <question-description/>",
@@ -9,13 +9,13 @@ set placeholders into the context as a side-effect.
9
9
 
10
10
  1. **Determine Parameters**:
11
11
  Set <getopt-skill><arg1/></getopt-skill>.
12
- Set <getopt-spec/><arg2/></getopt-spec>.
13
- Set <getopt-opts/><arg3/>/getopt-opts>.
14
- Set <getopt-args/><content/></getopt-args>.
12
+ Set <getopt-spec><arg2/></getopt-spec>.
13
+ Set <getopt-opts><arg3/></getopt-opts>.
14
+ Set <getopt-args><content/></getopt-args>.
15
15
 
16
16
  2. **Short-Circuit for Quick Processing**:
17
17
  If <getopt-opts/> contains `quick` *AND*
18
- <getopt-args/> does *NOT* match the regexp `^\s*-':
18
+ <getopt-args/> does *NOT* match the regexp `^\s*-`:
19
19
  Set <getopt-arguments><getopt-args/></getopt-arguments> and
20
20
  then just silently *SKIP* the following steps 3-7!
21
21
 
@@ -46,7 +46,7 @@ set placeholders into the context as a side-effect.
46
46
  ```json
47
47
  {
48
48
  "opts": { "<long1/>": <value1/>, "<long2/>": <value2/>, ... },
49
- "argv": [ "<arg1/>", "<arg2/>", ... ]
49
+ "argv": [ "<arg1/>", "<arg2/>", ... ],
50
50
  "args": "..."
51
51
  }
52
52
  ```
@@ -56,7 +56,7 @@ set placeholders into the context as a side-effect.
56
56
  Set <getopt-option-<long/>/> to the corresponding value from
57
57
  `<getopt-result/>.opts[<long/>]`.
58
58
  Set <getopt-arguments/> to the value of `<getopt-result/>.args`.
59
- Set <getopt-info/> to `<getopt-result/>`.info`.
59
+ Set <getopt-info/> to `<getopt-result/>.info`.
60
60
 
61
61
  7. **Display Results**:
62
62
  Just output the following <template/>:
@@ -8,7 +8,7 @@ Every *task plan* uses a strict and fixed format:
8
8
 
9
9
  # ✪ TASK PLAN: **<title/>**
10
10
 
11
- ◉ task id: **<ase-task-id/>** // ✳ created: **<timestamp-created/>** // ✎ modified: **<timestamp-modified/>**
11
+ ◉ task id: **<task-id/>** // ✳ created: **<timestamp-created/>** // ✎ modified: **<timestamp-modified/>**
12
12
 
13
13
  ## ※ CONTEXT
14
14
 
@@ -45,6 +45,9 @@ You *MUST* honor the following hints on this *task plan* format:
45
45
  is changed, what benefit results or what the rationale is behind the
46
46
  change.
47
47
 
48
+ - The <task-id/> has to be substituted with the current value of
49
+ <ase-task-id/> in the current session context.
50
+
48
51
  - The <timestamp-created/> is the timestamp when this feature
49
52
  crafting specification was created. The
50
53
  <timestamp-modified/> is the timestamp when this feature
@@ -19,9 +19,11 @@ Skill Output
19
19
  explicitly requested.
20
20
 
21
21
  - *IMPORTANT*: You *MUST* output all <template/> sections *EXACTLY* as provided
22
- (including newlines), except for removing trailing spaces and
23
- replacing the placeholders `<xxx/>` and `[...]` and replacing XML
24
- entities (like `&#x25CB;`) with the corresponding Unicode characters.
22
+ (including newlines), *EXCEPT* for expanding control items, removing
23
+ trailing spaces, replacing the placeholders `<xxx/>` and `[...]`,
24
+ replacing XML entities (like `&#x25CB;`) with the corresponding
25
+ Unicode characters, and the potential reduction of prose according
26
+ to the currently defined persona style.
25
27
 
26
28
  - *IMPORTANT*: The active *persona style* (see `ase-persona.md`) *MUST* be applied
27
29
  to all *free-text placeholders* within <template/> sections — i.e. any placeholder
@@ -30,8 +32,6 @@ Skill Output
30
32
  punctuation, labels) remains unchanged; only the *authored content* inside free
31
33
  placeholders carries the persona style.
32
34
 
33
- - *IMPORTANT*: You *MUST* *NEVER* output any `---` lines.
34
-
35
35
  - *IMPORTANT*: For *Diagrams*: whenever the response needs a
36
36
  diagram (structural, control-flow, state, sequence, class,
37
37
  entity-relationship, or metrics), you *MUST* invoke the
@@ -108,10 +108,10 @@ Skill Control Flow
108
108
  <expand name="<define-name/>" [arg1="<expand-arg1/>" [arg2="<expand-arg2/>]" [...]]]><expand-content/></expand>:
109
109
 
110
110
  This specifies the *expansion* of previous <define/>.
111
- This construct is expanded into its <define-body/> with `<args/>`
112
- substituted with `<expand-arg1/> <expand-arg2/> [...]`, `<arg1/>`
113
- substituted with <expand-arg1/>, and `<content/>` substituted with
114
- <expand-content/>.
111
+ This construct is expanded into the <define-body/> of <define/>
112
+ with `<args/>` substituted with `<expand-arg1/> <expand-arg2/>
113
+ [...]`, `<arg1/>` substituted with <expand-arg1/>, and `<content/>`
114
+ substituted with <expand-content/>.
115
115
  Do not output anything else.
116
116
 
117
117
  - *IMPORTANT*: You *MUST* honor the following control flow construct:
@@ -159,9 +159,10 @@ Skill Sequential Processing
159
159
  `TaskCreate` tool to create a corresponding set of processing steps.
160
160
 
161
161
  Each `<step id="xxx" [...]/>` corresponds to a `TaskCreate({
162
- subject: "xxx", description: "xxx", activeForm: "xxx" })`. In
163
- other words, use the text of the `id` attribute of <step/> for the
164
- `subject`, `description`, and `activeForm` fields of `TaskCreate`.
162
+ subject: "xxx", description: "xxx", activeForm: "xxx" })`. In other
163
+ words, use the text of the `id` attribute of <step/> for both
164
+ the `subject`, the `description`, and the `activeForm` fields of
165
+ `TaskCreate`.
165
166
 
166
167
  Make the `TaskCreate` tool calls *sequentially*, *not* in parallel,
167
168
  so the user can see intermediate results.
@@ -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.0.35",
9
+ "version": "0.0.37",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -135,7 +135,7 @@ interface quality, quality attributes, and architecture governance.
135
135
  README files, or folder structure.
136
136
 
137
137
  Investigate the following architecture quality aspects across
138
- 6 thematic blocks:
138
+ 7 thematic blocks:
139
139
 
140
140
  **Block 1 — Component Boundaries**:
141
141
 
@@ -21,6 +21,10 @@ allowed-tools:
21
21
  Discover Components
22
22
  ===================
23
23
 
24
+ <skill name="ase-arch-discover">
25
+ Discover Components
26
+ </skill>
27
+
24
28
  Your role is an experienced, *expert-level software architect*,
25
29
  specialized in *finding components* (libraries/frameworks) for the technology stack.
26
30
 
@@ -167,13 +167,14 @@ permitted way to persist artifacts is via `task_save(...)`.
167
167
 
168
168
  4. **Choose Feature Crafting Approach**:
169
169
 
170
- 1. If <getopt-option-auto/> is equal `true`:
171
- Let the *user interactively choose* the preferred feature approach A<n/>
172
- with the help of the <user-dialog-tool/> tool. Use *single-selection* only
170
+ 1. If <getopt-option-auto/> is equal `false`:
171
+ Let the *user interactively choose* the preferred feature
172
+ approach A<n/> with the help of the <user-dialog-tool/> tool.
173
+ Use the header `Select Approach` and *single-selection* only
173
174
  and provide small *code change previews*. Mark your recommended
174
175
  feature approach with ` ⚝ **RECOMMENDATION** ⚝` here again.
175
176
 
176
- 2. If <getopt-option-auto/> is not equal `true`:
177
+ 2. If <getopt-option-auto/> is equal `true`:
177
178
  Set <n/> to the number of the feature approach A<n/> you recommend.
178
179
  Output a hint with the following <template/>:
179
180
 
@@ -217,7 +218,7 @@ permitted way to persist artifacts is via `task_save(...)`.
217
218
  - If <getopt-option-next/> is equal to `none`:
218
219
  Let the *user interactively choose* what to do as the next step.
219
220
 
220
- <expand name="user-dialog>
221
+ <expand name="user-dialog">
221
222
  Next Step: How would you like to proceed with the plan?
222
223
  DONE: Stop processing.
223
224
  EDIT: Hand processing off to editing.
@@ -18,6 +18,10 @@ allowed-tools:
18
18
  Explain Source Code
19
19
  ===================
20
20
 
21
+ <skill name="ase-code-explain">
22
+ Explain Source Code
23
+ </skill>
24
+
21
25
  Your role is an experienced, *expert-level software developer*,
22
26
  specialized in *explaining source code*.
23
27
 
@@ -20,6 +20,10 @@ allowed-tools:
20
20
  Project Insight
21
21
  ===============
22
22
 
23
+ <skill name="ase-code-insight">
24
+ Project Insight
25
+ </skill>
26
+
23
27
  Your role is an experienced, *expert-level software developer*,
24
28
  specialized in *analyzing source code* and giving insights.
25
29
 
@@ -14,6 +14,10 @@ effort: medium
14
14
  Lint Source Code
15
15
  ================
16
16
 
17
+ <skill name="ase-code-lint">
18
+ Lint Source Code
19
+ </skill>
20
+
17
21
  Your role is an experienced, *expert-level software developer*,
18
22
  specialized in *analyzing source code*.
19
23
 
@@ -171,14 +171,16 @@ permitted way to persist artifacts is via `task_save(...)`.
171
171
 
172
172
  4. **Choose Refactoring Approach**:
173
173
 
174
- 1. If <getopt-option-auto/> is equal `true`:
175
- Let the *user interactively choose* the preferred refactoring approach A<n/>
176
- with the help of the <user-dialog-tool/> tool. Use *single-selection* only
174
+ 1. If <getopt-option-auto/> is equal `false`:
175
+ Let the *user interactively choose* the preferred refactoring
176
+ approach A<n/> with the help of the <user-dialog-tool/> tool.
177
+ Use the header `Select Approach` and *single-selection* only
177
178
  and provide small *code change previews*. Mark your recommended
178
179
  refactoring approach with ` ⚝ **RECOMMENDATION** ⚝` here again.
179
- Except for the interactive selection, do not output anything in this step.
180
+ Except for the interactive selection, do not output anything in
181
+ this step.
180
182
 
181
- 2. If <getopt-option-auto/> is not equal `true`:
183
+ 2. If <getopt-option-auto/> is equal `true`:
182
184
  Set <n/> to the number of the refactoring approach A<n/> you recommend.
183
185
  Output a hint with the following <template/>:
184
186
 
@@ -222,7 +224,7 @@ permitted way to persist artifacts is via `task_save(...)`.
222
224
  - If <getopt-option-next/> is equal to `none`:
223
225
  Let the *user interactively choose* what to do as the next step.
224
226
 
225
- <expand name="user-dialog>
227
+ <expand name="user-dialog">
226
228
  Next Step: How would you like to proceed with the plan?
227
229
  DONE: Stop processing.
228
230
  EDIT: Hand processing off to editing.
@@ -223,13 +223,14 @@ permitted way to persist artifacts is via `task_save(...)`.
223
223
 
224
224
  4. **Choose Problem Resolution Approach**:
225
225
 
226
- 1. If <getopt-option-auto/> is equal `true`:
227
- Let the *user interactively choose* the preferred resolution approach A<n/>
228
- with the help of the <user-dialog-tool/> tool. Use *single-selection* only
226
+ 1. If <getopt-option-auto/> is equal `false`:
227
+ Let the *user interactively choose* the preferred resolution
228
+ approach A<n/> with the help of the <user-dialog-tool/> tool.
229
+ Use the header `Select Approach` and *single-selection* only
229
230
  and provide small *code change previews*. Mark your recommended
230
231
  resolution approach with ` ⚝ **RECOMMENDATION** ⚝` here again.
231
232
 
232
- 2. If <getopt-option-auto/> is not equal `true`:
233
+ 2. If <getopt-option-auto/> is equal `true`:
233
234
  Set <n/> to the number of the resolution approach A<n/> you recommend.
234
235
  Output a hint with the following <template/>:
235
236
 
@@ -280,7 +281,7 @@ permitted way to persist artifacts is via `task_save(...)`.
280
281
  - If <getopt-option-next/> is equal to `none`:
281
282
  Let the *user interactively choose* what to do as the next step.
282
283
 
283
- <expand name="user-dialog>
284
+ <expand name="user-dialog">
284
285
  Next Step: How would you like to proceed with the plan?
285
286
  DONE: Stop processing.
286
287
  EDIT: Hand processing off to editing.
@@ -20,6 +20,10 @@ allowed-tools:
20
20
  Update ChangeLog Entries
21
21
  ========================
22
22
 
23
+ <skill name="ase-meta-changes">
24
+ Update ChangeLog Entries
25
+ </skill>
26
+
23
27
  Your role is an experienced, *expert-level software developer*,
24
28
  specialized in *Git version control*.
25
29
 
@@ -24,6 +24,10 @@ allowed-tools:
24
24
  Query Foreign LLMs for Chat
25
25
  ===========================
26
26
 
27
+ <skill name="ase-meta-chat">
28
+ Query Foreign LLMs for Chat
29
+ </skill>
30
+
27
31
  Your role is to act as a proxy to query a foreign LLM for a single chat message.
28
32
 
29
33
  <objective>
@@ -44,9 +48,10 @@ Query foreign LLM for: <query>$ARGUMENTS</query>
44
48
  </step>
45
49
 
46
50
  2. <step id="STEP 2: Spawn Agents">
47
- Spawn a *sub-task* with the companion `ase-meta-chat` *agent* for
48
- the selected foreign LLMs, and pass the *second and all remaining*
49
- words of the following <query/> as the query for the selected LLM.
51
+ Spawn a *sub-task* with the companion `ase-meta-chat` *agent* (and
52
+ not this *skill*, but the agent of the same name) for the selected
53
+ foreign LLMs, and pass the *second and all remaining* words of the
54
+ following <query/> as the query for the selected LLM.
50
55
  </step>
51
56
 
52
57
  3. <step id="STEP 3: Return Responses">
@@ -16,6 +16,10 @@ allowed-tools:
16
16
  Git Commit
17
17
  ==========
18
18
 
19
+ <skill name="ase-meta-commit">
20
+ Git Commit
21
+ </skill>
22
+
19
23
  Your role is an experienced, *expert-level software developer*,
20
24
  specialized in *Git commit messages*.
21
25
 
@@ -17,6 +17,10 @@ effort: high
17
17
  Evaluate Alternatives
18
18
  =====================
19
19
 
20
+ <skill name="ase-meta-evaluate">
21
+ Evaluate Alternatives
22
+ </skill>
23
+
20
24
  Your role is an experienced, *expert-level assistant*,
21
25
  specialized in *evaluating alternatives*.
22
26
 
@@ -195,9 +199,10 @@ multi-*criteria* decision matrix.
195
199
  abs(<rating-K/>). Do not output anything.
196
200
 
197
201
  - If <rating-K/> is exactly zero, skip the division entirely
198
- and treat <percentage/> as if it were less than 0.10
199
- (i.e. fall through to the *small distance* branch below),
200
- since a zero best rating signals a near-tied evaluation.
202
+ and treat <percentage/> as if it were equal to <distance/>
203
+ (so a true zero tie with <distance/> = 0 falls into the
204
+ *MULTIPLE BEST* branch below, and a non-zero gap with zero
205
+ best falls into the *small distance* branch below).
201
206
 
202
207
  - By construction, <rating-K/> is the maximum rating across
203
208
  all alternatives, so <distance/> >= 0 always holds; using
@@ -7,7 +7,8 @@ user-invocable: true
7
7
  disable-model-invocation: false
8
8
  effort: medium
9
9
  allowed-tools:
10
- - "Task"
10
+ - "Agent"
11
+ - "TaskCreate"
11
12
  ---
12
13
 
13
14
  @${CLAUDE_SKILL_DIR}/../../meta/ase-persona.md
@@ -16,6 +17,10 @@ allowed-tools:
16
17
  Query Multiple AIs for Quorum Answer
17
18
  ====================================
18
19
 
20
+ <skill name="ase-meta-quorum">
21
+ Query Multiple AIs for Quorum Answer
22
+ </skill>
23
+
19
24
  Your role is an *expert-level assistant*.
20
25
 
21
26
  <objective>
@@ -26,7 +31,7 @@ by querying *multiple* AIs for an *optimal consensus*.
26
31
  <flow>
27
32
  1. <step id="STEP 1: Determine Own Answer">
28
33
  Determine your own answer.
29
- For yourself (Anthropic Claude), first answer the following *<query/>* in advance:
34
+ For yourself (Anthropic Claude), first answer the following <query/> in advance:
30
35
 
31
36
  <query>
32
37
  $ARGUMENTS.
@@ -53,7 +58,7 @@ by querying *multiple* AIs for an *optimal consensus*.
53
58
  3. <step id="STEP 3: Query Foreign AIs">
54
59
  For each of the following foreign AIs and their potentially
55
60
  available, given, corresponding MCP servers, use a *sub-task* and
56
- the `ase-meta-chat` *agent* to perform the above same *<query/>* zero
61
+ the `ase-meta-chat` *agent* to perform the above same <query/> zero
57
62
  or more times and in *parallel* again:
58
63
 
59
64
  - OpenAI ChatGPT: `chat-openai-chatgpt`
@@ -71,8 +76,9 @@ by querying *multiple* AIs for an *optimal consensus*.
71
76
 
72
77
  5. <step id="STEP 5: Determine Consensus Rating">
73
78
  Determine, on a Likert scale of 0..<n/>, the amount of the overall
74
- consensus <c/> of all the responses. The <n/> is 1 plus the number of
75
- available AIs above. If all responses disagree, the consensus <c/> is zero.
79
+ consensus <c/> of all the responses. The <n/> is the *total number of
80
+ responders* (yourself plus all available foreign AIs above).
81
+ If all responses disagree, the consensus <c/> is zero.
76
82
  If all responses agree, <c/> is <n/>.
77
83
 
78
84
  If not all AIs agree, determine a <disagreement/> information,
@@ -21,6 +21,10 @@ allowed-tools:
21
21
  Search the Internet/Web
22
22
  =======================
23
23
 
24
+ <skill name="ase-meta-search">
25
+ Search the Internet/Web
26
+ </skill>
27
+
24
28
  Your role is an expert-level *web specialist*.
25
29
 
26
30
  <objective>
@@ -14,6 +14,10 @@ effort: medium
14
14
  Five-Whys Root-Cause Analysis
15
15
  =============================
16
16
 
17
+ <skill name="ase-meta-why">
18
+ Five-Whys Root-Cause Analysis
19
+ </skill>
20
+
17
21
  Your role is an *expert-level assistant*.
18
22
 
19
23
  <objective>
@@ -38,10 +42,10 @@ addressing surface-level symptoms.
38
42
 
39
43
  2. <step id="STEP 2: ROOT-CAUSE ANALYSIS">
40
44
  Find the root-cause of <problem/> by following the following iteration cycle.
41
- Start with a <question/> equal to the <problem/>.
45
+ Start with a <question/> set equal to the <problem/>.
42
46
 
43
47
  <for items="1 2 3 4 5">
44
- Ask <question/> and document the <answer/> with the following template:
48
+ Ask <question/> and document the answer in <answer/> with the following template:
45
49
  Don't stop at symptoms, keep digging for systemic issues.
46
50
  Multiple root-causes may exist -- explore different branches.
47
51
  Consider both technical, domain-specific, process-related or organizational causes.
@@ -50,7 +54,7 @@ addressing surface-level symptoms.
50
54
  &#x26AA; **WHY <item/>**: <answer/>
51
55
  </template>
52
56
 
53
- Then, for the next iteration let <question/> now be the last <answer/>.
57
+ Then, for the next iteration set <question/> now to be the last <answer/>.
54
58
  The magic is NOT in exactly 5 "Why" -- you can <break/> the iteration
55
59
  when you already reached the root-cause.
56
60
  </for>
@@ -178,7 +178,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
178
178
  - If <getopt-option-plan/> is equal to `none`:
179
179
  Let the *user interactively choose* what to do as the next step.
180
180
 
181
- <expand name="user-dialog>
181
+ <expand name="user-dialog">
182
182
  Previous Plan: Should the previous plan content be overwritten, refined, or preserved?
183
183
  OVERWRITE: Continue operation, overwrite previous plan.
184
184
  REFINE: Continue operation, refine previous plan.
@@ -322,7 +322,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
322
322
  - If <getopt-option-next/> is equal to `none`:
323
323
  Let the *user interactively choose* what to do as the next step.
324
324
 
325
- <expand name="user-dialog>
325
+ <expand name="user-dialog">
326
326
  Next Step: How would you like to proceed with the plan?
327
327
  DONE: Mark plan finalized, exit planning loop.
328
328
  IMPLEMENT: Hand off plan to implementation.
@@ -133,7 +133,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
133
133
  - If <getopt-option-next/> is equal to `none`:
134
134
  Let the *user interactively choose* what to do as the next step.
135
135
 
136
- <expand name="user-dialog>
136
+ <expand name="user-dialog">
137
137
  Next Step: How would you like to proceed with the plan?
138
138
  DONE: Stop processing and PRESERVE task plan.
139
139
  DELETE: Stop processing and DELETE the task plan.
@@ -151,7 +151,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
151
151
  - If <result/> is `DELETE`:
152
152
  Only output the following <template/> and then use the
153
153
  `Skill` tool to invoke the `ase:ase-task-delete` skill in
154
- order to *implement* the updated plan. Immediately stop
154
+ order to *delete* the updated plan. Immediately stop
155
155
  processing the current skill once the `Skill` tool was used.
156
156
 
157
157
  <template>
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-task-list
3
- argument-hint: ""
3
+ argument-hint: "[-v|--verbose]"
4
4
  description: >
5
5
  List all available task ids.
6
6
  Use when user wants to see all tasks.
@@ -11,6 +11,7 @@ effort: low
11
11
 
12
12
  @${CLAUDE_SKILL_DIR}/../../meta/ase-persona.md
13
13
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
14
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
14
15
 
15
16
  Task List
16
17
  =========
@@ -19,10 +20,17 @@ Task List
19
20
  List Task Plans
20
21
  </skill>
21
22
 
22
- 1. Call the `task_list({ verbose: true })` tool from the `ase` MCP service.
23
- The result is a structured object with a `tasks` array where each
24
- entry has an `id` field and an `mtime` field (formatted as
25
- `YYYY-MM-DD HH:MM`).
23
+ <expand name="getopt"
24
+ arg1="ase-task-list"
25
+ arg2="--verbose|-v">
26
+ $ARGUMENTS
27
+ </expand>
28
+
29
+ 1. Call the `task_list(verbose: <getopt-option-verbose/>)` tool from
30
+ the `ase` MCP service. The result is a structured object with a
31
+ `tasks` array where each entry has an `id` field, and -- if
32
+ <getopt-option-verbose/> is `true` -- additionally an `mtime` field
33
+ (formatted as `YYYY-MM-DD HH:MM`).
26
34
 
27
35
  2. If the `tasks` array is empty, output the following <template/>:
28
36
 
@@ -30,16 +38,33 @@ List Task Plans
30
38
  ⧉ **ASE**: ◉ tasks: *(none)*
31
39
  </template>
32
40
 
33
- Else, output the list of tasks with the following <template/>, where
34
- each <id/> and <mtime/> correspond to an entry in the task list:
41
+ Else, dispatch on <getopt-option-verbose/>:
35
42
 
36
- <template>
37
- **ASE**: tasks:
43
+ - If <getopt-option-verbose/> is `true`, output the list of tasks
44
+ with the following <template/>, where each <id/> and <mtime/>
45
+ correspond to an entry in the task list:
38
46
 
39
- | *Task Id* | *Last Modified* |
40
- |-----------|--------------------|
41
- | **<id/>** | `<mtime/>` |
42
- | [...] | [...] |
47
+ <template>
48
+ ⧉ **ASE**: ◉ tasks:
43
49
 
44
- </template>
50
+ | *Task Id* | *Last Modified* |
51
+ |-----------|--------------------|
52
+ | **<id/>** | `<mtime/>` |
53
+ | [...] | [...] |
54
+
55
+ </template>
56
+
57
+ - If <getopt-option-verbose/> is `false`, output the list of tasks
58
+ with the following <template/>, where each <id/> corresponds to
59
+ an entry in the task list:
60
+
61
+ <template>
62
+ ⧉ **ASE**: ◉ tasks:
63
+
64
+ | *Task Id* |
65
+ |-----------|
66
+ | **<id/>** |
67
+ | [...] |
68
+
69
+ </template>
45
70
 
@@ -155,7 +155,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
155
155
  - If <getopt-option-next/> is equal to `none`:
156
156
  Let the *user interactively choose* what to do as the next step.
157
157
 
158
- <expand name="user-dialog>
158
+ <expand name="user-dialog">
159
159
  Next Step: How would you like to proceed with the plan?
160
160
  DONE: Stop processing.
161
161
  EDIT: Hand processing off to editing.
@@ -148,7 +148,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
148
148
  - If <getopt-option-next/> is equal to `none`:
149
149
  Let the *user interactively choose* what to do as the next step.
150
150
 
151
- <expand name="user-dialog>
151
+ <expand name="user-dialog">
152
152
  Next Step: How would you like to proceed with the plan?
153
153
  DONE: Stop processing.
154
154
  EDIT: Hand processing off to editing.