@rse/ase 0.9.64 → 0.9.66

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 (79) hide show
  1. package/dst/ase-hook.js +1 -1
  2. package/dst/ase-metric.js +103 -0
  3. package/dst/ase-mint.js +106 -0
  4. package/dst/ase-service.js +4 -0
  5. package/dst/ase-setup.js +1 -1
  6. package/dst/ase-spec.js +104 -40
  7. package/dst/ase-statusline.js +11 -2
  8. package/dst/ase.js +4 -0
  9. package/package.json +13 -12
  10. package/plugin/.claude-plugin/plugin.json +1 -1
  11. package/plugin/.codex-plugin/plugin.json +1 -1
  12. package/plugin/.github/plugin/plugin.json +1 -1
  13. package/plugin/agents/ase-docs-proofread.md +13 -7
  14. package/plugin/agents/ase-docs-refine.md +165 -0
  15. package/plugin/agents/ase-docs-shorten.md +182 -0
  16. package/plugin/meta/ase-constitution.md +2 -0
  17. package/plugin/meta/ase-tenets.md +12 -0
  18. package/plugin/package.json +4 -4
  19. package/plugin/skills/ase-arch-analyze/help.md +1 -1
  20. package/plugin/skills/ase-arch-discover/help.md +4 -4
  21. package/plugin/skills/ase-code-analyze/help.md +1 -1
  22. package/plugin/skills/ase-code-craft/help.md +7 -7
  23. package/plugin/skills/ase-code-dissect/help.md +5 -5
  24. package/plugin/skills/ase-code-edit/help.md +7 -7
  25. package/plugin/skills/ase-code-explain/help.md +1 -1
  26. package/plugin/skills/ase-code-insight/help.md +1 -1
  27. package/plugin/skills/ase-code-lint/help.md +5 -5
  28. package/plugin/skills/ase-code-refactor/help.md +6 -6
  29. package/plugin/skills/ase-code-resolve/help.md +6 -6
  30. package/plugin/skills/ase-docs-distill/help.md +2 -2
  31. package/plugin/skills/ase-docs-proofread/SKILL.md +16 -12
  32. package/plugin/skills/ase-docs-proofread/help.md +18 -8
  33. package/plugin/skills/ase-docs-refine/SKILL.md +396 -0
  34. package/plugin/skills/ase-docs-refine/help.md +104 -0
  35. package/plugin/skills/ase-docs-shorten/SKILL.md +527 -0
  36. package/plugin/skills/ase-docs-shorten/help.md +120 -0
  37. package/plugin/skills/ase-help-intent/help.md +1 -1
  38. package/plugin/skills/ase-help-skill/catalog.md +4 -1
  39. package/plugin/skills/ase-help-skill/help.md +1 -1
  40. package/plugin/skills/ase-meta-brainstorm/help.md +5 -5
  41. package/plugin/skills/ase-meta-chat/help.md +2 -2
  42. package/plugin/skills/ase-meta-config/help.md +3 -3
  43. package/plugin/skills/ase-meta-diaboli/help.md +2 -2
  44. package/plugin/skills/ase-meta-diff/help.md +3 -3
  45. package/plugin/skills/ase-meta-eli5/help.md +2 -2
  46. package/plugin/skills/ase-meta-evaluate/help.md +1 -1
  47. package/plugin/skills/ase-meta-mint/SKILL.md +157 -0
  48. package/plugin/skills/ase-meta-mint/help.md +114 -0
  49. package/plugin/skills/ase-meta-proximity/help.md +3 -3
  50. package/plugin/skills/ase-meta-quorum/help.md +2 -2
  51. package/plugin/skills/ase-meta-quotes/help.md +4 -4
  52. package/plugin/skills/ase-meta-review/help.md +1 -1
  53. package/plugin/skills/ase-meta-search/help.md +2 -2
  54. package/plugin/skills/ase-meta-steelman/help.md +3 -3
  55. package/plugin/skills/ase-meta-why/help.md +3 -3
  56. package/plugin/skills/ase-meta-workflow/SKILL.md +3 -2
  57. package/plugin/skills/ase-meta-workflow/help.md +4 -4
  58. package/plugin/skills/ase-meta-workflow/workflow.txt +8 -2
  59. package/plugin/skills/ase-spec-edit/SKILL.md +1 -1
  60. package/plugin/skills/ase-spec-edit/help.md +6 -6
  61. package/plugin/skills/ase-sync-export/SKILL.md +3 -1
  62. package/plugin/skills/ase-sync-export/help.md +1 -1
  63. package/plugin/skills/ase-sync-import/SKILL.md +1 -1
  64. package/plugin/skills/ase-sync-import/help.md +2 -2
  65. package/plugin/skills/ase-sync-reconcile/SKILL.md +1 -1
  66. package/plugin/skills/ase-sync-reconcile/help.md +4 -4
  67. package/plugin/skills/ase-task-condense/SKILL.md +7 -4
  68. package/plugin/skills/ase-task-condense/help.md +2 -2
  69. package/plugin/skills/ase-task-delete/help.md +1 -1
  70. package/plugin/skills/ase-task-dissect/help.md +5 -5
  71. package/plugin/skills/ase-task-edit/help.md +4 -4
  72. package/plugin/skills/ase-task-grill/help.md +3 -3
  73. package/plugin/skills/ase-task-id/help.md +1 -1
  74. package/plugin/skills/ase-task-implement/help.md +3 -3
  75. package/plugin/skills/ase-task-list/help.md +3 -3
  76. package/plugin/skills/ase-task-preflight/help.md +2 -2
  77. package/plugin/skills/ase-task-reboot/help.md +2 -2
  78. package/plugin/skills/ase-task-rename/help.md +1 -1
  79. package/plugin/skills/ase-task-view/help.md +2 -2
