Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Determine the conceptual proximity of a topic -- its parent topic, its most relevant sibling topics, and its most relevant child topics -- optionally grounded in Internet/Web facts and optionally navigable in an interactive loop. Use when the user wants to explore the conceptual neighborhood of a topic, or mentions "proximity" or "related topics".
.claude/skills/majiayu000-ase-meta-proximity/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 162% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 91% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 52% | 0% |
| case-01 | ✓→✗ | ▼ Worse | 68% | 0% |
| case-17 | ✓→✗ | ▼ Worse | 239% | 0% |
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md @${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
<skill name="ase-meta-proximity"> Determine the Conceptual Proximity of a Topic </skill>
<expand name="getopt" arg1="ase-meta-proximity" arg2="--ground|-g --loop|-l"> $ARGUMENTS </expand>
<objective> Determine the conceptual proximity of the following topic -- its parent topic, its most relevant sibling topics, and its most relevant child topics: <topic><getopt-arguments/></topic> </objective>
<define name="gather-facts"> <if condition="<getopt-option-ground/> is equal true"> Set <prompt>Search the Internet/Web and gather facts about <arg1/></prompt>.
Then use the ase-meta-search skill in a sub-agent to gather facts with the following tool call and store the returned facts in the placeholder named <arg2/>:
Agent( description: "Query Web Search Service", subagent_type: "ase:ase-meta-search", prompt: "<prompt/>", run_in_background: false )
<if condition="the placeholder named <arg2/> contains no usable facts"> Set the placeholder named <arg2/> to empty, so the determination below falls back to model knowledge, and output the following <template/>:
<template> <ase-tpl-bullet-secondary/> WARNING: grounding found no usable facts -- falling back to model knowledge. </template> </if> </if> <else> Use the model's world knowledge and determine facts about <arg1/> and store those facts in the placeholder named <arg2/>. </else> </define>
<flow>
<if condition="<topic/> is empty"> Only output the following <template/> and then immediately STOP processing the entire current skill:
<template> ⧉ ASE: ✪ skill: ase-meta-proximity, ▶ ERROR: expected a <topic> argument </template> </if>
</step>
REPEAT the following sub-steps in a LOOP until either <getopt-option-loop/> is not equal `true` (then the loop runs exactly once and stops after rendering), or the user declines/cancels the dialog in sub-step 5:
Determine the canonical name of the central topic which is stored in <topic/>.
<expand name="gather-facts" arg1="the following topic: <topic/>" arg2="facts-topic"></expand>
Ground the determination of the canonical name of the topic <topic/> in the facts of <facts-topic/> and do not contradict them. Update <topic/> accordingly.
Determine the conceptual proximity of the current <topic/> along three dimensions:
The single most relevant parent topic (the broader topic that <topic/> is a specialization of), which will be stored in <parent/>.
<expand name="gather-facts" arg1="the PARENT topic (the broader topic that the given topic is a specialization of) of the following topic: <topic/>" arg2="facts-parent"></expand>
Ground the determination of the canonical name of the parent topic <parent/> in the facts of <facts-parent/> and do not contradict them.
The four most relevant sibling topics (topics on the same level that share the same parent), which will be stored in <sibling-1/> to <sibling-4/>.
<expand name="gather-facts" arg1="the SIBLING topics (topics on the same level that share the same parent) of the following topic: <topic/>" arg2="facts-siblings"></expand>
Ground the determination of the canonical names of the most relevant sibling topics <sibling-1/> to <sibling-4/> in the facts of <facts-siblings/> and do not contradict them.
The four most relevant children topics (narrower topics that are specializations of <topic/>), stored in <child-1/> to <child-4/>.
<expand name="gather-facts" arg1="the CHILDREN topics (narrower topics that are specializations) of the following topic: <topic/>" arg2="facts-children"></expand>
Ground the determination of the canonical names of the most relevant children topics <child-1/> to <child-4/> in the facts of <facts-children/> and do not contradict them.
Output the result with the following <template/>, listing each proximity topic under its bullet-prefixed section header.
<template> <ase-tpl-head title="PROXIMITY TOPICS"/>
● PARENT: ↑ <parent/>
● TOPIC: ○ <topic/>
● SIBLINGS: ⇄ <sibling-1/> ⇄ <sibling-2/> ⇄ <sibling-3/> ⇄ <sibling-4/>
● CHILDREN: ↓ <child-1/> ↓ <child-2/> ↓ <child-3/> ↓ <child-4/>
<ase-tpl-foot title="PROXIMITY TOPICS"/> </template>
true">The loop runs only once in non-interactive mode: break out of the loop and stop processing without any further output. </if>
In the following, you MUST NOT use your built-in <user-dialog-tool/> tool! Instead, you MUST just show a custom dialog according to the expanded custom-dialog definition. You MUST closely follow this definition.
Let the user pick one of the nine proximity topics to navigate to by raising a question with the following custom dialog:
<expand name="custom-dialog" arg1="--no-other"> Navigate: Which proximity topic would you like to navigate to? PARENT: ↑ <parent/> SIBLING-1: ⇄ <sibling-1/> SIBLING-2: ⇄ <sibling-2/> SIBLING-3: ⇄ <sibling-3/> SIBLING-4: ⇄ <sibling-4/> CHILD-1: ↓ <child-1/> CHILD-2: ↓ <child-2/> CHILD-3: ↓ <child-3/> CHILD-4: ↓ <child-4/> </expand>
Check the tool <result/> and dispatch accordingly:
CANCEL:Break out of the loop and stop processing without any further output.
to the selected <result/> (the <parent/>, <sibling-K/>, or <child-K/> value behind the chosen label).
Then you MUST continue the loop at step 2.1.
</step>
</flow>
Other measured skills in the registry, with their headline benchmark lift.