@rse/ase 0.9.50 → 0.9.52

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 (75) hide show
  1. package/dst/ase-hook.js +9 -13
  2. package/dst/ase-statusline.js +30 -4
  3. package/dst/ase-task.js +7 -2
  4. package/package.json +7 -7
  5. package/plugin/.claude-plugin/plugin.json +1 -1
  6. package/plugin/.codex-plugin/plugin.json +1 -1
  7. package/plugin/.github/plugin/plugin.json +1 -1
  8. package/plugin/agents/ase-code-lint.md +21 -1
  9. package/plugin/agents/ase-meta-proximity.md +133 -0
  10. package/plugin/etc/stx.conf +2 -2
  11. package/plugin/meta/ase-common-dissect.md +110 -0
  12. package/plugin/meta/ase-common-task.md +5 -3
  13. package/plugin/meta/ase-control.md +53 -0
  14. package/plugin/meta/ase-format-task.md +6 -0
  15. package/plugin/meta/ase-skill.md +8 -8
  16. package/plugin/package.json +2 -2
  17. package/plugin/skills/ase-arch-analyze/SKILL.md +23 -12
  18. package/plugin/skills/ase-arch-analyze/help.md +16 -0
  19. package/plugin/skills/ase-arch-discover/SKILL.md +2 -2
  20. package/plugin/skills/ase-code-analyze/SKILL.md +33 -16
  21. package/plugin/skills/ase-code-analyze/help.md +19 -2
  22. package/plugin/skills/ase-code-craft/SKILL.md +2 -2
  23. package/plugin/skills/ase-code-dissect/SKILL.md +380 -0
  24. package/plugin/skills/ase-code-dissect/help.md +121 -0
  25. package/plugin/skills/ase-code-explain/SKILL.md +2 -2
  26. package/plugin/skills/ase-code-insight/SKILL.md +2 -2
  27. package/plugin/skills/ase-code-lint/SKILL.md +43 -12
  28. package/plugin/skills/ase-code-lint/help.md +43 -1
  29. package/plugin/skills/ase-code-refactor/SKILL.md +2 -2
  30. package/plugin/skills/ase-code-resolve/SKILL.md +2 -2
  31. package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
  32. package/plugin/skills/ase-docs-proofread/SKILL.md +2 -2
  33. package/plugin/skills/ase-help-intent/SKILL.md +2 -2
  34. package/plugin/skills/ase-help-skill/SKILL.md +2 -2
  35. package/plugin/skills/ase-help-skill/catalog.md +4 -0
  36. package/plugin/skills/ase-meta-brainstorm/SKILL.md +2 -2
  37. package/plugin/skills/ase-meta-changelog/SKILL.md +2 -2
  38. package/plugin/skills/ase-meta-chat/SKILL.md +2 -2
  39. package/plugin/skills/ase-meta-commit/SKILL.md +2 -2
  40. package/plugin/skills/ase-meta-config/SKILL.md +2 -2
  41. package/plugin/skills/ase-meta-diaboli/SKILL.md +2 -2
  42. package/plugin/skills/ase-meta-diff/SKILL.md +2 -2
  43. package/plugin/skills/ase-meta-eli5/SKILL.md +2 -2
  44. package/plugin/skills/ase-meta-eli5/help.md +1 -1
  45. package/plugin/skills/ase-meta-evaluate/SKILL.md +2 -2
  46. package/plugin/skills/ase-meta-proximity/SKILL.md +51 -92
  47. package/plugin/skills/ase-meta-proximity/help.md +11 -10
  48. package/plugin/skills/ase-meta-quorum/SKILL.md +2 -2
  49. package/plugin/skills/ase-meta-quotes/SKILL.md +214 -0
  50. package/plugin/skills/ase-meta-quotes/help.md +109 -0
  51. package/plugin/skills/ase-meta-review/SKILL.md +2 -2
  52. package/plugin/skills/ase-meta-review/help.md +4 -3
  53. package/plugin/skills/ase-meta-search/SKILL.md +2 -2
  54. package/plugin/skills/ase-meta-steelman/SKILL.md +2 -2
  55. package/plugin/skills/ase-meta-why/SKILL.md +2 -2
  56. package/plugin/skills/ase-meta-workflow/SKILL.md +378 -0
  57. package/plugin/skills/ase-meta-workflow/help.md +117 -0
  58. package/plugin/skills/ase-meta-workflow/sample.md +70 -0
  59. package/plugin/skills/ase-meta-workflow/workflow.txt +97 -0
  60. package/plugin/skills/ase-sync-export/SKILL.md +2 -2
  61. package/plugin/skills/ase-sync-import/SKILL.md +2 -2
  62. package/plugin/skills/ase-sync-reconcile/SKILL.md +2 -2
  63. package/plugin/skills/ase-task-condense/SKILL.md +26 -6
  64. package/plugin/skills/ase-task-delete/SKILL.md +2 -2
  65. package/plugin/skills/ase-task-dissect/SKILL.md +299 -0
  66. package/plugin/skills/ase-task-dissect/help.md +114 -0
  67. package/plugin/skills/ase-task-edit/SKILL.md +6 -4
  68. package/plugin/skills/ase-task-grill/SKILL.md +6 -4
  69. package/plugin/skills/ase-task-id/SKILL.md +2 -2
  70. package/plugin/skills/ase-task-implement/SKILL.md +2 -2
  71. package/plugin/skills/ase-task-list/SKILL.md +2 -2
  72. package/plugin/skills/ase-task-preflight/SKILL.md +2 -2
  73. package/plugin/skills/ase-task-reboot/SKILL.md +12 -6
  74. package/plugin/skills/ase-task-rename/SKILL.md +2 -2
  75. package/plugin/skills/ase-task-view/SKILL.md +2 -2
