@rse/ase 0.0.55 → 0.0.57

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 (65) hide show
  1. package/package.json +1 -1
  2. package/plugin/.claude-plugin/plugin.json +1 -1
  3. package/plugin/.github/plugin/plugin.json +1 -1
  4. package/plugin/agents/ase-meta-search.md +2 -2
  5. package/plugin/etc/markdownlint.yaml +1 -0
  6. package/plugin/meta/ase-constitution.md +2 -1
  7. package/plugin/meta/ase-control.md +6 -6
  8. package/plugin/meta/ase-dialog.md +2 -2
  9. package/plugin/meta/ase-getopt.md +18 -15
  10. package/plugin/meta/ase-skill.md +24 -7
  11. package/plugin/package.json +1 -1
  12. package/plugin/skills/ase-arch-analyze/SKILL.md +3 -10
  13. package/plugin/skills/ase-arch-analyze/help.md +50 -0
  14. package/plugin/skills/ase-arch-discover/SKILL.md +5 -12
  15. package/plugin/skills/ase-arch-discover/help.md +48 -0
  16. package/plugin/skills/ase-code-analyze/SKILL.md +1 -9
  17. package/plugin/skills/ase-code-analyze/help.md +47 -0
  18. package/plugin/skills/ase-code-craft/SKILL.md +29 -19
  19. package/plugin/skills/ase-code-craft/help.md +66 -0
  20. package/plugin/skills/ase-code-explain/SKILL.md +1 -9
  21. package/plugin/skills/ase-code-explain/help.md +43 -0
  22. package/plugin/skills/ase-code-insight/SKILL.md +1 -9
  23. package/plugin/skills/ase-code-insight/help.md +43 -0
  24. package/plugin/skills/ase-code-lint/SKILL.md +1 -9
  25. package/plugin/skills/ase-code-lint/help.md +54 -0
  26. package/plugin/skills/ase-code-refactor/SKILL.md +29 -19
  27. package/plugin/skills/ase-code-refactor/help.md +66 -0
  28. package/plugin/skills/ase-code-resolve/SKILL.md +30 -20
  29. package/plugin/skills/ase-code-resolve/help.md +73 -0
  30. package/plugin/skills/ase-docs-proofread/SKILL.md +3 -12
  31. package/plugin/skills/ase-docs-proofread/help.md +54 -0
  32. package/plugin/skills/ase-meta-changes/SKILL.md +1 -9
  33. package/plugin/skills/ase-meta-changes/help.md +33 -0
  34. package/plugin/skills/ase-meta-chat/SKILL.md +1 -8
  35. package/plugin/skills/ase-meta-chat/help.md +45 -0
  36. package/plugin/skills/ase-meta-commit/SKILL.md +1 -8
  37. package/plugin/skills/ase-meta-commit/help.md +31 -0
  38. package/plugin/skills/ase-meta-evaluate/SKILL.md +5 -13
  39. package/plugin/skills/ase-meta-evaluate/help.md +52 -0
  40. package/plugin/skills/ase-meta-persona/SKILL.md +11 -5
  41. package/plugin/skills/ase-meta-persona/help.md +50 -0
  42. package/plugin/skills/ase-meta-quorum/SKILL.md +1 -8
  43. package/plugin/skills/ase-meta-quorum/help.md +41 -0
  44. package/plugin/skills/ase-meta-search/SKILL.md +1 -8
  45. package/plugin/skills/ase-meta-search/help.md +39 -0
  46. package/plugin/skills/ase-meta-why/SKILL.md +1 -8
  47. package/plugin/skills/ase-meta-why/help.md +39 -0
  48. package/plugin/skills/ase-task-delete/SKILL.md +16 -10
  49. package/plugin/skills/ase-task-delete/help.md +47 -0
  50. package/plugin/skills/ase-task-edit/SKILL.md +59 -33
  51. package/plugin/skills/ase-task-edit/help.md +75 -0
  52. package/plugin/skills/ase-task-id/SKILL.md +7 -6
  53. package/plugin/skills/ase-task-id/help.md +42 -0
  54. package/plugin/skills/ase-task-implement/SKILL.md +27 -16
  55. package/plugin/skills/ase-task-implement/help.md +56 -0
  56. package/plugin/skills/ase-task-list/SKILL.md +6 -5
  57. package/plugin/skills/ase-task-list/help.md +43 -0
  58. package/plugin/skills/ase-task-preflight/SKILL.md +29 -18
  59. package/plugin/skills/ase-task-preflight/help.md +58 -0
  60. package/plugin/skills/ase-task-reboot/SKILL.md +47 -32
  61. package/plugin/skills/ase-task-reboot/help.md +55 -0
  62. package/plugin/skills/ase-task-rename/SKILL.md +5 -10
  63. package/plugin/skills/ase-task-rename/help.md +44 -0
  64. package/plugin/skills/ase-task-view/SKILL.md +15 -9
  65. package/plugin/skills/ase-task-view/help.md +43 -0
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.55",
9
+ "version": "0.0.57",
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.55",
3
+ "version": "0.0.57",
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.55",
3
+ "version": "0.0.57",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -4,8 +4,8 @@ description: Query the Web
4
4
  model: sonnet
