ase-task-edit
SkillProductivityIteratively edit and refine a named plan for a task through a conversational loop. Each round, the current plan is shown and the user is asked whether to keep refining, mark the plan as done, or proceed to the implementation or preflight. Use when the user wants to plan a task purely through chat-driven refinement.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the ase-task-edit skill
What this skill tells your AI
The instructions your AI receives, as published by rse/ase in plugin/skills/ase-task-edit/SKILL.md and read by ahel’s review.
@${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
$ARGUMENTS
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
Procedure
When refining the plan this way, preserve the overall structure of the plan and only modify what the user actually requested. Do not rewrite unrelated sections of the plan.
The implementation draft was created for the previous plan text and
hence is stale now. Remove the entire ## IMPLEMENTATION DRAFT
section from , remove the value preflighted from the
Properties: frontmatter key (dropping the whole key if it carries no
values anymore), and set true.
Set true.
If a CHANGELOG.md file exists in the project (or in any
affected sub-package), the plan MUST include, as part of
its ## CHANGES section, an explicit bullet point
describing the addition of a corresponding new entry to
that CHANGELOG.md file, aligned with its existing style
and conventions.
Call the ase_timestamp(format: "yyyy-LL-dd HH:mm") tool of the
ase MCP server and use the text field of its response
for fresh and
information. Then insert the current ,
, and information.
Set true.
-
Determine Task and Instruction:
-
Set initially. Inherit the always existing from the current context. Inherit the always existing from the current context. Do not output anything.
-
React on task and/or instruction:
-
Set (set task id to instruction) and (set instruction empty), call the
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 : -
Set (set instruction to empty) and (set task id to id) and call the
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 : -
Set (set instruction to text) and (set task id to id) and call the
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 : -
Only output the following :
-
Only output the following :
-
-
-
Determine Plan:
-
Determine any existing plan content:
Set to the
textargument of the most recentase_task_save(id: '<ase-task-id/>', ...)tool call -- this is the authoring form of the plan and MUST NOT be confused with thetextoutput field of that call -- without callingase_task_loadagain. Set (set the rendering-prepared plan to empty, as it is re-derived in step 3.2 or 3.3). Set plan reused. Do not output anything. Call thease_task_load(id: "<ase-task-id/>", variant: "both")tool of theaseMCP server to load any existing plan content in both of its forms. From thetextoutput field of thisase_task_loadtool call, set to the content enclosed in the<task-plan-source>delimiter lines (the authoring form, the only form which is ever edited and persisted) and set to the content enclosed in the<task-plan-render>delimiter lines (the rendering-prepared form, used for display only). The delimiter lines themselves are never part of either form. Do not output anything related to this MCP tool call. Set plan loaded.Set false. Set false.
-
If starts with
ERROR:orWARNING:: Silently ignore the MCP error. Set to empty. Set to empty. Do not output anything. -
If starts NOT with
ERROR:and NOT withWARNING:: Set (set task content to text). Only output the following :
-
-
**No plan content yet. What is the task you want to plan?**Then set to the response of the user and only output the following :
-
Determine previous-plan handling:
-
If matches the regex
^(OVERWRITE|REFINE|PRESERVE)$: Honor the pre-selection of what to do with the previous plan. Set . -
If is equal to
none:In the following, you MUST NOT use your built-in tool! Instead, you MUST just show a custom dialog according to the expanded
custom-dialogdefinition. You MUST closely follow this definition:
Check the tool and dispatch accordingly:
-
If is
CANCELorPRESERVE:Only output the following and then immediately STOP processing this skill:
-
If is
OVERWRITE:Only output the following and continue processing:
-
If is
REFINE:Only output the following and continue processing:
-
If matches
OTHER: <text/>:Set (append the user's free-text hint to the existing instruction).
Only output the following and continue processing:
-
-
Only output the following and continue processing:
-
-
Iterative Plan Refinement Loop:
REPEAT the following steps from 3.1 up to and including 3.4 in a LOOP until the user selects
DONE,GRILL,IMPLEMENT, orPREFLIGHT, or declines/cancels in the dialog of step 3.4:-
Update timestamp: Update with the current time in ISO-style format, which has to be determined by calling the
ase_timestamp(format: "yyyy-LL-dd HH:mm")tool of theaseMCP server and using thetextfield of its response. Update theModified: ...frontmatter key of with the new value. Do not output anything. -
Persist plan: Call the
ase_task_save(id: "<ase-task-id/>", text: "<task-content/>", render: true)tool of theaseMCP server to persist the current plan -- always is the authoring form of the plan and hence is persisted as is -- and then set false again. Thisase_task_saveMCP tool call is the only permitted way to persist the plan -- NEVER write the plan file viaWrite/Editor by executing a shell command. Finally, set to thetextoutput field of thisase_task_savetool call -- the rendering-prepared form of the just-persisted plan, which is for display only and MUST NOT be confused with thetextargument passed into that call -- so the rendering in step 3.3 stays consistent across all loop rounds. Do not output anything related to this MCP tool call except the following : -
Render plan: Call the
ase_markdown_prepare(text: "<task-content/>")tool of theaseMCP server and set to thetextoutput field of this tool call. Do not output anything related to this MCP tool call.Treat as verbatim Markdown.
For the rendering only, drop the leading frontmatter block -- both
---delimiters and all of their keys -- and instead place the following column-aligned glyph lines before the# TASK: <title/>heading, separated from it by an empty line, omitting the line of every key absent from the frontmatter. The glyph lines MUST stay above the heading, exactly where the frontmatter block sits in the plan file, and MUST NOT be moved below it. This keeps the---delimiters from rendering as a horizontal rule plus a setext heading. This rewrite is display-only and MUST NOT change or itself:Only output the following , so the user can read the plan and react to it. If is longer than 90 lines and a
## IMPLEMENTATION DRAFTsection (from the companion skillase-task-preflight) exists, replace the entire content of the## IMPLEMENTATION DRAFTsection with[...]. Else, do not truncate, summarize, or partially show the plan. Use the following : -
Determine next step:
-
If is not equal to
none: Treat as a comma-separated chronological list of pre-selected next-step tokens. Split it on,, take the first token as , and store the remaining tokens (joined back with,, ornoneif empty) into so subsequent loop iterations or downstream skills can consume the tail.-
If matches the regex
^(DONE|GRILL|IMPLEMENT|PREFLIGHT)$: Honor the pre-selected token. Set .Set (clear the instruction, as any instruction carried in via the arguments was already applied to the plan in step 2 before this loop), so that a later
OTHER: <text/>refinement correctly starts from a fresh refinement instruction below. -
else: Only output the following and then immediately STOP processing the entire current skill:
-
-
If is equal to
none:In the following, you MUST NOT use your built-in tool! Instead, you MUST just show a custom dialog according to the expanded
custom-dialogdefinition. You MUST closely follow this definition:
Check the tool and dispatch accordingly:
-
If is
DONE:Break out of the loop, only output the following and then STOP. Do not implement the plan.
-
If is
GRILL:Break out of the loop. Only output the following and then call the
Skill(skill: "ase:ase-task-grill", args: "<args/>")tool to grill the finalized plan. -
If is
PREFLIGHT:Break out of the loop. Only output the following and then call the
Skill(skill: "ase:ase-task-preflight", args: "<args/>")tool to apply the finalized plan. -
If is
IMPLEMENT:Break out of the loop. Only output the following and then call the
Skill(skill: "ase:ase-task-implement", args: "<args/>")tool to apply the finalized plan. -
If matches
OTHER: <text/>:Set (replace existing instruction).
Finally, only output the following and then continue the loop at step 3.1!
-
If is
CANCEL:Break out of the loop, only output the following and then STOP. Do not implement the plan.
-
-
Signals
- GitHub stars
- 52
- Forks
- 5
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
ase-task-edit- Source
- github.com/rse/ase