@@ -35,29 +35,29 @@ the highest-ranked option or a principled synthesis of the shortlist.
35
35
 
36
36
  ## OPTIONS
37
37
 
38
- `--max-clarify`|`-c=3`:
38
+ - `--max-clarify`|`-c=3`:
39
39
  The *maximum* number of essential-unknown clarification questions
40
40
  asked in the *clarify intent* phase (default: 3). Lower it for a
41
41
  faster, leaner intake, raise it for more upfront grounding.
42
42
 
43
- `--min-ideas`|`-i=12`:
43
+ - `--min-ideas`|`-i=12`:
44
44
  The *minimum* number of candidate ideas to generate in the *diverge*
45
45
  phase before converging (default: 12). Raise it for a broader idea
46
46
  space, lower it for a quicker, narrower session.
47
47
 
48
- `--min-rank`|`-r=7`:
48
+ - `--min-rank`|`-r=7`:
49
49
  The *minimum* 0-10 fit rank an idea must score to survive the
50
50
  *converge* phase (default: 7). Raise it for a stricter filter, lower
51
51
  it to retain more ideas.
52
52
 
53
- `--max-shortlist`|`-s=4`:
53
+ - `--max-shortlist`|`-s=4`:
54
54
  The *maximum* number of distilled options on the final *shortlist*
55
55
  (default: 4). Lower it for a sharper focus, raise it for more
56
56
  finalists.
57
57
 
58
58
  ## ARGUMENTS
59
59
 
60
- *topic*:
60
+ - *topic*:
61
61
  The subject to brainstorm - a feature, component, behavior, or
62
62
  design question to explore *what* to build before *how*.
63
63
 
@@ -19,11 +19,11 @@ without any further interpretation.
19
19
 
20
20
  ## ARGUMENTS
21
21
 
22
- *llm*:
22
+ - *llm*:
23
23
  Identifier of the foreign LLM to query, e.g. `chatgpt`,
24
24
  `gemini`, `deepseek`, `grok`, `glm`, or `qwen`.
25
25
 
26
- *query*:
26
+ - *query*:
27
27
  The chat message to send to the foreign LLM.
28
28
 
29
29
  ## SCENARIOS
@@ -73,7 +73,7 @@ preset-bootstrapping operation that stays a shell concern next to
73
73
 
74
74
  ## OPTIONS
75
75
 
76
- `--scope`|`-s` *scope*:
76
+ - `--scope`|`-s` *scope*:
77
77
  The scope chain to operate on, given as a comma-separated list of
78
78
  `user`, `project`, `task:`*id*, and/or `session:`*id* terms, in any
79
79
  order and at most one term per kind. The `user` term is always
@@ -87,10 +87,10 @@ preset-bootstrapping operation that stays a shell concern next to
87
87
 
88
88
  ## ARGUMENTS
89
89
 
90
- *operation*:
90
+ - *operation*:
91
91
  The operation to perform; one of `list`, `get`, `set`, or `delete`.
92
92
 
93
- *args*:
93
+ - *args*:
94
94
  The operands of the operation: none for `list`, a dotted *key* for