5
5
  effort: low
6
6
  tools:
7
- - "mcp__perplexity__perplexity_search"
8
- - "mcp__brave__brave_web_search"
7
+ - "mcp__search-perplexity__perplexity_search"
8
+ - "mcp__search-brave__brave_web_search"
9
9
  - "mcp__search-exa__web_search_exa"
10
10
  - "WebSearch"
11
11
  ---
@@ -15,4 +15,5 @@ no-space-in-code: false
15
15
  ul-indent: false
16
16
  ol-indent: false
17
17
  heading-style: false
18
+ no-multiple-space-atx: false
18
19
 
@@ -3,7 +3,8 @@ ASE Constitution
3
3
  ================
4
4
 
5
5
  You are **Claude Code**, an expert-level AI coding assistant.
6
- You have the **Agentic Software Engineering (ASE)** facility enabled.
6
+ You have the **Agentic Software Engineering (ASE)** facility enabled,
7
+ which boosts you to an expert-level Software Engineering AI agent.
7
8
 
8
9
  If <ase-headless/> is empty or not set,
9
10
  you *MUST* once and immediately output the following <template/> now:
@@ -16,12 +16,12 @@ Control Flow Constructs
16
16
  - *IMPORTANT*: You *MUST* honor the following control flow construct:
17
17
  <expand name="<define-name/>" [arg1="<expand-arg1/>" [arg2="<expand-arg2/>" [...]]]><expand-content/></expand>:
18
18
 
19
- This specifies the *expansion* of previous <define/>.
20
- This construct is expanded into the <define-body/> of <define/>
21
- with `<args/>` substituted with `<expand-arg1/> <expand-arg2/>
22
- [...]`, `<arg1/>` substituted with <expand-arg1/>, and `<content/>`
23
- substituted with <expand-content/>.
24
- Do not output anything else.
19
+ This specifies the *expansion* of previous <define/>. This
20
+ construct is expanded to the <define-body/> of <define/> with
21
+ `<args/>` substituted with `<expand-arg1/> <expand-arg2/> [...]`,
22
+ `<arg1/>` substituted with <expand-arg1/>, `<arg2/>` substituted
23
+ with <expand-arg2/>, etc, and `<content/>` substituted with
24
+ <expand-content/>. Do not output anything else.
25
25
 
26
26
  - *IMPORTANT*: You *MUST* honor the following control flow construct:
27
27
  <flow><flow-body/></flow>:
@@ -38,7 +38,7 @@ Let the *user interactively choose* an answer.
38
38
 
39
39
  Start with <n>0</n> (set entry count to zero).
40
40
  <for items="2 3 4 5">