@@ -20,9 +20,9 @@ allowed-tools:
20
20
  @${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
21
21
  @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
22
22
 
23
- <skill name="ase-meta-proximity">
23
+ <purpose name="ase-meta-proximity">
24
24
  Determine the Conceptual Proximity of a Topic
25
- </skill>
25
+ </purpose>
26
26
 
27
27
  <expand name="getopt"
28
28
  arg1="ase-meta-proximity"
@@ -37,37 +37,6 @@ relevant *child* topics:
37
37
  <topic><getopt-arguments/></topic>
38
38
  </objective>
39
39
 
40
- <define name="gather-facts">
41
- <if condition="<getopt-option-ground/> is equal `true`">
42
- Set <prompt>Search the Internet/Web and gather facts about
43
- <arg1/></prompt>.
44
-
45
- Then use the `ase-meta-search` skill in a sub-agent to gather facts with
46
- the following tool call and store the returned facts in the placeholder
47
- named `<arg2/>`:
48
-
49
- `Agent(
50
- description: "Query Web Search Service",
51
- subagent_type: "ase:ase-meta-search",
52
- prompt: "<prompt/>",
53
- run_in_background: false
54
- )`
55
-
56
- <if condition="the placeholder named `<arg2/>` contains no usable facts">
57
- Set the placeholder named `<arg2/>` to empty, so the determination below
58
- falls back to model knowledge, and output the following <template/>:
59
-
60
- <template>
61
- <ase-tpl-bullet-secondary/> **WARNING**: grounding found no usable facts -- falling back to model knowledge.
62
- </template>
63
- </if>
64
- </if>
65
- <else>
66
- Use the model's world knowledge and determine facts about <arg1/> and
67
- store those facts in the placeholder named `<arg2/>`.
68
- </else>
69
- </define>
70
-
71
40
  <flow>
72
41
 
73
42
  1. <step id="STEP 1: Check Topic">
@@ -88,69 +57,59 @@ store those facts in the placeholder named `<arg2/>`.
88
57
  *REPEAT* the following sub-steps in a *LOOP* until either
89
58
  <getopt-option-loop/> is *not* equal `true` (then the loop runs
90
59
  exactly *once* and stops after rendering), or the user declines/cancels
91
- the dialog in sub-step 5:
92
-
93
- 1. *Determine Topic*:
94
-
95
- Determine the canonical name of the central *topic* which is stored
96
- in <topic/>.
97
-
98
- <expand name="gather-facts"
99
- arg1="the following topic: <topic/>"
100
- arg2="facts-topic"></expand>
101
-
102
- Ground the determination of the canonical name of the topic
103
- <topic/> in the facts of <facts-topic/> and do not contradict
104
- them. Update <topic/> accordingly.
105
-
106
- 2. *Determine Proximity*:
107
-
108
- Determine the *conceptual proximity* of the current <topic/>
109
- along three *dimensions*:
110
-
111
- - **PARENT**:
112
-
113
- The single most relevant *parent* topic (the broader topic
114
- that <topic/> is a specialization of), which will be stored
115
- in <parent/>.
60
+ the dialog in sub-step 4:
116
61
 
117
- <expand name="gather-facts"
118
- arg1="the PARENT topic (the broader topic that the given topic is a specialization of) of the following topic: <topic/>"
119
- arg2="facts-parent"></expand>
62
+ 1. *Determine Proximity*:
120
63
 
121
- Ground the determination of the canonical name of the parent
122
- topic <parent/> in the facts of <facts-parent/> and do not
123
- contradict them.
64
+ Set <parent/>, <sibling-1/> to <sibling-4/>, and <child-1/> to
65
+ <child-4/> to empty, so that a stale proximity of a previously
66
+ navigated topic can never leak into the rendering below.
124
67
 
125
- - **SIBLINGS**:
68
+ Set <prompt><topic/></prompt>.
126
69
 
127
- The *four* most relevant *sibling* topics (topics on the
128
- same level that share the same parent), which will be stored
129
- in <sibling-1/> to <sibling-4/>.
130
-
131
- <expand name="gather-facts"
132
- arg1="the SIBLING topics (topics on the same level that share the same parent) of the following topic: <topic/>"
133
- arg2="facts-siblings"></expand>
134
-
135
- Ground the determination of the canonical names of the most
136
- relevant sibling topics <sibling-1/> to <sibling-4/> in the
137
- facts of <facts-siblings/> and do not contradict them.
138
-
139
- - **CHILDREN**:
140
-
141
- The *four* most relevant *children* topics (narrower topics
142
- that are specializations of <topic/>), stored in <child-1/>
143
- to <child-4/>.
70
+ <if condition="<getopt-option-ground/> is equal `true`">
71
+ Set <prompt>GROUND <topic/></prompt>, so the agent grounds its
72
+ determination in Internet/Web facts instead of using model
73
+ knowledge only.
74
+ </if>
144
75
 
145
- <expand name="gather-facts"
146
- arg1="the CHILDREN topics (narrower topics that are specializations) of the following topic: <topic/>"
147
- arg2="facts-children"></expand>
76
+ Determine the canonical name of the central *topic* and its
77
+ *conceptual proximity* along the three *dimensions* **PARENT**
78
+ (the single broader topic that <topic/> is a specialization of),
79
+ **SIBLINGS** (the four most relevant topics on the same level
80
+ that share the same parent), and **CHILDREN** (the four most
81
+ relevant narrower topics that are specializations of <topic/>) by
82
+ using the `ase-meta-proximity` agent in a sub-agent with the
83
+ following tool call:
84
+
85
+ `Agent(
86
+ description: "Determine Conceptual Proximity",
87
+ subagent_type: "ase:ase-meta-proximity",
88
+ prompt: "<prompt/>",
89
+ run_in_background: false
90
+ )`
91
+
92
+ Parse the returned labeled list and set <topic/> to the value of
93
+ its `TOPIC:` line, <parent/> to the value of its `PARENT:` line,
94
+ <sibling-1/> to <sibling-4/> to the values of its four `SIBLING:`
95
+ lines, and <child-1/> to <child-4/> to the values of its four
96
+ `CHILD:` lines.
97
+
98
+ <if condition="
99
+ the sub-agent returned no usable proximity OR
100
+ it did not yield a canonical topic, exactly one parent,
101
+ exactly four siblings, and exactly four children
102
+ ">
103
+ Determine the canonical topic name, the parent, the siblings, and
104
+ the children from model knowledge instead, and output the
105
+ following <template/>:
148
106
 
149
- Ground the determination of the canonical names of the most
150
- relevant children topics <child-1/> to <child-4/> in the
151
- facts of <facts-children/> and do not contradict them.
107
+ <template>
108
+ <ase-tpl-bullet-secondary/> **WARNING**: proximity agent returned no usable result -- falling back to model knowledge.
109
+ </template>
110
+ </if>
152
111
 
153
- 3. *Render Proximity*:
112
+ 2. *Render Proximity*:
154
113
 
155
114
  Output the result with the following <template/>, listing each
156
115
  proximity topic under its bullet-prefixed section header.
@@ -179,12 +138,12 @@ store those facts in the placeholder named `<arg2/>`.
179
138
  <ase-tpl-foot title="PROXIMITY TOPICS"/>
180
139
  </template>
181
140
 
182
- 4. <if condition="<getopt-option-loop/> is not equal `true`">
141
+ 3. <if condition="<getopt-option-loop/> is not equal `true`">
183
142
  The loop runs only once in non-interactive mode: *break* out of
184
143
  the *loop* and stop processing without any further output.
185
144
  </if>
186
145
 
187
- 5. *Navigate Proximity*:
146
+ 4. *Navigate Proximity*:
188
147
 
189
148
  In the following, you *MUST* *NOT* use your built-in
190
149
  <user-dialog-tool/> tool! Instead, you *MUST* just show a custom
@@ -207,7 +166,7 @@ store those facts in the placeholder named `<arg2/>`.
207
166
  CHILD-4: ↓ <child-4/>
208
167
  </expand>
209
168
 
210
- Check the tool <result/> and dispatch accordingly:
169
+ Check the <result/> and dispatch accordingly:
211
170
 
212
171
  - If <result/> is `CANCEL`:
213
172
  *Break* out of the *loop* and stop processing without any
@@ -20,11 +20,12 @@ topic that *topic* specializes), *SIBLINGS* (the four most relevant
20
20
  topics on the same level, sharing the same parent), and *CHILDREN* (the
21
21
  four most relevant narrower topics that specialize *topic*).