95
95
  `get` and `delete`, and a dotted *key* plus a *value* for `set`.
96
96
 
@@ -41,12 +41,12 @@ contrarian.
41
41
 
42
42
  ## ARGUMENTS
43
43
 
44
- `--count`, `-c` *count*:
44
+ - `--count`, `-c` *count*:
45
45
  Surface at least *count* strong anti-theses (default *10*) before
46
46
  sorting and reporting the top *count* and deriving the *SYNTHESIS*. An
47
47
  invalid or non-positive *count* reverts to the default *10*.
48
48
 
49
- *thesis*:
49
+ - *thesis*:
50
50
  The statement, claim, or position to be relentlessly challenged.
51
51
  It may be technical, factual, or opinion-based; the skill attacks
52
52
  its strongest ("steelman") interpretation.
@@ -53,21 +53,21 @@ giving a visual sense of *what a diff endangers* before a deeper review.
53
53
 
54
54
  ## ARGUMENTS
55
55
 
56
- `--coherence`, `-c`:
56
+ - `--coherence`, `-c`:
57
57
  In addition to the intent-grouped summary, reconstruct the diff's
58
58
  *single intended change* as one crisp *thesis* sentence and flag
59
59
  *every* hunk that does *not* serve it - *scope creep* or *stray
60
60
  debug* - then emit an overall **COHERENT** / **INCOHERENT** verdict
61
61
  with a table of the flagged hunks.
62
62
 
63
- `--risk`, `-r`:
63
+ - `--risk`, `-r`:
64
64
  In addition to the intent-grouped summary, score the diff against
65
65
  the *coupling-criticality-coverage-reversibility* rubric and emit a
66
66
  *graded risk report* with an overall risk band and per-axis
67
67
  *mitigations*. Scores are equal-weighted, evidence-backed, and
68
68
  deliberately untuned to the project.
69
69
 
70
- `--blast`, `-b`:
70
+ - `--blast`, `-b`:
71
71
  In addition to the intent-grouped summary, render a *blast-radius
72
72
  map* - a Mermaid `flowchart` of the *touched modules* and their
73
73
  *reverse dependencies* - plus a *brief impact summary* of what
@@ -30,14 +30,14 @@ knowledge.
30
30
 
31
31
  ## OPTIONS
32
32
 
33
- `--ground`|`-g`:
33
+ - `--ground`|`-g`:
34
34
  Ground the explanation in Internet/Web facts gathered via the
35
35
  `ase-meta-search` skill before explaining. Without this option,
36
36
  the explanation is derived from model knowledge only.
37
37
 
38
38
  ## ARGUMENTS
39
39
 
40
- *topic*:
40
+ - *topic*:
41
41
  The topic to be explained. It may be a technical concept, a
42
42
  phenomenon, or any other subject; the skill explains it in a
43
43
  child-friendly way.
@@ -27,7 +27,7 @@ all alternatives rate negatively.
27
27
 
28
28
  ## ARGUMENTS
29
29
 
30
- *request*:
30
+ - *request*:
31
31
  A description of what should be evaluated, including the
32
32
  alternatives and, optionally, the criteria to consider.
33
33
 