41
- Take from <config/> the line number <item/>.
41
+ Take from <spec/> the line number <item/>.
42
42
  If this line does not exist, <break/>.
43
43
  If this line exists, parse it according to the format `<label/>: <description/>`.
44
44
  If <config/> is not empty, set <config><config/>, </config> (append comma).
@@ -93,7 +93,7 @@ Let the *user interactively choose* an answer.
93
93
 
94
94
  Start with <n>0</n> (set entry count to zero).
95
95
  <for items="2 3 4 5">
96
- Take from <config/> the line number <item/>.
96
+ Take from <spec/> the line number <item/>.
97
97
  If this line does not exist, <break/>.
98
98
  If this line exists, parse it according to the format `<label/>: <description/>`.
99
99
  If <config/> is not empty, set <config><config/>, </config> (append comma).
@@ -9,7 +9,7 @@ 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>.
12
+ Set <getopt-spec>--help|-h <arg2/></getopt-spec>.
13
13
  Set <getopt-opts><arg3/></getopt-opts>.
14
14
  Set <getopt-args><content/></getopt-args>.
15
15
 
@@ -20,13 +20,14 @@ set placeholders into the context as a side-effect.
20
20
  then just silently *SKIP* the following steps 3-7!
21
21
 
22
22
  3. **MCP Call**:
23
- Call the `ase_getopt(name: <getopt-skill/>, spec: <getopt-spec/>, args:
24
- <getopt-args/>)` tool of the `ase` MCP server and set <text/> to the
25
- `text` output field of this tool call. The `spec` syntax for each
26
- option token is `--<long>[|-<short>][=<default>|=(<c1>|<c2>|...)]`,
27
- where `=<default>` declares a value-taking option with a default,
28
- and `=(<c1>|<c2>|...)` declares a value-taking option restricted to
29
- the listed fixed choices (the first choice acts as the default).
23
+ Call the `ase_getopt(name: "<getopt-skill/>", spec:
24
+ "<getopt-spec/>", args: "<getopt-args/>")` tool of the `ase`
25
+ MCP server and set <text/> to the `text` output field of
26
+ this tool call. The `spec` syntax for each option token is
27
+ `--<long>[|-<short>][=<default>|=(<c1>|<c2>|...)]`, where
28
+ `=<default>` declares a value-taking option with a default, and
29
+ `=(<c1>|<c2>|...)` declares a value-taking option restricted to the
30
+ listed fixed choices (the first choice acts as the default).
30
31
 
31
32
  4. **Short-Circuit for Error**:
32
33
  If <text/> starts with `ERROR:`:
@@ -35,7 +36,7 @@ set placeholders into the context as a side-effect.
35
36
  then immediately *STOP* processing the entire current skill:
36
37
 
37
38
  <template>
38
- ⧉ **ASE**: skill: **<getopt-skill/>**, ▶ ERROR: option parsing failed: **<text/>**
39
+ ⧉ **ASE**: skill: **<getopt-skill/>**, ▶ ERROR: option parsing failed: **<text/>**
39
40
  </template>
40
41
 
41
42
  5. **Parsing JSON Result**:
@@ -47,22 +48,24 @@ set placeholders into the context as a side-effect.
47
48
  {
48
49
  "opts": { "<long1/>": <value1/>, "<long2/>": <value2/>, ... },
49
50
  "argv": [ "<arg1/>", "<arg2/>", ... ],
50
- "args": "..."
51
+ "args": "...",
52
+ "info": "..."
51
53
  }
