ase-task-edit

SkillProductivity

Iteratively 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.

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.

  1. Determine Task and Instruction:

    1. Set initially. Inherit the always existing from the current context. Inherit the always existing from the current context. Do not output anything.

    2. React on task and/or instruction:

      1. 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 the ase MCP server to switch the task, and then only output the following :

      2. 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 the ase MCP server to switch the task, and then only output the following :

      3. 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 the ase MCP server to switch the task, and then only output the following :

      4. Only output the following :

      5. Only output the following :

  2. Determine Plan:

    1. Determine any existing plan content:

      Set to the text argument of the most recent ase_task_save(id: '<ase-task-id/>', ...) tool call -- this is the authoring form of the plan and MUST NOT be confused with the text output field of that call -- without calling ase_task_load again. 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 the ase_task_load(id: "<ase-task-id/>", variant: "both") tool of the ase MCP server to load any existing plan content in both of its forms. From the text output field of this ase_task_load tool 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: or WARNING:: Silently ignore the MCP error. Set to empty. Set to empty. Do not output anything.

      • If starts NOT with ERROR: and NOT with WARNING:: Set (set task content to text). Only output the following :

    2. **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 :

    3. 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-dialog definition. You MUST closely follow this definition:

      Check the tool and dispatch accordingly:

      • If is CANCEL or PRESERVE:

        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:

    4. Only output the following and continue processing:

  3. 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, or PREFLIGHT, or declines/cancels in the dialog of step 3.4:

    1. 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 the ase MCP server and using the text field of its response. Update the Modified: ... frontmatter key of with the new value. Do not output anything.

    2. Persist plan: Call the ase_task_save(id: "<ase-task-id/>", text: "<task-content/>", render: true) tool of the ase MCP 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. This ase_task_save MCP tool call is the only permitted way to persist the plan -- NEVER write the plan file via Write/Edit or by executing a shell command. Finally, set to the text output field of this ase_task_save tool call -- the rendering-prepared form of the just-persisted plan, which is for display only and MUST NOT be confused with the text argument 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 :

    3. Render plan: Call the ase_markdown_prepare(text: "<task-content/>") tool of the ase MCP server and set to the text output 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 DRAFT section (from the companion skill ase-task-preflight) exists, replace the entire content of the ## IMPLEMENTATION DRAFT section with [...]. Else, do not truncate, summarize, or partially show the plan. Use the following :

    4. 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 ,, or none if 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-dialog definition. 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