@@ -0,0 +1,157 @@
1
+ ---
2
+ name: ase-meta-mint
3
+ argument-hint: "[--help|-h] [--type|-t uuid|sha1|const|var|class|func|path|name] [--count|-c <count>] [<hint>]"
4
+ description: >
5
+ Mint an identifier or a name of a requested type out of a free-text
6
+ hint: a UUID, a SHA-1 digest, a constant, variable, function, or
7
+ class identifier, a path component, or a product-like name. Use when
8
+ the user wants an identifier, id, symbol, slug, or name "minted",
9
+ "coined", "derived", or "generated" from a description.
10
+ user-invocable: true
11
+ disable-model-invocation: false
12
+ effort: high
13
+ ---
14
+
15
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
16
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
17
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
18
+
19
+ <purpose name="ase-meta-mint">
20
+ Mint an Identifier or Name
21
+ </purpose>
22
+
23
+ <expand name="getopt"
24
+ arg1="ase-meta-mint"
25
+ arg2="--type|-t=(uuid|sha1|const|var|class|func|path|name) --count|-c=1">
26
+ $ARGUMENTS
27
+ </expand>
28
+
29
+ <objective>
30
+ *Mint* an identifier or a name of the requested type out of the
31
+ following hint:
32
+ <hint><getopt-arguments/></hint>
33
+ </objective>
34
+
35
+ <flow>
36
+
37
+ 1. <step id="STEP 1: Sanity Check Usage">
38
+
39
+ 1. Set <type><getopt-option-type/></type> and set <hint/> to
40
+ <getopt-arguments/> with any leading and trailing whitespace
41
+ stripped.
42
+
43
+ 2. Determine the number of identifiers to mint: set <count/> to
44
+ <getopt-option-count/>; if <getopt-option-count/> is
45
+ *non-numeric*, *less than 1*, or *greater than 100*, use the
46
+ default *1* instead.
47
+
48
+ 3. <if condition="<hint/> is empty AND <type/> is NOT `uuid`">
49
+ Only output the following <template/> and then immediately *STOP*
50
+ processing the entire current skill -- every type except `uuid`
51
+ needs a hint to derive anything from:
52
+
53
+ <template>
54
+ ⧉ **ASE**: ✪ skill: **ase-meta-mint**, ▶ ERROR: expected a `<hint>` argument for type **<type/>**
55
+ </template>
56
+ </if>
57
+
58
+ 4. Set <results></results> and <warning></warning> (set both to empty).
59
+
60
+ </step>
61
+
62
+ 2. <step id="STEP 2: Mint Hash-Derived Identifiers" condition="<type/> is `uuid` or `sha1`">
63
+
64
+ 1. Call the `ase_mint(type: "<type/>", hint: "<hint/>", count:
65
+ <count/>)` tool of the `ase` MCP server and set <results/> to
66
+ the returned lines of its `text` output, one identifier per
67
+ line. You *MUST* *NOT* derive a UUID or a SHA-1 digest yourself
68
+ -- only the tool hashes correctly and reproducibly.
69
+
70
+ 2. <if condition="a line of the `text` output starts with `WARNING:`">
71
+ Remove that line from <results/> and set <warning/> to its text
72
+ with the leading `WARNING:` stripped -- hashing a non-empty
73
+ hint is deterministic, so <count/> was clamped to *1*.
74
+ </if>
75
+
76
+ </step>
77
+
78
+ 3. <step id="STEP 3: Derive Linguistic Identifiers" condition="<type/> is `const`, `var`, `class`, `func`, `path`, or `name`">
79
+
80
+ 1. Distill <hint/> into its *essential words*: drop filler words,
81
+ articles, and prepositions, keep the two to four words which
82
+ carry the actual meaning, and order them from the most general
83
+ to the most specific one. Prefer established terminology of the
84
+ surrounding domain over invented wording. Do not output
85
+ anything.
86
+
87
+ 2. Assemble <count/> *distinct* candidates from these words,
88
+ ordered best-first, honoring the rules of <type/>:
89
+
90
+ - `const`: an `UPPER_SNAKE_CASE` constant identifier such as
91
+ `FOO_BAR_QUUX` -- upper-case ASCII words joined by `_`,
92
+ never starting with a digit.
93
+
94
+ - `var`: a `lowerCamelCase` variable identifier such as
95
+ `fooBarQuux` -- the *last* part *MUST* be a *substantive*
96
+ (`Quux`) naming *what the value is*, never a verb, as a
97
+ variable holds a thing and not an action.
98
+
99
+ - `func`: a `lowerCamelCase` function identifier such as
100
+ `fooBarQuux` -- the *first* part *MUST* be a *verb* (`foo`)
101
+ naming *what the function does*, as a function performs an
102
+ action and does not hold a thing.
103
+
104
+ - `class`: an `UpperCamelCase` class identifier such as
105
+ `FooBarQuux` -- a substantive phrase naming the modeled
106
+ entity, in singular form and without a `The` prefix.
107
+
108
+ - `path`: a `kebab-case` path component such as
109
+ `foo-bar-quux` -- lower-case ASCII letters, digits, and `-`
110
+ only, never starting or ending with `-`.
111
+
112
+ - `name`: an `UpperCamelCase` *product name* such as
113
+ `FooBarQuux` -- optimize for a *brand*, not for a
114
+ description: short (preferably two to three syllables),
115
+ pronounceable, memorable, and distinctive. Coinages,
116
+ blends, and evocative metaphors are explicitly welcome
117
+ here, and a plain concatenation of the hint words is
118
+ explicitly not.
119
+
120
+ Store the candidates in <results/>. Do not output anything.
121
+
122
+ </step>
123
+
124
+ 4. <step id="STEP 4: Render Result">
125
+
126
+ 1. <if condition="<hint/> is empty">
127
+ Set <hint-shown>*(none -- random UUID)*</hint-shown>.
128
+ </if>
129
+ <else>
130
+ Set <hint-shown><hint/></hint-shown>.
131
+ </else>
132
+
133
+ 2. Output the minted identifiers of <results/>, one per line and
134
+ each enclosed in backticks, with the following <template/>:
135
+
136
+ <template>
137
+ <ase-tpl-boxed title="MINT" subtitle="<type/>">
138
+ ● **HINT**: <hint-shown/>
139
+
140
+ ○ `<result-1/>`
141
+ ○ `<result-2/>`
142
+ ○ [...]
143
+ </ase-tpl-boxed>
144
+ </template>
145
+
146
+ 3. <if condition="<warning/> is non-empty">
147
+ Additionally output the following <template/> directly below the
148
+ box:
149
+
150
+ <template>
151
+ ⧉ **ASE**: ✪ skill: **ase-meta-mint**, ▶ WARNING: <warning/>
152
+ </template>
153
+ </if>
154
+
155
+ </step>
156
+
157
+ </flow>
@@ -0,0 +1,114 @@
1
+
2
+ ## NAME
3
+
4
+ `ase-meta-mint` - Mint an Identifier or Name
5
+
6
+ ## SYNOPSIS
7
+
8
+ `ase-meta-mint`
9
+ [`--help`|`-h`]
10
+ [`--type`|`-t` `uuid`|`sha1`|`const`|`var`|`class`|`func`|`path`|`name`]
11
+ [`--count`|`-c` *count*]
12
+ [*hint*]
13
+
14
+ ## DESCRIPTION
15
+
16
+ The `ase-meta-mint` skill *mints* an identifier or a name of a requested
17
+ type out of the free-text *hint* formed by the positional arguments. It
18
+ dispatches on `--type` and emits the generated strings as its result.
19
+
20
+ The two *hash-derived* types are delegated to the `ase_mint` tool of the
21
+ `ase` MCP server, which derives them reproducibly instead of guessing
22
+ them:
23
+
24
+ - `uuid`:
25
+ a deterministic *UUID V5* over the *hint*, within the fixed *ASE*
26
+ namespace (itself a *UUID V5* over `https://ase.tools` in the
27
+ standard URL namespace), or a random *UUID V4* if no *hint* is
28
+ given.
29
+
30
+ - `sha1`:
31
+ the 40-character hexadecimal *SHA-1* digest of the *hint*.
32
+
33
+ The six *linguistic* types are derived by the skill itself: the *hint*
34
+ is distilled into its essential words, which are then assembled
35
+ according to the conventions of the type:
36
+
37
+ - `const`:
38
+ an `UPPER_SNAKE_CASE` constant identifier, such as `FOO_BAR_QUUX`.
39
+
40
+ - `var`:
41
+ a `lowerCamelCase` variable identifier, such as `fooBarQuux`, whose
42
+ *last* part is a substantive naming what the value *is*, never a
43
+ verb.
44
+
45
+ - `func`:
46
+ a `lowerCamelCase` function identifier, such as `fooBarQuux`, whose
47
+ *first* part is a verb naming what the function *does*.
48
+
49
+ - `class`:
50
+ an `UpperCamelCase` class identifier, such as `FooBarQuux`, as a
51
+ singular substantive phrase naming the modeled entity.
52
+
53
+ - `path`:
54
+ a `kebab-case` path component, such as `foo-bar-quux`.
55
+
56
+ - `name`:
57
+ an `UpperCamelCase` *product name*, such as `FooBarQuux`, optimized
58
+ for a brand rather than for a description: short, pronounceable,
59
+ memorable, and distinctive.
60
+
61
+ A *hint* is mandatory for every type except `uuid`, which falls back to
62
+ a random *UUID V4* without one.
63
+
64
+ ## OPTIONS
65
+
66
+ `--type`|`-t` `uuid`|`sha1`|`const`|`var`|`class`|`func`|`path`|`name`:
67
+ Select the type of the minted identifier or name (default: `uuid`).
68
+
69
+ `--count`|`-c` *count*:
70
+ Mint *count* identifiers instead of just one (default: `1`, maximum:
71
+ `100`). For the hash-derived types it is honored only for an empty
72
+ *hint*, where *count* random *UUID V4* values are emitted; with a
73
+ non-empty *hint*, hashing is a pure function of that *hint* and
74
+ hence always yields exactly one identifier, so *count* is clamped to
75
+ `1` and a warning is emitted. For the linguistic types, *count*
76
+ distinct candidates are emitted, ordered best-first.
77
+
78
+ ## ARGUMENTS
79
+
80
+ *hint*:
81
+ The free-text hint the identifier or name is derived from. It may be
82
+ a short description, a phrase, or a few keywords. It is mandatory
83
+ for all types except `uuid`.
84
+
85
+ ## SCENARIOS
86
+
87
+ - You need a stable, reproducible UUID or SHA-1 digest for a concept
88
+ - You need a well-formed constant, variable, function, or class identifier
89
+ - You need a path component or slug derived from a description
90
+ - You need a catchy product name for a new component or tool
91
+
92
+ ## EXAMPLES
93
+
94
+ Mint a deterministic UUID for a concept:
95
+
96
+ ```text
97
+ ❯ /ase-meta-mint --type uuid the ASE artifact kind resolution cache
98
+ ```
99
+
100
+ Mint a function identifier from a description:
101
+
102
+ ```text
103
+ ❯ /ase-meta-mint -t func compute the checksum of an artifact file
104
+ ```
105
+
106
+ Mint three product name candidates:
107
+
108
+ ```text
109
+ ❯ /ase-meta-mint -t name -c 3 a background service bridging a project into the agent tool
110
+ ```
111
+
112
+ ## SEE ALSO
113
+
114
+ [`ase-task-id`](../ase-task-id/help.md), [`ase-meta-brainstorm`](../ase-meta-brainstorm/help.md), [`ase-code-craft`](../ase-code-craft/help.md), [`ase-arch-discover`](../ase-arch-discover/help.md).
@@ -39,14 +39,14 @@ the `ase-meta-proximity` sub-agent before its proximity is re-determined.
39
39
 