52
54
  ```
53
55
 
54
56
  6. **Materializing into Context**:
55
- For each *key* `<long/>` in <getopt-result/>`.opts`:
56
- Set <getopt-option-<long/>/> to the corresponding value from
57
- `<getopt-result/>.opts[<long/>]`.
57
+ For each *key* `<longN/>` in <getopt-result/>`.opts`:
58
+ Set <getopt-option-<longN/>/> to the corresponding value
59
+ `<getopt-result/>.opts[<longN/>]`.
58
60
  Set <getopt-arguments/> to the value of `<getopt-result/>.args`.
59
- Set <getopt-info/> to `<getopt-result/>.info`.
61
+ Set <getopt-info/> to `<getopt-result/>.info`, but remove
62
+ information about the `help` option.
60
63
 
61
64
  7. **Display Results**:
62
65
  Just output the following <template/>:
63
66
 
64
67
  <template>
65
- ⧉ **ASE**: skill: **<getopt-skill/>**, ▶ options: <getopt-info/>
68
+ ⧉ **ASE**: skill: **<getopt-skill/>**, ▶ options: <getopt-info/>
66
69
  </template>
67
70
  </define>
68
71
 
@@ -160,14 +160,23 @@ Skill Identification
160
160
 
161
161
  - *IMPORTANT*: Set <skill></skill> (set to empty)
162
162
  and <skill-name></skill-name> (set name to empty).
163
- Then, in case <skill/> later becomes *not* empty
164
- by defining it as <skill name="<name/>"><body/></skill>,
165
- set <skill-name><name/></skill-name> (set skill name to name),
166
- set <skill><body/></skill> (set skill to body), and
167
- then you *MUST* once output the following output <template/>:
163
+
164
+ In case <skill/> later becomes *not* empty by defining it as <skill
165
+ name="<name/>"><body/></skill>, set <skill-name><name/></skill-name>
166
+ (set skill name to name), and then (but only if `$1` is *NOT* equal
167
+ to `-h` or `--help`) you *MUST* once output the following output
168
+ <template/>:
169
+
170
+ <template>
171
+ ⧉ **ASE**: ✪ skill: **<skill-name/>**, ✦ purpose: **<skill/>**, ▶ status: **skill started**
172
+ </template>
173
+
174
+ Later (but only if `$1` is *NOT* equal to `-h` or `--help`), once
175
+ this skill finally will stop processing, you *MUST* once output the
176
+ following output <template/>:
168
177
 
169
178
  <template>
170
- ⧉ **ASE**: skill: **<skill-name/>**, ✦ purpose: **<skill/>**, ▶ status: **skill started**
179
+ ⧉ **ASE**: skill: **<skill-name/>**, status: **skill finished**
171
180
  </template>
172
181
 
173
182
  - *IMPORTANT*: Set <objective></objective> (set to empty).
@@ -175,6 +184,14 @@ Skill Identification
175
184
  you *MUST* once output the following output <template/>:
176
185
 
177
186
  <template>
178
- ⧉ **ASE**: ◎ objective: **<objective/>**
187
+ ⧉ **ASE**: ✪ skill: **<skill-name/>**, ◎ objective: **<objective/>**
179
188
  </template>
180
189
 
190
+ - *IMPORTANT*:
191
+ If `$1` (the first token of the skill arguments) is equal to `-h` or
192
+ `--help`, you *MUST* once output the following output <template/> and
193
+ then *IMMEDIATELY* *STOP* the further skill processing:
194
+
195
+ <template>
196
+ @${CLAUDE_SKILL_DIR}/help.md
197
+ </template>
@@ -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.55",
9
+ "version": "0.0.57",
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-arch-analyze
3
- argument-hint: "<source-reference>"
3
+ argument-hint: "[--help|-h] <source-reference>"
4
4
  description: Review software architecture, including package cohesion and inter-package coupling
5
5
  user-invocable: true
6
6
  disable-model-invocation: false
@@ -102,20 +102,13 @@ allowed-tools:
102
102
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
103
103
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
104
104
 
105
- Review Software Architecture
106
- ============================
107
-
108
105
  <skill name="ase-arch-analyze">
109
106
  Review Software Architecture
110
107
  </skill>
111
108
 
112
- <role>
113
- Your role is an experienced, *expert-level software architect*,
114
- specialized in *reviewing software architecture*.
115
- </role>
116
-
117
109
  <objective>
118
- *Review* the *software architecture* of $ARGUMENTS, and its directly
110
+ With the mindset of an *expert-level software architect*,
111
+ *review* the *software architecture* of $ARGUMENTS, and its directly
119
112
  related source code, for *potential problems* across component
120
113
  boundaries, structural organization, architecture principles,
121
114
  interface quality, quality attributes, and architecture governance.
@@ -0,0 +1,50 @@
1
+
2
+ ## NAME
3
+
4
+ `ase-arch-analyze` - Review Software Architecture
5
+
6
+ ## SYNOPSIS
7
+
8
+ `ase-arch-analyze`
9
+ [`--help`|`-h`]
10
+ *source-reference*
11
+
12
+ ## DESCRIPTION
13
+
14
+ The `ase-arch-analyze` skill reviews the *software architecture* of
15
+ the referenced source code, including *package cohesion* and *inter-
16
+ package coupling*, for *potential problems* across component boundaries,
17
+ structural organization, architecture principles, interface quality,
18
+ quality attributes, and architecture governance.
19
+
20
+ The skill investigates 21 architecture quality aspects across 7 thematic
21
+ blocks (component boundaries, structural organization, architecture
22
+ principles, interface quality, quality attributes, architecture
23
+ governance, and package cohesion), renders a high-level architecture
24
+ diagram, and reports findings as either `PROBLEM` or `TRADEOFF` entries
25
+ based on a built-in tension matrix.
26
+
27
+ ## ARGUMENTS
28
+
29
+ *source-reference*:
30
+ A file, directory, or other reference to the source code that
31
+ is to be analyzed architecturally.
32
+
33
+ ## EXAMPLES
34
+
35
+ Analyze architecture of the current project:
36
+
37
+ ```text
38
+ ❯ /ase-arch-analyze src/
39
+ ```
40
+
41
+ Analyze a specific module:
42
+
43
+ ```text
44
+ ❯ /ase-arch-analyze src/core
45
+ ```
46
+
47
+ ## SEE ALSO
48
+
49
+ `ase-arch-discover`, `ase-code-analyze`, `ase-code-resolve`,
50
+ `ase-code-refactor`, `ase-code-insight`.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-arch-discover
3
- argument-hint: "<functionality>"
3
+ argument-hint: "[--help|-h] <functionality>"
4
4
  description: >
5
5
  Discover additional, third-party components (libraries/frameworks) for
6
6
  the technology stack to provide needed functionality.
@@ -17,18 +17,10 @@ allowed-tools:
17
17
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
18
18
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
19
19
 
20
- Discover Components
21
- ===================
22
-
23
20
  <skill name="ase-arch-discover">
24
21
  Discover Components
25
22
  </skill>
26
23
 
27
- <role>
28
- Your role is an experienced, *expert-level software architect*,
29
- specialized in *finding components* (libraries/frameworks) for the technology stack.
30
- </role>
31
-
32
24
  <objective>
33
25
  *Discover* additional, *third-party components* (libraries/frameworks)
34
26
  for the technology stack to *provide* the *needed functionality*
@@ -131,12 +123,13 @@ for the technology stack to *provide* the *needed functionality*
131
123
  into the already existing result set, but deduplicate
132
124
  entries by Maven coordinate.
133
125
 
134
- - Call the `ase_component_info(stack: <stack/>, components:
135
- [ <package-1/>, ..., <package-N/> ])` tool of the `ase` MCP
126
+ - Call the `ase_component_info(stack: "<stack/>", components:
127
+ [ "<package-1/>", ..., "<package-N/>" ])` tool of the `ase` MCP
136
128
  server *once* for the entire set of discovered packages.
137
129
  The tool dispatches internally on <stack/> and fetches all
138
130
  metadata in maximum parallel and returns an array of objects `{
139
- name, version, time, repository, stars, downloads }`. For each
131
+ name, version, created, updated, repository, stars, downloads,
132
+ rank }`. For each
140
133
  component <component-K/> (K=1-N) read from its corresponding
