Ase meta compat
Agentic Software Engineering (ASE)
npx -y skills add rse/ase --skill ase-meta-compatAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Self-test the LLM's ability to execute ASE's core interpreter machinery (control flow, XML placeholders, regex matching, arithmetic) and report an overall compatibility rating. Use when the user wants to check how well the current model/harness is compatible with ASE, or asks to "test ASE compatibility" or "check ASE compatibility".
SKILL.md
11.7 KB, as published. Nobody here has run it
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
If $1 (the first token of the skill arguments) is equal to -h or
--help, you MUST once output the following output <template/> and
then IMMEDIATELY STOP the further skill processing:
Self-Test ASE Compatibility
Objective
Self-test how faithfully the current LLM (and its harness) executes the four core interpreter primitives that every ASE skill silently relies on -- control flow, XML placeholders, regex matching, and arithmetic -- and report an overall 0%…100% compatibility rating.
This skill is unusual: it is both the test definition and the system under test. Each probe is a pure ASE construct that you execute and record its actual result. You MUST NOT compare against any expected value until STEP 6. Do not fabricate passes: a probe whose actual result differs from its expected result MUST be recorded as a fail.
Notice that this skill intentionally does not strictly follow the ASE skill format; in particular, it does not include the usual meta skill information.
Procedure
-
STEP 1: Initialize Self-Test
Initialize the running map of actual probe results <actuals></actuals> (set to empty) -- every probe in STEPs 2-5 stores its result here as a
<category/>/<probe-name/>entry with its actual computed value.Initialize the running list of failed probes <failures></failures> (set to empty) -- this is populated only in STEP 6 after comparing actuals against the expected values.
-
STEP 2: Probe XML Placeholders
Execute all of the following XML-placeholder probes (in the given order). For each probe, record the actual result in <actuals/> under the key
xml-placeholders/<probe-name/>. Do not compare to any expected value here.-
get-and-set: Set <v>42</v>, then get <v/>. Record actual result for
xml-placeholders/get-and-set. -
self-ref: Set <v>42</v>, then set
<v>pre_<v/></v>, then get <v/>. Record actual result forxml-placeholders/self-ref. -
overwrite: Set <v>42</v>, then set
<v>99</v>, then get <v/>. Record actual result forxml-placeholders/overwrite. -
indexed: Set
<eval-1-2>+1</eval-1-2>and<eval-2-1>-1</eval-2-1>, then get <eval-1-2/> and <eval-2-1/> via<eval-1-2/>,<eval-2-1/>. Record actual result forxml-placeholders/indexed. -
nested-attr: With <w>20</w>, build the value of an XML attribute
width="<w/>"and read the attributewidthback. Record actual result forxml-placeholders/nested-attr. -
entity: Evaluate the XML entity
⦿and get the rendered Unicode character. Record actual result forxml-placeholders/entity.
Set <xml-total/> to the number of XML-placeholder probes above.
-
-
STEP 3: Probe Control Flow
Execute all of the following control-flow probes (in the given order). For each probe, record the actual result in <actuals/> under the key
control-flow/<probe-name/>. Do not compare to any expected value here.-
branch: Set <a>3</a>, then evaluate
<if condition="<a/> is greater than 5">big</if> <elseif condition="<a/> is greater than 2">mid</elseif> <else>small</else>. Record actual result forcontrol-flow/branch. -
while-sum: Set <s>0</s> and <i>1</i>, then evaluate
<while condition="<i/> is less than or equal to 5"> set <s/> to <s/> + <i/>, set <i/> to <i/> + 1 </while>. Record <s/> as actual result forcontrol-flow/while-sum. -
for-order: Set <s></s>, then evaluate
<for items="x y z"><s><s/>-<item/></s></for>. Record <s/> as actual result forcontrol-flow/for-order. -
while-break: Set <i>1</i> and <hit></hit>, then evaluate
<while condition="<i/> is less than or equal to 9"> if <i/> equals 4 set <hit/> to <i/> and <break/>, else set <i/> to <i/> + 1 </while>. Record <hit/> as actual result forcontrol-flow/while-break. -
step-skip: A
<step condition="[...]">[...]</step>either expands to its body (if condition evaluates to true) or to the empty string, so what does<step condition="42 is greater than 7">X</step>expand into? Record the result of this construct forcontrol-flow/step-skip. -
expand-subst: With
<define name="foo">[<arg1/>:<content/>]</define>, evaluate<expand name="foo" arg1="K">V</expand>. Record actual result forcontrol-flow/expand-subst.
Set <cf-total/> to the number of control-flow probes above.
-
-
STEP 4: Probe Regex Matching
Execute all of the following regex probes (in the given order). For each probe, record the actual result in <actuals/> under the key
regex/<probe-name/>. Do not compare to any expected value here.-
getopt-dash: Does the string
-l foomatch the regexp(^|\s)-? Recordyesornoas actual result forregex/getopt-dash. -
getopt-nodash: Does the string
foomatch the regexp(^|\s)-? Recordyesornoas actual result forregex/getopt-nodash. -
anchored-int: Does
123fully match^\d+$, and does12afully match^\d+$? Report as<yes-or-no/>,<yes-or-no/>. Record actual result forregex/anchored-int. -
alternation: Does
thoroughmatch^(basic|standard|thorough)$? Recordyesornoas actual result forregex/alternation. -
capture: Apply
^--(\w+).+to--foo-bar-quux. Record the first capture group as actual result forregex/capture. -
whitespace: Does
-x(leading space then dash) match(^|\s)-(the\salternative)? Recordyesornoas actual result forregex/whitespace. -
complex: Does
--level=(low|high)...match^--([A-Za-z][A-Za-z0-9-]*)(?:\|-([A-Za-z]))?(?:=(\((.*)\)(\.\.\.)?|.*))?$? Recordyesornoas actual result forregex/complex.
Set <re-total/> to the number of regex probes above.
-
-
STEP 5: Probe Arithmetic
Execute all of the following arithmetic probes (in the given order). For each probe, record the actual result in <actuals/> under the key
arithmetic/<probe-name/>. Do not compare to any expected value here.-
increment: With <n>7</n>, compute <n/> + 2. Record actual result for
arithmetic/increment. -
product-sum: Compute
4.00 * 1.00 + 2.00 * 0.50. Record actual result (asX.XX) forarithmetic/product-sum. -
percentage: Compute
3 / 7rounded to 2 decimal places. Record actual result (as0.XX) forarithmetic/percentage. -
bar-width: With <title-len>13</title-len>, compute
67 - <title-len/>. Record actual result forarithmetic/bar-width. -
threshold: Is
0.095less than0.10? Recordyesornoas actual result forarithmetic/threshold. -
round-half: Round
2.5to the nearest integer (round half up). Record actual result forarithmetic/round-half.
Set <arith-total/> to the number of arithmetic probes above.
-
-
STEP 6: Fetch Expected Values and Score
Call the
ase_compat()tool of theaseMCP server with an internal programmatic MCP tool call (and NOT with an external shell command) and set <compat-output/> to thetextcontent of the response.Parse <compat-output/> into a map <expected/> by splitting on newlines; for each non-empty line of the form
<id/>: <value/>, set<expected[<id/>]>to<value/>(value may be empty for probes whose correct answer is an empty string).For each probe in <actuals/>, compare the actual result to
<expected[<id/>]>using an exact-match comparison:- If they match, count the probe as pass.
- If they differ, count the probe as fail and append
<id/>to <failures/>.
Tally pass counts per category:
- Set <xml-pass/> to the number of
xml-placeholders/*probes that passed. - Set <cf-pass/> to the number of
control-flow/*probes that passed. - Set <re-pass/> to the number of
regex/*probes that passed. - Set <arith-pass/> to the number of
arithmetic/*probes that passed.
-
STEP 7: Compute and Report Compatibility
Compute each category's pass-rate (a value in 0.0…1.0) by dividing its passes by its total:
set <xml-rate/> to <xml-pass/> / <xml-total/>, set <cf-rate/> to <cf-pass/> / <cf-total/>, set <re-rate/> to <re-pass/> / <re-total/>, set <arith-rate/> to <arith-pass/> / <arith-total/>.
Compute the overall compatibility as a weighted average of the four pass-rates, where XML placeholders carry weight
4.00(the backbone of every skill), control flow carries weight3.00, regex matching carries weight2.00, and arithmetic carries weight1.00. Use thease_decision_matrixMCP tool with a single "compatibility" alternative column, one matrix row per category of the form[ <weight/>, <rate/> ]:Call...
ase_decision_matrix(matrix: [ [ 4.00, <xml-rate/> ], [ 3.00, <cf-rate/> ], [ 2.00, <re-rate/> ], [ 1.00, <arith-rate/> ] ])...of the
aseMCP server with an internal programmatic MCP tool call (and NOT with an external shell command) and set <product-sum/> to the single numerical value of the returned array.The product-sum is the sum over the four rows of
<weight/> * <rate/>, so dividing by the sum of weights (4.00 + 3.00 + 2.00 + 1.00 = 10.00) yields the weighted-average compatibility on 0.0…1.0:Set <overall/> to <product-sum/> / 10.00. Set <overall-pct/> to round(<overall/> * 100) (an integer percentage).
Also compute each category's display percentage:
Set <cf-pct/> to round(<cf-rate/> * 100), and likewise <xml-pct/>, <re-pct/>, <arith-pct/>.
Determine the <verdict/> from <overall-pct/>:
-
If <overall-pct/> is greater than or equal to 90: Set <verdict>✓ FULLY COMPATIBLE</verdict>.
-
Else if <overall-pct/> is greater than or equal to 60: Set <verdict>⚠ PARTIALLY COMPATIBLE</verdict>.
-
Else: Set <verdict>✘ INCOMPATIBLE</verdict>.
-
If <failures/> is not empty: Append to <verdict/> the suffix
(failed: <failures/>).
Finally, output the compatibility report:
RESULTS:
⦿ Capability ⚖ Weight ✓ Passed ⚑ Rate XML Placeholders 4.00 <xml-pass/>/<xml-total/> <xml-pct/>% Control Flow 3.00 <cf-pass/>/<cf-total/> <cf-pct/>% Regex Matching 2.00 <re-pass/>/<re-total/> <re-pct/>% Arithmetic 1.00 <arith-pass/>/<arith-total/> <arith-pct/>% OVERALL <overall-pct/>% VERDICT: <verdict/>
-