22
22
 
23
- By default the proximity is derived from model knowledge only. With the
24
- `--ground`/`-g` option, the skill first searches the Internet/Web for
25
- facts about the topic via the `ase-meta-search` skill (dispatched in a
26
- sub-agent, querying all available search backends) and grounds the
27
- determination in the found facts.
23
+ The determination itself is delegated to the `ase-meta-proximity` agent,
24
+ which is shared with the `ase-meta-quotes` skill. By default the
25
+ proximity is derived from model knowledge only. With the `--ground`/`-g`
26
+ option, the agent first searches the Internet/Web for facts about the
27
+ topic, about its broader topic, and about its narrower topics, and
28
+ grounds the determination in the found facts.
28
29
 
29
30
  Without the `--loop`/`-l` option, the skill determines and prints the
30
31
  proximity of the given topic once and then stops. With the `--loop`/`-l`
@@ -33,14 +34,14 @@ interactive dialog; selecting one of them makes it the new *current
33
34
  topic* and restarts the determination from the beginning, so the user
34
35
  can *navigate* the topic taxonomy up (parent), sideways (siblings), and
35
36
  down (children). Cancelling the dialog exits the loop. When `--loop` is
36
- combined with `--ground`, each newly selected topic is re-grounded via
37
- the `ase-meta-search` sub-agent before its proximity is re-determined.
37
+ combined with `--ground`, each newly selected topic is re-grounded by
38
+ the `ase-meta-proximity` sub-agent before its proximity is re-determined.
38
39
 