141
134
  entry: <version-K/> from `version`, <updated-K/> from `updated`,
142
135
  <created-K/> from `created`, <repository-K/> from `repository`,
@@ -0,0 +1,48 @@
1
+
2
+ ## NAME
3
+
4
+ `ase-arch-discover` - Discover Components
5
+
6
+ ## SYNOPSIS
7
+
8
+ `ase-arch-discover`
9
+ [`--help`|`-h`]
10
+ *functionality*
11
+
12
+ ## DESCRIPTION
13
+
14
+ The `ase-arch-discover` skill discovers additional, *third-party
15
+ components* (libraries/frameworks) for the technology stack that
16
+ provide the needed *functionality*.
17
+
18
+ The skill determines the project's technology stack (TypeScript,
19
+ JavaScript, Kotlin, or Java), derives essential keywords from the
20
+ requested functionality, queries the corresponding package registry
21
+ (NPM or Maven Central), retrieves metadata (version, downloads,
22
+ stars, dates) via the `ase_component_info` MCP tool, and reports
23
+ the top-ranked components as a Markdown table together with a single
24
+ distinguishing hint (USP, Crux, or Gotcha) per component.
25
+
26
+ ## ARGUMENTS
27
+
28
+ *functionality*:
29
+ A short description of the desired functionality the third-party
30
+ component should provide.
31
+
32
+ ## EXAMPLES
33
+
34
+ Discover components for JSON schema validation:
35
+
36
+ ```text
37
+ ❯ /ase-arch-discover JSON schema validation
38
+ ```
39
+
40
+ Discover components for HTTP client functionality:
41
+
42
+ ```text
43
+ ❯ /ase-arch-discover HTTP client with retries
44
+ ```
45
+
46
+ ## SEE ALSO
47
+
48
+ `ase-arch-analyze`, `ase-meta-search`, `ase-meta-evaluate`.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-code-analyze
3
- argument-hint: "<source-reference>"
3
+ argument-hint: "[--help|-h] <source-reference>"
4
4
  description: >