40
40
  ## OPTIONS
41
41
 
42
- `--ground`|`-g`:
42
+ - `--ground`|`-g`:
43
43
  Ground the determination in Internet/Web facts gathered by the
44
44
  `ase-meta-proximity` agent before determining the proximity. Without
45
45
  this option, the determination is derived from model knowledge only.
46
46
  When combined with `--loop`, every newly navigated-to topic is
47
47
  re-grounded.
48
48
 
49
- `--loop`|`-l`:
49
+ - `--loop`|`-l`:
50
50
  Present the neighboring topics in an interactive dialog and, upon
51
51
  selection, adopt the picked topic as the new current topic and
52
52
  restart the determination. Without this option, the proximity of the
@@ -54,7 +54,7 @@ the `ase-meta-proximity` sub-agent before its proximity is re-determined.
54
54
 
55
55
  ## ARGUMENTS
56
56
 
57
- *topic*:
57
+ - *topic*:
58
58
  The topic whose conceptual proximity is to be determined. It may be
59
59
  a technical concept, a phenomenon, or any other subject; the skill
60
60
  determines its parent, sibling, and child topics.
@@ -26,7 +26,7 @@ complete, unmodified individual responses.
26
26
 
27
27
  ## OPTIONS
28
28
 
29
- `--models`|`-m` *model*[,...]:
29
+ - `--models`|`-m` *model*[,...]:
30
30
  Restrict the *foreign* LLMs that are queried to the given
