@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.
- package/dst/ase-hello.js +9 -4
- package/dst/ase-hook.js +44 -0
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/hooks/hooks-copilot.json +23 -6
- package/plugin/hooks/hooks.json +20 -3
- package/plugin/meta/ase-dialog.md +17 -3
- package/plugin/meta/ase-getopt.md +6 -6
- package/plugin/meta/ase-plan.md +4 -1
- package/plugin/meta/ase-skill.md +13 -12
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-arch-discover/SKILL.md +4 -0
- package/plugin/skills/ase-code-craft/SKILL.md +6 -5
- package/plugin/skills/ase-code-explain/SKILL.md +4 -0
- package/plugin/skills/ase-code-insight/SKILL.md +4 -0
- package/plugin/skills/ase-code-lint/SKILL.md +4 -0
- package/plugin/skills/ase-code-refactor/SKILL.md +8 -6
- package/plugin/skills/ase-code-resolve/SKILL.md +6 -5
- package/plugin/skills/ase-meta-changes/SKILL.md +4 -0
- package/plugin/skills/ase-meta-chat/SKILL.md +8 -3
- package/plugin/skills/ase-meta-commit/SKILL.md +4 -0
- package/plugin/skills/ase-meta-evaluate/SKILL.md +8 -3
- package/plugin/skills/ase-meta-quorum/SKILL.md +11 -5
- package/plugin/skills/ase-meta-search/SKILL.md +4 -0
- package/plugin/skills/ase-meta-why/SKILL.md +7 -3
- package/plugin/skills/ase-task-edit/SKILL.md +2 -2
- package/plugin/skills/ase-task-implement/SKILL.md +2 -2
- package/plugin/skills/ase-task-list/SKILL.md +39 -14
- package/plugin/skills/ase-task-preflight/SKILL.md +1 -1
- 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
|
|
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("
|
|
18
|
-
.
|
|
19
|
-
|
|
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.
|
|
9
|
+
"version": "0.0.37",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -3,20 +3,37 @@
|
|
|
3
3
|
"hooks": {
|
|
4
4
|
"sessionStart": [
|
|
5
5
|
{
|
|
6
|
-
"type":
|
|
7
|
-
"bash":
|
|
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":
|
|
13
|
-
"bash":
|
|
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":
|
|
19
|
-
"bash":
|
|
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
|
}
|
package/plugin/hooks/hooks.json
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
|
13
|
-
Set <getopt-opts
|
|
14
|
-
Set <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
|
|
59
|
+
Set <getopt-info/> to `<getopt-result/>.info`.
|
|
60
60
|
|
|
61
61
|
7. **Display Results**:
|
|
62
62
|
Just output the following <template/>:
|
package/plugin/meta/ase-plan.md
CHANGED
|
@@ -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: **<
|
|
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
|
package/plugin/meta/ase-skill.md
CHANGED
|
@@ -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),
|
|
23
|
-
replacing the placeholders `<xxx/>` and `[...]
|
|
24
|
-
entities (like `○`) with the corresponding
|
|
22
|
+
(including newlines), *EXCEPT* for expanding control items, removing
|
|
23
|
+
trailing spaces, replacing the placeholders `<xxx/>` and `[...]`,
|
|
24
|
+
replacing XML entities (like `○`) 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
|
|
112
|
-
substituted with `<expand-arg1/> <expand-arg2/>
|
|
113
|
-
substituted with <expand-arg1/>, and `<content/>`
|
|
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
|
-
|
|
164
|
-
`subject`, `description`, and `activeForm` fields of
|
|
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.
|
package/plugin/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.
|
|
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
|
-
|
|
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 `
|
|
171
|
-
Let the *user interactively choose* the preferred feature
|
|
172
|
-
with the help of the <user-dialog-tool/> tool.
|
|
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
|
|
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.
|
|
@@ -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
|
|
|
@@ -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 `
|
|
175
|
-
Let the *user interactively choose* the preferred refactoring
|
|
176
|
-
with the help of the <user-dialog-tool/> tool.
|
|
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
|
|
180
|
+
Except for the interactive selection, do not output anything in
|
|
181
|
+
this step.
|
|
180
182
|
|
|
181
|
-
2. If <getopt-option-auto/> is
|
|
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 `
|
|
227
|
-
Let the *user interactively choose* the preferred resolution
|
|
228
|
-
with the help of the <user-dialog-tool/> tool.
|
|
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
|
|
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*
|
|
48
|
-
|
|
49
|
-
|
|
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">
|
|
@@ -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
|
|
199
|
-
(
|
|
200
|
-
|
|
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
|
-
- "
|
|
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
|
|
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
|
|
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
|
|
75
|
-
|
|
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,
|
|
@@ -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
|
⚪ **WHY <item/>**: <answer/>
|
|
51
55
|
</template>
|
|
52
56
|
|
|
53
|
-
Then, for the next iteration
|
|
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 *
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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,
|
|
34
|
-
each <id/> and <mtime/> correspond to an entry in the task list:
|
|
41
|
+
Else, dispatch on <getopt-option-verbose/>:
|
|
35
42
|
|
|
36
|
-
<
|
|
37
|
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
| **<id/>** | `<mtime/>` |
|
|
42
|
-
| [...] | [...] |
|
|
47
|
+
<template>
|
|
48
|
+
⧉ **ASE**: ◉ tasks:
|
|
43
49
|
|
|
44
|
-
|
|
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.
|