/ase-code-craft
Craft Source Code: Use when user wants to "create", "add", or "craft" a new feature from scratch.
$ npx -y skills add rse/ase --skill ase-code-craft --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/ase-code-craft
Context preview
The summary Claude sees to decide when to auto-load this skill.
Craft Source Code: Use when user wants to "create", "add", or "craft" a new feature from scratch.
SKILL.md
ase-code-craft.SKILL.mdname: ase-code-craft
argument-hint: "[--help|-h] [--auto|-a] [--dry|-d] [--quick|-Q] [--next|-n <option>[,...]] [<task-id>:] <feature>"
description: >
Craft Source Code:
Use when user wants to "create", "add", or "craft" a new feature from scratch.
user-invocable: true
disable-model-invocation: false
effort: xhigh
allowed-tools:
- "Skill"
- "Agent"@${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
<purpose name="ase-code-craft"> Craft Source Code </purpose>
<expand name="getopt" arg1="ase-code-craft" 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> From scratch *craft* the following feature: <feature><getopt-arguments/></feature> </objective>
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md @${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md @${CLAUDE_SKILL_DIR}/../../meta/ase-common-code.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(...)`.
<flow>
1. <step id="STEP 1: Reason About Feature">
1. <if condition=" <feature/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` "> Set <ase-task-id><feature/></ase-task-id> (set task id to feature) and <feature></feature> (set feature empty), call the `ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")` tool from the `ase` MCP server to switch the task, and then only output the following <template/>:
<template> ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given** </template> </if>
2. <if condition=" <feature/> has the format `<id/>: <text/>` AND <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` "> Set <feature><text/></feature> and <ase-task-id><id/></ase-task-id> and call the `ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")` tool from the `ase` MCP server to implicitly switch the task. Do not output anything. </if>
3. <if condition="<feature/> is empty"> Ask the user interactively, without a special tool, for the initial feature with a single question:
`**No feature known yet. What is the feature you want to craft?**`
Then set <feature/> to the response of the user. </if>
4. <if condition=" <ase-task-id/> is equal `default` and <feature/> is not empty "> Set <ase-task-id/> to a unique task id, derived from <feature/>, which consists of two lower-case words concatenated with a `-` character. Then call the `ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")` tool from the `ase` MCP server to implicitly switch the task. Do not output anything. </if>
5. Report the task and feature with the following <template/>:
<template> ⧉ **ASE**: ◉ task: **<ase-task-id/>** ⧉ **ASE**: ⇌ feature: **<feature/>** </template>
6. Figure out what the requested <feature/> to be crafted is about.
7. Ask the user for clarification if the goal of this crafting is too unclear.
8. Do not output anything else in this step, unless you asked the user.
</step>
2. <step id="STEP 2: Investigate Code Base">
1. Check the existing source files for all code which is related to the requested new <feature/>.
2. Check the architecture of the existing code base to understand the overall structures and dynamics.
3. Do not output anything in this STEP 2.
</step>
3. <step id="STEP 3: Internalize Crafting Tenets">
1. <task-kind>CRAFTING</task-kind>
2. <expand name="code-tenets" arg1="<task-kind/>"></expand>
3. Do not output anything in this STEP 3.
</step>
4. <step id="STEP 4: Choose Feature Crafting 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 `false` *and* <ase-project-boxing/> is *not* equal `black`.
If <getopt-option-auto/> is equal `true` or <ase-project-boxing/> is equal `black`, *skip* the reporting sub-steps 4-6 entirely (they perform no output at all) to speed up processing.
1. *Propose* a corresponding *feature approach*, optionally including some *alternative* feature approaches. Do *not* output anything in this sub-step.
2. *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.
3. 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.
4. Indicate start of reporting by showing the following <template/>:
<template> <ase-tpl-head title="APPROACHES"/> </template>
5. 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/>**
Read more
name: ase-code-craft
argument-hint: "[--help|-h] [--auto|-a] [--dry|-d] [--quick|-Q] [--next|-n <option>[,...]] [<task-id>:] <feature>"
description: >
Craft Source Code:
Use when user wants to "create", "add", or "craft" a new feature from scratch.
user-invocable: true
disable-model-invocation: false
effort: xhigh
allowed-tools:
- "Skill"
- "Agent"@${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
<purpose name="ase-code-craft"> Craft Source Code </purpose>
<expand name="getopt" arg1="ase-code-craft" 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> From scratch *craft* the following feature: <feature><getopt-arguments/></feature> </objective>
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md @${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md @${CLAUDE_SKILL_DIR}/../../meta/ase-common-code.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(...)`.
<flow>
1. <step id="STEP 1: Reason About Feature">
1. <if condition=" <feature/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` "> Set <ase-task-id><feature/></ase-task-id> (set task id to feature) and <feature></feature> (set feature empty), call the `ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")` tool from the `ase` MCP server to switch the task, and then only output the following <template/>:
<template> ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given** </template> </if>
2. <if condition=" <feature/> has the format `<id/>: <text/>` AND <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` "> Set <feature><text/></feature> and <ase-task-id><id/></ase-task-id> and call the `ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")` tool from the `ase` MCP server to implicitly switch the task. Do not output anything. </if>
3. <if condition="<feature/> is empty"> Ask the user interactively, without a special tool, for the initial feature with a single question:
`**No feature known yet. What is the feature you want to craft?**`
Then set <feature/> to the response of the user. </if>
4. <if condition=" <ase-task-id/> is equal `default` and <feature/> is not empty "> Set <ase-task-id/> to a unique task id, derived from <feature/>, which consists of two lower-case words concatenated with a `-` character. Then call the `ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")` tool from the `ase` MCP server to implicitly switch the task. Do not output anything. </if>
5. Report the task and feature with the following <template/>:
<template> ⧉ **ASE**: ◉ task: **<ase-task-id/>** ⧉ **ASE**: ⇌ feature: **<feature/>** </template>
6. Figure out what the requested <feature/> to be crafted is about.
7. Ask the user for clarification if the goal of this crafting is too unclear.
8. Do not output anything else in this step, unless you asked the user.
</step>
2. <step id="STEP 2: Investigate Code Base">
1. Check the existing source files for all code which is related to the requested new <feature/>.
2. Check the architecture of the existing code base to understand the overall structures and dynamics.
3. Do not output anything in this STEP 2.
</step>
3. <step id="STEP 3: Internalize Crafting Tenets">
1. <task-kind>CRAFTING</task-kind>
2. <expand name="code-tenets" arg1="<task-kind/>"></expand>
3. Do not output anything in this STEP 3.
</step>
4. <step id="STEP 4: Choose Feature Crafting 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 `false` *and* <ase-project-boxing/> is *not* equal `black`.
If <getopt-option-auto/> is equal `true` or <ase-project-boxing/> is equal `black`, *skip* the reporting sub-steps 4-6 entirely (they perform no output at all) to speed up processing.
1. *Propose* a corresponding *feature approach*, optionally including some *alternative* feature approaches. Do *not* output anything in this sub-step.
2. *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.
3. 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.
4. Indicate start of reporting by showing the following <template/>:
<template> <ase-tpl-head title="APPROACHES"/> </template>
5. 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/>**
Showing the first part of this file.
Repo: rse/ase
Other skills on ase.
- /hello
Show a nice greeting message with a timestamp. Use this, when the user wants to greet or say hello, optionally to a certain subject <subject> and in a certain language <language>.
Open skill - /ase-arch-analyze
Review software architecture, including package cohesion and inter-package coupling
Open skill - /ase-arch-discover
Discover additional, third-party components (libraries/frameworks) for the technology stack to provide needed functionality.
Open skill - /ase-code-analyze
Analyze the source code for problems in either the logic and semantics and its related control flow, performance and efficiency, or security.
Open skill - /ase-code-dissect
Dissect the current Git change set, treated as an epic, domain-wise and logically into cohesive parts and materialize each part in its own dedicated Git WorkTree. Use when the user calls to "dissect", "split", "break up", or "decompose" a large change set into atomic, separately
Open skill - /ase-code-explain
Explains code with WHAT, WHY, ANALOGY, DIAGRAM, CRUXES, and GOTCHAS. Use when you want to know how code works or when the user asks "how does this work?"
Open skill