31
31
  comma-separated list of *model* tokens. Recognized tokens are
32
32
  `all`, `chatgpt`, `gemini`, `deepseek`, `grok`, `glm`, and `qwen`,
@@ -37,7 +37,7 @@ complete, unmodified individual responses.
37
37
 
38
38
  ## ARGUMENTS
39
39
 
40
- *question*:
40
+ - *question*:
41
41
  The question to ask all available AIs.
42
42
 
43
43
  ## SCENARIOS
@@ -50,7 +50,7 @@ the attribution of the quote.
50
50
 
51
51
  ## OPTIONS
52
52
 
53
- `--ground`|`-g`:
53
+ - `--ground`|`-g`:
54
54
  Gather quotes from the Internet/Web via the `ase-meta-search` skill
55
55
  (dispatched in a sub-agent, querying all available search backends)
56
56
  *in addition to* -- and never *instead* of -- the model knowledge,
@@ -63,7 +63,7 @@ the attribution of the quote.
63
63
  and the skill falls back to the model knowledge only. Without this
64
64
  option, the quotes are derived from model knowledge only.
65
65
 
66
- `--proximity`|`-p`:
66
+ - `--proximity`|`-p`:
67
67
  Widen the harvest beyond the given topic to its *conceptual
68
68
  neighborhood* -- the parent (more general) topic, the four sibling