39
40
  ## OPTIONS
40
41
 
41
42
  `--ground`|`-g`:
42
- Ground the determination in Internet/Web facts gathered via the
43
- `ase-meta-search` skill before determining the proximity. Without
43
+ Ground the determination in Internet/Web facts gathered by the
44
+ `ase-meta-proximity` agent before determining the proximity. Without
44
45
  this option, the determination is derived from model knowledge only.
45
46
  When combined with `--loop`, every newly navigated-to topic is
46
47
  re-grounded.
@@ -75,4 +76,4 @@ Internet/Web facts:
75
76
 
76
77
  ## SEE ALSO
77
78
 
78
- [`ase-meta-eli5`](../ase-meta-eli5/help.md), [`ase-meta-search`](../ase-meta-search/help.md), [`ase-code-explain`](../ase-code-explain/help.md).
79
+ [`ase-meta-quotes`](../ase-meta-quotes/help.md), [`ase-meta-eli5`](../ase-meta-eli5/help.md), [`ase-meta-search`](../ase-meta-search/help.md), [`ase-code-explain`](../ase-code-explain/help.md).
@@ -19,9 +19,9 @@ allowed-tools:
19
19
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
20
20
  @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
21
21
 
22
- <skill name="ase-meta-quorum">
22
+ <purpose name="ase-meta-quorum">
23
23
  Query Multiple AIs for Quorum Answer
