Ase code refactor
Refactor Code: Use when user wants to "refactor" or "change" the code base.From its SKILL.md
npx -y skills add rse/ase --skill ase-code-refactorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
13.2 KB, ~3.4k tokens by cl100k_base, as published. Nobody here has run it
@${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-code-refactor"> Refactor Source Code </skill><expand name="getopt" arg1="ase-code-refactor" arg2="--auto|-a --dry|-d --quick|-Q --next|-n=(none|DONE|EDIT|GRILL|PREFLIGHT|IMPLEMENT)..."> $ARGUMENTS </expand>
<if condition="<getopt-option-quick/> is equal `true`"> The `--quick`/`-Q` flag is a *shorthand alias*: set <getopt-option-auto/> to `true`, <getopt-option-dry/> to `true`, and <getopt-option-next/> to `IMPLEMENT,DELETE`. Do not output anything. </if> <objective> *Refactor* existing artifacts the following way: <request><getopt-arguments/></request> </objective>@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md @${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
Procedure
You MUST NOT call Edit, Write, NotebookEdit, or any
filesystem-modifying tool during this entire skill. The only
permitted way to persist artifacts is via ase_task_save(...).
-
<step id="STEP 1: Reason About Refactoring">
-
<if condition=" <request/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` "> Set <ase-task-id><request/></ase-task-id> (set task id to request) and <request></request> (set request empty), call the
<template> ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given** </template> </if>ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")tool from theaseMCP server to switch the task, and then only output the following <template/>: -
<if condition=" <request/> has the format `<id/>: <text/>` AND <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` "> Set <request><text/></request> and <ase-task-id><id/></ase-task-id> and call the
ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")tool from theaseMCP server to implicitly switch the task. Do not output anything. </if> -
<if condition="<request/> is empty">
Ask the user interactively, without a special tool, for the
initial request with a single question:
**No refactoring details known yet. What is the refactoring you want to request?**Then set <request/> to the response of the user. </if>
-
<if condition=" <ase-task-id/> is equal `default` and <request/> is not empty "> Set <ase-task-id/> to a unique task id, derived from <request/>, which consists of two lower-case words concatenated with a
-character. Then call thease_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")tool from theaseMCP server to implicitly switch the task. Do not output anything. </if> -
Report the task and request with the following <template/>:
<template> ⧉ **ASE**: ◉ task: **<ase-task-id/>** ⧉ **ASE**: ⇌ request: **<request/>** </template> -
Figure out what the artifact refactoring <request/> is about.
-
Ask the user for clarification if the goal of this refactoring is too unclear.
-
Do not output anything else in this step, unless you asked the user.
-
-
<step id="STEP 2: Investigate Code Base">
-
Check the existing source files for all code which is related to the refactoring <request/>.
-
Check the architecture of the existing code base to understand the overall structures and dynamics.
-
Do not output anything in this STEP 2.
-
-
<step id="STEP 3: Internalize Refactoring Tenets">
-
You MUST internalize and strictly honor the GENERIC TENETS, and the REFACTORING TENETS of the ASE Tenets when updating in the following. Do not output anything.
-
Do not output anything in this STEP 3.
-
-
<step id="STEP 4: Choose Refactoring Approaches">
You MUST perform the following sub-steps internally and without any output until and including the recommendation decision. Only sub-steps 4-7 below are allowed to produce output; sub-steps 4-6 only if <getopt-option-auto/> is equal
falseand <ase-project-boxing/> is not equalblack.If <getopt-option-auto/> is equal
trueor <ase-project-boxing/> is equalblack, skip the reporting sub-steps 4-6 entirely (they perform no output at all) to speed up processing.-
Propose a corresponding refactoring approach, optionally including some alternative refactoring approaches. Do not output anything in this sub-step.
-
Reflect on and critique the proposed approaches by deriving, per approach, a small set of concrete pros and cons. Do not output anything in this sub-step.
-
Based on the reflection, decide which approach to recommend and annotate it with an <annotation/> of
⚝ **RECOMMENDATION** ⚝. All other approaches receive an empty <annotation/>. Do not output anything in this sub-step. -
Indicate start of reporting by showing the following <template/>:
<template> <ase-tpl-head title="APPROACHES"/> </template> -
Now report each approach with the following <template/>, inlining its pros/cons derived in sub-step 2, and do not output anything else in this step:
<template> ● **APPROACH A<n/>**<annotation/>: **<summary/>** ○ [...] ⊕ *PRO*: [...] ⊖ *CON*: [...] </template>Hints:
- Give a short one-sentence <summary/> of the refactoring
approach plus precise and ultra brief and concise
refactoring information. Try to keep the number of bullet
points (
○ [...]) in the range of 1-4.
- Give a short one-sentence <summary/> of the refactoring
approach plus precise and ultra brief and concise
refactoring information. Try to keep the number of bullet
points (
-
Indicate end of reporting by showing the following <template/>:
<template> <ase-tpl-foot title="APPROACHES"/> </template> -
<if condition="<getopt-option-auto/> is not equal `true` and <ase-project-boxing/> is not equal `black`">
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-dialogdefinition. You MUST closely follow this definition.Let the user choose the preferred approach A<n/> by raising a question with the following custom dialog, where per approach A<n/>, you determine an ultra brief summary <short-summary/> and then use the answer option
<expand name="custom-dialog" arg1="--no-other"> Select Approach: Select your preferred refactoring approach to follow? A<n/>: <short-summary/> [...] </expand> </if> <else>A<n/>: ⚝ **RECOMMENDATION** ⚝ - <short-summary/>for your recommended approach plus zero or more answer optionsA<n/>: <short-summary/>for all other approaches:Set <n/> to the number of the refactoring approach A<n/> you recommend. Output a hint with the following <template/>:
<template> ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **auto-chosen approach A<n/>** </template> </else>
-
-
<step id="STEP 5: Compose Refactoring Plan">
-
Compose a refactoring plan for the chosen refactoring A<n/> by closely aligning to the existing architecture and the existing code base. Use the <format/> defined for a task plan and inject the information from refactoring A<n/> and all derived realization decisions into it. Store the resulting task plan in <task-content/>.
If a
<if condition="<getopt-option-dry/> is equal `true`"> You *MUST* completely omit the `## VERIFICATION` section (including its heading and all of its bullet points) from <task-content/>. </if>CHANGELOG.mdfile exists in the project (or in any affected sub-package), the plan MUST include, as part of its## CHANGESsection, an explicit bullet point describing the addition of a corresponding new entry to thatCHANGELOG.mdfile, aligned with its existing style and conventions.You MUST NOT call
Edit,Write,NotebookEdit, or any filesystem-modifying tool during this step. -
Call the
ase_timestamp(format: "yyyy-LL-dd HH:mm")tool of theaseMCP server and use thetextfield of its response for <timestamp-created/> and <timestamp-modified/> information. Then insert the current <ase-task-id/>, <timestamp-created/>, and <timestamp-modified/> information and calculate the number of words <words/> of <task-content/>. -
You then MUST save the resulting plan content with the
ase_task_save(id: "<ase-task-id/>", text: "<task-content/>"). -
Output a hint with the following <template/>:
<template> ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan created** </template> -
Directly pass-through control to the next skill:
Treat <getopt-option-next/> as a comma-separated chronological list of pre-selected next-step tokens. Peek the first token as <head/> (or
noneif the list isnone/empty). Set <args>--int-reuse-task</args>.- <if condition="<head/> is equal `DONE`"> Consume the head: set <getopt-option-next/> to the remaining tokens (joined back with `,`, or `none` if empty). `DONE` means the freshly composed plan is finalized as-is, so do *not* hand off to `ase-task-edit`. Only output the following <template/> and then *STOP*. Do *not* implement the plan. <template> ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- done** </template> </if>
- <elseif condition="<head/> is equal `IMPLEMENT`"> Consume the head: set <getopt-option-next/> to the remaining tokens (joined back with `,`, or `none` if empty). <if condition="<getopt-option-next/> is not equal `none`"> Set <args><args/> --next <getopt-option-next/></args> </if> Call the tool `Skill(skill: "ase:ase-task-implement", args: "<args/>")` to *implement* the freshly composed plan, bypassing `ase-task-edit`. </elseif>
- <elseif condition="<head/> is equal `PREFLIGHT`"> Consume the head: set <getopt-option-next/> to the remaining tokens (joined back with `,`, or `none` if empty). <if condition="<getopt-option-next/> is not equal `none`"> Set <args><args/> --next <getopt-option-next/></args> </if> Call the tool `Skill(skill: "ase:ase-task-preflight", args: "<args/>")` to *preflight* the freshly composed plan, bypassing `ase-task-edit`. </elseif>
- <elseif condition="<head/> is equal `GRILL`"> Consume the head: set <getopt-option-next/> to the remaining tokens (joined back with `,`, or `none` if empty). `GRILL` is this skill's own dispatch token, *not* part of `ase-task-grill`'s `--next` vocabulary, so it must be stripped here rather than forwarded. All remaining tokens are `ase-task-grill`'s own vocabulary and are forwarded verbatim. <if condition="<getopt-option-next/> is not equal `none`"> Set <args><args/> --next <getopt-option-next/></args> </if> Call the tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")` to *grill* the freshly composed plan, bypassing `ase-task-edit`. </elseif>
- <else> Hand off to `ase-task-edit`. <if condition="<head/> is equal `EDIT`"> Consume the head: set <getopt-option-next/> to the remaining tokens (joined back with `,`, or `none` if empty). `EDIT` is this skill's own dispatch token, *not* part of `ase-task-edit`'s `--next` vocabulary, so it must be stripped here rather than forwarded. </if> All remaining tokens are `ase-task-edit`'s own vocabulary and are forwarded verbatim, so `ase-task-edit` consumes its own head itself. <if condition="<getopt-option-next/> is not equal `none`"> Set <args><args/> --next <getopt-option-next/></args> </if> Then call the tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`. </else>
-
What ships with it: 1 file
3.3 KB alongside SKILL.md
- help.md3.3 KB