69
69
  (same-level) topics, and the four child (more specialized) topics --
@@ -76,7 +76,7 @@ the attribution of the quote.
76
76
  warning is emitted and the skill continues with the narrow topic
77
77
  only. Without this option, only the given topic is harvested.
78
78
 
79
- `--count`|`-c` *count*:
79
+ - `--count`|`-c` *count*:
80
80
  Maximum total number of quotes across all four quadrants (default:
81
81
  `8`, i.e. about two quotes per quadrant). The quotes are distributed
82
82
  as evenly as possible across the quadrants, preferring the most
@@ -85,7 +85,7 @@ the attribution of the quote.
85
85
 
86
86
  ## ARGUMENTS
87
87
 
88
- *topic-keywords*:
88
+ - *topic-keywords*:
89
89
  The topic keywords the quotes are searched for. They act both as the
90
90
  search query and as the keyword set of the *literalness* dimension of
91
91
  the matrix.
@@ -55,7 +55,7 @@ before it is committed.
55
55
 
56
56
  ## OPTIONS
57
57
 
58
- `--severity`|`-S`=(`LOW`|`MEDIUM`|`HIGH`):
58
+ - `--severity`|`-S`=(`LOW`|`MEDIUM`|`HIGH`):
59
59
  Set the *severity floor* (default `LOW`): findings below the chosen
60
60
  threshold are silently suppressed, ordered `LOW` < `MEDIUM` <
61
61
  `HIGH`. The default `LOW` keeps all findings; `ACCEPTED` findings are
@@ -24,14 +24,14 @@ Brave, or `WebSearch` individually.
24
24
 
25
25
  ## OPTIONS
26
26
 
27
- `--services`|`-s`=(`all`|`perplexity`|`brave`|`exa`|`websearch`)...:
27
+ - `--services`|`-s`=(`all`|`perplexity`|`brave`|`exa`|`websearch`)...:
28
28
  The comma-separated list of search backends to query. The default
29
29
  `all` queries every available backend;
30
30
  otherwise only the listed backends are queried.
31
31
 
32
32
  ## ARGUMENTS
33
33
 
34
- *query*:
34
+ - *query*:
35
35
  The search query to dispatch to the search services.
36
36
 
37
37
  ## SCENARIOS
@@ -50,20 +50,20 @@ cheerleading.
50
50
 
51
51
  ## OPTIONS
52
52
 
53
- `--count`|`-c` *count*:
53
+ - `--count`|`-c` *count*:
54
54
  Surface at least *count* strong pro-theses (default *10*) per defense
55
55
  pass before sorting and reporting the top *count* and deriving the
56
56
  *FORTIFICATION*. An invalid or non-positive *count* reverts to the
57
57
  default *10*.
58
58
 
59
- `--rounds`|`-r` *rounds*:
59
+ - `--rounds`|`-r` *rounds*:
60
60
  Run *rounds* iterative defense rounds (default *1*), feeding each
61
61
  round's *FORTIFICATION* in as the next round's *thesis*. An invalid
62
62
  or non-positive *rounds* reverts to the default *1*.
63
63
 
64
64
  ## ARGUMENTS
65
65
 
66
- *thesis*:
66
+ - *thesis*:
67
67
  The statement, claim, or position to be charitably strengthened.
68
68
  It may be technical, factual, or opinion-based; the skill defends
69
69
  its strongest ("steelman") interpretation.
@@ -31,13 +31,13 @@ source code changes.
31
31
 
32
32
  ## OPTIONS
33
33
 
34
- `--depth`|`-d` *N*:
34
+ - `--depth`|`-d` *N*:
35
35
  The *maximum* number of "why" iterations (the Five-Whys chain
36
36
  length), acting as an *upper bound* only - the analysis still stops
37
37
  early once the root cause is reached. Defaults to *5*. A non-numeric
38
38
  or non-positive value falls back to the default.
39
39
 
40
- `--width`|`-w` *M*:
40
+ - `--width`|`-w` *M*:
41
41
  The *maximum* number of *candidate sub-causes* to surface per "why"
42
42
  level. With the default *1*, the skill walks a single causality chain
43
43
  (classic Five-Whys); with *M* > 1, each level surfaces up to *M*
@@ -51,7 +51,7 @@ source code changes.
51
51
 
52
52
  ## ARGUMENTS
53
53
 
54
- *fact*:
54
+ - *fact*:
55
55
  The observed *fact* (symptom, problem, or surprising outcome)