24
- </skill>
24
+ </purpose>
25
25
 
26
26
  <expand name="getopt"
27
27
  arg1="ase-meta-quorum"
@@ -0,0 +1,214 @@
1
+ ---
2
+ name: ase-meta-quotes
3
+ argument-hint: "[--help|-h] [--ground|-g] [--proximity|-p] [--count|-c <count>] <topic-keywords>"
4
+ description: >
5
+ Find quotes for a set of topic keywords and place them into a
6
+ 2x2 matrix, spanned by the presence of an author/origin and by
7
+ the literal containment of a keyword, optionally grounded in
8
+ Internet/Web facts and optionally widened to the conceptual
9
+ neighborhood of the topic. Use when the user wants "quotes",
10
+ "sayings", "aphorisms", or "citations" on a topic.
11
+ user-invocable: true
12
+ disable-model-invocation: false
13
+ effort: high
14
+ allowed-tools:
15
+ - "Agent"
16
+ ---
17
+
18
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
19
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
20
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
21
+
22
+ <purpose name="ase-meta-quotes">
23
+ Find Quotes on a Topic
24
+ </purpose>
25
+
26
+ <expand name="getopt"
27
+ arg1="ase-meta-quotes"
28
+ arg2="--ground|-g --proximity|-p --count|-c=8">
29
+ $ARGUMENTS
30
+ </expand>
31
+
32
+ <objective>
33
+ *Find* quotes for the following topic keywords:
34
+ <keywords><getopt-arguments/></keywords>
35
+ </objective>
36
+
37
+ <flow>
38
+
39
+ 1. <step id="STEP 1: Sanity Check Usage">
40
+
41
+ 1. <if condition="<keywords/> is empty">
42
+ Only output the following <template/> and then immediately *STOP*
43
+ processing the entire current skill:
44
+
45
+ <template>
46
+ ⧉ **ASE**: ✪ skill: **ase-meta-quotes**, ▶ ERROR: expected a `<topic-keywords>` argument
47
+ </template>
48
+ </if>
49
+
50
+ 2. Set <quotes></quotes> (set to empty).
51
+
52
+ 3. Determine the maximum total number of *quotes* to surface: set
53
+ <count/> to <getopt-option-count/>; if <getopt-option-count/> is
54
+ *non-numeric* or *less than or equal to 0*, use the default *8*
55
+ instead.
56
+
57
+ </step>
58
+
59
+ 2. <step id="STEP 2: Harvest Quotes">
60
+
61
+ 1. Determine *quotes* -- sayings, aphorisms, maxims, proverbs, and
62
+ citations -- which are about the topic <keywords/>, and store them in
63
+ <quotes/>. Per quote, record its *text*, its *author* (a named person
64
+ or organization, if any is known), its *origin* (a named work,
65
+ standard, or document, if any is known), and <keywords/> as its
66
+ *source topic*.
67
+
68
+ 2. <if condition="<getopt-option-ground/> is equal `true`">
69
+
70
+ *Additionally* -- and never *instead* -- gather quotes from the
71
+ Internet/Web by using the `ase-meta-search` skill in a sub-agent
72
+ with the following tool call:
73
+
74
+ `Agent(
75
+ description: "Query Web Search Service",
76
+ subagent_type: "ase:ase-meta-search",
77
+ prompt: "Search the Internet/Web and gather quotes about the following topic: <keywords/>",
78
+ run_in_background: false
79
+ )`
80
+
81
+ Merge the returned quotes into <quotes/>, deduplicating quotes which
82
+ differ only in punctuation, capitalization, or attribution wording,
83
+ and remember for every quote whether the search *confirmed* its exact
84
+ wording and attribution.
85
+
86
+ <if condition="the sub-agent returned no usable quotes">
87
+ Output the following <template/> and continue with the model
88
+ knowledge only:
89
+
90
+ <template>
91
+ <ase-tpl-bullet-secondary/> **WARNING**: grounding found no usable quotes -- falling back to model knowledge.
92
+ </template>
93
+ </if>
94
+
95
+ </if>
96
+
97
+ </step>
98
+
99
+ 3. <step id="STEP 3: Widen Topic via Proximity" condition="<getopt-option-proximity/> is equal `true`">
100
+
101
+ 1. Set <prompt><keywords/></prompt>.
102
+
103
+ 2. <if condition="<getopt-option-ground/> is equal `true`">
104
+ Set <prompt>GROUND <keywords/></prompt>, so the agent grounds
105
+ its determination in Internet/Web facts instead of using model
106
+ knowledge only.
107
+ </if>
108
+
109
+ 3. Determine the *conceptual neighborhood* of <keywords/> by using the
110
+ `ase-meta-proximity` agent in a sub-agent with the following
111
+ tool call:
112
+
113
+ `Agent(
114
+ description: "Determine Conceptual Proximity",
115
+ subagent_type: "ase:ase-meta-proximity",
116
+ prompt: "<prompt/>",
117
+ run_in_background: false
118
+ )`
119
+
120
+ 4. <if condition="the sub-agent returned no usable neighborhood">
121
+ Output the following <template/>, *SKIP* the remaining sub-steps
122
+ of this step, and continue with the quotes harvested in STEP 2
123
+ only:
124
+
125
+ <template>
126
+ <ase-tpl-bullet-secondary/> **WARNING**: proximity agent returned no usable result -- keeping the narrow topic only.
127
+ </template>
128
+ </if>
129
+
130
+ 5. Parse the returned labeled list and set <neighborhood/> to the values
131
+ of its `PARENT:` line (the *broader* topic), of its four
132
+ `SIBLING:` lines (the *same-level* topics), and of its four
133
+ `CHILD:` lines (the *narrower* topics).
134
+
135
+ 6. Harvest quotes for *each* topic of <neighborhood/> exactly as in
136
+ STEP 2 (Harvest Quotes), record the contributing neighborhood
137
+ topic as the *source topic* of each of those quotes, and merge
138
+ the results into <quotes/>.
139
+
140
+ </step>
141
+
142
+ 4. <step id="STEP 4: Classify and Render Quotes">
143
+
144
+ 1. *Classify Quotes*:
145
+
146
+ Classify every quote of <quotes/> along two *orthogonal* axes:
147
+
148
+ - **ATTRIBUTION**:
149
+ A quote is `ATTRIBUTED` if a named *author* and/or a named
150
+ *origin* is known for it, and `ANONYMOUS` otherwise.
151
+
152
+ - **LITERALNESS**:
153
+ A quote is `LITERAL` if its text contains at least one of
154
+ the topic keywords of <keywords/> as a *whole word* --
155
+ matched *case-insensitively* and tolerating *inflections*
156
+ (e.g. `architect` and `architectural` match the keyword
157
+ `architecture`), but *never* as a mere *substring* (e.g.
158
+ `art` does *not* match `architecture`). A quote is
159
+ `THEMATIC` otherwise.
160
+
161
+ Both axes span the four *quadrants*:
162
+
163
+ - `Q1` (`ATTRIBUTED` and `LITERAL`)
164
+ - `Q2` (`ATTRIBUTED` and `THEMATIC`)
165
+ - `Q3` (`ANONYMOUS` and `LITERAL`)
166
+ - `Q4` (`ANONYMOUS` and `THEMATIC`)
167
+
168
+ 2. Finally, reduce <quotes/> to at most <count/> quotes in *total*,
169
+ distributed as evenly as possible across the four quadrants
170
+ and preferring the most relevant and most well-known quote per
171
+ quadrant.
172
+
173
+ 3. *Render Quotes*:
174
+
175
+ Render every quote on its own `○`-prefixed line, with the
176
+ following *suffixes* appended in this order:
177
+
178
+ - ` — *<author/>*, <origin/>` in the two `ATTRIBUTED` quadrants,
179
+ omitting whichever of <author/> and <origin/> is unknown.
180
+
181
+ - ` [from proximity: `<source-topic/>`]` if the quote was
182
+ harvested for a *neighborhood* topic in STEP 3 rather than for
183
+ <keywords/> itself.
184
+
185
+ - ` *(unverified)*` if the exact wording or the attribution of
186
+ the quote could not be established with confidence -- but
187
+ omit this marker for a quote whose wording and attribution
188
+ the Internet/Web search of STEP 2.2 confirmed -- including
189
+ its re-application for a neighborhood topic in STEP 3.
190
+
191
+ Render the single line `○ (none)` for a quadrant without any
192
+ quote. Output the result with the following <template/>:
193
+
194
+ <template>
195
+ <ase-tpl-head title="QUOTES"/>
196
+
197
+ ● **Q1 - ATTRIBUTED / LITERAL**:
198
+ ○ [...]
199
+
200
+ ● **Q2 - ATTRIBUTED / THEMATIC**:
201
+ ○ [...]
202
+
203
+ ● **Q3 - ANONYMOUS / LITERAL**:
204
+ ○ [...]
205
+
206
+ ● **Q4 - ANONYMOUS / THEMATIC**:
207
+ ○ [...]
208
+
209
+ <ase-tpl-foot title="QUOTES"/>
210
+ </template>
211
+
212
+ </step>
213
+
214
+ </flow>
@@ -0,0 +1,109 @@
1
+
2
+ ## NAME
3
+
4
+ `ase-meta-quotes` - Find Quotes on a Topic
5
+
6
+ ## SYNOPSIS
7
+
8
+ `ase-meta-quotes`
9
+ [`--help`|`-h`]
10
+ [`--ground`|`-g`]
11
+ [`--proximity`|`-p`]
12
+ [`--count`|`-c` *count*]
13
+ *topic-keywords*
14
+
15
+ ## DESCRIPTION
16
+
17
+ The `ase-meta-quotes` skill finds *quotes* -- sayings, aphorisms,
18
+ maxims, proverbs, and citations -- for the supplied *topic-keywords* and
19
+ places them into a *2x2 matrix*, reported as four labeled *quadrant*
20
+ sections.
21
+
22
+ Per quote, the skill records its *text*, its *author* (a named person or
23
+ organization, if known), its *origin* (a named work, standard, or
24
+ document, if known), and the topic it was harvested for (its *source
25
+ topic*).
26
+
27
+ The first dimension of the matrix is the *attribution* of a quote: a
28
+ quote is `ATTRIBUTED` when a named author and/or a named origin is known
29
+ for it, and `ANONYMOUS` otherwise. The second dimension is the
30
+ *literalness* of a quote: a quote is `LITERAL` when its text contains at
31
+ least one of the *topic-keywords* as a whole word -- matched
32
+ case-insensitively and tolerating inflections (e.g. `architect` and
33
+ `architectural` match the keyword `architecture`), but never as a mere
34
+ substring (e.g. `art` does not match `architecture`) -- and `THEMATIC`
35
+ otherwise. The two dimensions span the quadrants `Q1`
36
+ (`ATTRIBUTED`/`LITERAL`), `Q2` (`ATTRIBUTED`/`THEMATIC`), `Q3`
37
+ (`ANONYMOUS`/`LITERAL`), and `Q4` (`ANONYMOUS`/`THEMATIC`). A quadrant
38
+ without any quote is rendered as `(none)`.
39
+
40
+ Every quote is rendered on its own line and carries, where applicable,
41
+ the suffixes `— <author>, <origin>` (in the two `ATTRIBUTED`
42
+ quadrants, omitting whichever part is unknown), `[from proximity:
43
+ <source-topic>]` (when the quote was contributed by a neighborhood topic
44
+ under `--proximity` instead of by *topic-keywords* itself), and
45
+ `(unverified)` (when the exact wording or the attribution could not be
46
+ established with confidence). The `(unverified)` marker is dropped as
47
+ soon as the Internet/Web search under `--ground` confirms the wording and
48
+ the attribution of the quote.
49
+
50
+ ## OPTIONS
51
+
52
+ `--ground`|`-g`:
53
+ Gather quotes from the Internet/Web via the `ase-meta-search` skill
54
+ (dispatched in a sub-agent, querying all available search backends)
55
+ *in addition to* -- and never *instead* of -- the model knowledge,
56
+ merge them into the harvest while deduplicating quotes which differ
57
+ only in punctuation, capitalization, or attribution wording, and use
58
+ the search results to confirm the wording and the attribution of the
59
+ found quotes. When combined with `--proximity`, the determination of
60
+ the conceptual neighborhood is grounded in Internet/Web facts as
61
+ well. Should the search return no usable quotes, a warning is emitted
62
+ and the skill falls back to the model knowledge only. Without this
63
+ option, the quotes are derived from model knowledge only.
64
+
65
+ `--proximity`|`-p`:
66
+ Widen the harvest beyond the given topic to its *conceptual
67
+ neighborhood* -- the parent (more general) topic, the four sibling
68
+ (same-level) topics, and the four child (more specialized) topics --
69
+ as determined by the `ase-meta-proximity` agent, which is shared with
70
+ the `ase-meta-proximity` skill. Each of these nine neighborhood
71
+ topics is harvested exactly like the given topic itself. Quotes
72
+ contributed by a neighborhood topic carry that topic in brackets and
73
+ mostly land in the `THEMATIC` quadrants, which is exactly where the
74
+ widening pays off. Should the agent return no usable neighborhood, a
75
+ warning is emitted and the skill continues with the narrow topic
76
+ only. Without this option, only the given topic is harvested.
77
+
78
+ `--count`|`-c` *count*:
79
+ Maximum total number of quotes across all four quadrants (default:
80
+ `8`, i.e. about two quotes per quadrant). The quotes are distributed
81
+ as evenly as possible across the quadrants, preferring the most
82
+ relevant and most well-known quote per quadrant. A non-numeric value
83
+ or a value less than or equal to `0` falls back to the default.
84
+
85
+ ## ARGUMENTS
86
+
87
+ *topic-keywords*:
88
+ The topic keywords the quotes are searched for. They act both as the
89
+ search query and as the keyword set of the *literalness* dimension of
90
+ the matrix.
91
+
92
+ ## EXAMPLES
93
+
94
+ Find quotes from model knowledge:
95
+
96
+ ```text
97
+ ❯ /ase-meta-quotes software architecture
98
+ ```
99
+
100
+ Find a wider set of quotes, grounded in Internet/Web facts and widened
101
+ to the conceptual neighborhood of the topic:
102
+
103
+ ```text
104
+ ❯ /ase-meta-quotes --ground --proximity --count 12 technical debt
105
+ ```
106
+
107
+ ## SEE ALSO
108
+
109
+ [`ase-meta-proximity`](../ase-meta-proximity/help.md), [`ase-meta-search`](../ase-meta-search/help.md), [`ase-meta-eli5`](../ase-meta-eli5/help.md).
@@ -19,9 +19,9 @@ allowed-tools:
19
19
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
20
20
  @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