5
5
  Analyze the source code for problems in the logic and semantics and its related control flow.
6
6
  user-invocable: true
@@ -13,18 +13,10 @@ allowed-tools:
13
13
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
14
14
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
15
15
 
16
- Analyze Source Code
17
- ===================
18
-
19
16
  <skill name="ase-code-analyze">
20
17
  Analyze Source Code
21
18
  </skill>
22
19
 
23
- <role>
24
- Your role is an experienced, *expert-level software developer*,
25
- specialized in *analyzing source code*.
26
- </role>
27
-
28
20
  <objective>
29
21
  *Analyze* the source code of $ARGUMENTS, and its directly related source
30
22
  code, for problems in its *logic* and *semantics* and its related
@@ -0,0 +1,47 @@
1
+
2
+ ## NAME
3
+
4
+ `ase-code-analyze` - Analyze Source Code
5
+
6
+ ## SYNOPSIS
7
+
8
+ `ase-code-analyze`
9
+ [`--help`|`-h`]
10
+ *source-reference*
11
+
12
+ ## DESCRIPTION
13
+
14
+ The `ase-code-analyze` skill analyzes the source code of the referenced
15
+ location, and its directly related source code, for problems in its
16
+ *logic*, *semantics*, and related *control flow*.
17
+
18
+ The skill investigates the code base silently, reports each detected
19
+ problem as a `PROBLEM` entry with severity (`LOW`, `MEDIUM`, `HIGH`),
20
+ inline file/line references, and persists results in the `ase` MCP
21
+ key/value store as `ase-issue-P<n>` entries so they can later be
22
+ resolved via `ase-code-resolve P<n>`.
23
+
24
+ ## ARGUMENTS
25
+
26
+ *source-reference*:
27
+ A file, directory, function, or other reference to the source code
28
+ to analyze.
29
+
30
+ ## EXAMPLES
31
+
32
+ Analyze a specific source file:
33
+
34
+ ```text
35
+ ❯ /ase-code-analyze src/server.ts
36
+ ```
37
+
38
+ Analyze a directory of code:
39
+
40
+ ```text
41
+ ❯ /ase-code-analyze src/handlers/
42
+ ```
43
+
44
+ ## SEE ALSO
45
+
46
+ `ase-code-resolve`, `ase-code-refactor`, `ase-code-lint`,
47
+ `ase-code-explain`, `ase-arch-analyze`.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-code-craft
3
- argument-hint: "[<task-id>:] <feature>"
3
+ argument-hint: "[--help|-h] [--auto|-a] [--next|-n <option>] [<task-id>:] <feature>"
4
4
  description: >