56
56
  whose root cause should be investigated. The skill implicitly
57
57
  prepends "Why" to form the initial question.
@@ -338,8 +338,9 @@ Procedure
338
338
  following the `Generated Skill Contract` above.
339
339
 
340
340
  3. Write <skill-content/> to <target-skill/>, creating the directory
341
- `<dir/>/<new-skill-name/>` if it does not exist yet. Calculate the
342
- number of words <words/> of <skill-content/>.
341
+ `<dir/>/<new-skill-name/>` if it does not exist yet. Then call the
342
+ `ase_text_metric(file: "<target-skill/>")` tool of the `ase` MCP
343
+ server and set <words/> to the `words` field of its result.
343
344
 
344
345
  4. Report the result with the following <template/>:
345
346
 
@@ -66,7 +66,7 @@ agent tool:
66
66
 
67
67
  ## OPTIONS
68
68
 
69
- `--scope`|`-s` `local`|`user`:
69
+ - `--scope`|`-s` `local`|`user`:
70
70
  Where the generated skill is stored. With `local` (the default),
71
71
  it is written into the current project, where it can be committed
72
72
  and reviewed alongside the code. With `user`, it is written into the
@@ -77,20 +77,20 @@ agent tool:
77
77
  Copilot*, and `.agents/skills/` and `~/.codex/skills/` under *OpenAI
78
78
  Codex*.
79
79
 
80
- `--force`|`-f`:
80
+ - `--force`|`-f`:
81
81
  Overwrite an already existing skill. Without this option, the skill
82
82
  refuses with an error as soon as the target `SKILL.md` exists, so
83
83
  hand-edited skills are never lost silently.
84
84
 
85
85
  ## ARGUMENTS
86
86
 
87
- *skill-name*:
87
+ - *skill-name*:
88
88
  Name of the skill to generate, matching `^[a-zA-Z][a-zA-Z0-9_-]*$`.
89
89
  It is used as the directory name, as the frontmatter `name`, and as
90
90
  the resulting `/`*skill-name* command (respectively the
91
91
  `$`*skill-name* mention under *OpenAI Codex*).
92
92
 
93
- *workflow-description*:
93
+ - *workflow-description*:
94
94
  Free-text description of the workflow the generated skill should
95
95
  perform. Mentioning that actions run "in parallel", that they are
96
96
  dispatched "in a sub-agent", or naming concrete `ase-xxx-xxx` skills
@@ -15,13 +15,16 @@ START -> ase-arch-discover
15
15
  START -> ase-code-insight
16
16
  START -> ase-code-explain
17
17
  START -> ase-code-lint
18
- START -> ase-docs-distill
18
+ START -> ase-docs-shorten
19
+ START -> ase-docs-refine
19
20
  START -> ase-docs-proofread
21
+ START -> ase-docs-distill
20
22
  START -> ase-meta-review
21
23
  START -> ase-meta-diff
22
24
  START -> ase-meta-changelog
23
25
  START -> ase-meta-commit
24
26
  START -> ase-meta-proximity
27
+ START -> ase-meta-mint
25
28
  START -> ase-meta-workflow
26
29
  START -> ase-code-dissect
27
30
  ase-help-skill -> END
@@ -41,13 +44,16 @@ ase-arch-discover -> END
41
44
  ase-code-insight -> END
42
45
  ase-code-explain -> END
43
46
  ase-code-lint -> END
44
- ase-docs-distill -> END
47
+ ase-docs-shorten -> END
48
+ ase-docs-refine -> END
45
49
  ase-docs-proofread -> END
50
+ ase-docs-distill -> END
46
51
  ase-meta-review -> END
47
52
  ase-meta-diff -> END
48
53
  ase-meta-changelog -> END
49
54
  ase-meta-commit -> END
50
55
  ase-meta-proximity -> END
56
+ ase-meta-mint -> END
51
57
  ase-meta-workflow -> END
52
58
  ase-code-dissect -> END
53
59
  START -> SKETCH
@@ -454,7 +454,7 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
454
454
  *NOT* run any build, tests, linter, or type-checker.
455
455
 
456
456
  1. Validate the specification and capture its <diagnostics/> array
457
- of `{ file, line, column, message }` objects:
457
+ of `{ file, line, column, severity, message }` objects:
458
458
 
459
459
  <if condition="<worktree-dir/> is not empty">
460
460
  Run the command `ase spec lint` with <worktree-dir/> as its