21
21
 
22
- <skill name="ase-meta-review">
22
+ <purpose name="ase-meta-review">
23
23
  Review Staged Changes
24
- </skill>
24
+ </purpose>
25
25
 
26
26
  <expand name="getopt"
27
27
  arg1="ase-meta-review"
@@ -59,9 +59,10 @@ before it is committed.
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
62
- never suppressed. The floor only affects the rendered findings table,
63
- not the overall *verdict*, which is always derived from all findings
64
- before the floor is applied.
62
+ never suppressed. Surviving findings are rendered in *descending
63
+ severity* order `HIGH`, `MEDIUM`, `LOW`, `ACCEPTED`. The floor only
64
+ affects the rendered findings table, not the overall *verdict*, which
65
+ is always derived from all findings before the floor is applied.
65
66
 
66
67
  ## ARGUMENTS
67
68
 
@@ -19,9 +19,9 @@ allowed-tools:
19
19
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
20
20
  @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
21
21
 
22
- <skill name="ase-meta-search">
22
+ <purpose name="ase-meta-search">
23
23
  Search the Internet/Web
24
- </skill>
24
+ </purpose>
25
25
 
26
26
  <expand name="getopt"
27
27
  arg1="ase-meta-search"
@@ -14,9 +14,9 @@ effort: xhigh
14
14
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
15
15
  @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
16
16
 
17
- <skill name="ase-meta-steelman">
17
+ <purpose name="ase-meta-steelman">
18
18
  Build the "Steelman" Argument
19
- </skill>
19
+ </purpose>
20
20
 
21
21
  <expand name="getopt"
22
22
  arg1="ase-meta-steelman"
@@ -12,9 +12,9 @@ effort: high
12
12
  @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
13
13
  @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
14
14
 
15
- <skill name="ase-meta-why">
15
+ <purpose name="ase-meta-why">
16
16
  Five-Whys Root-Cause Analysis
17
- </skill>
17
+ </purpose>
18
18
 
19
19
  <expand name="getopt"
20
20
  arg1="ase-meta-why"