5
5
  Craft Source Code:
6
6
  Use when user wants to create or craft a new feature from scratch.
@@ -17,9 +17,6 @@ allowed-tools:
17
17
  @${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
18
18
  @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
19
19
 
20
- Craft Feature
21
- =============
22
-
23
20
  <skill name="ase-code-craft">
24
21
  Craft Source Code
25
22
  </skill>
@@ -30,10 +27,6 @@ Craft Source Code
30
27
  $ARGUMENTS
31
28
  </expand>
32
29
 
33
- <role>
34
- Your role is an experienced, *expert-level software developer*.
35
- </role>
36
-
37
30
  <objective>
38
31
  From scratch *craft* the following feature:
39
32
  <feature><getopt-arguments/></feature>
@@ -61,7 +54,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
61
54
  ">
62
55
  Set <ase-task-id><feature/></ase-task-id> (set task id to feature)
63
56
  and <feature></feature> (set feature empty), call the
64
- `ase_task_id(id: <ase-task-id/>, session: <ase-session-id/>)` tool
57
+ `ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")` tool
65
58
  from the `ase` MCP server to switch the task, and then only
66
59
  output the following <template/>:
67
60
 
@@ -73,8 +66,8 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
73
66
  2. If <feature/> has the format `<id/>: <text/>` where <id/> matches
74
67
  the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`, then set
75
68
  <feature><text/></feature> and <ase-task-id><id/></ase-task-id>
76
- and call the `ase_task_id(id: <ase-task-id/>, session:
77
- <ase-session-id/>)` tool from the `ase` MCP server to
69
+ and call the `ase_task_id(id: "<ase-task-id/>", session:
70
+ "<ase-session-id/>")` tool from the `ase` MCP server to
78
71
  implicitly switch the task. Do not output anything.
79
72
 
80
73
  3. If <feature/> is empty,
@@ -91,8 +84,8 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
91
84
  ">
92
85
  Set <ase-task-id/> to a unique task id, derived from <feature/>,
93
86
  which consists of two lower-case words concatenated with a
94
- `-` character. Then call the `ase_task_id(id: <ase-task-id/>,
95
- session: <ase-session-id/>)` tool from the `ase` MCP server to
87
+ `-` character. Then call the `ase_task_id(id: "<ase-task-id/>",
88
+ session: "<ase-session-id/>")` tool from the `ase` MCP server to
96
89
  implicitly switch the task. Do not output anything.
97
90
  </if>
98
91
 
@@ -279,7 +272,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
279
272
  words <words/> of <content/>.
280
273
 
281
274
  3. You *MUST* *save* the resulting plan content with the
282
- `ase_task_save(id: <ase-task-id/>, text: <content/>)`.
275
+ `ase_task_save(id: "<ase-task-id/>", text: "<content/>")`.
283
276
 
284
277
  4. Output a hint with the following <template/>:
285
278
 
@@ -287,9 +280,26 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
287
280
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan created**
288
281
  </template>
289
282
 
290
- 5. Directly pass-through control to the `ase:ase-task-edit` skill.
291
- Set <args></args> (set args to empty). If <getopt-option-next/>
292
- is not equal `none`, set <args><args/> --next
293
- <getopt-option-next/></args> (append to args). Then call the
294
- tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`.
283
+ 5. Directly pass-through control to the next skill:
284
+
285
+ 1. <if condition="<getopt-option-next/> is equal `IMPLEMENT`">
286
+ Call the tool `Skill(skill: "ase:ase-task-implement")` to
287
+ *implement* the freshly composed plan, bypassing `ase-task-edit`.
288
+ </if>
289
+
290
+ 2. <if condition="<getopt-option-next/> is equal `PREFLIGHT`">
291
+ Call the tool `Skill(skill: "ase:ase-task-preflight")` to
292
+ *preflight* the freshly composed plan, bypassing `ase-task-edit`.
293
+ </if>
294
+
295
+ 3. <if condition="
296
+ <getopt-option-next/> is not equal `IMPLEMENT` AND
297
+ <getopt-option-next/> is not equal `PREFLIGHT`
298
+ ">
299
+ Set <args></args> (set args to empty).
300
+ <if condition="<getopt-option-next/> is not equal `none`">
301
+ Set <args><args/> --next <getopt-option-next/></args> (append to args).
302
+ </if>
303
+ Then call the tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`.
304
+ </if>
295
305
 
@@ -0,0 +1,66 @@
1
+
2
+ ## NAME
3
+
4
+ `ase-code-craft` - Craft Source Code
5
+
6
+ ## SYNOPSIS
7
+
8
+ `ase-code-craft`
9
+ [`--help`|`-h`]
10
+ [`--auto`|`-a`]
11
+ [`--next`|`-n` *option*]
12
+ [*task-id*:] *feature*
13
+
14
+ ## DESCRIPTION
15
+
16
+ The `ase-code-craft` skill crafts a *new feature* from scratch by
17
+ investigating the existing code base, internalizing crafting tenets
18
+ (KISS, YAGNI, DRY, SRP, loose coupling, ...), proposing one or more
19
+ *feature approaches* with pros and cons, letting the user pick the
20
+ preferred approach, and composing a corresponding *task plan* aligned
21
+ with the existing architecture.
22
+
23
+ The skill does *not* directly modify source files. It persists the
24
+ plan via `ase_task_save` and then hands off to `ase-task-edit`,
25
+ `ase-task-preflight`, or `ase-task-implement`, as selected by
26
+ `--next`.
27
+
28
+ ## OPTIONS
29
+
30
+ `--auto`|`-a`:
31
+ Automatically pick the recommended feature approach without
32
+ asking the user via the interactive dialog.
33
+
34
+ `--next`|`-n` *option*:
35
+ Automatically choose the next step after composing the plan,
36
+ where *option* is either `none` (default, hand-off to
37
+ `ase-task-edit` interactively), `DONE` (stop), `EDIT` (hand off
38
+ to `ase-task-edit`), `PREFLIGHT` (hand off to
39
+ `ase-task-preflight`), or `IMPLEMENT` (hand off to
40
+ `ase-task-implement`).
41
+
42
+ ## ARGUMENTS
43
+
44
+ [*task-id*:] *feature*:
45
+ Description of the *feature* to craft. Optionally prefixed with
46
+ a *task-id* followed by a colon to bind the resulting plan to
47
+ a specific task id.
48
+
49
+ ## EXAMPLES
50
+
51
+ Craft a new logging feature:
52
+
53
+ ```text
54
+ ❯ /ase-code-craft add structured JSON logging with log levels
55
+ ```
56
+
57
+ Craft a feature under a named task and directly hand off to implementation:
58
+
59
+ ```text
60
+ ❯ /ase-code-craft --next IMPLEMENT auth: add JWT authentication middleware
61
+ ```
62
+
63
+ ## SEE ALSO
64
+
65
+ `ase-code-refactor`, `ase-code-resolve`, `ase-task-edit`,
66
+ `ase-task-preflight`, `ase-task-implement`.